diff options
Diffstat (limited to 'drivers/net/can/mscan/mscan.c')
-rw-r--r-- | drivers/net/can/mscan/mscan.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c index 1c82dd8b896e..d11b0832ccd6 100644 --- a/drivers/net/can/mscan/mscan.c +++ b/drivers/net/can/mscan/mscan.c | |||
@@ -560,6 +560,18 @@ static int mscan_do_set_bittiming(struct net_device *dev) | |||
560 | return 0; | 560 | return 0; |
561 | } | 561 | } |
562 | 562 | ||
563 | static int mscan_get_berr_counter(const struct net_device *dev, | ||
564 | struct can_berr_counter *bec) | ||
565 | { | ||
566 | struct mscan_priv *priv = netdev_priv(dev); | ||
567 | struct mscan_regs __iomem *regs = priv->reg_base; | ||
568 | |||
569 | bec->txerr = in_8(®s->cantxerr); | ||
570 | bec->rxerr = in_8(®s->canrxerr); | ||
571 | |||
572 | return 0; | ||
573 | } | ||
574 | |||
563 | static int mscan_open(struct net_device *dev) | 575 | static int mscan_open(struct net_device *dev) |
564 | { | 576 | { |
565 | int ret; | 577 | int ret; |
@@ -639,8 +651,10 @@ int register_mscandev(struct net_device *dev, int mscan_clksrc) | |||
639 | else | 651 | else |
640 | ctl1 &= ~MSCAN_CLKSRC; | 652 | ctl1 &= ~MSCAN_CLKSRC; |
641 | 653 | ||
642 | if (priv->type == MSCAN_TYPE_MPC5121) | 654 | if (priv->type == MSCAN_TYPE_MPC5121) { |
655 | priv->can.do_get_berr_counter = mscan_get_berr_counter; | ||
643 | ctl1 |= MSCAN_BORM; /* bus-off recovery upon request */ | 656 | ctl1 |= MSCAN_BORM; /* bus-off recovery upon request */ |
657 | } | ||
644 | 658 | ||
645 | ctl1 |= MSCAN_CANE; | 659 | ctl1 |= MSCAN_CANE; |
646 | out_8(®s->canctl1, ctl1); | 660 | out_8(®s->canctl1, ctl1); |