diff options
Diffstat (limited to 'drivers/net/can/flexcan.c')
| -rw-r--r-- | drivers/net/can/flexcan.c | 9 | 
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index f425ec2c7839..944aa5d3af6e 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -549,6 +549,13 @@ static void do_state(struct net_device *dev,  	/* process state changes depending on the new state */  	switch (new_state) { +	case CAN_STATE_ERROR_WARNING: +		netdev_dbg(dev, "Error Warning\n"); +		cf->can_id |= CAN_ERR_CRTL; +		cf->data[1] = (bec.txerr > bec.rxerr) ? +			CAN_ERR_CRTL_TX_WARNING : +			CAN_ERR_CRTL_RX_WARNING; +		break;  	case CAN_STATE_ERROR_ACTIVE:  		netdev_dbg(dev, "Error Active\n");  		cf->can_id |= CAN_ERR_PROT; @@ -852,6 +859,8 @@ static int flexcan_chip_start(struct net_device *dev)  	if (priv->devtype_data->features & FLEXCAN_HAS_BROKEN_ERR_STATE ||  	    priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)  		reg_ctrl |= FLEXCAN_CTRL_ERR_MSK; +	else +		reg_ctrl &= ~FLEXCAN_CTRL_ERR_MSK;  	/* save for later use */  	priv->reg_ctrl_default = reg_ctrl;  | 
