On Sun, 28 Jun 2009 00:21:05 +0200 Janusz Krzysztofik jkrzyszt@tis.icnet.pl wrote:
This patch tries to work around the problem of broken OMAP1510 PCM playback pointer calculation by replacing DMA function call that incorrectly tries to read the value form DMA hardware with a value computed locally from an already maintained variable omap_runtime_data.period_index.
Tested on OMAP5910 based Amstrad Delta (E3) using work in progress ASoC driver.
Based on linux-2.6-asoc.git v2.6.31-rc1.
Signed-off-by: Janusz Krzysztofik jkrzyszt@tis.icnet.pl
It seems that on OMAP1510, DMA Channel Progress Counter registers (DMA_CPC_CH[0-8]) always contain values derived from DMA channels destination port address, even if constant, and there are no DMA registers available that would follow DMA channels source port address. Because of this limitation, current implementation of omap_get_dma_src_pos() for OMAP1510 is broken and doesn't seem to be easy correctable.
Hi
Before going into workaround, did you try to change function omap_get_dma_src_pos to read CSSA_L instead of CPC in arch/arm/plat-omap/dma.c that I was speculating in mail below?
http://mailman.alsa-project.org/pipermail/alsa-devel/2009-June/018569.html
While CPC seems to be correct [1], you mentioned before that patch below broke the older ALSA driver so it's worth to find out if the problem can be corrected by simple one line fix (or two if omap_get_dma_dst_pos need to be fixed as well).
http://marc.info/?l=linux-omap&m=121280267705523