i2c-pxa2xx: Don't clear isr bits too early
authorVasily Khoruzhick <anarsoul@gmail.com>
Sun, 13 Mar 2011 13:53:29 +0000 (15:53 +0200)
committerBen Dooks <ben-linux@fluff.org>
Mon, 21 Mar 2011 23:00:12 +0000 (23:00 +0000)
isr is passed later into i2c_pxa_irq_txempty and
i2c_pxa_irq_rxfull and they may use some other bits
than irq sources.

Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
drivers/i2c/busses/i2c-pxa.c

index b914184748c9e285478096ea084413a0cda5ce22..f59224a5c76183374eaefd99ff072eb38231d80c 100644 (file)
@@ -966,8 +966,7 @@ static irqreturn_t i2c_pxa_handler(int this_irq, void *dev_id)
        struct pxa_i2c *i2c = dev_id;
        u32 isr = readl(_ISR(i2c));
 
-       isr &= VALID_INT_SOURCE;
-       if (!isr)
+       if (!(isr & VALID_INT_SOURCE))
                return IRQ_NONE;
 
        if (i2c_debug > 2 && 0) {
@@ -984,7 +983,7 @@ static irqreturn_t i2c_pxa_handler(int this_irq, void *dev_id)
        /*
         * Always clear all pending IRQs.
         */
-       writel(isr, _ISR(i2c));
+       writel(isr & VALID_INT_SOURCE, _ISR(i2c));
 
        if (isr & ISR_SAD)
                i2c_pxa_slave_start(i2c, isr);