[alsa-devel] imx-ssi.c & SND_SOC_DAIFMT_I2S

Eric Bénard eric at eukrea.com
Thu May 27 03:15:51 CEST 2010

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).


More information about the Alsa-devel mailing list