]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
OMAPDSS: HDMI: Disable DDC internal pull up
authorMythri P K <mythripk@ti.com>
Mon, 2 Jan 2012 08:32:38 +0000 (14:02 +0530)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Thu, 5 Jan 2012 08:34:50 +0000 (10:34 +0200)
Disables the internal pull resistor for SDA and SCL which are enabled by
default, as there are external pull up's in 4460 and 4430 ES2.3
SDP, Blaze and Panda Boards, It is done to avoid the EDID read failure.

Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@linaro.org>
Signed-off-by: Mythri P K <mythripk@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
arch/arm/mach-omap2/board-4430sdp.c
arch/arm/mach-omap2/board-omap4panda.c
arch/arm/mach-omap2/display.c
include/video/omapdss.h

index 312b158240edc49c20477397bbaebffdc1e12379..e1fe304ce36175b826987a2eb141d72a42047d30 100644 (file)
@@ -814,7 +814,14 @@ static void omap_4430sdp_display_init(void)
        sdp4430_lcd_init();
        sdp4430_picodlp_init();
        omap_display_init(&sdp4430_dss_data);
-       omap_hdmi_init();
+       /*
+        * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and
+        * later have external pull up on the HDMI I2C lines
+        */
+       if (cpu_is_omap446x() || omap_rev() > OMAP4430_REV_ES2_2)
+               omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);
+       else
+               omap_hdmi_init(0);
 }
 
 #ifdef CONFIG_OMAP_MUX
index 9cc41ce29dab6374d0e6f21646f483e338c45900..3e1c507fb01f4532c8949f96aa8680e2eb32ae44 100644 (file)
@@ -530,7 +530,15 @@ void omap4_panda_display_init(void)
                pr_err("error initializing panda DVI\n");
 
        omap_display_init(&omap4_panda_dss_data);
-       omap_hdmi_init();
+
+       /*
+        * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and
+        * later have external pull up on the HDMI I2C lines
+        */
+       if (cpu_is_omap446x() || omap_rev() > OMAP4430_REV_ES2_2)
+               omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);
+       else
+               omap_hdmi_init(0);
 }
 
 static void __init omap4_panda_init(void)
index 8436088ffe1319ee9157e2304027c93f859fe82b..ffd9bd98302362f1d51133e8759564cef30d8ea1 100644 (file)
@@ -97,8 +97,11 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
        { "dss_hdmi", "omapdss_hdmi", -1 },
 };
 
-static void omap4_hdmi_mux_pads()
+static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags)
 {
+       u32 reg;
+       u16 control_i2c_1;
+
        /* PAD0_HDMI_HPD_PAD1_HDMI_CEC */
        omap_mux_init_signal("hdmi_hpd",
                        OMAP_PIN_INPUT_PULLUP);
@@ -109,6 +112,19 @@ static void omap4_hdmi_mux_pads()
                        OMAP_PIN_INPUT_PULLUP);
        omap_mux_init_signal("hdmi_ddc_sda",
                        OMAP_PIN_INPUT_PULLUP);
+
+       /*
+        * CONTROL_I2C_1: HDMI_DDC_SDA_PULLUPRESX (bit 28) and
+        * HDMI_DDC_SCL_PULLUPRESX (bit 24) are set to disable
+        * internal pull up resistor.
+        */
+       if (flags & OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP) {
+               control_i2c_1 = OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_1;
+               reg = omap4_ctrl_pad_readl(control_i2c_1);
+               reg |= (OMAP4_HDMI_DDC_SDA_PULLUPRESX_MASK |
+                       OMAP4_HDMI_DDC_SCL_PULLUPRESX_MASK);
+                       omap4_ctrl_pad_writel(reg, control_i2c_1);
+       }
 }
 
 static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
@@ -144,10 +160,10 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
        return 0;
 }
 
-int omap_hdmi_init(void)
+int omap_hdmi_init(enum omap_hdmi_flags flags)
 {
        if (cpu_is_omap44xx())
-               omap4_hdmi_mux_pads();
+               omap4_hdmi_mux_pads(flags);
 
        return 0;
 }
index c1e3cb0d2c5ed9cd5ac2c4b0ca0115db64080dfc..062b3b24ff1071047f6c7fe26c80d19c112fe311 100644 (file)
@@ -200,6 +200,10 @@ enum omap_dss_clk_source {
        OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI,    /* OMAP4: PLL2_CLK2 */
 };
 
+enum omap_hdmi_flags {
+       OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP = 1 << 0,
+};
+
 /* RFBI */
 
 struct rfbi_timings {
@@ -310,7 +314,7 @@ struct omap_dss_board_info {
 /* Init with the board info */
 extern int omap_display_init(struct omap_dss_board_info *board_data);
 /* HDMI mux init*/
-extern int omap_hdmi_init(void);
+extern int omap_hdmi_init(enum omap_hdmi_flags flags);
 
 struct omap_display_platform_data {
        struct omap_dss_board_info *board_data;