From 719f267754403c3e2d255e257ae95e79e68ab27f Mon Sep 17 00:00:00 2001 From: Erik Gilling Date: Sun, 6 Feb 2011 19:33:45 -0800 Subject: video: tegra: only enable HDMI features if detected from edid Change-Id: I94c5c83c25a8aa1de344339f5759953074488720 Signed-off-by: Erik Gilling --- drivers/video/tegra/dc/hdmi.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'drivers') 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; -- cgit v1.2.3