drm/i915: Fix the interlace mode selection for gmch platforms
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 28 Mar 2014 21:29:31 +0000 (23:29 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Mon, 31 Mar 2014 08:46:32 +0000 (10:46 +0200)
PIPECONF_INTERLACE_W_FIELD_INDICATION is only meant to be used for sdvo
since it implies a slightly weird vsync shift of htotal/2. For everything
else we should use PIPECONF_INTERLACE_W_SYNC_SHIFT and let the value in
the VSYNCSHIFT register take effect.

The only exception is gen3 simply because VSYNCSHIFT didn't exist yet.
Gen2 doesn't support interlaced modes at all, so we can drop the
explicit gen2 checks.

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_display.c

index eba47319fec237ba51fd7a9279777ad1894d58e4..a0f4ac187f1a09dbe3347448ec41fec57d8f72a5 100644 (file)
@@ -5535,13 +5535,13 @@ static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc)
                }
        }
 
-       if (IS_VALLEYVIEW(dev) &&
-           intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
-               pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT;
-       else if (!IS_GEN2(dev) &&
-                intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
-               pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
-       else
+       if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) {
+               if (INTEL_INFO(dev)->gen < 4 ||
+                   intel_pipe_has_type(&intel_crtc->base, INTEL_OUTPUT_SDVO))
+                       pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION;
+               else
+                       pipeconf |= PIPECONF_INTERLACE_W_SYNC_SHIFT;
+       else
                pipeconf |= PIPECONF_PROGRESSIVE;
 
        if (IS_VALLEYVIEW(dev) && intel_crtc->config.limited_color_range)