mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
ALSA: emu10k1: fix handling of half-loop interrupts
We'd try to iterate the voices twice without resetting the pointer. This went unnoticed, because the code isn't actually in use. Amends commit 27ae958cf6 ("emu10k1 driver - add multichannel device hw:x,3 [2-8/8]"). Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Link: https://lore.kernel.org/r/20230518093047.3697887-4-oswald.buddenhagen@gmx.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
9436f0151d
commit
6797400ef4
@ -47,12 +47,13 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id)
|
||||
status &= ~(IPR_VOLINCR|IPR_VOLDECR|IPR_MUTE);
|
||||
}
|
||||
if (status & IPR_CHANNELLOOP) {
|
||||
struct snd_emu10k1_voice *pvoice;
|
||||
int voice;
|
||||
int voice_max = status & IPR_CHANNELNUMBERMASK;
|
||||
u32 val;
|
||||
struct snd_emu10k1_voice *pvoice = emu->voices;
|
||||
|
||||
val = snd_emu10k1_ptr_read(emu, CLIPL, 0);
|
||||
pvoice = emu->voices;
|
||||
for (voice = 0; voice <= voice_max; voice++) {
|
||||
if (voice == 0x20)
|
||||
val = snd_emu10k1_ptr_read(emu, CLIPH, 0);
|
||||
@ -68,6 +69,7 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id)
|
||||
pvoice++;
|
||||
}
|
||||
val = snd_emu10k1_ptr_read(emu, HLIPL, 0);
|
||||
pvoice = emu->voices;
|
||||
for (voice = 0; voice <= voice_max; voice++) {
|
||||
if (voice == 0x20)
|
||||
val = snd_emu10k1_ptr_read(emu, HLIPH, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user