ALSA: x86: Set CA bits for DisplayPort too
authorTakashi Iwai <tiwai@suse.de>
Thu, 2 Feb 2017 16:06:38 +0000 (17:06 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 3 Feb 2017 16:37:34 +0000 (17:37 +0100)
This is a guess work.  Usually the DP audio info frame is just 8-bit
shifted from HDMI AI, so let's try to put CA in DIP frame 2 [24-31].

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/x86/intel_hdmi_audio.c

index f49520117dd60dd8b6bd5bc38ede965c54baeccd..24a18b88c9273509fbaf3cb852dbd1390ad2db43 100644 (file)
@@ -626,20 +626,20 @@ static void snd_intelhad_prog_dip(struct snd_pcm_substream *substream,
        u8 checksum = 0;
        u32 info_frame;
        int channels;
+       int ca;
 
        channels = substream->runtime->channels;
 
        had_write_register(intelhaddata, AUD_CNTL_ST, ctrl_state.regval);
 
+       ca = snd_intelhad_channel_allocation(intelhaddata, channels);
        if (intelhaddata->dp_output) {
                info_frame = DP_INFO_FRAME_WORD1;
-               frame2.regval = 1;
+               frame2.regval = (substream->runtime->channels - 1) | (ca << 24);
        } else {
                info_frame = HDMI_INFO_FRAME_WORD1;
                frame2.regx.chnl_cnt = substream->runtime->channels - 1;
-
-               frame3.regx.chnl_alloc = snd_intelhad_channel_allocation(
-                       intelhaddata, channels);
+               frame3.regx.chnl_alloc = ca;
 
                /* Calculte the byte wide checksum for all valid DIP words */
                for (i = 0; i < BYTES_PER_WORD; i++)