summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorMitja Spes <mitja@lxnav.com>2013-01-08 15:44:53 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2013-01-08 15:50:18 +0100
commit1b59090a47101b4bf379d2c35986ad3f0bcb2aa1 (patch)
treec9d0eecc9eaf357ce7d61d69e1215ce4facb4f5a /drivers/net
parentd68e547b448141f905346f5fa28e0bc8161a9445 (diff)
can: mcp251x: add BERR counter functionality
Add BERR counter functionality to MCP251x driver. Signed-off-by: Mitja Spes <mitja@lxnav.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/can/mcp251x.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c
index 330140ee266d..535e4032da2b 100644
--- a/drivers/net/can/mcp251x.c
+++ b/drivers/net/can/mcp251x.c
@@ -593,6 +593,18 @@ static int mcp251x_do_set_bittiming(struct net_device *net)
return 0;
}
+static int mcp251x_get_berr_counter(const struct net_device *dev, struct can_berr_counter *bec)
+{
+ struct mcp251x_priv *priv = netdev_priv(dev);
+ struct spi_device *spi = priv->spi;
+ uint8_t tec,rec;
+
+ mcp251x_read_2regs(spi, TEC, &tec, &rec);
+ bec->txerr = tec;
+ bec->rxerr = rec;
+ return 0;
+}
+
static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv,
struct spi_device *spi)
{
@@ -997,6 +1009,7 @@ static int __devinit mcp251x_can_probe(struct spi_device *spi)
priv = netdev_priv(net);
priv->can.bittiming_const = &mcp251x_bittiming_const;
priv->can.do_set_mode = mcp251x_do_set_mode;
+ priv->can.do_get_berr_counter = mcp251x_get_berr_counter;
priv->can.clock.freq = pdata->oscillator_frequency / 2;
priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
CAN_CTRLMODE_LOOPBACK | CAN_CTRLMODE_LISTENONLY;