]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Add analog bit to edid_caps (v2)
authorTimur Kristóf <timur.kristof@gmail.com>
Fri, 26 Sep 2025 18:01:42 +0000 (20:01 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Oct 2025 14:07:15 +0000 (10:07 -0400)
The new analog bit will be used with DVI-I connectors.

DVI-I connectors can connect to both digital and analog monitors
and this bit will help distinguish between those.

v2:
Sanitize analog bit based on connector type.

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_helpers.c
drivers/gpu/drm/amd/display/dc/dc_types.h
drivers/gpu/drm/amd/display/dc/link/link_detection.c
drivers/gpu/drm/amd/display/include/grph_object_id.h

index cc21337a182f5314f925a81be89a19a3c4e999a0..eb2c587b0b9be8b0795b989d02aaf2105b1a33db 100644 (file)
@@ -131,6 +131,7 @@ enum dc_edid_status dm_helpers_parse_edid_caps(
        edid_caps->serial_number = edid_buf->serial;
        edid_caps->manufacture_week = edid_buf->mfg_week;
        edid_caps->manufacture_year = edid_buf->mfg_year;
+       edid_caps->analog = !(edid_buf->input & DRM_EDID_INPUT_DIGITAL);
 
        drm_edid_get_monitor_name(edid_buf,
                                  edid_caps->display_name,
index 8f8ccde7ad94e82e4b4f2e65c8d58e6bf41f442e..9989c8af5174a91722867738a6a5c72d0ec60e01 100644 (file)
@@ -185,6 +185,10 @@ struct dc_panel_patch {
        unsigned int wait_after_dpcd_poweroff_ms;
 };
 
+/**
+ * struct dc_edid_caps - Capabilities read from EDID.
+ * @analog: Whether the monitor is analog. Used by DVI-I handling.
+ */
 struct dc_edid_caps {
        /* sink identification */
        uint16_t manufacturer_id;
@@ -213,6 +217,7 @@ struct dc_edid_caps {
        bool hdr_supported;
        bool rr_capable;
        bool scdc_present;
+       bool analog;
 
        struct dc_panel_patch panel_patch;
 };
index 82a9e52d5ae5fdccc17107bc95db9a438870f948..801c94efa7fcacd0449d3d5904cec257007f0765 100644 (file)
@@ -1107,6 +1107,8 @@ static bool detect_link_and_local_sink(struct dc_link *link,
                        break;
                }
 
+               sink->edid_caps.analog &= dc_connector_supports_analog(link->link_id.id);
+
                // Check if edid is the same
                if ((prev_sink) &&
                    (edid_status == EDID_THE_SAME || edid_status == EDID_OK))
index 54e33062b3c026776b114ea1398b6d9336b6cdcb..1386fa124e850084831596f21fc2bd1666ad773e 100644 (file)
@@ -310,4 +310,11 @@ static inline bool dal_graphics_object_id_equal(
        }
        return false;
 }
+
+static inline bool dc_connector_supports_analog(const enum connector_id conn)
+{
+       return conn == CONNECTOR_ID_VGA ||
+               conn == CONNECTOR_ID_SINGLE_LINK_DVII ||
+               conn == CONNECTOR_ID_DUAL_LINK_DVII;
+}
 #endif