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>
This commit is contained in:
parent
d96e43e8fc
commit
4b5b82274a
|
@ -363,6 +363,21 @@ static int flexcan_chip_unfreeze(struct flexcan_priv *priv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int flexcan_chip_softreset(struct flexcan_priv *priv)
|
||||||
|
{
|
||||||
|
struct flexcan_regs __iomem *regs = priv->base;
|
||||||
|
unsigned int timeout = FLEXCAN_TIMEOUT_US / 10;
|
||||||
|
|
||||||
|
flexcan_write(FLEXCAN_MCR_SOFTRST, ®s->mcr);
|
||||||
|
while (timeout-- && (flexcan_read(®s->mcr) & FLEXCAN_MCR_SOFTRST))
|
||||||
|
usleep_range(10, 20);
|
||||||
|
|
||||||
|
if (flexcan_read(®s->mcr) & FLEXCAN_MCR_SOFTRST)
|
||||||
|
return -ETIMEDOUT;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int flexcan_get_berr_counter(const struct net_device *dev,
|
static int flexcan_get_berr_counter(const struct net_device *dev,
|
||||||
struct can_berr_counter *bec)
|
struct can_berr_counter *bec)
|
||||||
{
|
{
|
||||||
|
@ -786,16 +801,9 @@ static int flexcan_chip_start(struct net_device *dev)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* soft reset */
|
/* soft reset */
|
||||||
flexcan_write(FLEXCAN_MCR_SOFTRST, ®s->mcr);
|
err = flexcan_chip_softreset(priv);
|
||||||
udelay(10);
|
if (err)
|
||||||
|
|
||||||
reg_mcr = flexcan_read(®s->mcr);
|
|
||||||
if (reg_mcr & FLEXCAN_MCR_SOFTRST) {
|
|
||||||
netdev_err(dev, "Failed to softreset can module (mcr=0x%08x)\n",
|
|
||||||
reg_mcr);
|
|
||||||
err = -ENODEV;
|
|
||||||
goto out_chip_disable;
|
goto out_chip_disable;
|
||||||
}
|
|
||||||
|
|
||||||
flexcan_set_bittiming(dev);
|
flexcan_set_bittiming(dev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue