msm_fb: display: Add support for HDMI as primary

Add support for using HDMI as primary. Includes changing number
of framebuffers to 2, using RGBA format, enabling HPD by default.

Change-Id: I7a01ee3cf981b08d05eed13cd0fb7a41983211b5
Signed-off-by: Ravishangar Kalyanam <rkalya@codeaurora.org>
diff --git a/drivers/video/msm/Kconfig b/drivers/video/msm/Kconfig
index d3059d1..7fd603d 100644
--- a/drivers/video/msm/Kconfig
+++ b/drivers/video/msm/Kconfig
@@ -499,6 +499,11 @@
 	---help---
 	  Support for EBI2 TMD QVGA (240x320) and Epson QCIF (176x220) panel
 
+config FB_MSM_HDMI_AS_PRIMARY
+	bool "Use HDMI as primary panel"
+	---help---
+	Support for using HDMI as primary
+
 config FB_MSM_PANEL_NONE
 	bool "NONE"
 	---help---
diff --git a/drivers/video/msm/external_common.c b/drivers/video/msm/external_common.c
index 4203779..a499a62 100644
--- a/drivers/video/msm/external_common.c
+++ b/drivers/video/msm/external_common.c
@@ -280,8 +280,11 @@
 	struct device_attribute *attr, const char *buf, size_t count)
 {
 	ssize_t ret = strnlen(buf, PAGE_SIZE);
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+	int hpd = 1;
+#else
 	int hpd = atoi(buf);
-
+#endif
 	if (external_common_state->hpd_feature) {
 		if (hpd == 0 && external_common_state->hpd_feature_on) {
 			external_common_state->hpd_feature(0);
@@ -1283,7 +1286,11 @@
 	pinfo->pdest = DISPLAY_2;
 	pinfo->wait_cycle = 0;
 	pinfo->bpp = 24;
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+	pinfo->fb_num = 2;
+#else
 	pinfo->fb_num = 1;
+#endif
 
 	/* blk */
 	pinfo->lcdc.border_clr = 0;
diff --git a/drivers/video/msm/mdp4_dtv.c b/drivers/video/msm/mdp4_dtv.c
index f07a8b4..a44f7c0 100644
--- a/drivers/video/msm/mdp4_dtv.c
+++ b/drivers/video/msm/mdp4_dtv.c
@@ -223,8 +223,11 @@
 	 * get/set panel specific fb info
 	 */
 	mfd->panel_info = pdata->panel_info;
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+	mfd->fb_imgType = MSMFB_DEFAULT_TYPE;
+#else
 	mfd->fb_imgType = MDP_RGB_565;
-
+#endif
 	fbi = mfd->fbi;
 	fbi->var.pixclock = mfd->panel_info.clk_rate;
 	fbi->var.left_margin = mfd->panel_info.lcdc.h_back_porch;
diff --git a/drivers/video/msm/mdp4_overlay_dtv.c b/drivers/video/msm/mdp4_overlay_dtv.c
index e6ba15e..82bce01 100644
--- a/drivers/video/msm/mdp4_overlay_dtv.c
+++ b/drivers/video/msm/mdp4_overlay_dtv.c
@@ -115,8 +115,13 @@
 		format = MDP_RGB_565;
 	else if (bpp == 3)
 		format = MDP_RGB_888;
-	else
+	else {
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+		format = MSMFB_DEFAULT_TYPE;
+#else
 		format = MDP_ARGB_8888;
+#endif
+	}
 
 	if (dtv_pipe == NULL) {
 		ptype = mdp4_overlay_format2type(format);
@@ -143,7 +148,12 @@
 
 	/* MDP cmd block enable */
 	mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
-
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+	if (is_mdp4_hw_reset()) {
+		mdp4_hw_init();
+		outpdw(MDP_BASE + 0x0038, mdp4_display_intf);
+	}
+#endif
 	pipe->src_height = fbi->var.yres;
 	pipe->src_width = fbi->var.xres;
 	pipe->src_h = fbi->var.yres;
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/msm/msm_fb.c
index bde0573..e5ec4cb 100644
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/msm/msm_fb.c
@@ -3002,8 +3002,13 @@
 	 * at panel_info
 	 *
 	 */
-	if (type == HDMI_PANEL || type == DTV_PANEL || type == TV_PANEL)
+	if (type == HDMI_PANEL || type == DTV_PANEL || type == TV_PANEL) {
+#ifdef CONFIG_FB_MSM_HDMI_AS_PRIMARY
+		pdata->panel_info.fb_num = 2;
+#else
 		pdata->panel_info.fb_num = 1;
+#endif
+	}
 	else
 		pdata->panel_info.fb_num = MSM_FB_NUM;