[alsa-devel] [PATCH v4] ASoC: bcm2835: Add 8 channel (multitrack) capability
Matt Flax
flatmax at flatmax.org
Wed Feb 22 06:15:19 CET 2017
On 15/02/17 19:30, Arnaud Mouiche wrote:
> Hi,
>
> On 14/02/2017 22:04, Matt Flax wrote:
>> [...]
>> + if (dev->fmt &
>> + (SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_DSP_A))
>
> SND_SOC_DAIFMT_DSP_A is not a bit. It is an enum
> #define SND_SOC_DAIFMT_I2S 1 /* I2S mode */
> #define SND_SOC_DAIFMT_RIGHT_J 2 /* Right Justified mode */
> #define SND_SOC_DAIFMT_LEFT_J 3 /* Left Justified mode */
> #define SND_SOC_DAIFMT_DSP_A 4 /* L data MSB after FRM LRC */
> #define SND_SOC_DAIFMT_DSP_B 5 /* L data MSB during FRM LRC */
> #define SND_SOC_DAIFMT_AC97 6 /* AC97 */
> #define SND_SOC_DAIFMT_PDM 7 /* Pulse density modulation */
>
> So your test is wrong.
>
Indeed I am going to fix this in patch v5.
> Other question that bother me (I'm not familiar with bcm2835, so may
> be I'm wrong):
> why should we put channel number constraint in the SOC driver whereas
> ASOC already compute
> the constraint by making the intersection of channels constraints
> coming from soc AND codecs.
>
> If you connect one 8 channel capable soc driver (eg. bcm2835) with a 2
> channel codec in DSP_A mode, ASOC already tell
> the user space that the limit is 2 channels.
> Shouldn't you just specify that bcm2835 is 8 channel capable (and may
> be more), whatever the format is, and let ASOC do the job.
> Given a specific device tree connecting the bcm2835 with one or more
> codecs is sufficient to specify the limits.
>
> And if in the future someone wants to connect a 4 channels capable
> codec, or a 2x 2channels codecs, must he also send a new patch with 4
> channels support ?
>
It does seem simpler using this approach you mention. From what I
understand it is necessary to guard carefully in the SoC driver so that
the codecs and machine drivers don't have to implicitly define these guards.
> Regards,
> Arnaud
>
>> + return snd_pcm_hw_constraint_single(substream->runtime,
>> + SNDRV_PCM_HW_PARAM_CHANNELS, 8);
>> + else
>> + return snd_pcm_hw_constraint_single(substream->runtime,
>> + SNDRV_PCM_HW_PARAM_CHANNELS, 2);
>> }
>> static void bcm2835_i2s_shutdown(struct snd_pcm_substream
>> *substream,
>> @@ -549,6 +560,10 @@ static void bcm2835_i2s_shutdown(struct
>> snd_pcm_substream *substream,
>> * not stop the clock when SND_SOC_DAIFMT_CONT
>> */
>> bcm2835_i2s_stop_clock(dev);
>> +
>> + /* Default to 2 channels */
>> + snd_pcm_hw_constraint_single(substream->runtime,
>> + SNDRV_PCM_HW_PARAM_CHANNELS, 2);
>> }
>> static const struct snd_soc_dai_ops bcm2835_i2s_dai_ops = {
>> @@ -576,16 +591,12 @@ static struct snd_soc_dai_driver
>> bcm2835_i2s_dai = {
>> .name = "bcm2835-i2s",
>> .probe = bcm2835_i2s_dai_probe,
>> .playback = {
>> - .channels_min = 2,
>> - .channels_max = 2,
>> .rates = SNDRV_PCM_RATE_8000_192000,
>> .formats = SNDRV_PCM_FMTBIT_S16_LE
>> | SNDRV_PCM_FMTBIT_S24_LE
>> | SNDRV_PCM_FMTBIT_S32_LE
>> },
>> .capture = {
>> - .channels_min = 2,
>> - .channels_max = 2,
>> .rates = SNDRV_PCM_RATE_8000_192000,
>> .formats = SNDRV_PCM_FMTBIT_S16_LE
>> | SNDRV_PCM_FMTBIT_S24_LE
>
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list