diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch new file mode 100644 index 00000000..4ec992ae --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch @@ -0,0 +1,89 @@ +From 6313f91bdd2cc96c6b2b73c2c713a3e0a9599d2d Mon Sep 17 00:00:00 2001 +From: Martin Tsai <martin.tsai@amd.com> +Date: Fri, 8 Sep 2017 19:25:35 +0800 +Subject: [PATCH 2469/4131] 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> +--- + drivers/gpu/drm/amd/display/dc/core/dc_link.c | 33 ++++++++++++++++----------- + drivers/gpu/drm/amd/display/dc/dc_types.h | 1 + + 2 files changed, 21 insertions(+), 13 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 d5eaebe..c7751a3 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c +@@ -649,27 +649,34 @@ 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 = dc_sink_create(&sink_init_data); +- if (!sink) { +- DC_ERROR("Failed to create sink!\n"); +- return false; ++ 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( ++ edid_status = dm_helpers_read_local_edid( + link->ctx, + link, + sink); ++ } + + switch (edid_status) { + case EDID_BAD_CHECKSUM: +@@ -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; +diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h +index 6b891fd..4bd74fc 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_types.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_types.h +@@ -151,6 +151,7 @@ enum dc_edid_status { + EDID_BAD_INPUT, + EDID_NO_RESPONSE, + EDID_BAD_CHECKSUM, ++ EDID_THE_SAME, + }; + + /* audio capability from EDID*/ +-- +2.7.4 + |