[alsa-devel] ASoC: multicodec: No matching channels with system with DACs and ADCs on same bus

Caleb Crome caleb at crome.org
Tue Nov 10 22:33:02 CET 2015


Ah, that looks like the one!

Thanks,
 -Caleb


On Tue, Nov 10, 2015 at 10:30 AM, Lars-Peter Clausen <lars at metafoo.de> wrote:
> On 11/10/2015 06:12 PM, Caleb Crome wrote:
>> Hi again,
>>   I have a system that has separate DACs and ADCs, as opposed to
>> bidirectional CODECS.
>>
>> The ADCs have a snd_soc_dai_driver structure that have a .capture
>> field defined with a .rates parameter, and the DACs have a
>> snd_soc_dai_driver structure that have a .playback field defined with
>> a .rates parameter.
>>
>> However, the ADCs have no .playback.rates, and the DACs have no
>> .capture.rates. Even though the ADC can record at a given rate and the
>> DAC can play at that same rate, the soc_pcm_init_runtime_hw function
>> calculates the rates in this loop:
>>
>> ------------------------------
>>     /* first calculate min/max only for CODECs in the DAI link */
>>     for (i = 0; i < rtd->num_codecs; i++) {
>>         codec_dai_drv = rtd->codec_dais[i]->driver;
>>         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
>>             codec_stream = &codec_dai_drv->playback;
>>         else
>>             codec_stream = &codec_dai_drv->capture;
>>         chan_min = max(chan_min, codec_stream->channels_min);
>>         chan_max = min(chan_max, codec_stream->channels_max);
>>         rate_min = max(rate_min, codec_stream->rate_min);
>>         rate_max = min_not_zero(rate_max, codec_stream->rate_max);
>>         formats &= codec_stream->formats;
>>         rates = snd_pcm_rate_mask_intersect(codec_stream->rates, rates);
>>     }
>> ------------------------------
>>
>> which can't work out that one side is play only and the other is
>> record only, yet they do in fact have matching rates.  So, I get a "no
>> matching channels" error.
> [...]
>
> Try the latest asoc/for-next kernel. There is a patch[1] that addresses the
> issue.
>
> - Lars
>
> [1]
> http://git.kernel.org/cgit/linux/kernel/git/broonie/sound.git/commit/sound/soc/soc-pcm.c?h=for-next&id=cde79035c6cf578dd33dfea3e39666efc27cbcf2
>


More information about the Alsa-devel mailing list