summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_link.c42
1 files changed, 9 insertions, 33 deletions
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,28 +658,15 @@ 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(
- link->ctx,
- link,
- sink);
+ sink->dongle_max_pix_clk = sink_caps.max_hdmi_pixel_clock;
+ sink->converter_disable_audio = converter_disable_audio;
- 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;
+ link->local_sink = sink;
- edid_status = dm_helpers_read_local_edid(
+ edid_status = dm_helpers_read_local_edid(
link->ctx,
link,
sink);
- }
switch (edid_status) {
case EDID_BAD_CHECKSUM:
@@ -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",