can: mcp251x: optimize 2515, rx int gets cleared automatically
authorMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 4 Oct 2010 10:09:31 +0000 (12:09 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 18 Oct 2010 13:19:55 +0000 (15:19 +0200)
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
drivers/net/can/mcp251x.c

index 7f8aa4ce02c581fcb05f45e51196c8b60fb4aa7d..c664be261e98b1bcb93eda8bea211ecb574adbfb 100644 (file)
@@ -793,15 +793,20 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
                /* receive buffer 0 */
                if (intf & CANINTF_RX0IF) {
                        mcp251x_hw_rx(spi, 0);
-                       /* Free one buffer ASAP */
-                       mcp251x_write_bits(spi, CANINTF, intf & CANINTF_RX0IF,
-                                          0x00);
+                       /*
+                        * Free one buffer ASAP
+                        * (The MCP2515 does this automatically.)
+                        */
+                       if (mcp251x_is_2510(spi))
+                               mcp251x_write_bits(spi, CANINTF, CANINTF_RX0IF, 0x00);
                }
 
                /* receive buffer 1 */
                if (intf & CANINTF_RX1IF) {
                        mcp251x_hw_rx(spi, 1);
-                       clear_intf |= CANINTF_RX1IF;
+                       /* the MCP2515 does this automatically */
+                       if (mcp251x_is_2510(spi))
+                               clear_intf |= CANINTF_RX1IF;
                }
 
                /* any error or tx interrupt we need to clear? */