iio: adc: stm32: Fix IRQs on STM32F4 by removing custom spurious IRQs message
commit 99bded02dae5e1e2312813506c41dc8db2fb656c upstream. The check for spurious IRQs introduced in695e2f5c28
assumed that the bits in the control and status registers are aligned. This is true for the H7 and MP1 version, but not the F4. The interrupt was then never handled on the F4. Instead of increasing the complexity of the comparison and check each bit specifically, we remove this check completely and rely on the generic handler for spurious IRQs. Fixes:695e2f5c28
("iio: adc: stm32-adc: fix a regression when using dma and irq") Signed-off-by: Yannick Brosseau <yannick.brosseau@gmail.com> Reviewed-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> Link: https://lore.kernel.org/r/20220516203939.3498673-3-yannick.brosseau@gmail.com Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
62284d45e2
commit
d579c893dd
|
@ -1265,7 +1265,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
|
||||||
struct stm32_adc *adc = iio_priv(indio_dev);
|
struct stm32_adc *adc = iio_priv(indio_dev);
|
||||||
const struct stm32_adc_regspec *regs = adc->cfg->regs;
|
const struct stm32_adc_regspec *regs = adc->cfg->regs;
|
||||||
u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
|
u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
|
||||||
u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg);
|
|
||||||
|
|
||||||
/* Check ovr status right now, as ovr mask should be already disabled */
|
/* Check ovr status right now, as ovr mask should be already disabled */
|
||||||
if (status & regs->isr_ovr.mask) {
|
if (status & regs->isr_ovr.mask) {
|
||||||
|
@ -1280,11 +1279,6 @@ static irqreturn_t stm32_adc_threaded_isr(int irq, void *data)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(status & mask))
|
|
||||||
dev_err_ratelimited(&indio_dev->dev,
|
|
||||||
"Unexpected IRQ: IER=0x%08x, ISR=0x%08x\n",
|
|
||||||
mask, status);
|
|
||||||
|
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1294,10 +1288,6 @@ static irqreturn_t stm32_adc_isr(int irq, void *data)
|
||||||
struct stm32_adc *adc = iio_priv(indio_dev);
|
struct stm32_adc *adc = iio_priv(indio_dev);
|
||||||
const struct stm32_adc_regspec *regs = adc->cfg->regs;
|
const struct stm32_adc_regspec *regs = adc->cfg->regs;
|
||||||
u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
|
u32 status = stm32_adc_readl(adc, regs->isr_eoc.reg);
|
||||||
u32 mask = stm32_adc_readl(adc, regs->ier_eoc.reg);
|
|
||||||
|
|
||||||
if (!(status & mask))
|
|
||||||
return IRQ_WAKE_THREAD;
|
|
||||||
|
|
||||||
if (status & regs->isr_ovr.mask) {
|
if (status & regs->isr_ovr.mask) {
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue
Block a user