|
@@ -244,20 +244,30 @@ void dce6_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_ENDPOINT(offset, eld_reg_to_type[i][0], value);
|
|
|
}
|
|
|
|