Skip to content

Commit

Permalink
ARM: Orion: fix driver probe error handling with respect to clk
Browse files Browse the repository at this point in the history
The clk patches added code to get and enable clocks in the
respective driver probe functions.  If the probe function failed
for some reason after enabling the clock, the clock was not
disabled again in many cases.

Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Signed-off-by: Andrew Lumm <andrew@lunn.ch>
  • Loading branch information
gmbnomis authored and lunn committed Jul 25, 2012
1 parent 30e0f58 commit baffab2
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 1 deletion.
4 changes: 4 additions & 0 deletions drivers/crypto/mv_cesa.c
Expand Up @@ -1098,6 +1098,10 @@ static int mv_probe(struct platform_device *pdev)
crypto_unregister_alg(&mv_aes_alg_ecb);
err_irq:
free_irq(irq, cp);
if (!IS_ERR(cp->clk)) {
clk_disable_unprepare(cp->clk);
clk_put(cp->clk);
}
err_thread:
kthread_stop(cp->queue_th);
err_unmap_sram:
Expand Down
4 changes: 4 additions & 0 deletions drivers/mmc/host/mvsdio.c
Expand Up @@ -839,6 +839,10 @@ static int __init mvsd_probe(struct platform_device *pdev)
if (r)
release_resource(r);
if (mmc)
if (!IS_ERR_OR_NULL(host->clk)) {
clk_disable_unprepare(host->clk);
clk_put(host->clk);
}
mmc_free_host(mmc);

return ret;
Expand Down
4 changes: 4 additions & 0 deletions drivers/mtd/nand/orion_nand.c
Expand Up @@ -183,6 +183,10 @@ static int __init orion_nand_probe(struct platform_device *pdev)
return 0;

no_dev:
if (!IS_ERR(clk)) {
clk_disable_unprepare(clk);
clk_put(clk);
}
platform_set_drvdata(pdev, NULL);
iounmap(io_base);
no_res:
Expand Down
6 changes: 6 additions & 0 deletions drivers/net/ethernet/marvell/mv643xx_eth.c
Expand Up @@ -2983,6 +2983,12 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
return 0;

out:
#if defined(CONFIG_HAVE_CLK)
if (!IS_ERR(mp->clk)) {
clk_disable_unprepare(mp->clk);
clk_put(mp->clk);
}
#endif
free_netdev(dev);

return err;
Expand Down
4 changes: 4 additions & 0 deletions drivers/usb/host/ehci-orion.c
Expand Up @@ -298,6 +298,10 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev)
err4:
usb_put_hcd(hcd);
err3:
if (!IS_ERR(clk)) {
clk_disable_unprepare(clk);
clk_put(clk);
}
iounmap(regs);
err2:
release_mem_region(res->start, resource_size(res));
Expand Down
8 changes: 7 additions & 1 deletion sound/soc/kirkwood/kirkwood-i2s.c
Expand Up @@ -458,7 +458,13 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
}
clk_prepare_enable(priv->clk);

return snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai);
err = snd_soc_register_dai(&pdev->dev, &kirkwood_i2s_dai);
if (!err)
return 0;
dev_err(&pdev->dev, "snd_soc_register_dai failed\n");

clk_disable_unprepare(priv->clk);
clk_put(priv->clk);

err_ioremap:
iounmap(priv->io);
Expand Down

0 comments on commit baffab2

Please sign in to comment.