summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorErik Gilling <konkers@android.com>2011-02-06 19:33:45 -0800
committerErik Gilling <konkers@android.com>2011-02-07 14:56:21 -0800
commit719f267754403c3e2d255e257ae95e79e68ab27f (patch)
treebb6b5632617a0dc299ef9f1892490bd3eed85e02 /drivers
parentcef13d98eb134defcfc125debf38cc6749e153c8 (diff)
video: tegra: only enable HDMI features if detected from edid
Change-Id: I94c5c83c25a8aa1de344339f5759953074488720 Signed-off-by: Erik Gilling <konkers@android.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/tegra/dc/hdmi.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c
index b214f2c41db3..cebcdc35d889 100644
--- a/drivers/video/tegra/dc/hdmi.c
+++ b/drivers/video/tegra/dc/hdmi.c
@@ -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;