From: Relja Vojvodic <[email protected]>

Fix the HDMI data channel reads to respect scdc_present field
to pass compliance test.

Reviewed-by: Wenjing Liu <[email protected]>
Signed-off-by: Relja Vojvodic <[email protected]>
Signed-off-by: Aurabindo Pillai <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/dc_types.h                | 1 +
 drivers/gpu/drm/amd/display/dc/link/link_detection.c     | 4 ++++
 drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c | 3 ++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_types.h
index b5aa03a3e39c..8f8ccde7ad94 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
@@ -212,6 +212,7 @@ struct dc_edid_caps {
        bool edid_hdmi;
        bool hdr_supported;
        bool rr_capable;
+       bool scdc_present;
 
        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..82a9e52d5ae5 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -270,6 +270,10 @@ static void read_scdc_caps(struct ddc_service *ddc_service,
        uint8_t slave_address = HDMI_SCDC_ADDRESS;
        uint8_t offset = HDMI_SCDC_MANUFACTURER_OUI;
 
+       if (ddc_service->link->local_sink &&
+               !ddc_service->link->local_sink->edid_caps.scdc_present)
+               return;
+
        link_query_ddc_data(ddc_service, slave_address, &offset,
                        sizeof(offset), sink->scdc_caps.manufacturer_OUI.byte,
                        sizeof(sink->scdc_caps.manufacturer_OUI.byte));
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c 
b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
index 267180e7bc48..5d2bcce2f669 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_ddc.c
@@ -549,7 +549,8 @@ void write_scdc_data(struct ddc_service *ddc_service,
        /*Lower than 340 Scramble bit from SCDC caps*/
 
        if (ddc_service->link->local_sink &&
-               
ddc_service->link->local_sink->edid_caps.panel_patch.skip_scdc_overwrite)
+               
(ddc_service->link->local_sink->edid_caps.panel_patch.skip_scdc_overwrite ||
+               !ddc_service->link->local_sink->edid_caps.scdc_present))
                return;
 
        link_query_ddc_data(ddc_service, slave_address, &offset,
-- 
2.51.0

Reply via email to