aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/au88x0/au88x0_core.c
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2011-03-02 17:07:14 -0800
committerTony Lindgren <tony@atomide.com>2011-03-02 17:07:14 -0800
commit12d7d4e0ed8fecf7f74c89483b55b300be6e5901 (patch)
treef573761ac752ff04ec445e23aef50adadda49790 /sound/pci/au88x0/au88x0_core.c
parentaca6ad073ea820776bf5bdb87cf82eace35042c8 (diff)
parent790ab7e92bec24aee3939b300d36b99ab2e3f3ca (diff)
downloadkernel_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.c14
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)