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 <sugar.zhang@rock-chips.com>
Change-Id: Ibe3b07d94b31f421fd637296cb137d5ba1071fcc
This commit is contained in:
Sugar Zhang
2023-06-16 10:52:15 +08:00
committed by Tao Huang
parent 9ab6a82fd6
commit 21bb44badd

View File

@@ -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);