drm/amd/display: Add passive dongle handling in force_to_use_aux case

[why]

Need special handling for passive HDMI dongles with I2C over AUX.

Reviewed-by: Aurabindo Pillai <Aurabindo.Pillai@amd.com>
Signed-off-by: Matthew Stewart <Matthew.Stewart2@amd.com>
Signed-off-by: George Zhang <george.zhang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Matthew Stewart
2026-06-24 16:34:03 -04:00
committed by Alex Deucher
parent 219fb1f4c5
commit ffa0cfa9d6

View File

@@ -497,6 +497,12 @@ static void query_hdcp_capability(enum signal_type signal, struct dc_link *link)
msg22.data = link->hdcp_caps.rx_caps.raw;
msg22.length = sizeof(link->hdcp_caps.rx_caps.raw);
msg22.msg_id = HDCP_MESSAGE_ID_RX_CAPS;
if (link->force_to_use_aux && (signal == SIGNAL_TYPE_HDMI_TYPE_A)) {
// case with passive dongle with i2c over aux
msg22.data = &link->hdcp_caps.rx_caps.fields.version;
msg22.length = sizeof(link->hdcp_caps.rx_caps.fields.version);
msg22.msg_id = HDCP_MESSAGE_ID_HDCP2VERSION;
}
} else {
msg22.data = &link->hdcp_caps.rx_caps.fields.version;
msg22.length = sizeof(link->hdcp_caps.rx_caps.fields.version);
@@ -597,7 +603,24 @@ static bool detect_dp(struct dc_link *link,
if (sink_caps->transaction_type == DDC_TRANSACTION_TYPE_I2C_OVER_AUX) {
sink_caps->signal = SIGNAL_TYPE_DISPLAY_PORT;
if (!detect_dp_sink_caps(link)) {
return false;
if (link->force_to_use_aux) {
sink_caps->signal = dp_passive_dongle_detection(link->ddc, sink_caps, audio_support);
link->dpcd_caps.dongle_type = sink_caps->dongle_type;
link->dpcd_caps.is_dongle_type_one = sink_caps->is_dongle_type_one;
link->dpcd_caps.dpcd_rev.raw = 0;
/* Type 1 dongles do not work with I2C over Aux and also some of
* Type 2 dongles do not support I2C over Aux well, so for these
* cases when native Aux transactons fails and I2C over Aux fails
* report that nothing is connected, as we can't tell is it bad
* DP sink or bad passive dongle.
*/
if (sink_caps->dongle_type == DISPLAY_DONGLE_NONE)
return false;
else
return true;
} else {
return false;
}
}
if (is_dp_branch_device(link))