diff options
author | Tony Lindgren <tony@atomide.com> | 2011-03-02 17:07:14 -0800 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-03-02 17:07:14 -0800 |
commit | 12d7d4e0ed8fecf7f74c89483b55b300be6e5901 (patch) | |
tree | f573761ac752ff04ec445e23aef50adadda49790 /sound/pci/au88x0/au88x0_core.c | |
parent | aca6ad073ea820776bf5bdb87cf82eace35042c8 (diff) | |
parent | 790ab7e92bec24aee3939b300d36b99ab2e3f3ca (diff) | |
download | kernel_samsung_smdk4412-12d7d4e0ed8fecf7f74c89483b55b300be6e5901.zip kernel_samsung_smdk4412-12d7d4e0ed8fecf7f74c89483b55b300be6e5901.tar.gz kernel_samsung_smdk4412-12d7d4e0ed8fecf7f74c89483b55b300be6e5901.tar.bz2 |
Merge branch 'devel-cleanup' into omap-for-linus
Conflicts:
arch/arm/mach-omap2/timer-gp.c
Diffstat (limited to 'sound/pci/au88x0/au88x0_core.c')
-rw-r--r-- | sound/pci/au88x0/au88x0_core.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c index 23f49f3..16c0bdf 100644 --- a/sound/pci/au88x0/au88x0_core.c +++ b/sound/pci/au88x0/au88x0_core.c @@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) { static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma) { stream_t *dma = &vortex->dma_adb[adbdma]; - int temp; + int temp, page, delta; temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)); - temp = (dma->period_virt * dma->period_bytes) + (temp & (dma->period_bytes - 1)); - return temp; + page = (temp & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT; + if (dma->nr_periods >= 4) + delta = (page - dma->period_real) & 3; + else { + delta = (page - dma->period_real); + if (delta < 0) + delta += dma->nr_periods; + } + return (dma->period_virt + delta) * dma->period_bytes + + (temp & (dma->period_bytes - 1)); } static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma) |