target: msm8226: Add support for 1080p JDI panel

msm8226 boards that support 1080p display have the JDI
panel as the primary display panel. Enable this panel
for these boards based on the board IDs.

Change-Id: I3c2059973799bdef10b7d59ed2893e0eff1a7a9e
diff --git a/target/msm8226/include/target/display.h b/target/msm8226/include/target/display.h
index 62f0eac..3d6ba61 100755
--- a/target/msm8226/include/target/display.h
+++ b/target/msm8226/include/target/display.h
@@ -42,7 +42,7 @@
 };
 
 static struct gpio_pin enable_gpio = {
-  0, 0, 0, 0, 0, 0
+  "msmgpio", 109, 3, 1, 0, 1
 };
 
 static struct gpio_pin te_gpio = {
diff --git a/target/msm8226/oem_panel.c b/target/msm8226/oem_panel.c
index 2e251c7..56dcc06 100755
--- a/target/msm8226/oem_panel.c
+++ b/target/msm8226/oem_panel.c
@@ -47,6 +47,7 @@
 #include "include/panel_nt35596_1080p_video.h"
 #include "include/panel_nt35521_720p_video.h"
 #include "include/panel_ssd2080m_720p_video.h"
+#include "include/panel_jdi_1080p_video.h"
 
 /*---------------------------------------------------------------------------*/
 /* static panel selection variable                                           */
@@ -58,7 +59,17 @@
 NT35596_1080P_VIDEO_PANEL,
 HX8394A_720P_VIDEO_PANEL,
 NT35521_720P_VIDEO_PANEL,
-SSD2080M_720P_VIDEO_PANEL
+SSD2080M_720P_VIDEO_PANEL,
+JDI_1080P_VIDEO_PANEL
+};
+
+enum target_subtype {
+	HW_PLATFORM_SUBTYPE_720P = 0,
+	HW_PLATFORM_SUBTYPE_SKUAA = 1,
+	HW_PLATFORM_SUBTYPE_SKUF = 2,
+	HW_PLATFORM_SUBTYPE_1080P = 2,
+	HW_PLATFORM_SUBTYPE_SKUAB = 3,
+	HW_PLATFORM_SUBTYPE_SKUG = 5,
 };
 
 static uint32_t panel_id;
@@ -244,6 +255,26 @@
 					= NT35596_1080P_VIDEO_ON_COMMAND;
 		memcpy(phy_db->timing,
 				nt35596_1080p_video_timings, TIMING_SIZE);
+	case JDI_1080P_VIDEO_PANEL:
+		panelstruct->paneldata    = &jdi_1080p_video_panel_data;
+		panelstruct->paneldata->panel_with_enable_gpio = 1;
+		panelstruct->panelres     = &jdi_1080p_video_panel_res;
+		panelstruct->color        = &jdi_1080p_video_color;
+		panelstruct->videopanel   = &jdi_1080p_video_video_panel;
+		panelstruct->commandpanel = &jdi_1080p_video_command_panel;
+		panelstruct->state        = &jdi_1080p_video_state;
+		panelstruct->laneconfig   = &jdi_1080p_video_lane_config;
+		panelstruct->paneltiminginfo
+			= &jdi_1080p_video_timing_info;
+		panelstruct->panelresetseq
+					 = &jdi_1080p_video_panel_reset_seq;
+		panelstruct->backlightinfo = &jdi_1080p_video_backlight;
+		pinfo->mipi.panel_cmds
+			= jdi_1080p_video_on_command;
+		pinfo->mipi.num_of_panel_cmds
+			= JDI_1080P_VIDEO_ON_COMMAND;
+		memcpy(phy_db->timing,
+			jdi_1080p_video_timings, TIMING_SIZE);
 		break;
 	}
 }
@@ -255,6 +286,7 @@
 	uint32_t hw_id = board_hardware_id();
 	uint32_t target_id = board_target_id();
 	uint32_t nt35590_panel_id = NT35590_720P_VIDEO_PANEL;
+	uint32_t hw_subtype = board_hardware_subtype();
 
 #if DISPLAY_TYPE_CMD_MODE
 	nt35590_panel_id = NT35590_720P_CMD_PANEL;
@@ -262,9 +294,9 @@
 
 	switch (hw_id) {
 	case HW_PLATFORM_QRD:
-		if (board_hardware_subtype() == 2) { //HW_PLATFORM_SUBTYPE_SKUF
+		if (hw_subtype == HW_PLATFORM_SUBTYPE_SKUF) {
 			panel_id = NT35521_720P_VIDEO_PANEL;
-		} else if (board_hardware_subtype() == 5) { //HW_PLATFORM_SUBTYPE_SKUG
+		} else if (hw_subtype == HW_PLATFORM_SUBTYPE_SKUG) {
 			panel_id = SSD2080M_720P_VIDEO_PANEL;
 		} else {
 			if (((target_id >> 16) & 0xFF) == 0x1 || ((target_id >> 16) & 0xFF) == 0x3) //EVT || PVT
@@ -280,7 +312,15 @@
 		break;
 	case HW_PLATFORM_MTP:
 	case HW_PLATFORM_SURF:
-		panel_id = nt35590_panel_id;
+		if (hw_subtype == HW_PLATFORM_SUBTYPE_720P) {
+			panel_id = nt35590_panel_id;
+		} else if (hw_subtype == HW_PLATFORM_SUBTYPE_1080P) {
+			panel_id = JDI_1080P_VIDEO_PANEL;
+		} else {
+			dprintf(CRITICAL, "Unsupported target_id=%d hw_subtype=%d\n"
+				, target_id, hw_subtype);
+			return false;
+		}
 		break;
 	default:
 		dprintf(CRITICAL, "Display not enabled for %d HW type\n"
diff --git a/target/msm8226/target_display.c b/target/msm8226/target_display.c
index 0dce4fe..d63352a 100755
--- a/target/msm8226/target_display.c
+++ b/target/msm8226/target_display.c
@@ -265,6 +265,15 @@
 {
 	int ret = NO_ERROR;
 	if (enable) {
+		if (pinfo->mipi.use_enable_gpio) {
+			gpio_tlmm_config(enable_gpio.pin_id, 0,
+				enable_gpio.pin_direction, enable_gpio.pin_pull,
+				enable_gpio.pin_strength,
+				enable_gpio.pin_state);
+
+			gpio_set_dir(enable_gpio.pin_id, 2);
+		}
+
 		gpio_tlmm_config(reset_gpio.pin_id, 0,
 				reset_gpio.pin_direction, reset_gpio.pin_pull,
 				reset_gpio.pin_strength, reset_gpio.pin_state);
@@ -279,6 +288,8 @@
 		mdelay(resetseq->sleep[2]);
 	} else if(!target_cont_splash_screen()) {
 		gpio_set_value(reset_gpio.pin_id, 0);
+		if (pinfo->mipi.use_enable_gpio)
+			gpio_set_value(enable_gpio.pin_id, 0);
 	}
 
 	return ret;