On 06/03/2015 01:06 PM, Ricard Wanderlof wrote:
Hi,
I'm developing a machine driver for a system where we have two different codecs for input and output, connected to the same I2S interface. Normally a machine driver specifies which codec the I2S interface is connected to, but in this case there should really be two different ones, one for record and one for playback. I'm working on how to put this together, and just thought I'd try and get some input before going too far down the wrong track. The options I see are:
- Specify two different codecs in the machine driver. Since one can
specify several dai_links this would seem to be doable, however, I'm not sure ALSA can handle two codecs sharing a single CPU DAI in this way?
- Use two separate machine drivers, one for each codec? Again, sharing a
single CPU DAI would seem to be an issue here?
- Write a special codec driver that is a merge between the two codecs,
one for input and one for output. Seems like a bit of a hack, but should be possible.
Any spontaneous thoughts?
Hi,
There has been support for multiple CODECs on the same DAI link for a while now. Have a look at http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=88....
Instead of setting the codec_name/codec_dai_name fields in the dai_link create a snd_soc_link_component array with a entry for each of the CODECs and assign that to the codecs field in the DAI link.
I'm not too sure how well it works if one CODEC is playback only and the other is capture only and there might be some issues. But this is the way to go and if there are problems fix them.
- Lars