aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch149
1 files changed, 149 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch
new file mode 100644
index 00000000..0cb3eb68
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0206-drm-amd-display-Audio-is-not-switching-to-DP-when-HD.patch
@@ -0,0 +1,149 @@
+From 4da85df542f098673fa8aa11441b060b126c11f8 Mon Sep 17 00:00:00 2001
+From: Hersen Wu <hersenxs.wu@amd.com>
+Date: Wed, 8 Feb 2017 11:28:33 -0500
+Subject: [PATCH 0206/4131] drm/amd/display: Audio is not switching to DP when
+ HDMI/DP hot plug/unplug
+
+Signed-off-by: Hersen Wu <hersenxs.wu@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>
+---
+ .../amd/display/dc/dce110/dce110_hw_sequencer.c | 100 +++++++++++++++------
+ 1 file changed, 75 insertions(+), 25 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 5e99f6c..6a5cec0 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -1732,7 +1732,6 @@ enum dc_status dce110_apply_ctx_to_hw(
+ struct dc_bios *dcb = dc->ctx->dc_bios;
+ enum dc_status status;
+ int i;
+- bool programmed_audio_dto = false;
+ enum dm_pp_clocks_state clocks_state = DM_PP_CLOCKS_STATE_INVALID;
+
+ /* Reset old context */
+@@ -1782,6 +1781,80 @@ enum dc_status dce110_apply_ctx_to_hw(
+ context->res_ctx.pool->display_clock,
+ context->dispclk_khz * 115 / 100);
+
++ /* program audio wall clock. use HDMI as clock source if HDMI
++ * audio active. Otherwise, use DP as clock source
++ * first, loop to find any HDMI audio, if not, loop find DP audio
++ */
++ /* Setup audio rate clock source */
++ /* Issue:
++ * Audio lag happened on DP monitor when unplug a HDMI monitor
++ *
++ * Cause:
++ * In case of DP and HDMI connected or HDMI only, DCCG_AUDIO_DTO_SEL
++ * is set to either dto0 or dto1, audio should work fine.
++ * In case of DP connected only, DCCG_AUDIO_DTO_SEL should be dto1,
++ * set to dto0 will cause audio lag.
++ *
++ * Solution:
++ * Not optimized audio wall dto setup. When mode set, iterate pipe_ctx,
++ * find first available pipe with audio, setup audio wall DTO per topology
++ * instead of per pipe.
++ */
++ for (i = 0; i < context->res_ctx.pool->pipe_count; i++) {
++ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
++
++ if (pipe_ctx->stream == NULL)
++ continue;
++
++ if (pipe_ctx->top_pipe)
++ continue;
++
++ if (pipe_ctx->stream->signal != SIGNAL_TYPE_HDMI_TYPE_A)
++ continue;
++
++ if (pipe_ctx->audio != NULL) {
++ struct audio_output audio_output;
++
++ build_audio_output(pipe_ctx, &audio_output);
++
++ pipe_ctx->audio->funcs->wall_dto_setup(
++ pipe_ctx->audio,
++ pipe_ctx->stream->signal,
++ &audio_output.crtc_info,
++ &audio_output.pll_info);
++ break;
++ }
++ }
++
++ /* no HDMI audio is found, try DP audio */
++ if (i == context->res_ctx.pool->pipe_count) {
++ for (i = 0; i < context->res_ctx.pool->pipe_count; i++) {
++ struct pipe_ctx *pipe_ctx = &context->res_ctx.pipe_ctx[i];
++
++ if (pipe_ctx->stream == NULL)
++ continue;
++
++ if (pipe_ctx->top_pipe)
++ continue;
++
++ if (!dc_is_dp_signal(pipe_ctx->stream->signal))
++ continue;
++
++ if (pipe_ctx->audio != NULL) {
++ struct audio_output audio_output;
++
++ build_audio_output(pipe_ctx, &audio_output);
++
++ pipe_ctx->audio->funcs->wall_dto_setup(
++ pipe_ctx->audio,
++ pipe_ctx->stream->signal,
++ &audio_output.crtc_info,
++ &audio_output.pll_info);
++ break;
++ }
++ }
++ }
++
+ for (i = 0; i < context->res_ctx.pool->pipe_count; i++) {
+ struct pipe_ctx *pipe_ctx_old =
+ &dc->current_context->res_ctx.pipe_ctx[i];
+@@ -1797,21 +1870,7 @@ enum dc_status dce110_apply_ctx_to_hw(
+ continue;
+
+ if (context->res_ctx.pipe_ctx[i].audio != NULL) {
+- /* Setup audio rate clock source */
+- /* Issue:
+- * Audio lag happened on DP monitor when unplug a HDMI monitor
+- *
+- * Cause:
+- * In case of DP and HDMI connected or HDMI only, DCCG_AUDIO_DTO_SEL
+- * is set to either dto0 or dto1, audio should work fine.
+- * In case of DP connected only, DCCG_AUDIO_DTO_SEL should be dto1,
+- * set to dto0 will cause audio lag.
+- *
+- * Solution:
+- * Not optimized audio wall dto setup. When mode set, iterate pipe_ctx,
+- * find first available pipe with audio, setup audio wall DTO per topology
+- * instead of per pipe.
+- */
++
+ struct audio_output audio_output;
+
+ build_audio_output(pipe_ctx, &audio_output);
+@@ -1833,15 +1892,6 @@ enum dc_status dce110_apply_ctx_to_hw(
+ pipe_ctx->stream->signal,
+ &audio_output.crtc_info,
+ &pipe_ctx->stream->public.audio_info);
+-
+- if (!programmed_audio_dto) {
+- pipe_ctx->audio->funcs->wall_dto_setup(
+- pipe_ctx->audio,
+- pipe_ctx->stream->signal,
+- &audio_output.crtc_info,
+- &audio_output.pll_info);
+- programmed_audio_dto = true;
+- }
+ }
+
+ status = apply_single_controller_ctx_to_hw(
+--
+2.7.4
+