From 5c003b6983ae7e7f87d7d2b0c4d12d2d55c4ebc0 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 a8da138200ad..069795ddb9f7 100644 --- a/sound/soc/rockchip/rockchip_i2s_tdm.c +++ b/sound/soc/rockchip/rockchip_i2s_tdm.c @@ -2070,6 +2070,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); @@ -2079,6 +2082,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);