drm/i915: Disable CRT port after pipe on PCH platforms
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 5 May 2015 14:17:37 +0000 (17:17 +0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 21 May 2015 21:23:16 +0000 (23:23 +0200)
Follow the BSpec sequence for the CRT port as well on PCH platforms,
ie. disable the pipe before the port.

Didn't bother looking at DDI in detail yet, so leave that one be even
though the CRT is a PCH port there.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/intel_crt.c

index 93bb5159d093504c3a9ca2f36ed6320895f01c45..521af2c069cb6aed90e379501d3fbc39c24df6e9 100644 (file)
@@ -207,6 +207,14 @@ static void intel_disable_crt(struct intel_encoder *encoder)
        intel_crt_set_dpms(encoder, DRM_MODE_DPMS_OFF);
 }
 
+static void pch_disable_crt(struct intel_encoder *encoder)
+{
+}
+
+static void pch_post_disable_crt(struct intel_encoder *encoder)
+{
+       intel_disable_crt(encoder);
+}
 
 static void hsw_crt_post_disable(struct intel_encoder *encoder)
 {
@@ -888,7 +896,12 @@ void intel_crt_init(struct drm_device *dev)
                crt->adpa_reg = ADPA;
 
        crt->base.compute_config = intel_crt_compute_config;
-       crt->base.disable = intel_disable_crt;
+       if (HAS_PCH_SPLIT(dev) && !HAS_DDI(dev)) {
+               crt->base.disable = pch_disable_crt;
+               crt->base.post_disable = pch_post_disable_crt;
+       } else {
+               crt->base.disable = intel_disable_crt;
+       }
        crt->base.enable = intel_enable_crt;
        if (I915_HAS_HOTPLUG(dev))
                crt->base.hpd_pin = HPD_CRT;