mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 04:23:35 +02:00
drm/amd/display: To prevent detecting new sink from spurious HPD
Signed-off-by: Martin Tsai <martin.tsai@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <Harry.Wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
e008b0bcc6
commit
7d58e72149
|
|
@ -649,28 +649,35 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
|
|||
sink_init_data.link = link;
|
||||
sink_init_data.sink_signal = sink_caps.signal;
|
||||
|
||||
if (link->local_sink) {
|
||||
sink = link->local_sink;
|
||||
} else {
|
||||
sink_init_data.link = link;
|
||||
sink_init_data.sink_signal = sink_caps.signal;
|
||||
|
||||
sink = dc_sink_create(&sink_init_data);
|
||||
if (!sink) {
|
||||
DC_ERROR("Failed to create sink!\n");
|
||||
return false;
|
||||
}
|
||||
sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
|
||||
sink->converter_disable_audio = converter_disable_audio;
|
||||
|
||||
link->local_sink = sink;
|
||||
sink = dc_sink_create(&sink_init_data);
|
||||
if (!sink) {
|
||||
DC_ERROR("Failed to create sink!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
edid_status = dm_helpers_read_local_edid(
|
||||
if (link->local_sink) {
|
||||
edid_status = dm_helpers_read_local_edid(
|
||||
link->ctx,
|
||||
link,
|
||||
sink);
|
||||
|
||||
if (edid_status == EDID_OK) {
|
||||
// Edid is not the same, to update the local sink with new sink.
|
||||
sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
|
||||
sink->converter_disable_audio = converter_disable_audio;
|
||||
link->local_sink = sink;
|
||||
}
|
||||
} else {
|
||||
sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
|
||||
sink->converter_disable_audio = converter_disable_audio;
|
||||
link->local_sink = sink;
|
||||
|
||||
edid_status = dm_helpers_read_local_edid(
|
||||
link->ctx,
|
||||
link,
|
||||
sink);
|
||||
}
|
||||
|
||||
switch (edid_status) {
|
||||
case EDID_BAD_CHECKSUM:
|
||||
dm_logger_write(link->ctx->logger, LOG_ERROR,
|
||||
|
|
@ -762,7 +769,7 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason)
|
|||
link->ctx,
|
||||
link,
|
||||
sink);
|
||||
if (edid_status != EDID_OK) {
|
||||
if (edid_status != EDID_OK && edid_status != EDID_THE_SAME) {
|
||||
link_disconnect_sink(link);
|
||||
link->type = dc_connection_none;
|
||||
sink_caps.signal = SIGNAL_TYPE_NONE;
|
||||
|
|
|
|||
|
|
@ -151,6 +151,7 @@ enum dc_edid_status {
|
|||
EDID_BAD_INPUT,
|
||||
EDID_NO_RESPONSE,
|
||||
EDID_BAD_CHECKSUM,
|
||||
EDID_THE_SAME,
|
||||
};
|
||||
|
||||
/* audio capability from EDID*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user