Message ID | 200906101112.32635.peter.ujfalusi@nokia.com (mailing list archive) |
---|---|
State | Awaiting Upstream, archived |
Headers | show |
Hi Peter, Wednesday 10 June 2009 10:12:32 Peter Ujfalusi napisał(a): > On Tuesday 09 June 2009 18:17:42 ext Janusz Krzysztofik wrote: > > +static struct omap_mcbsp_reg_cfg mcbsp_regs = { > > + .spcr2 = FREE | XINTM(3) | XRST, > > + .spcr1 = RINTM(3) | RRST, > > + .rcr1 = RFRLEN1(2 - 1) | RWDLEN1(OMAP_MCBSP_WORD_8), > > + .xcr1 = XFRLEN1(1 - 1) | XWDLEN1(OMAP_MCBSP_WORD_16), > > +}; > > > > BTW, I can't see any way of specifying a similiar mcbsp setup in new > > omap asoc framework. > > Yeah, 8 bit is not supported - in fact only 16 bit is supported - with ASoC > on OMAP. Not only this. AFAICS, there is no way of specifying single phase stereo (with XPHASE/RPHASE unset), 2 words per frame (XFRLEN1/RFRLEN1(2 - 1)). Isn't this required for correct DSP_A/DSP_B support? > But you should be able to use the playback with the current ASoC. Definitelly yes. I am aware that the above limitations have nothing to do with the main problem, as with current mcbsp code I should always be able to get some kind of noise at least using one of supported formats, as far as clocking is set up correctly. > --- a/arch/arm/plat-omap/dma.c > +++ b/arch/arm/plat-omap/dma.c > @@ -266,6 +266,8 @@ void omap_set_dma_transfer_params(int lch, int > data_type, int elem_count, > ccr &= ~(1 << 5); > if (sync_mode == OMAP_DMA_SYNC_FRAME) > ccr |= 1 << 5; > + if (dma_trigger) > + ccr |= dma_trigger & 0x1f; > dma_write(ccr, CCR(lch)); > > ccr = dma_read(CCR2(lch)); Applied, sorry, did not help (with capture, unlike playback, set up for internal clocking for as much device isolation as possible). # aplay -D hw:0,0 -f S16_LE /dev/urandom Playing raw data '/dev/urandom' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono omap_pcm_trigger START: DMA pointer at 0x11d4a0d0 omap_pcm_trigger STOP: DMA pointer at 0x11d4a0d0 error # arecord -D hw:0,0 -f S16_LE -t raw /dev/null Recording raw data '/dev/null' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono omap_pcm_trigger START: DMA pointer at 0xe101a0d0 arecord: pcm_read:1529: read error: Input/output error omap_pcm_trigger STOP: DMA pointer at 0xe101a0d0 # cat /dev/urandom >/dev/dsp omap_pcm_trigger START: DMA pointer at 0x11d4a0d0 cat: write error: Input/output error omap_pcm_trigger STOP: DMA pointer at 0x11d4a0d0 # cat /dev/dsp >/dev/null omap_pcm_trigger START: DMA pointer at 0xe101a0d0 cat: read error: Input/output eromap_pcm_trigger STOP: DMA pointer at 0xe101a0d0 ror # BTW, I have found that, when invoked with those "-D hw:0,0 -f SE16_LE" options, aplay/arecord behave correctly, exactly as Mark has pointed out once at the beginning of this huge thread, stopping themselves after 10 seconds with an error message, without need for ^C. > I would expected that by just copying (I know that there are other things > involved) the old ALSA arm directory to the latest kernel and compiling it > should be working... It seams I was wrong. Anyway, if you find porting one or another framework, back or forward, helpfull in any way, just let me know, I can try. Thanks, Janusz -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c @@ -266,6 +266,8 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, ccr &= ~(1 << 5); if (sync_mode == OMAP_DMA_SYNC_FRAME) ccr |= 1 << 5; + if (dma_trigger) + ccr |= dma_trigger & 0x1f; dma_write(ccr, CCR(lch));