diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 8a1a4fbc06ac..7f1695778b0b 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -3475,7 +3475,9 @@ g4x_dp_detect(struct intel_dp *intel_dp) static struct edid * intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter) { + struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); struct intel_connector *intel_connector = to_intel_connector(connector); + int ret; /* use cached edid if we have one */ if (intel_connector->edid) { @@ -3486,13 +3488,18 @@ intel_dp_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter) return drm_edid_duplicate(intel_connector->edid); } - return drm_get_edid(connector, adapter); + intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON) + ret = drm_get_edid(connector, adapter); + intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); + + return ret; } static int intel_dp_get_edid_modes(struct drm_connector *connector, struct i2c_adapter *adapter) { struct intel_connector *intel_connector = to_intel_connector(connector); + int ret; /* use cached edid if we have one */ if (intel_connector->edid) { @@ -3504,7 +3511,11 @@ intel_dp_get_edid_modes(struct drm_connector *connector, struct i2c_adapter *ada intel_connector->edid); } - return intel_ddc_get_modes(connector, adapter); + intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_ON) + ret = intel_ddc_get_modes(connector, adapter); + intel_dp_sink_dpms(intel_dp, DRM_MODE_DPMS_OFF); + + return ret; } static enum drm_connector_status