drm/radeon/audio: fix missing multichannel PCM SAD in some cases
[deliverable/linux.git] / drivers / gpu / drm / radeon / r600_hdmi.c
index 0977c303aeec4dfae6cd31aba199dba40d8be3bf..ace4dec21bc2be337faab22a40b8997153982db7 100644 (file)
@@ -388,20 +388,30 @@ static void dce3_2_afmt_write_sad_regs(struct drm_encoder *encoder)
 
        for (i = 0; i < ARRAY_SIZE(eld_reg_to_type); i++) {
                u32 value = 0;
+               u8 stereo_freqs = 0;
+               int max_channels = -1;
                int j;
 
                for (j = 0; j < sad_count; j++) {
                        struct cea_sad *sad = &sads[j];
 
                        if (sad->format == eld_reg_to_type[i][1]) {
-                               value = MAX_CHANNELS(sad->channels) |
-                                       DESCRIPTOR_BYTE_2(sad->byte2) |
-                                       SUPPORTED_FREQUENCIES(sad->freq);
+                               if (sad->channels > max_channels) {
+                                       value = MAX_CHANNELS(sad->channels) |
+                                               DESCRIPTOR_BYTE_2(sad->byte2) |
+                                               SUPPORTED_FREQUENCIES(sad->freq);
+                                       max_channels = sad->channels;
+                               }
+
                                if (sad->format == HDMI_AUDIO_CODING_TYPE_PCM)
-                                       value |= SUPPORTED_FREQUENCIES_STEREO(sad->freq);
-                               break;
+                                       stereo_freqs |= sad->freq;
+                               else
+                                       break;
                        }
                }
+
+               value |= SUPPORTED_FREQUENCIES_STEREO(stereo_freqs);
+
                WREG32(eld_reg_to_type[i][0], value);
        }
 
This page took 0.027654 seconds and 5 git commands to generate.