From 21bb44badd3ef874c6fa96aac517bf0f5f5605fe Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Fri, 16 Jun 2023 10:52:15 +0800 Subject: [PATCH] ASoC: rockchip: i2s-tdm: Reduce FIFO XRUN warning prompt Warning once each time FIFO XRUN occurs, and then disable it, until the next time the stream resume. Before: rockchip_i2s_tdm_isr: 234 callbacks suppressed rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun ... cat /proc/interrupts | grep i2s 21: 514 0 0 0 0 0 0 0 GICv3 213 Level i2s After: rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun rockchip-i2s-tdm fe480000.i2s: TX FIFO Underrun cat /proc/interrupts | grep i2s 21: 4 0 0 0 0 0 0 0 GICv3 213 Level i2s Signed-off-by: Sugar Zhang Change-Id: Ibe3b07d94b31f421fd637296cb137d5ba1071fcc --- sound/soc/rockchip/rockchip_i2s_tdm.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c index 15e7f0242e28..59f96091f315 100644 --- a/sound/soc/rockchip/rockchip_i2s_tdm.c +++ b/sound/soc/rockchip/rockchip_i2s_tdm.c @@ -2158,6 +2158,9 @@ static irqreturn_t rockchip_i2s_tdm_isr(int irq, void *devid) dev_warn_ratelimited(i2s_tdm->dev, "TX FIFO Underrun\n"); regmap_update_bits(i2s_tdm->regmap, I2S_INTCR, I2S_INTCR_TXUIC, I2S_INTCR_TXUIC); + regmap_update_bits(i2s_tdm->regmap, I2S_INTCR, + I2S_INTCR_TXUIE_MASK, + I2S_INTCR_TXUIE(0)); substream = i2s_tdm->substreams[SNDRV_PCM_STREAM_PLAYBACK]; if (substream) snd_pcm_stop_xrun(substream); @@ -2167,6 +2170,9 @@ static irqreturn_t rockchip_i2s_tdm_isr(int irq, void *devid) dev_warn_ratelimited(i2s_tdm->dev, "RX FIFO Overrun\n"); regmap_update_bits(i2s_tdm->regmap, I2S_INTCR, I2S_INTCR_RXOIC, I2S_INTCR_RXOIC); + regmap_update_bits(i2s_tdm->regmap, I2S_INTCR, + I2S_INTCR_RXOIE_MASK, + I2S_INTCR_RXOIE(0)); substream = i2s_tdm->substreams[SNDRV_PCM_STREAM_CAPTURE]; if (substream) snd_pcm_stop_xrun(substream);