ALSA: x86: Support S16 format
authorTakashi Iwai <tiwai@suse.de>
Tue, 7 Feb 2017 12:53:42 +0000 (13:53 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 10 Feb 2017 09:21:47 +0000 (10:21 +0100)
Now we support S16 PCM format in addition.  For this, we need to set
packet_mode=1 in AUD_CONFIG register.

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

index e8f8be2f590b4fb3665e8f7760404a8a2d02e8e9..c0a080e5d1f4e648c0576b18191ebf0d4f64216a 100644 (file)
@@ -135,7 +135,8 @@ static const struct snd_pcm_hardware had_pcm_hardware = {
                SNDRV_PCM_INFO_MMAP |
                SNDRV_PCM_INFO_MMAP_VALID |
                SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
-       .formats = (SNDRV_PCM_FMTBIT_S24_LE |
+       .formats = (SNDRV_PCM_FMTBIT_S16_LE |
+                   SNDRV_PCM_FMTBIT_S24_LE |
                    SNDRV_PCM_FMTBIT_S32_LE),
        .rates = SNDRV_PCM_RATE_32000 |
                SNDRV_PCM_RATE_44100 |
@@ -290,12 +291,10 @@ static int had_prog_status_reg(struct snd_pcm_substream *substream,
                           AUD_CH_STATUS_0, ch_stat0.regval);
 
        switch (substream->runtime->format) {
-#if 0 /* FIXME: not supported yet */
        case SNDRV_PCM_FORMAT_S16_LE:
                ch_stat1.regx.max_wrd_len = MAX_SMPL_WIDTH_20;
                ch_stat1.regx.wrd_len = SMPL_WIDTH_16BITS;
                break;
-#endif
        case SNDRV_PCM_FORMAT_S24_LE:
        case SNDRV_PCM_FORMAT_S32_LE:
                ch_stat1.regx.max_wrd_len = MAX_SMPL_WIDTH_24;
@@ -336,6 +335,9 @@ static int had_init_audio_ctrl(struct snd_pcm_substream *substream,
        else
                cfg_val.regx.layout = LAYOUT1;
 
+       if (substream->runtime->format == SNDRV_PCM_FORMAT_S16_LE)
+               cfg_val.regx.packet_mode = 1;
+
        if (substream->runtime->format == SNDRV_PCM_FORMAT_S32_LE)
                cfg_val.regx.left_align = 1;