Skip to contentSkip to conversation

Consolidate and unify state change handling

PATCH Superseded Andri Yngvason 1 participant 1 message Sep 18, 2014 CAN network drivers

v1 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

PATCH 4/4 Consolidate and unify state change handling

---
 drivers/net/can/sja1000/sja1000.c | 29 +++++++++--------------------
 1 file changed, 9 insertions(+), 20 deletions(-)
drivers/net/can/sja1000/sja1000.c +9 -20
index b27ac60..224e7f3 100644
@@ -467,27 +467,16 @@ static int sja1000_err(struct net_device *dev, uint8_t isrc, uint8_t status)
         cf->data[0] = alc & 0x1f;
     }
 
-    if (state != priv->can.state && (state == CAN_STATE_ERROR_WARNING ||
-                     state == CAN_STATE_ERROR_PASSIVE)) {
-        uint8_t rxerr = priv->read_reg(priv, SJA1000_RXERR);
-        uint8_t txerr = priv->read_reg(priv, SJA1000_TXERR);
-        cf->can_id |= CAN_ERR_CRTL;
-        if (state == CAN_STATE_ERROR_WARNING) {
-            priv->can.can_stats.error_warning++;
-            cf->data[1] = (txerr > rxerr) ?
-                CAN_ERR_CRTL_TX_WARNING :
-                CAN_ERR_CRTL_RX_WARNING;
-        } else {
-            priv->can.can_stats.error_passive++;
-            cf->data[1] = (txerr > rxerr) ?
-                CAN_ERR_CRTL_TX_PASSIVE :
-                CAN_ERR_CRTL_RX_PASSIVE;
-        }
-        cf->data[6] = txerr;
-        cf->data[7] = rxerr;
-    }
+    if (state != priv->can.state) {
+        unsigned int rxerr = priv->read_reg(priv, SJA1000_RXERR);
+        unsigned int txerr = priv->read_reg(priv, SJA1000_TXERR);
 
-    priv->can.state = state;
+        can_change_state(dev, cf, state,
+                 can_get_err_dir(rxerr, txerr));
+
+        cf->data[6] = rxerr;
+        cf->data[7] = txerr;
+    }
 
     netif_rx(skb);