drm/i915: Fix CRT force detect on Cougarpoint
To make CRT force detect reliable on Cougarpoint, we need to disable DAC before force detect, and restore back when trigger is completed. Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
8db9d77b1b
commit
a4a6b90150
|
@ -157,15 +157,21 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = connector->dev;
|
struct drm_device *dev = connector->dev;
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
u32 adpa;
|
u32 adpa, temp;
|
||||||
bool ret;
|
bool ret;
|
||||||
|
|
||||||
adpa = I915_READ(PCH_ADPA);
|
temp = adpa = I915_READ(PCH_ADPA);
|
||||||
|
|
||||||
adpa &= ~ADPA_CRT_HOTPLUG_MASK;
|
if (HAS_PCH_CPT(dev)) {
|
||||||
/* disable HPD first */
|
/* Disable DAC before force detect */
|
||||||
I915_WRITE(PCH_ADPA, adpa);
|
I915_WRITE(PCH_ADPA, adpa & ~ADPA_DAC_ENABLE);
|
||||||
(void)I915_READ(PCH_ADPA);
|
(void)I915_READ(PCH_ADPA);
|
||||||
|
} else {
|
||||||
|
adpa &= ~ADPA_CRT_HOTPLUG_MASK;
|
||||||
|
/* disable HPD first */
|
||||||
|
I915_WRITE(PCH_ADPA, adpa);
|
||||||
|
(void)I915_READ(PCH_ADPA);
|
||||||
|
}
|
||||||
|
|
||||||
adpa |= (ADPA_CRT_HOTPLUG_PERIOD_128 |
|
adpa |= (ADPA_CRT_HOTPLUG_PERIOD_128 |
|
||||||
ADPA_CRT_HOTPLUG_WARMUP_10MS |
|
ADPA_CRT_HOTPLUG_WARMUP_10MS |
|
||||||
|
@ -181,6 +187,11 @@ static bool intel_ironlake_crt_detect_hotplug(struct drm_connector *connector)
|
||||||
while ((I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) != 0)
|
while ((I915_READ(PCH_ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) != 0)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
if (HAS_PCH_CPT(dev)) {
|
||||||
|
I915_WRITE(PCH_ADPA, temp);
|
||||||
|
(void)I915_READ(PCH_ADPA);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check the status to see if both blue and green are on now */
|
/* Check the status to see if both blue and green are on now */
|
||||||
adpa = I915_READ(PCH_ADPA);
|
adpa = I915_READ(PCH_ADPA);
|
||||||
adpa &= ADPA_CRT_HOTPLUG_MONITOR_MASK;
|
adpa &= ADPA_CRT_HOTPLUG_MONITOR_MASK;
|
||||||
|
|
Loading…
Reference in New Issue