
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.