From 3b473cf71eb87441cd6bf0a22873c4548069b0c7 Mon Sep 17 00:00:00 2001 From: Zhao Yakui 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 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 Tested-by: Santi --- drivers/gpu/drm/i915/intel_tv.c | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index dc83b7a..c8f67bf 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c @@ -1262,6 +1262,15 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_encoder *intel_encoder DAC_A_0_7_V | 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); intel_wait_for_vblank(dev); -- 1.5.4.5