diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c index feb10be0ce4c..e414e4770789 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c @@ -566,6 +566,8 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) link->local_sink) return true; + link_disconnect_sink(link); + if (new_connection_type != dc_connection_none) { link->type = new_connection_type; @@ -656,29 +658,16 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) return false; } - if (link->local_sink) { - edid_status = dm_helpers_read_local_edid( + 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); - 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, @@ -758,28 +747,15 @@ bool dc_link_detect(struct dc_link *link, enum dc_detect_reason reason) if (link->type == dc_connection_mst_branch) { LINK_INFO("link=%d, mst branch is now Disconnected\n", link->link_index); + dm_helpers_dp_mst_stop_top_mgr(link->ctx, link); link->mst_stream_alloc_table.stream_count = 0; memset(link->mst_stream_alloc_table.stream_allocations, 0, sizeof(link->mst_stream_alloc_table.stream_allocations)); } - if (link->local_sink) { - sink = link->local_sink; - edid_status = dm_helpers_read_local_edid( - link->ctx, - link, - sink); - 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; - } - } else { - link_disconnect_sink(link); - link->type = dc_connection_none; - sink_caps.signal = SIGNAL_TYPE_NONE; - } + link->type = dc_connection_none; + sink_caps.signal = SIGNAL_TYPE_NONE; } LINK_INFO("link=%d, dc_sink_in=%p is now %s\n",