i2c-omap: In case of a NACK|ARDY|AL return from the ISR
authorSonasath, Moiz <m-sonasath@ti.com>
Tue, 21 Jul 2009 15:14:40 +0000 (10:14 -0500)
committerBen Dooks <ben-linux@fluff.org>
Thu, 30 Jul 2009 00:03:24 +0000 (01:03 +0100)
In case of a NACK or ARDY or AL interrupt, complete the request.
There is no need to service the RRDY/RDR or XRDY/XDR interrupts.

Refer TRM SWPU114: Figure 18-31.I2C Master Transmitter Mode, Interrupt Method,
in F/S and HS Modes

http://focus.ti.com/pdfs/wtbu/SWPU114T_PrelimFinalEPDF_06_25_2009.pdf

Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
Signed-off-by: Vikram pandita <vikram.pandita@ti.com>
[ben-linux@fluff.org: fixed mail format and added i2c-omap to subject]
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
drivers/i2c/busses/i2c-omap.c

index a69665788513023f6bea92fc934e6092c500c313..5c508ccf4384fa1d0f496ee17a5dcaba45b3734f 100644 (file)
@@ -685,8 +685,10 @@ omap_i2c_isr(int this_irq, void *dev_id)
                        err |= OMAP_I2C_STAT_AL;
                }
                if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |
-                                       OMAP_I2C_STAT_AL))
+                                       OMAP_I2C_STAT_AL)) {
                        omap_i2c_complete_cmd(dev, err);
+                       return IRQ_HANDLED;
+               }
                if (stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR)) {
                        u8 num_bytes = 1;
                        if (dev->fifo_size) {