All of lore.kernel.org
 help / color / mirror / Atom feed
* WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-24 17:06 Rick Bronson
  2009-09-24 17:26 ` Mark Brown
                   ` (3 more replies)
  0 siblings, 4 replies; 17+ messages in thread
From: Rick Bronson @ 2009-09-24 17:06 UTC (permalink / raw)
  To: alsa-devel

Hi,

  I'm working on getting a WM8731 (in SLAVE) working using I2S on
omap3 McBSP2 (in MASTER).

Here is the hardware:

http://www.efn.org/~rick/pub/wm8731.jpg

  Here are the PADCONF's and the pins they hook to on the WM8731:

 /*Audio Interface for csb740 */\
 MUX_VAL(CP(McBSP2_FSX),  (OFF_OUT_PD | IDIS | PTU | EN | M0)) /* McBSP2_FSX -> I2S_FRM -> LRCLK -> DACLRC and ADCLRC*/\
 MUX_VAL(CP(McBSP2_CLKX), (OFF_OUT_PD | IDIS | PTU | EN | M0)) /* McBSP2_CLKX -> I2S_CLK -> I2S_BCLK -> BCLK */\
 MUX_VAL(CP(McBSP2_DR),   (OFF_IN_PD  | IEN  | PTD | DIS | M0)) /* McBSP2_DR <- I2S_RXD <- ACDDAT */\
 MUX_VAL(CP(McBSP2_DX),   (OFF_OUT_PD | IDIS | PTU | EN | M0)) /* McBSP2_DX -> I2S_TXD -> DACDAT */\
 MUX_VAL(CP(McBSP_CLKS),  (OFF_IN_PD  | IEN  | PTD | DIS | M0)) /* McBSP_CLKS <- I2S_MCLK <- CLKOUT */\

 My kernel is "2.6.29-rc3-omap1", here's what I see at bootup:

1 WM8731 Audio Codec 0.13<6>asoc: WM8731 <-> omap-mcbsp-dai-0 mapping ok
2 ALSA device list:
3  #0: omap3csb740 (WM8731)
...
4 beagle:~# aplay test48000.wav
5 Playing WAVE 'test48000.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
6 aplay: pcm_write:1269: write error: Input/output error

  I get no audio output, other than a "click" when the 8731 is
initialized upon boot.  When I look at the signals the McBSP2_DX line
just goes low for the duration of the "aplay", it does not toggle. The
other lines look fine.  The file is at
http://www.efn.org/~rick/pub/omap3csb740.c but roughly, here's what
I'm doing:

static struct snd_soc_dai_link omap3csb740_dai = {
...
 .cpu_dai = &omap_mcbsp_dai[0], /* use 1st one */

static int __init omap3csb740_soc_init(void)
...
 *(unsigned int *)omap_mcbsp_dai[0].private_data = 1; /* McBSP2 */
 *(unsigned int *)omap3csb740_dai.cpu_dai->private_data = 1; /* McBSP2 debug only? */

static int omap3csb740_hw_params(struct snd_pcm_substream *substream,
...
 ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
  SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
 ret = snd_soc_dai_set_fmt(cpu_dai,  SND_SOC_DAIFMT_I2S |
  SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
 ret = snd_soc_dai_set_sysclk(codec_dai, 0, 12288000,   SND_SOC_CLOCK_IN);
 ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
   SND_SOC_CLOCK_IN);
 ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, 256);

  Any help is greatly appreciated.

