Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -914,8 +914,6 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
{
	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
	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)) {
		ironlake_edp_backlight_off(dev);
@@ -925,7 +923,6 @@ static void intel_dp_prepare(struct drm_encoder *encoder)
		else
			ironlake_edp_pll_off(encoder);
	}
	if (dp_reg & DP_PORT_EN)
	intel_dp_link_down(intel_dp);
}

@@ -956,22 +953,21 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
	if (mode != DRM_MODE_DPMS_ON) {
		if (is_edp(intel_dp))
			ironlake_edp_backlight_off(dev);
		if (dp_reg & DP_PORT_EN)
		intel_dp_link_down(intel_dp);
		if (is_edp(intel_dp))
			ironlake_edp_panel_off(dev);
		if (is_edp(intel_dp) && !is_pch_edp(intel_dp))
			ironlake_edp_pll_off(encoder);
	} else {
		if (!(dp_reg & DP_PORT_EN)) {
		if (is_edp(intel_dp))
			ironlake_edp_panel_on(intel_dp);
		if (!(dp_reg & DP_PORT_EN)) {
			intel_dp_start_link_train(intel_dp);
			intel_dp_complete_link_train(intel_dp);
		}
		if (is_edp(intel_dp))
			ironlake_edp_backlight_on(dev);
	}
	}
	intel_dp->dpms_mode = mode;
}