mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 17:24:17 +08:00
ALSA: hdspm - Fix buffer handling on RME MADI/MADIface/AES(32)
Only RayDAT and AIO provide sane buffer pointers that can be used with HDSPM_BufferPositionMask, on all other cards, this would result in a wrong HW pointer leading to xruns and these messages: [260808.916788] BUG: pcmC0D0p:0, pos = 2976, buffer size = 1024, period size = 512 [260808.961124] BUG: pcmC0D0c:0, pos = 4944, buffer size = 1024, period size = 512 Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
432d2500ac
commit
483cee77d2
@ -1231,8 +1231,17 @@ static snd_pcm_uframes_t hdspm_hw_pointer(struct hdspm *hdspm)
|
||||
int position;
|
||||
|
||||
position = hdspm_read(hdspm, HDSPM_statusRegister);
|
||||
position &= HDSPM_BufferPositionMask;
|
||||
position /= 4; /* Bytes per sample */
|
||||
|
||||
switch (hdspm->io_type) {
|
||||
case RayDAT:
|
||||
case AIO:
|
||||
position &= HDSPM_BufferPositionMask;
|
||||
position /= 4; /* Bytes per sample */
|
||||
break;
|
||||
default:
|
||||
position = (position & HDSPM_BufferID) ?
|
||||
(hdspm->period_bytes / 4) : 0;
|
||||
}
|
||||
|
||||
return position;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user