can: pch_can: fix error passive level test
authorXi Wang <xi.wang@gmail.com>
Mon, 12 Dec 2011 07:16:20 +0000 (02:16 -0500)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Thu, 2 Feb 2012 23:25:22 +0000 (00:25 +0100)
The test (((errc & PCH_REC) >> 8) > 127) would always be false because
the receive error counter ((errc & PCH_REC) >> 8) is at most 127, where
PCH_REC is defined as 0x7f00.  To test whether the receive error counter
has reached the error passive level, the RP bit (15) should be used.

Signed-off-by: Xi Wang <xi.wang@gmail.com>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/pch_can.c

index d11fbb2b95ffe3d5e76378924c5b907f774327cf..6edc25e0dd15250286919650c8f575f9cb334b02 100644 (file)
@@ -66,6 +66,7 @@
 #define PCH_IF_CREQ_BUSY       BIT(15)
 
 #define PCH_STATUS_INT         0x8000
+#define PCH_RP                 0x00008000
 #define PCH_REC                        0x00007f00
 #define PCH_TEC                        0x000000ff
 
@@ -527,7 +528,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
                priv->can.can_stats.error_passive++;
                state = CAN_STATE_ERROR_PASSIVE;
                cf->can_id |= CAN_ERR_CRTL;
-               if (((errc & PCH_REC) >> 8) > 127)
+               if (errc & PCH_RP)
                        cf->data[1] |= CAN_ERR_CRTL_RX_PASSIVE;
                if ((errc & PCH_TEC) > 127)
                        cf->data[1] |= CAN_ERR_CRTL_TX_PASSIVE;