ASoC: davinci-mcasp: Support for one channel (mono) audio
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Thu, 11 May 2017 06:58:22 +0000 (09:58 +0300)
committerMark Brown <broonie@kernel.org>
Sun, 14 May 2017 09:22:12 +0000 (18:22 +0900)
Mono audio can be achieved by configuring McASP to transmit/receive only
during one timeslot. McASP will still going to generate clocks for the
other slot(s), but will only use the single slot to transmit/receive.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/davinci/davinci-mcasp.c

index 3c5a980..56ec1d3 100644 (file)
@@ -629,7 +629,7 @@ static int davinci_mcasp_ch_constraint(struct davinci_mcasp *mcasp, int stream,
        if (mcasp->tdm_mask[stream])
                slots = hweight32(mcasp->tdm_mask[stream]);
 
-       for (i = 2; i <= slots; i++)
+       for (i = 1; i <= slots; i++)
                list[count++] = i;
 
        for (i = 2; i <= serializers; i++)
@@ -1297,7 +1297,7 @@ static int davinci_mcasp_startup(struct snd_pcm_substream *substream,
 
        snd_pcm_hw_constraint_minmax(substream->runtime,
                                     SNDRV_PCM_HW_PARAM_CHANNELS,
-                                    2, max_channels);
+                                    0, max_channels);
 
        snd_pcm_hw_constraint_list(substream->runtime,
                                   0, SNDRV_PCM_HW_PARAM_CHANNELS,
@@ -1459,13 +1459,13 @@ static struct snd_soc_dai_driver davinci_mcasp_dai[] = {
                .suspend        = davinci_mcasp_suspend,
                .resume         = davinci_mcasp_resume,
                .playback       = {
-                       .channels_min   = 2,
+                       .channels_min   = 1,
                        .channels_max   = 32 * 16,
                        .rates          = DAVINCI_MCASP_RATES,
                        .formats        = DAVINCI_MCASP_PCM_FMTS,
                },
                .capture        = {
-                       .channels_min   = 2,
+                       .channels_min   = 1,
                        .channels_max   = 32 * 16,
                        .rates          = DAVINCI_MCASP_RATES,
                        .formats        = DAVINCI_MCASP_PCM_FMTS,
@@ -1971,12 +1971,12 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
         */
        mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list =
                devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
-                            (32 + mcasp->num_serializer - 2),
+                            (32 + mcasp->num_serializer - 1),
                             GFP_KERNEL);
 
        mcasp->chconstr[SNDRV_PCM_STREAM_CAPTURE].list =
                devm_kzalloc(mcasp->dev, sizeof(unsigned int) *
-                            (32 + mcasp->num_serializer - 2),
+                            (32 + mcasp->num_serializer - 1),
                             GFP_KERNEL);
 
        if (!mcasp->chconstr[SNDRV_PCM_STREAM_PLAYBACK].list ||