diff options
Diffstat (limited to 'drivers/net/can/flexcan.c')
| -rw-r--r-- | drivers/net/can/flexcan.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 7fd8089946f..96d235799ec 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -118,6 +118,9 @@  	(FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | FLEXCAN_ESR_BOFF_INT)  #define FLEXCAN_ESR_ERR_ALL \  	(FLEXCAN_ESR_ERR_BUS | FLEXCAN_ESR_ERR_STATE) +#define FLEXCAN_ESR_ALL_INT \ +	(FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | \ +	 FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT)  /* FLEXCAN interrupt flag register (IFLAG) bits */  #define FLEXCAN_TX_BUF_ID		8 @@ -577,7 +580,9 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)  	reg_iflag1 = flexcan_read(®s->iflag1);  	reg_esr = flexcan_read(®s->esr); -	flexcan_write(FLEXCAN_ESR_ERR_INT, ®s->esr);	/* ACK err IRQ */ +	/* ACK all bus error and state change IRQ sources */ +	if (reg_esr & FLEXCAN_ESR_ALL_INT) +		flexcan_write(reg_esr & FLEXCAN_ESR_ALL_INT, ®s->esr);  	/*  	 * schedule NAPI in case of:  |