Consolidate and unify state change handling
PATCH 4/4 Consolidate and unify state change handling
Signed-off-by Andri Yngvason <[email protected]>
--- drivers/net/can/sja1000/sja1000.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-)
drivers/net/can/sja1000/sja1000.c +9 -20
@@ -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);