Commit 736085bc authored by Jesse Barnes's avatar Jesse Barnes Committed by Chris Wilson

drm/i915/dp: down the DP link even if the reg indicates it's already down

Since the PLL may still be on, and the training pattern may not be
correct.  Fixes suspend/resume on my PCH eDP test system.
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
[ickle: minor merge conflict and silence the compiler]
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
parent 701394cc
...@@ -914,8 +914,6 @@ static void intel_dp_prepare(struct drm_encoder *encoder) ...@@ -914,8 +914,6 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
{ {
struct intel_dp *intel_dp = enc_to_intel_dp(encoder); struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
struct drm_device *dev = encoder->dev; struct drm_device *dev = encoder->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
uint32_t dp_reg = I915_READ(intel_dp->output_reg);
if (is_edp(intel_dp)) { if (is_edp(intel_dp)) {
ironlake_edp_backlight_off(dev); ironlake_edp_backlight_off(dev);
...@@ -925,8 +923,7 @@ static void intel_dp_prepare(struct drm_encoder *encoder) ...@@ -925,8 +923,7 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
else else
ironlake_edp_pll_off(encoder); ironlake_edp_pll_off(encoder);
} }
if (dp_reg & DP_PORT_EN) intel_dp_link_down(intel_dp);
intel_dp_link_down(intel_dp);
} }
static void intel_dp_commit(struct drm_encoder *encoder) static void intel_dp_commit(struct drm_encoder *encoder)
...@@ -956,21 +953,20 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode) ...@@ -956,21 +953,20 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
if (mode != DRM_MODE_DPMS_ON) { if (mode != DRM_MODE_DPMS_ON) {
if (is_edp(intel_dp)) if (is_edp(intel_dp))
ironlake_edp_backlight_off(dev); ironlake_edp_backlight_off(dev);
if (dp_reg & DP_PORT_EN) intel_dp_link_down(intel_dp);
intel_dp_link_down(intel_dp);
if (is_edp(intel_dp)) if (is_edp(intel_dp))
ironlake_edp_panel_off(dev); ironlake_edp_panel_off(dev);
if (is_edp(intel_dp) && !is_pch_edp(intel_dp)) if (is_edp(intel_dp) && !is_pch_edp(intel_dp))
ironlake_edp_pll_off(encoder); ironlake_edp_pll_off(encoder);
} else { } else {
if (is_edp(intel_dp))
ironlake_edp_panel_on(intel_dp);
if (!(dp_reg & DP_PORT_EN)) { if (!(dp_reg & DP_PORT_EN)) {
if (is_edp(intel_dp))
ironlake_edp_panel_on(intel_dp);
intel_dp_start_link_train(intel_dp); intel_dp_start_link_train(intel_dp);
intel_dp_complete_link_train(intel_dp); intel_dp_complete_link_train(intel_dp);
if (is_edp(intel_dp))
ironlake_edp_backlight_on(dev);
} }
if (is_edp(intel_dp))
ironlake_edp_backlight_on(dev);
} }
intel_dp->dpms_mode = mode; intel_dp->dpms_mode = mode;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment