]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ALSA: sb: Force to disable DMAs once when DMA mode is changed
authorTakashi Iwai <tiwai@suse.de>
Tue, 10 Jun 2025 06:43:20 +0000 (08:43 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Jul 2025 13:57:46 +0000 (15:57 +0200)
[ Upstream commit 4c267ae2ef349639b4d9ebf00dd28586a82fdbe6 ]

When the DMA mode is changed on the (still real!) SB AWE32 after
playing a stream and closing, the previous DMA setup was still
silently kept, and it can confuse the hardware, resulting in the
unexpected noises.  As a workaround, enforce the disablement of DMA
setups when the DMA setup is changed by the kcontrol.

https://bugzilla.kernel.org/show_bug.cgi?id=218185
Link: https://patch.msgid.link/20250610064322.26787-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/isa/sb/sb16_main.c

index 5efbd0a41312b47023d40af61541e95ba6c00a70..1497a7822eee6818604c4497687a787f2f2c172b 100644 (file)
@@ -714,6 +714,10 @@ static int snd_sb16_dma_control_put(struct snd_kcontrol *kcontrol, struct snd_ct
        change = nval != oval;
        snd_sb16_set_dma_mode(chip, nval);
        spin_unlock_irqrestore(&chip->reg_lock, flags);
+       if (change) {
+               snd_dma_disable(chip->dma8);
+               snd_dma_disable(chip->dma16);
+       }
        return change;
 }