diff options
| -rw-r--r-- | drivers/net/can/spi/hi311x.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c index 5590c559a8ca..53e320c92a8b 100644 --- a/drivers/net/can/spi/hi311x.c +++ b/drivers/net/can/spi/hi311x.c | |||
| @@ -91,6 +91,7 @@ | |||
| 91 | #define HI3110_STAT_BUSOFF BIT(2) | 91 | #define HI3110_STAT_BUSOFF BIT(2) |
| 92 | #define HI3110_STAT_ERRP BIT(3) | 92 | #define HI3110_STAT_ERRP BIT(3) |
| 93 | #define HI3110_STAT_ERRW BIT(4) | 93 | #define HI3110_STAT_ERRW BIT(4) |
| 94 | #define HI3110_STAT_TXMTY BIT(7) | ||
| 94 | 95 | ||
| 95 | #define HI3110_BTR0_SJW_SHIFT 6 | 96 | #define HI3110_BTR0_SJW_SHIFT 6 |
| 96 | #define HI3110_BTR0_BRP_SHIFT 0 | 97 | #define HI3110_BTR0_BRP_SHIFT 0 |
| @@ -427,8 +428,10 @@ static int hi3110_get_berr_counter(const struct net_device *net, | |||
| 427 | struct hi3110_priv *priv = netdev_priv(net); | 428 | struct hi3110_priv *priv = netdev_priv(net); |
| 428 | struct spi_device *spi = priv->spi; | 429 | struct spi_device *spi = priv->spi; |
| 429 | 430 | ||
| 431 | mutex_lock(&priv->hi3110_lock); | ||
| 430 | bec->txerr = hi3110_read(spi, HI3110_READ_TEC); | 432 | bec->txerr = hi3110_read(spi, HI3110_READ_TEC); |
| 431 | bec->rxerr = hi3110_read(spi, HI3110_READ_REC); | 433 | bec->rxerr = hi3110_read(spi, HI3110_READ_REC); |
| 434 | mutex_unlock(&priv->hi3110_lock); | ||
| 432 | 435 | ||
| 433 | return 0; | 436 | return 0; |
| 434 | } | 437 | } |
| @@ -735,10 +738,7 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id) | |||
| 735 | } | 738 | } |
| 736 | } | 739 | } |
| 737 | 740 | ||
| 738 | if (intf == 0) | 741 | if (priv->tx_len && statf & HI3110_STAT_TXMTY) { |
| 739 | break; | ||
| 740 | |||
| 741 | if (intf & HI3110_INT_TXCPLT) { | ||
| 742 | net->stats.tx_packets++; | 742 | net->stats.tx_packets++; |
| 743 | net->stats.tx_bytes += priv->tx_len - 1; | 743 | net->stats.tx_bytes += priv->tx_len - 1; |
| 744 | can_led_event(net, CAN_LED_EVENT_TX); | 744 | can_led_event(net, CAN_LED_EVENT_TX); |
| @@ -748,6 +748,9 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id) | |||
| 748 | } | 748 | } |
| 749 | netif_wake_queue(net); | 749 | netif_wake_queue(net); |
| 750 | } | 750 | } |
| 751 | |||
| 752 | if (intf == 0) | ||
| 753 | break; | ||
| 751 | } | 754 | } |
| 752 | mutex_unlock(&priv->hi3110_lock); | 755 | mutex_unlock(&priv->hi3110_lock); |
| 753 | return IRQ_HANDLED; | 756 | return IRQ_HANDLED; |
