mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-16 05:50:19 +00:00
ARM: Orion: fix driver probe error handling with respect to clk
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>
This commit is contained in:
parent
30e0f58035
commit
baffab28b1
@ -1098,6 +1098,10 @@ err_unreg_ecb:
|
||||
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:
|
||||
|
@ -839,6 +839,10 @@ out:
|
||||
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;
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user