OSDN Git Service

drm/amd/display: set Layout properly for 8ch audio at timing validation
authorGuo, Bing <Bing.Guo@amd.com>
Thu, 7 Oct 2021 20:10:59 +0000 (16:10 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Oct 2021 18:26:16 +0000 (14:26 -0400)
Why:
For audio packet type 0x02, there are 2 Layouts:
   Layout = 0 for 2 channels
and Layout = 1 for > 2 channels.
Layout will affect bandwidth check.

Currently, for HDMI FRL, Layout field isn't set and has a default value
of 0, so theoretically only 2-channel audio for audio packet type 0x02
is supported now.

How:
1. Set Layout properly according to maximum audio channel numbers for
audios with audio packet type 0x02.
2. 8ch LPCM audio is not supported for timing modes with v_active <= 576.

Reviewed-by: Chris Park <chris.park@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Acked-by: Agustin Gutierrez <agustin.gutierrez@amd.com>
Signed-off-by: Bing Guo <Bing.Guo@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dce/dce_audio.c

index 7866cf2..27218ed 100644 (file)
@@ -514,13 +514,15 @@ void dce_aud_az_configure(
                        union audio_sample_rates sample_rates =
                                        audio_mode->sample_rates;
                        uint8_t byte2 = audio_mode->max_bit_rate;
+                       uint8_t channel_count = audio_mode->channel_count;
 
                        /* adjust specific properties */
                        switch (audio_format_code) {
                        case AUDIO_FORMAT_CODE_LINEARPCM: {
+
                                check_audio_bandwidth(
                                        crtc_info,
-                                       audio_mode->channel_count,
+                                       channel_count,
                                        signal,
                                        &sample_rates);
 
@@ -548,7 +550,7 @@ void dce_aud_az_configure(
 
                        /* fill audio format data */
                        set_reg_field_value(value,
-                                       audio_mode->channel_count - 1,
+                                       channel_count - 1,
                                        AZALIA_F0_CODEC_PIN_CONTROL_AUDIO_DESCRIPTOR0,
                                        MAX_CHANNELS);