Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86c823d4 authored by Olivier Moysan's avatar Olivier Moysan Committed by Greg Kroah-Hartman
Browse files

ASoC: stm32: i2s: fix IRQ clearing



commit 8ba3c5215d69c09f5c39783ff3b78347769822ad 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: default avatarOlivier Moysan <olivier.moysan@st.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cacd33b1
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -246,7 +246,7 @@ static irqreturn_t stm32_i2s_isr(int irq, void *devid)
		return IRQ_NONE;
	}

	regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
	regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
			  I2S_IFCR_MASK, flags);

	if (flags & I2S_SR_OVR) {
@@ -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,7 +546,7 @@ 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,
	return regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
				 I2S_IFCR_MASK, I2S_IFCR_MASK);
}

@@ -603,7 +602,7 @@ static int stm32_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
			return ret;
		}

		regmap_update_bits(i2s->regmap, STM32_I2S_IFCR_REG,
		regmap_write_bits(i2s->regmap, STM32_I2S_IFCR_REG,
				  I2S_IFCR_MASK, I2S_IFCR_MASK);

		if (playback_flg) {