summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorNitin Kumbhar <nkumbhar@nvidia.com>2011-02-09 16:58:31 +0530
committerNitin Kumbhar <nkumbhar@nvidia.com>2011-02-09 16:58:31 +0530
commitae385299e0faf14d8b81de24f3649d096a841744 (patch)
tree1b22c7c02ade387b49dae505fe2b2164e24b7232 /drivers
parent49111eb5b680a9f2e2ea196ffaf7dd80a7f02e93 (diff)
parente51ab3740df4c2880507045f999c4bde3563c6a2 (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.c7
-rw-r--r--drivers/video/tegra/dc/hdmi.c25
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 */