mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
ASoC: stm32: i2s: fix IRQ clearing
commit 8ba3c5215d upstream.
Because of regmap cache, interrupts may not be cleared
as expected.
Declare IFCR register as write only and make writings
to IFCR register unconditional.
Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
cacd33b1c9
commit
86c823d4a9
@@ -246,8 +246,8 @@ static irqreturn_t stm32_i2s_isr(int irq, void *devid)
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, flags);
|
||||
regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, flags);
|
||||
|
||||
if (flags & I2S_SR_OVR) {
|
||||
dev_dbg(&pdev->dev, "Overrun\n");
|
||||
@@ -276,7 +276,6 @@ static bool stm32_i2s_readable_reg(struct device *dev, unsigned int reg)
|
||||
case STM32_I2S_CFG2_REG:
|
||||
case STM32_I2S_IER_REG:
|
||||
case STM32_I2S_SR_REG:
|
||||
case STM32_I2S_IFCR_REG:
|
||||
case STM32_I2S_TXDR_REG:
|
||||
case STM32_I2S_RXDR_REG:
|
||||
case STM32_I2S_CGFR_REG:
|
||||
@@ -547,8 +546,8 @@ static int stm32_i2s_startup(struct snd_pcm_substream *substream,
|
||||
i2s->refcount++;
|
||||
spin_unlock(&i2s->lock_fd);
|
||||
|
||||
return regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, I2S_IFCR_MASK);
|
||||
return regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, I2S_IFCR_MASK);
|
||||
}
|
||||
|
||||
static int stm32_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
@@ -603,8 +602,8 @@ static int stm32_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, I2S_IFCR_MASK);
|
||||
regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
|
||||
I2S_IFCR_MASK, I2S_IFCR_MASK);
|
||||
|
||||
if (playback_flg) {
|
||||
ier = I2S_IER_UDRIE;
|
||||
|
||||
Reference in New Issue
Block a user