diff options
Diffstat (limited to 'drivers/net/can/c_can/c_can.c')
| -rw-r--r-- | drivers/net/can/c_can/c_can.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 5233b8f58d7..2282b1ae976 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c @@ -488,8 +488,12 @@ static void c_can_setup_receive_object(struct net_device *dev, int iface,  	priv->write_reg(priv, C_CAN_IFACE(MASK1_REG, iface),  			IFX_WRITE_LOW_16BIT(mask)); + +	/* According to C_CAN documentation, the reserved bit +	 * in IFx_MASK2 register is fixed 1 +	 */  	priv->write_reg(priv, C_CAN_IFACE(MASK2_REG, iface), -			IFX_WRITE_HIGH_16BIT(mask)); +			IFX_WRITE_HIGH_16BIT(mask) | BIT(13));  	priv->write_reg(priv, C_CAN_IFACE(ARB1_REG, iface),  			IFX_WRITE_LOW_16BIT(id)); @@ -960,7 +964,7 @@ static int c_can_handle_bus_err(struct net_device *dev,  		break;  	case LEC_ACK_ERROR:  		netdev_dbg(dev, "ack error\n"); -		cf->data[2] |= (CAN_ERR_PROT_LOC_ACK | +		cf->data[3] |= (CAN_ERR_PROT_LOC_ACK |  				CAN_ERR_PROT_LOC_ACK_DEL);  		break;  	case LEC_BIT1_ERROR: @@ -973,7 +977,7 @@ static int c_can_handle_bus_err(struct net_device *dev,  		break;  	case LEC_CRC_ERROR:  		netdev_dbg(dev, "CRC error\n"); -		cf->data[2] |= (CAN_ERR_PROT_LOC_CRC_SEQ | +		cf->data[3] |= (CAN_ERR_PROT_LOC_CRC_SEQ |  				CAN_ERR_PROT_LOC_CRC_DEL);  		break;  	default:  |