]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Refactor amdgpu_dm_connector_detect (v2)
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 26 Sep 2025 18:01:55 +0000 (20:01 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Oct 2025 14:09:31 +0000 (10:09 -0400)
Prepare for polling analog connectors.
Document the function better.

Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 9e260ca04e1ee6de1e56113f2a18834cec531ff5..3bd404b727b65de2a5f51854540333a920d3e527 100644 (file)
@@ -7226,29 +7226,32 @@ finish:
        return stream;
 }
 
+/**
+ * amdgpu_dm_connector_detect() - Detect whether a DRM connector is connected to a display
+ *
+ * A connector is considered connected when it has a sink that is not NULL.
+ * For connectors that support HPD (hotplug detection), the connection is
+ * handled in the HPD interrupt.
+ *
+ * Notes:
+ * 1. This interface is NOT called in context of HPD irq.
+ * 2. This interface *is called* in context of user-mode ioctl. Which
+ *    makes it a bad place for *any* MST-related activity.
+ */
 static enum drm_connector_status
 amdgpu_dm_connector_detect(struct drm_connector *connector, bool force)
 {
-       bool connected;
        struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
 
-       /*
-        * Notes:
-        * 1. This interface is NOT called in context of HPD irq.
-        * 2. This interface *is called* in context of user-mode ioctl. Which
-        * makes it a bad place for *any* MST-related activity.
-        */
-
-       if (aconnector->base.force == DRM_FORCE_UNSPECIFIED &&
-           !aconnector->fake_enable)
-               connected = (aconnector->dc_sink != NULL);
-       else
-               connected = (aconnector->base.force == DRM_FORCE_ON ||
-                               aconnector->base.force == DRM_FORCE_ON_DIGITAL);
-
        update_subconnector_property(aconnector);
 
-       return (connected ? connector_status_connected :
+       if (aconnector->base.force == DRM_FORCE_ON ||
+               aconnector->base.force == DRM_FORCE_ON_DIGITAL)
+               return connector_status_connected;
+       else if (aconnector->base.force == DRM_FORCE_OFF)
+               return connector_status_disconnected;
+
+       return (aconnector->dc_sink ? connector_status_connected :
                        connector_status_disconnected);
 }