drm/i915: set the DDI sync polarity bits
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Wed, 8 Aug 2012 17:15:28 +0000 (14:15 -0300)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 9 Aug 2012 16:38:18 +0000 (18:38 +0200)
During my tests, everything worked even if the wrong polarity was set.
Still, we should try to set the correct values.

Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_ddi.c

index 97f00fb..896b279 100644 (file)
 #define  PIPE_DDI_BPC_10                               (1<<20)
 #define  PIPE_DDI_BPC_6                                        (2<<20)
 #define  PIPE_DDI_BPC_12                               (3<<20)
+#define  PIPE_DDI_PVSYNC                       (1<<17)
+#define  PIPE_DDI_PHSYNC                       (1<<16)
 #define  PIPE_DDI_BFI_ENABLE                   (1<<4)
 #define  PIPE_DDI_PORT_WIDTH_X1                        (0<<1)
 #define  PIPE_DDI_PORT_WIDTH_X2                        (1<<1)
index 0d7acd7..1fbd67c 100644 (file)
@@ -727,6 +727,7 @@ void intel_ddi_mode_set(struct drm_encoder *encoder,
        temp &= ~PIPE_DDI_PORT_MASK;
        temp &= ~PIPE_DDI_BPC_12;
        temp &= ~PIPE_DDI_MODE_SELECT_MASK;
+       temp &= ~(PIPE_DDI_PVSYNC | PIPE_DDI_PHSYNC);
        temp |= PIPE_DDI_SELECT_PORT(port) |
                        ((intel_crtc->bpp > 24) ?
                                PIPE_DDI_BPC_12 :
@@ -738,6 +739,11 @@ void intel_ddi_mode_set(struct drm_encoder *encoder,
        else
                temp |= PIPE_DDI_MODE_SELECT_DVI;
 
+       if (adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC)
+               temp |= PIPE_DDI_PVSYNC;
+       if (adjusted_mode->flags & DRM_MODE_FLAG_PHSYNC)
+               temp |= PIPE_DDI_PHSYNC;
+
        I915_WRITE(DDI_FUNC_CTL(pipe), temp);
 
        intel_hdmi->set_infoframes(encoder, adjusted_mode);