From: Zhao Yakui <yakui.zhao@intel.com>
Date: Tue, 6 Apr 2010 17:15:47 +0800
Subject: [PATCH] drm/i915: Clear the TV sense state bits on cantiga to make TV detection reliable
Git-commit: d42c9e2c24f7e7897405b85816bdf4ac924881c0
Patch-mainline: v3.5-rc1
References: bnc#750041

The TV detection logic is not reliable on the cantiga platform. Sometimes the
TV will be misdetected as the following two cases:
   a. TV is misdetected on some laptops. e.g. There is no TV connector
port or no TV is attaced. But the TV is shown as connected.
   b. TV connector type is misdetected. E.g. the component TV is
attached, but the TV is shown as S-video type.

According to the hardware requirement, the TV sense state bits of TV DAC
register should be cleared to zero on cantiga platfrom.

https://bugzilla.kernel.org/show_bug.cgi?id=14792

Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Tested-by: Santi <santi@agolina.net>
Tested-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

---
 drivers/gpu/drm/i915/intel_tv.c |    8 ++++++++
 1 file changed, 8 insertions(+)

--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1275,6 +1275,14 @@ intel_tv_detect_type (struct intel_tv *i
 		   DAC_B_0_7_V |
 		   DAC_C_0_7_V);
 
+	/*
+	 * The TV sense state should be cleared to zero on cantiga platform. Otherwise
+	 * the TV is misdetected. This is hardware requirement.
+	 */
+	if (IS_GM45(dev))
+		tv_dac &= ~(TVDAC_STATE_CHG_EN | TVDAC_A_SENSE_CTL |
+			    TVDAC_B_SENSE_CTL | TVDAC_C_SENSE_CTL);
+
 	I915_WRITE(TV_CTL, tv_ctl);
 	I915_WRITE(TV_DAC, tv_dac);
 	POSTING_READ(TV_DAC);
