| .. | .. |
|---|
| 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 | } |
|---|