diff options
author | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-02-09 16:58:31 +0530 |
---|---|---|
committer | Nitin Kumbhar <nkumbhar@nvidia.com> | 2011-02-09 16:58:31 +0530 |
commit | ae385299e0faf14d8b81de24f3649d096a841744 (patch) | |
tree | 1b22c7c02ade387b49dae505fe2b2164e24b7232 /drivers | |
parent | 49111eb5b680a9f2e2ea196ffaf7dd80a7f02e93 (diff) | |
parent | e51ab3740df4c2880507045f999c4bde3563c6a2 (diff) |
merging android-tegra-2.6.36 into git-master/linux-2.6/android-tegra-2.6.36
Conflicts:
drivers/video/tegra/dc/hdmi.c
Change-Id: Ia65c693bf49160e3906df68403129ba1e5545912
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/fbmon.c | 7 | ||||
-rw-r--r-- | drivers/video/tegra/dc/hdmi.c | 25 |
2 files changed, 23 insertions, 9 deletions
diff --git a/drivers/video/fbmon.c b/drivers/video/fbmon.c index 0841e6b27e5c..18dad1dd9fb7 100644 --- a/drivers/video/fbmon.c +++ b/drivers/video/fbmon.c @@ -1018,6 +1018,13 @@ void fb_edid_add_monspecs(unsigned char *edid, struct fb_monspecs *specs) num++; } } + } else if (tag == 0x3) { + if (len >= 3) { + u32 ieee_reg = block[0] | (block[1] << 8) | + (block[2] << 16); + if (ieee_reg == 0x000c03) + specs->misc |= FB_MISC_HDMI; + } } block += len; diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c index 24e4fed37b40..6ef15c6b0421 100644 --- a/drivers/video/tegra/dc/hdmi.c +++ b/drivers/video/tegra/dc/hdmi.c @@ -64,6 +64,8 @@ struct tegra_dc_hdmi_data { spinlock_t suspend_lock; bool suspended; bool hpd_pending; + + bool dvi; }; static const struct fb_videomode tegra_dc_hdmi_supported_modes[] = { @@ -476,6 +478,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); hdmi->hpd_switch.state = 0; switch_set_state(&hdmi->hpd_switch, 1); @@ -958,7 +963,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. */ @@ -1019,9 +1023,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); @@ -1029,20 +1037,19 @@ 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 _tegra_hdmi_writel(hdmi, GENERIC_CTRL_AUDIO, 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); tegra_dc_hdmi_setup_stereo_infoframe(dc); /* TMDS CONFIG */ |