Hi Mark,
Le 27/05/2010 02:56, Mark Brown a écrit :
On Wed, May 26, 2010 at 11:34:08AM +0200, Eric B?nard wrote:
while trying to get a TI TLV320AIC23B codec configured as I2S master to work with an i.MX27 using the latest git kernel, I noticed there may be a problem in the slave I2S setting in imx-ssi.c
Please find two captures of the I2S bus signals :
- http://eukrea.com/tmp/initial_i2s.png : this is not an I2S signal,
both left& right are sent while Frame Sync is high (so I only get mono output)
- http://eukrea.com/tmp/i2s_slave.png : when I set I2S_MODE to 0x2 in
SCR register (scr |= SSI_SCR_NET | 0x40; at line 101 of imx-ssi.c), thus setting the SSI in "I2S slave mode", I get a real I2S signal as shown on this capture.
What are these captures actually of? The current mainline driver does not support master mode so whatever you're capturing won't have been generated by the i.MX. If you've implemented master mode it'd be nice to post the patch for this...
the TLV320 is master thus generates clock and framesync the i.MX's SSI is slave thus send data (when playing sound) synchronized on framesync and clock provided by the TLV320.
The problem on the first capture is that the SSI send the data for both channels on one half of the framesync's period => codec outputs sound on only one channel.
By setting the mode to I2S_SLAVE, the SSI send the data the way the codec expect it : one channel when framesync is high and one channel when framesync is low.
Am I wrong here ? Shouldn't we use the I2S slave mode of the SSI instead of what is done actually ?
If I remember correctly the I2S slave mode isn't exactly I2S compliant either and is actually just setting up similar settings to override other registers. I could be wrong, or this could have changed in later i.MXs.
this is what is written in the comment, but in the iMX manual (at least 25 & 27), there is an I2S_SLAVE mode which seems to set more things than what is actually done in the driver as when I enable this, I get a perfect sound of both channels (and recording also works fine).
Eric