[alsa-devel] [PATCH 1/2] ASoC: fsl_ssi: Let it understand mono
timur at freescale.com
Mon Sep 24 15:50:41 CEST 2012
Mark Brown wrote:
> In I2S mono just means ignoring the right channel or duplicating the
> left channel into the right channel at one end of the link or the other.
> As you say the clocking always has to be for an even number of channels.
Let me see if I understand this correctly. In order for I2S mono to work,
we need the following:
1) The I2S controller (the SSI in this case) needs to be programmed to DMA
data from memory into the left channel only of each frame, and it needs to
pump dummy data into the right channel. If it automatically pumps the
same data into the right channel, then the codec doesn't need to do
anything. Otherwise, we need one of these:
2a) The codec needs to be programmed to ignore the right channel and
internally duplicate the left channel into both left and right analog signals.
2b) The board needs to be wired such that only the left analog signal gets
routed to the speakers.
For item #1, as far as I know, there is only one way to get the SSI to do
that: use dual-FIFO mode. The "left" FIFO points to the audio data as
normal, and the right FIFO points to whatever. If the right FIFO also
points to the same audio data, then we don't need any codec changes.
I can say for certain that fsl_ssi.c does not implement dual-FIFO mode. I
considered it once, but I figured it wasn't worth the effort. Getting it
to work for audio capture would be difficult, and the feature must be
enabled for both capture and playback. I don't think I could support
simultaneous playback and capture in dual-FIFO mode.
I do not see any code in imx-ssi.c that enables dual-FIFO mode. This
would be done by setting SSI_SCR_TCH_EN in the SCR, and I don't see that
bit being set anywhere.
So unless there's some hackery happening on the mx6qsabrelite board, I
can't believe that any of these patches actually work.
Linux kernel developer at Freescale
More information about the Alsa-devel