Commit 6797400e authored by Oswald Buddenhagen's avatar Oswald Buddenhagen Committed by Takashi Iwai

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 27ae958c ("emu10k1 driver - add multichannel device
hw:x,3 [2-8/8]").
Signed-off-by: default avatarOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230518093047.3697887-4-oswald.buddenhagen@gmx.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 9436f015
...@@ -47,12 +47,13 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id) ...@@ -47,12 +47,13 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id)
status &= ~(IPR_VOLINCR|IPR_VOLDECR|IPR_MUTE); status &= ~(IPR_VOLINCR|IPR_VOLDECR|IPR_MUTE);
} }
if (status & IPR_CHANNELLOOP) { if (status & IPR_CHANNELLOOP) {
struct snd_emu10k1_voice *pvoice;
int voice; int voice;
int voice_max = status & IPR_CHANNELNUMBERMASK; int voice_max = status & IPR_CHANNELNUMBERMASK;
u32 val; u32 val;
struct snd_emu10k1_voice *pvoice = emu->voices;
val = snd_emu10k1_ptr_read(emu, CLIPL, 0); val = snd_emu10k1_ptr_read(emu, CLIPL, 0);
pvoice = emu->voices;
for (voice = 0; voice <= voice_max; voice++) { for (voice = 0; voice <= voice_max; voice++) {
if (voice == 0x20) if (voice == 0x20)
val = snd_emu10k1_ptr_read(emu, CLIPH, 0); val = snd_emu10k1_ptr_read(emu, CLIPH, 0);
...@@ -68,6 +69,7 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id) ...@@ -68,6 +69,7 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id)
pvoice++; pvoice++;
} }
val = snd_emu10k1_ptr_read(emu, HLIPL, 0); val = snd_emu10k1_ptr_read(emu, HLIPL, 0);
pvoice = emu->voices;
for (voice = 0; voice <= voice_max; voice++) { for (voice = 0; voice <= voice_max; voice++) {
if (voice == 0x20) if (voice == 0x20)
val = snd_emu10k1_ptr_read(emu, HLIPH, 0); val = snd_emu10k1_ptr_read(emu, HLIPH, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment