ALSA: au88x0 - Modify pointer callback to give accurate playback position
Signed-off-by: Raymond Yau <superquad.vortex2@gmail.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
6146124118
commit
5e5677f239
1 changed files with 11 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue