msm_fb: hdmi: change HDMI_PHY_REG1 based on foundry.
Set value of HDMI_PHY_REG1[2:0] for output voltage swing control,
to prevent fallout for Vlow for GF foundry MSM's.
Change-Id: Ifb0f694226896fa1ad74dd84fb489f015901fc3e
Signed-off-by: Abhishek Kharbanda <akharban@codeaurora.org>
Signed-off-by: Mukesh Jha <cmjha@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-8930-display.c b/arch/arm/mach-msm/board-8930-display.c
index bb301b3..128540a 100644
--- a/arch/arm/mach-msm/board-8930-display.c
+++ b/arch/arm/mach-msm/board-8930-display.c
@@ -568,6 +568,7 @@
static int hdmi_cec_power(int on);
static int hdmi_gpio_config(int on);
static int hdmi_panel_power(int on);
+static bool hdmi_platform_foundry(void);
static struct msm_hdmi_platform_data hdmi_msm_data = {
.irq = HDMI_IRQ,
@@ -576,6 +577,7 @@
.cec_power = hdmi_cec_power,
.panel_power = hdmi_panel_power,
.gpio_config = hdmi_gpio_config,
+ .foundry = hdmi_platform_foundry,
};
static struct platform_device hdmi_msm_device = {
@@ -836,6 +838,12 @@
pr_debug("%s: HDMI Core: %s Success\n", __func__, (on ? "ON" : "OFF"));
return rc;
}
+
+static bool hdmi_platform_foundry(void)
+{
+ return cpu_is_msm8930ab() ? true : false ;
+}
+
#endif /* CONFIG_FB_MSM_HDMI_MSM_PANEL */
void __init msm8930_init_fb(void)
diff --git a/arch/arm/mach-msm/include/mach/board.h b/arch/arm/mach-msm/include/mach/board.h
index 46b12e2..dffe417 100644
--- a/arch/arm/mach-msm/include/mach/board.h
+++ b/arch/arm/mach-msm/include/mach/board.h
@@ -492,6 +492,7 @@
int (*gpio_config)(int on);
int (*init_irq)(void);
bool (*check_hdcp_hw_support)(void);
+ bool (*foundry)(void);
bool is_mhl_enabled;
};
diff --git a/drivers/video/msm/msm_dss_io_8960.c b/drivers/video/msm/msm_dss_io_8960.c
index add4027..4495308 100644
--- a/drivers/video/msm/msm_dss_io_8960.c
+++ b/drivers/video/msm/msm_dss_io_8960.c
@@ -802,11 +802,20 @@
void hdmi_msm_init_phy(int video_format)
{
uint32 offset;
+
pr_err("Video format is : %u\n", video_format);
HDMI_OUTP(HDMI_PHY_REG_0, 0x1B);
- HDMI_OUTP(HDMI_PHY_REG_1, 0xf2);
+ HDMI_OUTP(HDMI_PHY_REG_1, 0xF2);
+ /* Set HDMI_PHY_REG1 based on foundary id[30:28] and PTE_HDMI[31] bit
+ * of QFPROM_RAW_PTE_ROW1_LSB */
+ if (hdmi_msm_state->pd->foundry) {
+ if ((hdmi_msm_state->pd->foundry()) &&
+ (((inpdw(QFPROM_BASE + 0x00c0) & 0xF0000000) >> 28) ==
+ 0x1))
+ HDMI_OUTP(HDMI_PHY_REG_1, 0xF1);
+ }
offset = HDMI_PHY_REG_4;
while (offset <= HDMI_PHY_REG_11) {
HDMI_OUTP(offset, 0x0);