aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2469-drm-amd-display-To-prevent-detecting-new-sink-from-s.patch
diff options
context:
space:
mode:
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.patch89
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
+