  Rick Bronson

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 17:06 WM8731 using I2S on omap3 McBSP2 issues Rick Bronson
@ 2009-09-24 17:26 ` Mark Brown
  2009-09-24 18:00 ` Rick Bronson
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 17+ messages in thread
From: Mark Brown @ 2009-09-24 17:26 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel

On Thu, Sep 24, 2009 at 10:06:07AM -0700, Rick Bronson wrote:

>  MUX_VAL(CP(McBSP_CLKS),  (OFF_IN_PD  | IEN  | PTD | DIS | M0)) /* McBSP_CLKS <- I2S_MCLK <- CLKOUT */\

...

> 5 Playing WAVE 'test48000.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
> 6 aplay: pcm_write:1269: write error: Input/output error

This suggests that the DMA isn't happening which usually means that the
CPU isn't seeing all the clocks it's supposed to.  I'm not familiar
enough with the OMAP internals to know if you've set the CPU up
properly.

>   I get no audio output, other than a "click" when the 8731 is
> initialized upon boot.  When I look at the signals the McBSP2_DX line
> just goes low for the duration of the "aplay", it does not toggle. The
> other lines look fine.  The file is at

If you try a record then does the ADCDAT line show a signal?

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 17:06 WM8731 using I2S on omap3 McBSP2 issues Rick Bronson
  2009-09-24 17:26 ` Mark Brown
@ 2009-09-24 18:00 ` Rick Bronson
  2009-09-24 18:52   ` Mark Brown
  2009-09-24 22:37 ` Rick Bronson
  2009-09-25  6:03 ` Peter Ujfalusi
  3 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-24 18:00 UTC (permalink / raw)
  To: alsa-devel

Mark,

> This suggests that the DMA isn't happening which usually means that the
> CPU isn't seeing all the clocks it's supposed to.  I'm not familiar
> enough with the OMAP internals to know if you've set the CPU up
> properly.

  I've poured over the relavent code for this and am pretty sure I
don't need to touch it.  The same code works on the beagleboard, at
least the DMA part.  But you never know...

> >   I get no audio output, other than a "click" when the 8731 is
> > initialized upon boot.  When I look at the signals the McBSP2_DX line
> > just goes low for the duration of the "aplay", it does not toggle. The
> > other lines look fine.  The file is at
> 
> If you try a record then does the ADCDAT line show a signal?

  I tried this and the ADCDAT does show a signal.  See
http://www.efn.org/~rick/pub/win10586.jpg  The bottom five traces are
as follows:

McBSP2_CLKX -> I2S_CLK -> I2S_BCLK -> BCLK */\
McBSP2_FSX -> I2S_FRM -> LRCLK -> DACLRC and ADCLRC*/\
McBSP2_DR <- I2S_RXD <- ACDDAT */\
McBSP_CLKS <- I2S_MCLK <- CLKOUT */\
McBSP2_DX -> I2S_TXD -> DACDAT */\

  BTW, when I do a aplay, the trace looks the same except ACDDAT is
low.

  I still get a write error though:

beagle:~# arecord -t wav -f cd -d 1500 dar.wav                                  
Recording WAVE 'dar.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo   
arecord: pcm_read:1348: read error: Input/output error                          

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 18:00 ` Rick Bronson
@ 2009-09-24 18:52   ` Mark Brown
  0 siblings, 0 replies; 17+ messages in thread
From: Mark Brown @ 2009-09-24 18:52 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel

On Thu, Sep 24, 2009 at 11:00:52AM -0700, Rick Bronson wrote:
> Mark,

> > This suggests that the DMA isn't happening which usually means that the
> > CPU isn't seeing all the clocks it's supposed to.  I'm not familiar
> > enough with the OMAP internals to know if you've set the CPU up
> > properly.

>   I've poured over the relavent code for this and am pretty sure I
> don't need to touch it.  The same code works on the beagleboard, at
> least the DMA part.  But you never know...

You shouldn't need to touch the DMA code itself, it's normally an issue
with the clocks and/or the pinmux code not managing to get the signals
required to clock the data transfer.

>   BTW, when I do a aplay, the trace looks the same except ACDDAT is
> low.

Yes, that's what I'd expect - this was just an attempt to confirm that
the CODEC is happy.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 17:06 WM8731 using I2S on omap3 McBSP2 issues Rick Bronson
  2009-09-24 17:26 ` Mark Brown
  2009-09-24 18:00 ` Rick Bronson
@ 2009-09-24 22:37 ` Rick Bronson
  2009-09-25  5:53   ` Mark Brown
  2009-09-25  6:03 ` Peter Ujfalusi
  3 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-24 22:37 UTC (permalink / raw)
  To: alsa-devel


> You shouldn't need to touch the DMA code itself, it's normally an issue
> with the clocks and/or the pinmux code not managing to get the signals
> required to clock the data transfer.

  I noticed the dma code has been changed from what I have.

  Also noticed that the beagleboard is getting DMA interrupts when I
"aplay":

cat /proc/interrupts | grep DMA

 12:       4646        INTC  DMA   

  but I'm not.  As I mentioned, I'm at "2.6.29-rc3-omap1", anyone
think there is a problem with pcm DMA's in that version?

