[Intel-gfx] [PATCH] drm/i915: Don't try to set the DP sink power state on disconnected monitors

Damien Lespiau damien.lespiau at intel.com
Thu Dec 12 16:34:24 CET 2013


While looking at some debug traces, I noticed that we were always trying
to set the sink power, even when we previously identified that the
connector was in the disconnected state.

In that case, we don't a big chance for the write to succeed, so don't
try.

[drm:drm_helper_probe_single_connector_modes], [CONNECTOR:30:DP-3]
[drm:intel_dp_detect], [CONNECTOR:30:DP-3]
[drm:drm_helper_probe_single_connector_modes], [CONNECTOR:30:DP-3] disconnected
[drm:intel_dp_aux_ch], dp_aux_ch timeout status 0x7015003f
[drm:intel_dp_sink_dpms], failed to write sink power state

Signed-off-by: Damien Lespiau <damien.lespiau at intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 9b40113..006bca5 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1361,18 +1361,21 @@ static void ironlake_edp_pll_off(struct intel_dp *intel_dp)
 /* If the sink supports it, try to set the power state appropriately */
 void intel_dp_sink_dpms(struct intel_dp *intel_dp, int mode)
 {
+	struct intel_connector *intel_connector = intel_dp->attached_connector;
+	struct drm_connector *connector = &intel_connector->base;
 	int ret, i;
 
 	/* Should have a valid DPCD by this point */
 	if (intel_dp->dpcd[DP_DPCD_REV] < 0x11)
 		return;
 
-	if (mode != DRM_MODE_DPMS_ON) {
+	if (mode != DRM_MODE_DPMS_ON &&
+	    connector->status != connector_status_disconnected) {
 		ret = intel_dp_aux_native_write_1(intel_dp, DP_SET_POWER,
 						  DP_SET_POWER_D3);
 		if (ret != 1)
 			DRM_DEBUG_DRIVER("failed to write sink power state\n");
-	} else {
+	} else if (mode == DRM_MODE_DPMS_ON) {
 		/*
 		 * When turning on, we need to retry for 1ms to give the sink
 		 * time to wake up.
-- 
1.8.3.1




More information about the Intel-gfx mailing list