Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: dwc: always enable/disable i2s irqs

Commit a42e988 ("ASoC: dwc: add DMA handshake control") changed the
behavior of the driver to not enable or disable i2s irqs if using DMA. This
breaks platforms such as AMD ACP. Audio playback appears to work but no
audio can be heard. Revert to the old behavior by always enabling and
disabling i2s irqs while keeping DMA handshake control.

Fixes: a42e988b626 ("ASoC: dwc: add DMA handshake control")
Signed-off-by: Brady Norander <bradynorander@gmail.com>
Link: https://patch.msgid.link/20250330130852.37881-3-bradynorander@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Brady Norander and committed by
Mark Brown
2b727b3f dfcf3dde

+6 -7
+6 -7
sound/soc/dwc/dwc-i2s.c
··· 199 199 else 200 200 i2s_write_reg(dev->i2s_base, IRER, 1); 201 201 202 - /* I2S needs to enable IRQ to make a handshake with DMAC on the JH7110 SoC */ 203 - if (dev->use_pio || dev->is_jh7110) 204 - i2s_enable_irqs(dev, substream->stream, config->chan_nr); 205 - else 202 + if (!(dev->use_pio || dev->is_jh7110)) 206 203 i2s_enable_dma(dev, substream->stream); 207 204 205 + i2s_enable_irqs(dev, substream->stream, config->chan_nr); 208 206 i2s_write_reg(dev->i2s_base, CER, 1); 209 207 } 210 208 ··· 216 218 else 217 219 i2s_write_reg(dev->i2s_base, IRER, 0); 218 220 219 - if (dev->use_pio || dev->is_jh7110) 220 - i2s_disable_irqs(dev, substream->stream, 8); 221 - else 221 + if (!(dev->use_pio || dev->is_jh7110)) 222 222 i2s_disable_dma(dev, substream->stream); 223 + 224 + i2s_disable_irqs(dev, substream->stream, 8); 225 + 223 226 224 227 if (!dev->active) { 225 228 i2s_write_reg(dev->i2s_base, CER, 0);