aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2014-02-28 09:16:59 -0500
committerMarc Kleine-Budde <mkl@pengutronix.de>2014-03-03 08:29:51 -0500
commit4b5b82274a17f0ebbf02378df2ba7f36a3f5af19 (patch)
tree8d698b9d91feb526f6e0389170aec62fbd4372d1
parentd96e43e8fce28cf97df576a07af9d65657a41a6f (diff)
can: flexcan: factor out soft reset into seperate funtion
This patch moves the soft reset into a seperate function. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r--drivers/net/can/flexcan.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index dff4fa472c3a..61376abdab39 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -363,6 +363,21 @@ static int flexcan_chip_unfreeze(struct flexcan_priv *priv)
363 return 0; 363 return 0;
364} 364}
365 365
366static int flexcan_chip_softreset(struct flexcan_priv *priv)
367{
368 struct flexcan_regs __iomem *regs = priv->base;
369 unsigned int timeout = FLEXCAN_TIMEOUT_US / 10;
370
371 flexcan_write(FLEXCAN_MCR_SOFTRST, &regs->mcr);
372 while (timeout-- && (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST))
373 usleep_range(10, 20);
374
375 if (flexcan_read(&regs->mcr) & FLEXCAN_MCR_SOFTRST)
376 return -ETIMEDOUT;
377
378 return 0;
379}
380
366static int flexcan_get_berr_counter(const struct net_device *dev, 381static int flexcan_get_berr_counter(const struct net_device *dev,
367 struct can_berr_counter *bec) 382 struct can_berr_counter *bec)
368{ 383{
@@ -786,16 +801,9 @@ static int flexcan_chip_start(struct net_device *dev)
786 return err; 801 return err;
787 802
788 /* soft reset */ 803 /* soft reset */
789 flexcan_write(FLEXCAN_MCR_SOFTRST, &regs->mcr); 804 err = flexcan_chip_softreset(priv);
790 udelay(10); 805 if (err)
791
792 reg_mcr = flexcan_read(&regs->mcr);
793 if (reg_mcr & FLEXCAN_MCR_SOFTRST) {
794 netdev_err(dev, "Failed to softreset can module (mcr=0x%08x)\n",
795 reg_mcr);
796 err = -ENODEV;
797 goto out_chip_disable; 806 goto out_chip_disable;
798 }
799 807
800 flexcan_set_bittiming(dev); 808 flexcan_set_bittiming(dev);
801 809