In the detect_link_and_local_sink() function, do not modify the
EDID capabilities of the display based on the connector. Instead,
respect the analog flag better and when the analog flag is set,
check that the connector indeed supports analog displays.

Suggested-by: Ray Wu <[email protected]>
Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Harry Wentland <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 ++++++++++++---
 .../gpu/drm/amd/display/dc/link/link_detection.c  |  2 --
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index aa31e969b39d..9703f7fc957d 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8665,8 +8665,14 @@ static void 
amdgpu_dm_connector_add_freesync_modes(struct drm_connector *connect
        if (!(amdgpu_freesync_vid_mode && drm_edid))
                return;
 
-       if (!amdgpu_dm_connector->dc_sink || 
amdgpu_dm_connector->dc_sink->edid_caps.analog ||
-               
!dc_supports_vrr(amdgpu_dm_connector->dc_sink->ctx->dce_version))
+       if (!amdgpu_dm_connector->dc_sink || !amdgpu_dm_connector->dc_link)
+               return;
+
+       if (!dc_supports_vrr(amdgpu_dm_connector->dc_sink->ctx->dce_version))
+               return;
+
+       if 
(dc_connector_supports_analog(amdgpu_dm_connector->dc_link->link_id.id) &&
+           amdgpu_dm_connector->dc_sink->edid_caps.analog)
                return;
 
        if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 
10)
@@ -8693,7 +8699,10 @@ static int amdgpu_dm_connector_get_modes(struct 
drm_connector *connector)
                        amdgpu_dm_connector->num_modes +=
                                drm_add_modes_noedid(connector, 1920, 1080);
 
-               if (amdgpu_dm_connector->dc_sink && 
amdgpu_dm_connector->dc_sink->edid_caps.analog) {
+               if (amdgpu_dm_connector->dc_sink &&
+                   amdgpu_dm_connector->dc_link &&
+                   amdgpu_dm_connector->dc_sink->edid_caps.analog &&
+                   
dc_connector_supports_analog(amdgpu_dm_connector->dc_link->link_id.id)) {
                        /* Analog monitor connected by DAC load detection.
                         * Add common modes. It will be up to the user to 
select one that works.
                         */
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 d163360a2bf6..6d31f4967f1a 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -1224,8 +1224,6 @@ 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))
-- 
2.51.1

Reply via email to