summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimur Kristóf <timur.kristof@gmail.com>2026-01-26 22:08:30 +0100
committerAlex Deucher <alexander.deucher@amd.com>2026-02-23 14:28:32 -0500
commit7b6e66b6dd55350be309f43772b7de8ae57c56eb (patch)
tree634d052efda0eeae257a83171ac1e5043ce1ee3a
parentee5c4855f43c1af96c3f7e4412ce9492b00023fe (diff)
downloadlinux-7b6e66b6dd55350be309f43772b7de8ae57c56eb.tar.gz
linux-7b6e66b6dd55350be309f43772b7de8ae57c56eb.zip
drm/amd/display: Implement DDC probe over AUX channel
DDC probe means that we use the DDC (Display Data Channel) to verify whether a display is connected or not. This was written with mainly analog connectors in mind, so it didn't work over the AUX channel. However, in order to support external DP bridge encoders found in CIK APUs, it needs to work over the AUX channel too. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Alex Hung <alex.hung@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/amd/display/dc/link/link_detection.c11
1 files changed, 9 insertions, 2 deletions
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 45a0b25c4ccf..8fd796d987b6 100644
--- a/drivers/gpu/drm/amd/display/dc/link/link_detection.c
+++ b/drivers/gpu/drm/amd/display/dc/link/link_detection.c
@@ -903,11 +903,18 @@ static bool link_detect_evaluate_edid_header(uint8_t edid_header[8])
*/
static bool link_detect_ddc_probe(struct dc_link *link)
{
+ enum signal_type signal = link_detect_sink_signal_type(link, DETECT_REASON_HPD);
+ enum ddc_transaction_type transaction_type = get_ddc_transaction_type(signal);
+ uint8_t edid_header[8] = {0};
+ uint8_t zero = 0;
+ bool ddc_probed;
+
if (!link->ddc)
return false;
- uint8_t edid_header[8] = {0};
- bool ddc_probed = i2c_read(link->ddc, 0x50, edid_header, sizeof(edid_header));
+ set_ddc_transaction_type(link->ddc, transaction_type);
+
+ ddc_probed = link_query_ddc_data(link->ddc, 0x50, &zero, 1, edid_header, sizeof(edid_header));
if (!ddc_probed)
return false;