video: tegra: only enable HDMI features if detected from edid
authorErik Gilling <konkers@android.com>
Mon, 7 Feb 2011 03:33:45 +0000 (19:33 -0800)
committerErik Gilling <konkers@android.com>
Mon, 7 Feb 2011 22:56:21 +0000 (14:56 -0800)
Change-Id: I94c5c83c25a8aa1de344339f5759953074488720
Signed-off-by: Erik Gilling <konkers@android.com>
drivers/video/tegra/dc/hdmi.c

index b214f2c41db3d2bf8e17ec404631ce2a7e16f901..cebcdc35d889175ab4a3a63550212824247d1df0 100644 (file)
@@ -57,6 +57,8 @@ struct tegra_dc_hdmi_data {
        spinlock_t                      suspend_lock;
        bool                            suspended;
        bool                            hpd_pending;
+
+       bool                            dvi;
 };
 
 const struct fb_videomode tegra_dc_hdmi_supported_modes[] = {
@@ -453,6 +455,9 @@ static bool tegra_dc_hdmi_detect(struct tegra_dc *dc)
        dc->out->h_size = specs.max_x * 1000;
        dc->out->v_size = specs.max_y * 1000;
 
+
+       hdmi->dvi = !(specs.misc & FB_MISC_HDMI);
+
        tegra_fb_update_monspecs(dc->fb, &specs, tegra_dc_hdmi_mode_filter);
        dev_info(&dc->ndev->dev, "display detected\n");
        return true;
@@ -869,7 +874,6 @@ static void tegra_dc_hdmi_enable(struct tegra_dc *dc)
        int rekey;
        int err;
        unsigned long val;
-       bool dvi = false;
 
        /* enbale power, clocks, resets, etc. */
 
@@ -930,9 +934,13 @@ static void tegra_dc_hdmi_enable(struct tegra_dc *dc)
                          SOR_REFCLK_DIV_FRAC(dispclk_div_8_2),
                          HDMI_NV_PDISP_SOR_REFCLK);
 
-       err = tegra_dc_hdmi_setup_audio(dc);
-       if (err < 0)
-               dvi = true;
+
+       if (!hdmi->dvi) {
+               err = tegra_dc_hdmi_setup_audio(dc);
+
+               if (err < 0)
+                       hdmi->dvi = true;
+       }
 
        rekey = HDMI_REKEY_DEFAULT;
        val = HDMI_CTRL_REKEY(rekey);
@@ -940,11 +948,11 @@ static void tegra_dc_hdmi_enable(struct tegra_dc *dc)
                                        dc->mode.h_back_porch +
                                        dc->mode.h_front_porch -
                                        rekey - 18) / 32);
-       if (!dvi)
+       if (!hdmi->dvi)
                val |= HDMI_CTRL_ENABLE;
        tegra_hdmi_writel(hdmi, val, HDMI_NV_PDISP_HDMI_CTRL);
 
-       if (dvi)
+       if (hdmi->dvi)
                tegra_hdmi_writel(hdmi, 0x0,
                                  HDMI_NV_PDISP_HDMI_GENERIC_CTRL);
        else
@@ -952,8 +960,8 @@ static void tegra_dc_hdmi_enable(struct tegra_dc *dc)
                                  HDMI_NV_PDISP_HDMI_GENERIC_CTRL);
 
 
-       tegra_dc_hdmi_setup_avi_infoframe(dc, dvi);
-       tegra_dc_hdmi_setup_audio_infoframe(dc, dvi);
+       tegra_dc_hdmi_setup_avi_infoframe(dc, hdmi->dvi);
+       tegra_dc_hdmi_setup_audio_infoframe(dc, hdmi->dvi);
 
        /* TMDS CONFIG */
        pll0 = 0x200033f;