[alsa-devel] ASoC driver for multi-codec sound device
Hi all,
we are currently working on an ASoC driver for a multi-codec sound device. The kernel we use is version 3.10.
Each codec has it's own I2C address and are connected via I2S to a single CPU DAI. We'd like to use the codecs in TDM mode later on, so we can use them as a single multi channel ALSA device. Currently we can use one codec in stereo mode with playback and capturing working using a device tree. We were able to get a second codec working (using the snd_soc_aux_dev structure in our driver) in so far we can see and use the codec's controls via alsamixer, however the codec seems to ignore the commands or does not receive any at all.
What we'd like to know:
1) How to we achieve proper initialisation of all codecs? More specifically, which function (ALSA side) or callback (codec side) is used to set up the codecs clocks (via I2C)?
2) As far as we know the driver we are building upon does not implement own PCM or DMA drivers. Is it necessary to do this on our own to get the codecs working in TDM mode? Also when working in I2S (stereo) mode on ALSA side, is it possible to tell ALSA to use more than 2 channels of the sound buffer? We currently have interleaved audio samples from more than one codec in our sound buffer (transferred by DMA) and we'd like to select a subset of these depending on how the sound device was opened (for example "arecord -c 2" vs. "arecord -c 4" and so on). Which are the audio sample order ALSA supports or expects, specifically in the case of more than 2 audio channels? (Interleaved "L0, L1, L2, ..., Ln, R0, R1, ..., Rn" vs. "L0, R0, L1, R1, ..., Ln, Rn")
3) If there is no custom DMA driver implemented how does the ALSA framework use the DMA controller? In which case do we need to write our own DMA driver? Are there possibilities to use the ALSA framework's internal DMA handling for our purposes?
4) How are PCM and DMA correlated in ALSA framework? Specifically, do the implementations depend on each other or are they independent, so we can for example implement a DMA driver and use ALSA's default PCM?
We're stuck with this, so we appreciate any kind of help pointing us in the right direction. If there are any required informations missing please don't hesitate to ask.
Thanks, Achim and Christopher
participants (1)
-
Christopher Seifert