El Fri, Jan 05, 2018 at 12:04:55PM +0000 Mark Brown ha dit:
On Fri, Jan 05, 2018 at 11:45:43AM +0100, Arnaud Pouliquen wrote:
+ num-channels = <1>;
In your implementation seems not linked to hardware but software...
DMIC driver description specifies the channels_max to 8 channels. I suppose that it is used for DMIC codecs that integrate filters and are connected to CPU DAI with I2S/PCM links. But it can be also used for DMIC connected to CPU DAI with a SPI link (in this case decimation filter in on Soc side).
The intention with the DMIC CODEC is that it's used when the CPU directly has PDM inputs and the DMICs are just directly wired to it (stereo is obviously the norm here but some SoCs may bunch things up further for use with mic arrays).
If we continue to support both use cases, specify the number of channels seems reasonable but this should be use to change the max channel constraint, not to declare a control.
Yes, that would seem the most obvious thing - it's how we handle things like CPU DAIs that support very high channel counts when connected to stereo CODECs for example. It's not obvious why we'd use a channel map here instead.
Thanks for the feedback!
I experimented initially with changing channels_max, but overwriting dmic_dai.capture.channels_max didn't seem right since it would affect other possible instances of the codec. I overlooked that this can be avoided by passing a *copy* with adjusted channels_max to snd_soc_register_codec().
Matthias