[PATCH 10/21] IIO: ti_adc: Handle overrun before threshold event

From: Zubair Lutfullah
Date: Wed Jul 17 2013 - 13:30:23 EST


If an overrun occurs, the threshold event is meaningless, handle

the overrun event first.

Signed-off-by: Russ Dill <Russ.Dill@xxxxxx>
Signed-off-by: Zubair Lutfullah <zubair.lutfullah@xxxxxxxxx>
---
drivers/iio/adc/ti_am335x_adc.c | 29 ++++++++++++++---------------
1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/drivers/iio/adc/ti_am335x_adc.c b/drivers/iio/adc/ti_am335x_adc.c
index 5c95eba..e510da7 100644
--- a/drivers/iio/adc/ti_am335x_adc.c
+++ b/drivers/iio/adc/ti_am335x_adc.c
@@ -171,7 +171,19 @@ static irqreturn_t tiadc_irq(int irq, void *private)
unsigned int status, config;

status = tiadc_readl(adc_dev, REG_IRQSTATUS);
- if (status & IRQENB_FIFO1THRES) {
+ if (status & IRQENB_FIFO1OVRRUN) {
+ config = tiadc_readl(adc_dev, REG_CTRL);
+ config &= ~(CNTRLREG_TSCSSENB);
+ tiadc_writel(adc_dev, REG_CTRL, config);
+
+ tiadc_writel(adc_dev, REG_IRQSTATUS,
+ IRQENB_FIFO1OVRRUN |
+ IRQENB_FIFO1UNDRFLW);
+
+ tiadc_writel(adc_dev, REG_CTRL,
+ (config | CNTRLREG_TSCSSENB));
+ return IRQ_HANDLED;
+ } else if (status & IRQENB_FIFO1THRES) {
tiadc_writel(adc_dev, REG_IRQCLR,
IRQENB_FIFO1THRES);

@@ -183,20 +195,7 @@ static irqreturn_t tiadc_irq(int irq, void *private)
}
tiadc_writel(adc_dev, REG_IRQSTATUS,
IRQENB_FIFO1THRES);
- return IRQ_HANDLED;
- } else if ((status & IRQENB_FIFO1OVRRUN) ||
- (status & IRQENB_FIFO1UNDRFLW)) {
- config = tiadc_readl(adc_dev, REG_CTRL);
- config &= ~( CNTRLREG_TSCSSENB);
- tiadc_writel(adc_dev, REG_CTRL, config);
-
- tiadc_writel(adc_dev, REG_IRQSTATUS,
- IRQENB_FIFO1OVRRUN |
- IRQENB_FIFO1UNDRFLW);
-
- tiadc_writel(adc_dev, REG_CTRL,
- (config | CNTRLREG_TSCSSENB));
- return IRQ_HANDLED;
+ return IRQ_HANDLED;
} else {
return IRQ_NONE;
}
--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/