[Intel-gfx] [PATCH 6/8] drm/i915/dp: clear DP encoder CRTC if the receiver disappears

Jesse Barnes jbarnes at virtuousgeek.org
Sat Jul 2 00:22:56 CEST 2011


If the receiver goes away, drop any associated CRTC.  This will force a
full mode set on any subsequent setcrtc call, which is what we need if
the receiver is gone and the link is down.

Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
---
 drivers/gpu/drm/i915/intel_dp.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f41aec3..d7a8d24 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1533,7 +1533,7 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
 
 	if (!intel_dp_get_link_status(intel_dp)) {
 		intel_dp_link_down(intel_dp);
-		return;
+		goto out_gone;
 	}
 
 	/* Try to read receiver status if the link appears to be up */
@@ -1542,13 +1542,19 @@ intel_dp_check_link_status(struct intel_dp *intel_dp)
 				       sizeof (intel_dp->dpcd));
 	if (ret != sizeof(intel_dp->dpcd)) {
 		intel_dp_link_down(intel_dp);
-		return;
+		goto out_gone;
 	}
 
 	if (!intel_channel_eq_ok(intel_dp)) {
 		intel_dp_start_link_train(intel_dp);
 		intel_dp_complete_link_train(intel_dp);
 	}
+
+	return;
+
+out_gone:
+	DRM_DEBUG_DRIVER("sink gone, clearing crtc for DP\n");
+	intel_dp->base.base.crtc = NULL;
 }
 
 static enum drm_connector_status
-- 
1.7.4.1




More information about the Intel-gfx mailing list