提交 5e5677f2 编写于 作者: R Raymond Yau 提交者: Takashi Iwai

ALSA: au88x0 - Modify pointer callback to give accurate playback position

Signed-off-by: NRaymond Yau <superquad.vortex2@gmail.com>
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 61461241
...@@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) { ...@@ -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) static int inline vortex_adbdma_getlinearpos(vortex_t * vortex, int adbdma)
{ {
stream_t *dma = &vortex->dma_adb[adbdma]; stream_t *dma = &vortex->dma_adb[adbdma];
int temp; int temp, page, delta;
temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)); temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
temp = (dma->period_virt * dma->period_bytes) + (temp & (dma->period_bytes - 1)); page = (temp & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT;
return temp; 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) static void vortex_adbdma_startfifo(vortex_t * vortex, int adbdma)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册