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 <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 1 +
 drivers/gpu/drm/amd/display/dc/dc_types.h                 | 5 +++++
 drivers/gpu/drm/amd/display/dc/link/link_detection.c      | 2 ++
 drivers/gpu/drm/amd/display/include/grph_object_id.h      | 7 +++++++
 4 files changed, 15 insertions(+)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
index fe100e4c9801..a14076878b89 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
@@ -130,6 +130,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,
diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_types.h
index b5aa03a3e39c..d948cdb98ea8 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
@@ -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;
@@ -212,6 +216,7 @@ struct dc_edid_caps {
        bool edid_hdmi;
        bool hdr_supported;
        bool rr_capable;
+       bool analog;
 
        struct dc_panel_patch panel_patch;
 };
diff --git a/drivers/gpu/drm/amd/display/dc/link/link_detection.c 
b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
index 85303167a553..2ab8ee7f42c1 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -1103,6 +1103,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))
diff --git a/drivers/gpu/drm/amd/display/include/grph_object_id.h 
b/drivers/gpu/drm/amd/display/include/grph_object_id.h
index 54e33062b3c0..1386fa124e85 100644
--- a/drivers/gpu/drm/amd/display/include/grph_object_id.h
+++ b/drivers/gpu/drm/amd/display/include/grph_object_id.h
@@ -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
-- 
2.51.0

Reply via email to