.. | .. |
---|
405 | 405 | txerr = priv->read_reg(priv, SJA1000_TXERR); |
---|
406 | 406 | rxerr = priv->read_reg(priv, SJA1000_RXERR); |
---|
407 | 407 | |
---|
408 | | - cf->data[6] = txerr; |
---|
409 | | - cf->data[7] = rxerr; |
---|
410 | | - |
---|
411 | 408 | if (isrc & IRQ_DOI) { |
---|
412 | 409 | /* data overrun interrupt */ |
---|
413 | 410 | netdev_dbg(dev, "data overrun interrupt\n"); |
---|
.. | .. |
---|
428 | 425 | state = CAN_STATE_ERROR_WARNING; |
---|
429 | 426 | else |
---|
430 | 427 | state = CAN_STATE_ERROR_ACTIVE; |
---|
| 428 | + } |
---|
| 429 | + if (state != CAN_STATE_BUS_OFF) { |
---|
| 430 | + cf->data[6] = txerr; |
---|
| 431 | + cf->data[7] = rxerr; |
---|
431 | 432 | } |
---|
432 | 433 | if (isrc & IRQ_BEI) { |
---|
433 | 434 | /* bus error interrupt */ |
---|
.. | .. |
---|
474 | 475 | netdev_dbg(dev, "arbitration lost interrupt\n"); |
---|
475 | 476 | alc = priv->read_reg(priv, SJA1000_ALC); |
---|
476 | 477 | priv->can.can_stats.arbitration_lost++; |
---|
477 | | - stats->tx_errors++; |
---|
478 | 478 | cf->can_id |= CAN_ERR_LOSTARB; |
---|
479 | 479 | cf->data[0] = alc & 0x1f; |
---|
480 | 480 | } |
---|