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;