Skip to content

Commit

Permalink
can: flexcan: Check the return value from clk_prepare_enable()
Browse files Browse the repository at this point in the history
clk_prepare_enable() may fail, so let's check its return value and propagate it
in the case of error.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Fabio Estevam authored and Marc Kleine-Budde committed Aug 1, 2013
1 parent 933e4af commit aa10181
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions drivers/net/can/flexcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -850,12 +850,17 @@ static int flexcan_open(struct net_device *dev)
struct flexcan_priv *priv = netdev_priv(dev);
int err;

clk_prepare_enable(priv->clk_ipg);
clk_prepare_enable(priv->clk_per);
err = clk_prepare_enable(priv->clk_ipg);
if (err)
return err;

err = clk_prepare_enable(priv->clk_per);
if (err)
goto out_disable_ipg;

err = open_candev(dev);
if (err)
goto out;
goto out_disable_per;

err = request_irq(dev->irq, flexcan_irq, IRQF_SHARED, dev->name, dev);
if (err)
Expand All @@ -875,8 +880,9 @@ static int flexcan_open(struct net_device *dev)

out_close:
close_candev(dev);
out:
out_disable_per:
clk_disable_unprepare(priv->clk_per);
out_disable_ipg:
clk_disable_unprepare(priv->clk_ipg);

return err;
Expand Down Expand Up @@ -933,8 +939,13 @@ static int register_flexcandev(struct net_device *dev)
struct flexcan_regs __iomem *regs = priv->base;
u32 reg, err;

clk_prepare_enable(priv->clk_ipg);
clk_prepare_enable(priv->clk_per);
err = clk_prepare_enable(priv->clk_ipg);
if (err)
return err;

err = clk_prepare_enable(priv->clk_per);
if (err)
goto out_disable_ipg;

/* select "bus clock", chip must be disabled */
flexcan_chip_disable(priv);
Expand All @@ -959,15 +970,16 @@ static int register_flexcandev(struct net_device *dev)
if (!(reg & FLEXCAN_MCR_FEN)) {
netdev_err(dev, "Could not enable RX FIFO, unsupported core\n");
err = -ENODEV;
goto out;
goto out_disable_per;
}

err = register_candev(dev);

out:
out_disable_per:
/* disable core and turn off clocks */
flexcan_chip_disable(priv);
clk_disable_unprepare(priv->clk_per);
out_disable_ipg:
clk_disable_unprepare(priv->clk_ipg);

return err;
Expand Down

0 comments on commit aa10181

Please sign in to comment.