[Intel-gfx] [PATCH] drm/i915: Update the status of connector when receiving MST unplug event

Ethan Hsieh ethan.hsieh at canonical.com
Tue Aug 1 08:51:31 UTC 2017


We do not update the status of connector when receiving MST unplug event.
Call detect function to get latest status and then update status of connector.

Before applying the patch:
[313.665321] [drm:intel_get_hpd_pins [i915]] hotplug event received, stat 0x00200000, dig 0x10101012, pins 0x00000020
[313.665383] [drm:intel_hpd_irq_handler [i915]] digital hpd port B - long
[313.665436] [drm:intel_hpd_irq_handler [i915]] Received HPD interrupt on PIN 5 - cnt: 0
[313.665539] [drm:intel_dp_hpd_pulse [i915]] got hpd irq on port B - long
[313.944743] [drm:intel_dp_destroy_mst_connector [i915]]
[313.944848] [drm:intel_dp_destroy_mst_connector [i915]]

After applying the patch:
[43.175798] [drm:intel_dp_destroy_mst_connector [i915]] [CONNECTOR:70:DP-4] status updated from connected to disconnected
[43.175870] [drm:intel_dp_destroy_mst_connector [i915]]
[43.177675] [drm:drm_helper_probe_single_connector_modes [drm_kms_helper]] [CONNECTOR:70:DP-4]
[43.177679] [drm:drm_helper_probe_single_connector_modes [drm_kms_helper]] [CONNECTOR:70:DP-4] disconnected

Signed-off-by: Ethan Hsieh <ethan.hsieh at canonical.com>
---
 drivers/gpu/drm/i915/intel_dp_mst.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index e4ea968..b02a9a8 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -492,6 +492,20 @@ static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
 {
 	struct intel_connector *intel_connector = to_intel_connector(connector);
 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
+	enum drm_connector_status old_status;
+
+	mutex_lock(&connector->dev->mode_config.mutex);
+	old_status = connector->status;
+	connector->status = connector->funcs->detect(connector, false);
+
+	if (old_status != connector->status)
+		DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %s to %s\n",
+			      connector->base.id,
+			      connector->name,
+			      drm_get_connector_status_name(old_status),
+			      drm_get_connector_status_name(connector->status));
+
+	mutex_unlock(&connector->dev->mode_config.mutex);
 
 	drm_connector_unregister(connector);
 
-- 
2.7.4



More information about the Intel-gfx mailing list