drm/amd/display: fix DP audio settings
authorCharlene Liu <charlene.liu@amd.com>
Thu, 18 Jan 2024 23:25:23 +0000 (18:25 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 29 Jan 2024 20:46:07 +0000 (15:46 -0500)
[why]
Audio channel layout for 5.1ch is not correct

[how]
Add the audio layout for 5.1ch (channel_count = 6).
Add divided by zero check.

Reviewed-by: Zhan Liu <zhan.liu@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Charlene Liu <charlene.liu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dce/dce_audio.c

index 07b507150c5186801639df961f65b40a211a90f2..12f3c35b3a34cde701346eee73ae87f51076ff81 100644 (file)
@@ -282,7 +282,7 @@ static void get_audio_layout_config(
                        output->layouts_per_sample_denom = 4;
                        output->symbols_per_layout = 40;
                        output->max_layouts_per_audio_sdp = 1;
-               } else if (channel_count == 8) {
+               } else if (channel_count == 8 || channel_count == 6) {
                        output->layouts_per_sample_denom = 1;
                        output->symbols_per_layout = 40;
                        output->max_layouts_per_audio_sdp = 1;
@@ -292,7 +292,7 @@ static void get_audio_layout_config(
                        output->layouts_per_sample_denom = 4;
                        output->symbols_per_layout = 10;
                        output->max_layouts_per_audio_sdp = 1;
-               } else if (channel_count == 8) {
+               } else if (channel_count == 8 || channel_count == 6) {
                        output->layouts_per_sample_denom = 1;
                        output->symbols_per_layout = 10;
                        output->max_layouts_per_audio_sdp = 1;
@@ -489,6 +489,11 @@ static void check_audio_bandwidth_dp(
        get_audio_layout_config(
                        channel_count, dp_link_info->encoding, &layout_config);
 
+       if (layout_config.max_layouts_per_audio_sdp == 0 ||
+               layout_config.symbols_per_layout == 0 ||
+               layout_config.layouts_per_sample_denom == 0) {
+               return;
+       }
        if (available_hblank_bw < calculate_required_audio_bw_in_symbols(
                        crtc_info, &layout_config, channel_count, 192000,
                        av_stream_map_lane_count, audio_sdp_overhead))