diff options
author | Marc Kleine-Budde <mkl@pengutronix.de> | 2014-02-28 09:16:59 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2014-03-03 08:29:51 -0500 |
commit | 4b5b82274a17f0ebbf02378df2ba7f36a3f5af19 (patch) | |
tree | 8d698b9d91feb526f6e0389170aec62fbd4372d1 | |
parent | d96e43e8fce28cf97df576a07af9d65657a41a6f (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.c | 26 |
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 | ||
366 | static 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, ®s->mcr); | ||
372 | while (timeout-- && (flexcan_read(®s->mcr) & FLEXCAN_MCR_SOFTRST)) | ||
373 | usleep_range(10, 20); | ||
374 | |||
375 | if (flexcan_read(®s->mcr) & FLEXCAN_MCR_SOFTRST) | ||
376 | return -ETIMEDOUT; | ||
377 | |||
378 | return 0; | ||
379 | } | ||
380 | |||
366 | static int flexcan_get_berr_counter(const struct net_device *dev, | 381 | static 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, ®s->mcr); | 804 | err = flexcan_chip_softreset(priv); |
790 | udelay(10); | 805 | if (err) |
791 | |||
792 | reg_mcr = flexcan_read(®s->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 | ||