expo: Split setting up the menu from adding items

Some callers may wish to add items later as they are discovered. Split
the setup code into its own function, to permit this.

Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c
index 6bca171..56a34ac 100644
--- a/boot/bootflow_menu.c
+++ b/boot/bootflow_menu.c
@@ -210,7 +210,6 @@
 		ret = bootflow_menu_add(exp, bflow, i, &scn);
 		if (ret)
 			return log_msg_ret("bao", ret);
-
 	}
 
 	ret = scene_arrange(scn);
@@ -257,7 +256,7 @@
 	return 0;
 }
 
-int bootflow_menu_start(struct bootstd_priv *std, bool text_mode,
+int bootflow_menu_setup(struct bootstd_priv *std, bool text_mode,
 			struct expo **expp)
 {
 	struct udevice *dev;
@@ -267,9 +266,6 @@
 	ret = bootflow_menu_new(&exp);
 	if (ret)
 		return log_msg_ret("bmn", ret);
-	ret = bootflow_menu_add_all(exp);
-	if (ret)
-		return log_msg_ret("bma", ret);
 
 	if (ofnode_valid(std->theme)) {
 		ret = bootflow_menu_apply_theme(exp, std->theme);
@@ -292,6 +288,31 @@
 	if (text_mode)
 		expo_set_text_mode(exp, text_mode);
 
+	*expp = exp;
+
+	return 0;
+}
+
+int bootflow_menu_start(struct bootstd_priv *std, bool text_mode,
+			struct expo **expp)
+{
+	struct expo *exp;
+	int ret;
+
+	ret = bootflow_menu_setup(std, text_mode, &exp);
+	if (ret)
+		return log_msg_ret("bmd", ret);
+
+	ret = bootflow_menu_add_all(exp);
+	if (ret)
+		return log_msg_ret("bma", ret);
+
+	if (ofnode_valid(std->theme)) {
+		ret = expo_apply_theme(exp, std->theme);
+		if (ret)
+			return log_msg_ret("thm", ret);
+	}
+
 	ret = expo_calc_dims(exp);
 	if (ret)
 		return log_msg_ret("bmd", ret);