target: msm8974: Support panel selection through fastboot cmd

Allow user to select the different panel through fastboot
oem command for msm8974 target. If target does not find
the panel selected by user, it will boot up with default
panel configured for respective platform type.

Change-Id: Ide567d40f2e8e60453e06debd71982a4b36f5e98
diff --git a/target/msm8974/oem_panel.c b/target/msm8974/oem_panel.c
index 1634cd4..8ff54d5 100755
--- a/target/msm8974/oem_panel.c
+++ b/target/msm8974/oem_panel.c
@@ -62,6 +62,19 @@
 UNKNOWN_PANEL
 };
 
+/*
+ * The list of panels that are supported on this target.
+ * Any panel in this list can be selected using fastboot oem command.
+ */
+static struct panel_list supp_panels[] = {
+	{"jdi_1080p_video", JDI_1080P_VIDEO_PANEL},
+	{"toshiba_720p_video", TOSHIBA_720P_VIDEO_PANEL},
+	{"sharp_qhd_video", SHARP_QHD_VIDEO_PANEL},
+	{"generic_720p_cmd", GENERIC_720P_CMD_PANEL},
+	{"jdi_qhd_dualdsi_video", JDI_QHD_DUALDSI_VIDEO_PANEL},
+	{"jdi_qhd_dualdsi_cmd", JDI_QHD_DUALDSI_CMD_PANEL},
+};
+
 static uint32_t panel_id;
 
 int oem_panel_rotation()
@@ -239,6 +252,24 @@
 	uint32_t hw_id = board_hardware_id();
 	uint32_t target_id = board_target_id();
 	bool ret = true;
+	int32_t panel_override_id;
+
+	if (panel_name) {
+		panel_override_id = panel_name_to_id(supp_panels,
+				ARRAY_SIZE(supp_panels), panel_name);
+
+		if (panel_override_id < 0) {
+			dprintf(CRITICAL, "Not able to search the panel:%s\n",
+					 panel_name + strspn(panel_name, " "));
+		} else if (panel_override_id < UNKNOWN_PANEL) {
+			/* panel override using fastboot oem command */
+			panel_id = panel_override_id;
+
+			dprintf(INFO, "OEM panel override:%s\n",
+					panel_name + strspn(panel_name, " "));
+			goto panel_init;
+		}
+	}
 
 	switch (hw_id) {
 	case HW_PLATFORM_MTP:
@@ -270,6 +301,7 @@
 		return false;
 	}
 
+panel_init:
 	init_panel_data(panelstruct, pinfo, phy_db);
 
 	return ret;