Commit d2b996ac authored by Keith Packard's avatar Keith Packard

Revert and fix "drm/i915/dp: remove DPMS mode tracking from DP"

This reverts commit 885a5014.

We actually *do* need to track DPMS state so that on hotplug, we don't
retrain the link until DPMS is disabled.

However, that code had avery small bug -- it wouldn't set the
dpms_mode at mode set time, and so link retraining would not actually
occur on monitor hotplug until the monitor had gone through a DPMS
off/DPMS on cycle.
Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
Tested-by: default avatarAndrew Lutomirski <luto@mit.edu>
parent f0575e92
...@@ -50,6 +50,7 @@ struct intel_dp { ...@@ -50,6 +50,7 @@ struct intel_dp {
bool has_audio; bool has_audio;
int force_audio; int force_audio;
uint32_t color_range; uint32_t color_range;
int dpms_mode;
uint8_t link_bw; uint8_t link_bw;
uint8_t lane_count; uint8_t lane_count;
uint8_t dpcd[8]; uint8_t dpcd[8];
...@@ -1011,6 +1012,8 @@ static void intel_dp_commit(struct drm_encoder *encoder) ...@@ -1011,6 +1012,8 @@ static void intel_dp_commit(struct drm_encoder *encoder)
if (is_edp(intel_dp)) if (is_edp(intel_dp))
ironlake_edp_backlight_on(dev); ironlake_edp_backlight_on(dev);
intel_dp->dpms_mode = DRM_MODE_DPMS_ON;
} }
static void static void
...@@ -1045,6 +1048,7 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode) ...@@ -1045,6 +1048,7 @@ intel_dp_dpms(struct drm_encoder *encoder, int mode)
if (is_edp(intel_dp)) if (is_edp(intel_dp))
ironlake_edp_backlight_on(dev); ironlake_edp_backlight_on(dev);
} }
intel_dp->dpms_mode = mode;
} }
/* /*
...@@ -1591,6 +1595,9 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp) ...@@ -1591,6 +1595,9 @@ intel_dp_get_dpcd(struct intel_dp *intel_dp)
static void static void
intel_dp_check_link_status(struct intel_dp *intel_dp) intel_dp_check_link_status(struct intel_dp *intel_dp)
{ {
if (intel_dp->dpms_mode != DRM_MODE_DPMS_ON)
return;
if (!intel_dp->base.base.crtc) if (!intel_dp->base.base.crtc)
return; return;
...@@ -1939,6 +1946,7 @@ intel_dp_init(struct drm_device *dev, int output_reg) ...@@ -1939,6 +1946,7 @@ intel_dp_init(struct drm_device *dev, int output_reg)
return; return;
intel_dp->output_reg = output_reg; intel_dp->output_reg = output_reg;
intel_dp->dpms_mode = -1;
intel_connector = kzalloc(sizeof(struct intel_connector), GFP_KERNEL); intel_connector = kzalloc(sizeof(struct intel_connector), GFP_KERNEL);
if (!intel_connector) { if (!intel_connector) {
......
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