* imx-ssi.c & SND_SOC_DAIFMT_I2S
@ 2010-05-26 9:34 Eric Bénard
2010-05-26 10:37 ` Sascha Hauer
2010-05-27 0:56 ` Mark Brown
0 siblings, 2 replies; 8+ messages in thread
From: Eric Bénard @ 2010-05-26 9:34 UTC (permalink / raw)
To: Sascha Hauer; +Cc: alsa-devel
Hi Sascha,
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.
I understand the actual I2S configuration may work with the Freescale's
PMIC but this chipset may not be fully I2S compliant and I think that
the actual setting prevent real I2S codecs from being used with the i.MX.
Am I wrong here ?
Shouldn't we use the I2S slave mode of the SSI instead of what is done
actually ?
Thanks and best regards,
Eric
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-26 9:34 imx-ssi.c & SND_SOC_DAIFMT_I2S Eric Bénard
@ 2010-05-26 10:37 ` Sascha Hauer
2010-05-26 12:41 ` Eric Bénard
2010-05-27 0:56 ` Mark Brown
1 sibling, 1 reply; 8+ messages in thread
From: Sascha Hauer @ 2010-05-26 10:37 UTC (permalink / raw)
To: Eric Bénard; +Cc: alsa-devel
Hi Eric,
On Wed, May 26, 2010 at 11:34:08AM +0200, Eric Bénard wrote:
> Hi Sascha,
>
> 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.
>
> I understand the actual I2S configuration may work with the Freescale's
> PMIC but this chipset may not be fully I2S compliant and I think that
> the actual setting prevent real I2S codecs from being used with the i.MX.
>
> Am I wrong here ?
> Shouldn't we use the I2S slave mode of the SSI instead of what is done
> actually ?
I just had a look at the oscilloscope. For me it seems to make no
difference whether I use I2S mode or what is done in current driver.
Both look like your second picture.
So we can change it if there are no other objections.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-26 10:37 ` Sascha Hauer
@ 2010-05-26 12:41 ` Eric Bénard
0 siblings, 0 replies; 8+ messages in thread
From: Eric Bénard @ 2010-05-26 12:41 UTC (permalink / raw)
To: Sascha Hauer; +Cc: alsa-devel
Hi Sascha,
Le 26/05/2010 12:37, Sascha Hauer a écrit :
> I just had a look at the oscilloscope. For me it seems to make no
> difference whether I use I2S mode or what is done in current driver.
> Both look like your second picture.
strange, here that's not the case, if I don't add this, I get the first
picture (left & right data on the same frame half period).
One thing : I'm using i.MX27's SSI port 4 which may be "special" as it
can be host or device port, do you think this could make a difference vs
your configuration ?
Eric
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-26 9:34 imx-ssi.c & SND_SOC_DAIFMT_I2S Eric Bénard
2010-05-26 10:37 ` Sascha Hauer
@ 2010-05-27 0:56 ` Mark Brown
2010-05-27 1:15 ` Eric Bénard
1 sibling, 1 reply; 8+ messages in thread
From: Mark Brown @ 2010-05-27 0:56 UTC (permalink / raw)
To: Eric B?nard; +Cc: Sascha Hauer, alsa-devel
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...
> 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.
Most of the generic serial ports with an I2S mode aren't actually doing
proper I2S but are rather configuring things that look close to it -
it's common for them to not be able to tolerate extra BCLKs, for
example.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-27 0:56 ` Mark Brown
@ 2010-05-27 1:15 ` Eric Bénard
2010-05-27 1:54 ` Mark Brown
2010-06-23 10:15 ` imx-ssi.c & SND_SOC_DAIFMT_I2S anilkumar
0 siblings, 2 replies; 8+ messages in thread
From: Eric Bénard @ 2010-05-27 1:15 UTC (permalink / raw)
To: Mark Brown; +Cc: Sascha Hauer, alsa-devel
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-27 1:15 ` Eric Bénard
@ 2010-05-27 1:54 ` Mark Brown
2010-06-23 10:15 ` imx-ssi.c & SND_SOC_DAIFMT_I2S anilkumar
1 sibling, 0 replies; 8+ messages in thread
From: Mark Brown @ 2010-05-27 1:54 UTC (permalink / raw)
To: Eric Bénard; +Cc: Sascha Hauer, alsa-devel
On Thu, May 27, 2010 at 03:15:51AM +0200, Eric Bénard wrote:
> 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.
Right, this is the thing I was saying about being unable to tolerate
extra BCLKs when in I2S mode. In general with these generic serial
ports you're much better off using one of the DSP modes, it's what they
naturally implement.
> >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).
That register is present in later i.MX CPUs too, the issue is if it
actually does what is expected robustly.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: imx-ssi.c & SND_SOC_DAIFMT_I2S
2010-05-27 1:15 ` Eric Bénard
2010-05-27 1:54 ` Mark Brown
@ 2010-06-23 10:15 ` anilkumar
2010-06-23 10:28 ` Eric Bénard
1 sibling, 1 reply; 8+ messages in thread
From: anilkumar @ 2010-06-23 10:15 UTC (permalink / raw)
To: alsa-devel
Hi Eric,
I am using the same Devices i.mx27 ssi as a slave and tlv320aic33 as a master.
I am getting the bit clock and word clock but I am not getting the data when I
play using aplay command and it is giving the underrun error.
I am using the linux-2.6.32 kernel
I am giving here the register dump.
mx27# aplay test_file.wav
dump @ imx_ssi_startup
STX0 0
STX1 0
scr 0
sisr 3003
stcr 200
srcr 200
stccr 40000
srccr 40000
sfcsr 440044
stmsk 0
srmsk 0
sier 3003
Playing WAVE 'test_file.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
dump @ imx_ssi_prepare
STX0 0
STX1 0
scr 50
sisr 3003
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
dump @ dma_new_period
STX0 0
STX1 0
scr 50
sisr 3003
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
dump @ dma_new_period
STX0 0
STX1 0
scr 50
sisr 3003
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
dump @ imx_ssi_trigger
STX0 0
STX1 0
scr 53
sisr 3001
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
dump @ audio_dma_irq
STX0 0
STX1 0
scr 53
sisr 3001
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
dump @ imx_ssi_trigger
STX0 0
STX1 0
scr 51
sisr 3001
stcr 289
srcr 289
stccr 4e000
srccr 4e000
sfcsr 440044
stmsk 0
srmsk 0
sier 783503
underrun!!! (at least 2.738 ms long)
underrun!!! (at least 2.329 ms long)
underrun!!! (at least 9.367 ms long)
underrun!!! (at least 8.608 ms long)
underrun!!! (at least 5.143 ms long)
underrun!!! (at least 9.898 ms long)
underrun!!! (at least 10.871 ms long)
underrun!!! (at least 2.419 ms long)
underrun!!! (at least 7.744 ms long)
underrun!!! (at least 1.232 ms long)
underrun!!! (at least 9.252 ms long)
underrun!!! (at least 11.574 ms long)
underrun!!! (at least 0.977 ms long)
underrun!!! (at least 2.145 ms long)
underrun!!! (at least 0.123 ms long)
underrun!!! (at least 0.246 ms long)
underrun!!! (at least 9.592 ms long)
underrun!!! (at least 5.880 ms long)
underrun!!! (at least 10.787 ms long)
underrun!!! (at least 10.750 ms long)
underrun!!! (at least 1.000 ms long)
underrun!!! (at least 2.313 ms long)
underrun!!! (at least 7.890 ms long)
underrun!!! (at least 10.555 ms long)
underrun!!! (at least 8.590 ms long)
underrun!!! (at least 8.882 ms long)
underrun!!! (at least 8.340 ms long)
underrun!!! (at least 10.537 ms long)
underrun!!! (at least 11.060 ms long)
underrun!!! (at least 8.724 ms long)
underrun!!! (at least 2.152 ms long)
underrun!!! (at least 8.223 ms long)
underrun!!! (at least 11.946 ms long)
underrun!!! (at least 5.138 ms long)
underrun!!! (at least 20.275 ms long)
underrun!!! (at least 13.806 ms long)
underrun!!! (at least 0.882 ms long)
underrun!!! (at least 5.893 ms long)
underrun!!! (at least 6.395 ms long)
underrun!!! (at least 5.790 ms long)
underrun!!! (at least 11.237 ms long)
underrun!!! (at least 9.248 ms long)
underrun!!! (at least 7.412 ms long)
underrun!!! (at least 9.083 ms long)
underrun!!! (at least 0.182 ms long)
underrun!!! (at least 3.309 ms long)
underrun!!! (at least 9.153 ms long)
underrun!!! (at least 9.418 ms long)
underrun!!! (at least 8.878 ms long)
underrun!!! (at least 6.878 ms long)
underrun!!! (at least 9.293 ms long)
underrun!!! (at least 8.395 ms long)
underrun!!! (at least 9.006 ms long)
underrun!!! (at least 9.996 ms long)
underrun!!! (at least 0.635 ms long)
underrun!!! (at least 10.810 ms long)
underrun!!! (at least 10.753 ms long)
underrun!!! (at least 1.756 ms long)
underrun!!! (at least 1.574 ms long)
imx_dma_free: trying to free free channel 8
mx27#
Please send me the configuration [if any changes] from i.mx ssi slave and
tlv320aic33.
Thanks & Regards,
Anil.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2010-06-23 10:28 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-26 9:34 imx-ssi.c & SND_SOC_DAIFMT_I2S Eric Bénard
2010-05-26 10:37 ` Sascha Hauer
2010-05-26 12:41 ` Eric Bénard
2010-05-27 0:56 ` Mark Brown
2010-05-27 1:15 ` Eric Bénard
2010-05-27 1:54 ` Mark Brown
2010-06-23 10:15 ` imx-ssi.c & SND_SOC_DAIFMT_I2S anilkumar
2010-06-23 10:28 ` Eric Bénard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).