  Thanks

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 22:37 ` Rick Bronson
@ 2009-09-25  5:53   ` Mark Brown
  0 siblings, 0 replies; 17+ messages in thread
From: Mark Brown @ 2009-09-25  5:53 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel

On Thu, Sep 24, 2009 at 03:37:28PM -0700, Rick Bronson wrote:

>   Also noticed that the beagleboard is getting DMA interrupts when I
> "aplay":

> cat /proc/interrupts | grep DMA

>  12:       4646        INTC  DMA   

That's just the same symptom - the I/O error that aplay reports is a
lack of interrupts reporting that audio is moving through the system.

>   but I'm not.  As I mentioned, I'm at "2.6.29-rc3-omap1", anyone
> think there is a problem with pcm DMA's in that version?

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-24 17:06 WM8731 using I2S on omap3 McBSP2 issues Rick Bronson
                   ` (2 preceding siblings ...)
  2009-09-24 22:37 ` Rick Bronson
@ 2009-09-25  6:03 ` Peter Ujfalusi
  2009-09-25  9:12   ` Peter Ujfalusi
  3 siblings, 1 reply; 17+ messages in thread
From: Peter Ujfalusi @ 2009-09-25  6:03 UTC (permalink / raw)
  To: ext Rick Bronson; +Cc: alsa-devel@alsa-project.org

Hello,

On Thursday 24 September 2009 20:06:07 ext Rick Bronson wrote:
> Hi,
> 
>   I'm working on getting a WM8731 (in SLAVE) working using I2S on
> omap3 McBSP2 (in MASTER).

 
> static int omap3csb740_hw_params(struct snd_pcm_substream *substream,
> ...
>  ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
>   SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
>  ret = snd_soc_dai_set_fmt(cpu_dai,  SND_SOC_DAIFMT_I2S |
>   SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
>  ret = snd_soc_dai_set_sysclk(codec_dai, 0, 12288000,   SND_SOC_CLOCK_IN);
>  ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
>    SND_SOC_CLOCK_IN);

I think the problem is here.
The MCBSP_CLKS pin is connected to CLK256FS pin of TWL4030 (or TPA).
Since you are not using the TWL codec, there will be no clock on the MCBSP_CLKS 
pin, thus no functional clock for McBSP, thus no bits are shifted in or out.
You can try to use the internal functional clock:

  ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_FCLK, 0,
    SND_SOC_CLOCK_IN);

Than set the correct divider, which depends on the frequency you would like to 
play. The source for the CLKS_FCLK is (in case of McBSP2) PER_96M_FCLK, so 
96MHz. Now you have to divide this to get the correct value, as I recall quite a 
long time ago there were some discussion about this here, and I have sent some 
'formula' to calculate it, but I can not find it now :(

>  ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, 256);
> 
>   Any help is greatly appreciated.
> 
>   Rick Bronson
> 

-- 
Péter

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-25  6:03 ` Peter Ujfalusi
@ 2009-09-25  9:12   ` Peter Ujfalusi
  0 siblings, 0 replies; 17+ messages in thread
From: Peter Ujfalusi @ 2009-09-25  9:12 UTC (permalink / raw)
  To: alsa-devel; +Cc: ext Rick Bronson

On Friday 25 September 2009 09:03:06 Ujfalusi Peter (Nokia-D/Tampere) wrote:
> Hello,
> 
> On Thursday 24 September 2009 20:06:07 ext Rick Bronson wrote:
> > Hi,
> >
> >   I'm working on getting a WM8731 (in SLAVE) working using I2S on
> > omap3 McBSP2 (in MASTER).
> >
> >
> > static int omap3csb740_hw_params(struct snd_pcm_substream *substream,
> > ...
> >  ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
> >   SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
> >  ret = snd_soc_dai_set_fmt(cpu_dai,  SND_SOC_DAIFMT_I2S |
> >   SND_SOC_DAIFMT_NB_NF |  SND_SOC_DAIFMT_CBS_CFS);
> >  ret = snd_soc_dai_set_sysclk(codec_dai, 0, 12288000,  
> > SND_SOC_CLOCK_IN); ret = snd_soc_dai_set_sysclk(cpu_dai,
> > OMAP_MCBSP_SYSCLK_CLKS_EXT, 0, SND_SOC_CLOCK_IN);
> 
> I think the problem is here.
> The MCBSP_CLKS pin is connected to CLK256FS pin of TWL4030 (or TPA).

This applies for the Beagle board, which I thought that you are using that from 
this line:
> 4 beagle:~# aplay test48000.wav

Can you check that the clock is running between
CLKOUT (WM8731) -> McBSP_CLKS (OMAP3) pins?

If the clock is missing, than the functional clock is not running.

> Since you are not using the TWL codec, there will be no clock on the
>  MCBSP_CLKS pin, thus no functional clock for McBSP, thus no bits are
>  shifted in or out. You can try to use the internal functional clock:
> 
>   ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_FCLK, 0,
>     SND_SOC_CLOCK_IN);
> 
> Than set the correct divider, which depends on the frequency you would like
>  to play. The source for the CLKS_FCLK is (in case of McBSP2) PER_96M_FCLK,
>  so 96MHz. Now you have to divide this to get the correct value, as I
>  recall quite a long time ago there were some discussion about this here,
>  and I have sent some 'formula' to calculate it, but I can not find it now
>  :(
> 
> >  ret = snd_soc_dai_set_clkdiv(cpu_dai, OMAP_MCBSP_CLKGDV, 256);
> >
> >   Any help is greatly appreciated.
> >
> >   Rick Bronson
> 

-- 
Péter

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-25 14:30 Rick Bronson
  0 siblings, 0 replies; 17+ messages in thread
From: Rick Bronson @ 2009-09-25 14:30 UTC (permalink / raw)
  To: alsa-devel

Hi Peter,

  Thanks very much for the help.

> I think the problem is here.
> The MCBSP_CLKS pin is connected to CLK256FS pin of TWL4030 (or TPA).
> Since you are not using the TWL codec, there will be no clock on the MCBSP_CLKS
> pin, thus no functional clock for McBSP, thus no bits are shifted in or out.
> You can try to use the internal functional clock:
> 
>   ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_FCLK, 0,
>     SND_SOC_CLOCK_IN);

