ASoC: pcm3168a: add hw constraint for channel
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 12 Oct 2018 06:31:18 +0000 (06:31 +0000)
committerMark Brown <broonie@kernel.org>
Fri, 12 Oct 2018 16:52:07 +0000 (18:52 +0200)
LEFT_J / I2S only can use TDM.
This patch adds channel constraint for it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/pcm3168a.c

index 233a8df5d7a554573b6e37a8a67b1d807655cdef..f0e2b886323ea8f829246828972ae8547990c0fb 100644 (file)
@@ -484,6 +484,7 @@ static int pcm3168a_startup(struct snd_pcm_substream *substream,
        bool tx = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
        unsigned int fmt;
        unsigned int sample_min;
+       unsigned int channel_max;
 
        if (tx)
                fmt = pcm3168a->dac_fmt;
@@ -496,19 +497,38 @@ static int pcm3168a_startup(struct snd_pcm_substream *substream,
         * RIGHT_J : 24 / 16
         * LEFT_J  : 24
         * I2S     : 24
+        *
+        * TDM available
+        *
+        * I2S
+        * LEFT_J
         */
        switch (fmt) {
        case PCM3168A_FMT_RIGHT_J:
                sample_min  = 16;
+               channel_max =  2;
+               break;
+       case PCM3168A_FMT_LEFT_J:
+               sample_min  = 24;
+               channel_max =  8;
+               break;
+       case PCM3168A_FMT_I2S:
+               sample_min  = 24;
+               channel_max =  8;
                break;
        default:
                sample_min  = 24;
+               channel_max =  2;
        }
 
        snd_pcm_hw_constraint_minmax(substream->runtime,
                                     SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
                                     sample_min, 32);
 
+       snd_pcm_hw_constraint_minmax(substream->runtime,
+                                    SNDRV_PCM_HW_PARAM_CHANNELS,
+                                    2, channel_max);
+
        return 0;
 }
 static const struct snd_soc_dai_ops pcm3168a_dac_dai_ops = {