diff options
author | Tai Man | 2019-06-07 23:32:27 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2019-08-16 10:12:44 +0200 |
commit | e7a8a794109c07e0b8d7bd55fbfcb3082991626a (patch) | |
tree | 7fed4391f9d09d6e48612c685b54047bd8a7fc77 | |
parent | drm/amd/display: Wait for backlight programming completion in set backlight l... (diff) | |
download | kernel-qcow2-linux-e7a8a794109c07e0b8d7bd55fbfcb3082991626a.tar.gz kernel-qcow2-linux-e7a8a794109c07e0b8d7bd55fbfcb3082991626a.tar.xz kernel-qcow2-linux-e7a8a794109c07e0b8d7bd55fbfcb3082991626a.zip |
drm/amd/display: use encoder's engine id to find matched free audio device
[ Upstream commit 74eda776d7a4e69ec7aa1ce30a87636f14220fbb ]
[Why]
On some platforms, the encoder id 3 is not populated. So the encoders
are not stored in right order as index (id: 0, 1, 2, 4, 5) at pool. This
would cause encoders id 4 & id 5 to fail when finding corresponding
audio device, defaulting to the first available audio device. As result,
we cannot stream audio into two DP ports with encoders id 4 & id 5.
[How]
It need to create enough audio device objects (0 - 5) to perform matching.
Then use encoder engine id to find matched audio device.
Signed-off-by: Tai Man <taiman.wong@amd.com>
Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index e0a96abb3c46..06d5988dff72 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -222,7 +222,7 @@ bool resource_construct( * PORT_CONNECTIVITY == 1 (as instructed by HW team). */ update_num_audio(&straps, &num_audio, &pool->audio_support); - for (i = 0; i < pool->pipe_count && i < num_audio; i++) { + for (i = 0; i < caps->num_audio; i++) { struct audio *aud = create_funcs->create_audio(ctx, i); if (aud == NULL) { @@ -1713,6 +1713,12 @@ static struct audio *find_first_free_audio( return pool->audios[i]; } } + + /* use engine id to find free audio */ + if ((id < pool->audio_count) && (res_ctx->is_audio_acquired[id] == false)) { + return pool->audios[id]; + } + /*not found the matching one, first come first serve*/ for (i = 0; i < pool->audio_count; i++) { if (res_ctx->is_audio_acquired[i] == false) { |