|
@@ -1324,20 +1324,35 @@ static void intel_dp_get_config(struct intel_encoder *encoder,
|
|
|
struct intel_crtc_config *pipe_config)
|
|
|
{
|
|
|
struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
|
|
|
- struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
|
|
|
u32 tmp, flags = 0;
|
|
|
+ struct drm_device *dev = encoder->base.dev;
|
|
|
+ struct drm_i915_private *dev_priv = dev->dev_private;
|
|
|
+ enum port port = dp_to_dig_port(intel_dp)->port;
|
|
|
+ struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
|
|
|
|
|
|
- tmp = I915_READ(intel_dp->output_reg);
|
|
|
+ if ((port == PORT_A) || !HAS_PCH_CPT(dev)) {
|
|
|
+ tmp = I915_READ(intel_dp->output_reg);
|
|
|
+ if (tmp & DP_SYNC_HS_HIGH)
|
|
|
+ flags |= DRM_MODE_FLAG_PHSYNC;
|
|
|
+ else
|
|
|
+ flags |= DRM_MODE_FLAG_NHSYNC;
|
|
|
|
|
|
- if (tmp & DP_SYNC_HS_HIGH)
|
|
|
- flags |= DRM_MODE_FLAG_PHSYNC;
|
|
|
- else
|
|
|
- flags |= DRM_MODE_FLAG_NHSYNC;
|
|
|
+ if (tmp & DP_SYNC_VS_HIGH)
|
|
|
+ flags |= DRM_MODE_FLAG_PVSYNC;
|
|
|
+ else
|
|
|
+ flags |= DRM_MODE_FLAG_NVSYNC;
|
|
|
+ } else {
|
|
|
+ tmp = I915_READ(TRANS_DP_CTL(crtc->pipe));
|
|
|
+ if (tmp & TRANS_DP_HSYNC_ACTIVE_HIGH)
|
|
|
+ flags |= DRM_MODE_FLAG_PHSYNC;
|
|
|
+ else
|
|
|
+ flags |= DRM_MODE_FLAG_NHSYNC;
|
|
|
|
|
|
- if (tmp & DP_SYNC_VS_HIGH)
|
|
|
- flags |= DRM_MODE_FLAG_PVSYNC;
|
|
|
- else
|
|
|
- flags |= DRM_MODE_FLAG_NVSYNC;
|
|
|
+ if (tmp & TRANS_DP_VSYNC_ACTIVE_HIGH)
|
|
|
+ flags |= DRM_MODE_FLAG_PVSYNC;
|
|
|
+ else
|
|
|
+ flags |= DRM_MODE_FLAG_NVSYNC;
|
|
|
+ }
|
|
|
|
|
|
pipe_config->adjusted_mode.flags |= flags;
|
|
|
}
|