|
@@ -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:
|