  I have checked the CLKOUT (WM8731) -> McBSP_CLKS (OMAP3) pin and it
has a 12288000 clock on it.  I've tried using the internal clock as
you show above, just to see if I get anything out on DX but I get the
same thing: DX just goes low for the "aplay" duration.

  Any idea why I'm not getting DMA interrupts?  This would indeed
cause no data at DX.  omap2_dma_irq_handler() never gets called but
omap_init_dma() and omap_start_dma() get called.  Do you think there
may be any issues with my DMA code (specifically
arch/arm/plat-omap/dma.c).  As I mentioned, I'm at "2.6.29-rc3-omap1"

  Thanks,

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-25 14:31 Rick Bronson
  2009-09-26  7:56 ` Jarkko Nikula
  0 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-25 14:31 UTC (permalink / raw)
  To: alsa-devel; +Cc: Peter Ujfalusi

Hi Peter,

  I forgot to tell you that if I deliberately misconfigure the
McBXP_CLKS pin so that it's an output, the FSX -> DACLRC/ADCLRC signal
stops.  This should indicate that the CLKOUT signal is actually making
it to the CLKS pin on the OMAP.  Right?

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-25 14:31 Rick Bronson
@ 2009-09-26  7:56 ` Jarkko Nikula
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Nikula @ 2009-09-26  7:56 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel, Peter Ujfalusi

On Fri, 25 Sep 2009 07:31:47 -0700
Rick Bronson <rick@efn.org> wrote:

> Hi Peter,
> 
>   I forgot to tell you that if I deliberately misconfigure the
> McBXP_CLKS pin so that it's an output, the FSX -> DACLRC/ADCLRC signal
> stops.  This should indicate that the CLKOUT signal is actually making
> it to the CLKS pin on the OMAP.  Right?
> 
Yes it is indicating so. I read through this thread I didn't find any
simple reason why it's not working. Your setup is similar with the
Pandora, i.e. McBSP functional clock is coming the codec and codec is
slave.

The McBSP is operating if the FSX and CLKX are toggling in this setup.
Is it so that you don't get any DMA interrupts or just few of them?
Your CLKGDV divisor value 256 means too low bit clock and sample rate
for both external 12.288 MHz and internal 96 MHz but still the DMA
should be running (if there is no bug with this divisor value).

Can you try divisor value 8 does it work then? For 48 kHz sample rate
with I2S you need a bit clock of 48 kHz*2*16 = 1.536 MHz and this you
get by dividing the 12.288 MHz with 8.


-- 
Jarkko

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-26 15:59 Rick Bronson
  2009-09-28  5:50 ` Jarkko Nikula
  0 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-26 15:59 UTC (permalink / raw)
  To: alsa-devel; +Cc: Peter Ujfalusi

Hi Peter,

> Yes it is indicating so. I read through this thread I didn't find any
> simple reason why it's not working. Your setup is similar with the
> Pandora, i.e. McBSP functional clock is coming the codec and codec is
> slave.

  Yes, I pretty much used the pandora as an example to write mine.

> The McBSP is operating if the FSX and CLKX are toggling in this setup.
> Is it so that you don't get any DMA interrupts or just few of them?

  I don't get any DMA int's:

~# cat /proc/interrupts                                                  
           CPU0                                                                 
 11:          0        INTC  prcm                                               
 12:          0        INTC  DMA                                                
 25:          0        INTC  dispc                                              
 37:       5003        INTC  gp timer                                           
 56:       3425        INTC  i2c_omap                                           
 62:          0        INTC  McBSP                                              
 63:          0        INTC  McBSP                                              


> Your CLKGDV divisor value 256 means too low bit clock and sample rate
> for both external 12.288 MHz and internal 96 MHz but still the DMA
> should be running (if there is no bug with this divisor value).
> Can you try divisor value 8 does it work then? For 48 kHz sample rate
> with I2S you need a bit clock of 48 kHz*2*16 = 1.536 MHz and this you
> get by dividing the 12.288 MHz with 8.
> 

  Yes, I had tried 8 before and just tried it now.  Same result.  It
really seems like there is a DMA issue.  Can you think of anything
else to try before I dive into the DMA code?

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-26 15:59 Rick Bronson
@ 2009-09-28  5:50 ` Jarkko Nikula
  0 siblings, 0 replies; 17+ messages in thread
From: Jarkko Nikula @ 2009-09-28  5:50 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel, Peter Ujfalusi

On Sat, 26 Sep 2009 08:59:52 -0700
Rick Bronson <rick@efn.org> wrote:

>   Yes, I had tried 8 before and just tried it now.  Same result.  It
> really seems like there is a DMA issue.  Can you think of anything
> else to try before I dive into the DMA code?
> 
Ok, that wasn't the reason.

Have you tried to reverse roles of codec and omap? I.e. by using
the codec as a master and omap as a slave with SND_SOC_DAIFMT_CBM_CFM.

I don't think there is any HW reason as you have seen the bit-clock and
frame sync signals toggling but I remember one case few years back
where codec had slight too high capacitive load on the bit-clock line.
That was then causing unstable frame sync as it was internally derived
directly from the bit-clock pin without any buffer. Bit-clock signal
looked just fine on oscilloscope but wasn't well enough for internal
circuits of the cpu.

So if assuming similar problem here, I could imagine that if the FSX is
used similar way directly inside the omap and if signal is not well
enough, the McBSP and DMA may not be running.

This migh be a bit far reason to look for but at least easy to try by
switching the roles as then the codec is driving the both bit-clock and
fs.


-- 
Jarkko

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-28 16:07 Rick Bronson
  2009-09-28 16:13 ` Mark Brown
  0 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-28 16:07 UTC (permalink / raw)
  To: alsa-devel; +Cc: Peter Ujfalusi

Hi Peter,

  Thanks for the help.

  I don't believe it's possible for me to try the master/slave switch.
Please take a look at http://www.efn.org/~rick/pub/wm8731.jpg Note
that DACLRC and ADCLRC are connected.  This requires me to run as
slave, right?  Our bit clock line is buffered so I don't think that
will be a problem.

  Rick

> >   Yes, I had tried 8 before and just tried it now.  Same result.  It
> > really seems like there is a DMA issue.  Can you think of anything
> > else to try before I dive into the DMA code?
> >
> Ok, that wasn't the reason.
> 
> Have you tried to reverse roles of codec and omap? I.e. by using
> the codec as a master and omap as a slave with SND_SOC_DAIFMT_CBM_CFM.
> 
> I don't think there is any HW reason as you have seen the bit-clock and
> frame sync signals toggling but I remember one case few years back
> where codec had slight too high capacitive load on the bit-clock line.
> That was then causing unstable frame sync as it was internally derived
> directly from the bit-clock pin without any buffer. Bit-clock signal
> looked just fine on oscilloscope but wasn't well enough for internal
> circuits of the cpu.
> 
> So if assuming similar problem here, I could imagine that if the FSX is
> used similar way directly inside the omap and if signal is not well
> enough, the McBSP and DMA may not be running.
> 
> This migh be a bit far reason to look for but at least easy to try by
> switching the roles as then the codec is driving the both bit-clock and
> fs.
> 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-28 16:07 Rick Bronson
@ 2009-09-28 16:13 ` Mark Brown
  0 siblings, 0 replies; 17+ messages in thread
From: Mark Brown @ 2009-09-28 16:13 UTC (permalink / raw)
  To: Rick Bronson; +Cc: alsa-devel, Peter Ujfalusi

On Mon, Sep 28, 2009 at 09:07:26AM -0700, Rick Bronson wrote:

>   I don't believe it's possible for me to try the master/slave switch.
> Please take a look at http://www.efn.org/~rick/pub/wm8731.jpg Note
> that DACLRC and ADCLRC are connected.  This requires me to run as
> slave, right?  Our bit clock line is buffered so I don't think that
> will be a problem.

Tying the DAC and ADC LRCLKs together should be fine in either master or
slave mode, I'd expect (but I am not a hardware engineer).

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
@ 2009-09-28 21:15 Rick Bronson
  2009-09-29  8:43 ` Peter Ujfalusi
  0 siblings, 1 reply; 17+ messages in thread
From: Rick Bronson @ 2009-09-28 21:15 UTC (permalink / raw)
  To: alsa-devel; +Cc: Peter Ujfalusi

Peter,

  I'm getting a XUNDFLSTAT (indicates a real underflow condition) and
XEMPTYEOF (Transmit buffer empty at end of frame) in
MCBSPLP_IRQSTATUS_REG.  Does this tell you anything?

  Rick

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: WM8731 using I2S on omap3 McBSP2 issues
  2009-09-28 21:15 Rick Bronson
@ 2009-09-29  8:43 ` Peter Ujfalusi
  0 siblings, 0 replies; 17+ messages in thread
From: Peter Ujfalusi @ 2009-09-29  8:43 UTC (permalink / raw)
  To: ext Rick Bronson; +Cc: alsa-devel@alsa-project.org

On Tuesday 29 September 2009 00:15:10 ext Rick Bronson wrote:
> Peter,
> 
>   I'm getting a XUNDFLSTAT (indicates a real underflow condition) and
> XEMPTYEOF (Transmit buffer empty at end of frame) in
> MCBSPLP_IRQSTATUS_REG.  Does this tell you anything?

Hmm, this actually means that the DMA is not filling the McBSP buffer.
Since there is no data written in the McBSP buffer, it is shifting out 0 which 
is what you have observed on the DX line (goes low for the duration of aplay).

I have used McBSP as master on 2.6.28 kernel and I can not recall any big 
changes regarding to OMAP McBSP/DMA in between 28 and 29, so I'm a bit puzzled 
on this...

> 
>   Rick
> 

-- 
Péter

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2009-09-29  8:43 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-24 17:06 WM8731 using I2S on omap3 McBSP2 issues Rick Bronson
2009-09-24 17:26 ` Mark Brown
2009-09-24 18:00 ` Rick Bronson
2009-09-24 18:52   ` Mark Brown
2009-09-24 22:37 ` Rick Bronson
2009-09-25  5:53   ` Mark Brown
2009-09-25  6:03 ` Peter Ujfalusi
2009-09-25  9:12   ` Peter Ujfalusi
  -- strict thread matches above, loose matches on Subject: below --
2009-09-25 14:30 Rick Bronson
2009-09-25 14:31 Rick Bronson
2009-09-26  7:56 ` Jarkko Nikula
2009-09-26 15:59 Rick Bronson
2009-09-28  5:50 ` Jarkko Nikula
2009-09-28 16:07 Rick Bronson
2009-09-28 16:13 ` Mark Brown
2009-09-28 21:15 Rick Bronson
2009-09-29  8:43 ` Peter Ujfalusi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.