aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSimon Baatz <gmbnomis@gmail.com>2012-07-18 18:04:09 -0400
committerAndrew Lunn <andrew@lunn.ch>2012-07-25 11:06:21 -0400
commitbaffab28b13120694fa3ebab08d3e99667a851d2 (patch)
treeba6021fe52fd1814b06ab07ba2aa8f51c6c2da06 /drivers
parent30e0f58035073c895a8d33e1521e412be73e02bc (diff)
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/crypto/mv_cesa.c4
-rw-r--r--drivers/mmc/host/mvsdio.c4
-rw-r--r--drivers/mtd/nand/orion_nand.c4
-rw-r--r--drivers/net/ethernet/marvell/mv643xx_eth.c6
-rw-r--r--drivers/usb/host/ehci-orion.c4
5 files changed, 22 insertions, 0 deletions
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c
index 1cc6b3f3e262..a4faa893199c 100644
--- a/drivers/crypto/mv_cesa.c
+++ b/drivers/crypto/mv_cesa.c
@@ -1098,6 +1098,10 @@ err_unreg_ecb:
1098 crypto_unregister_alg(&mv_aes_alg_ecb); 1098 crypto_unregister_alg(&mv_aes_alg_ecb);
1099err_irq: 1099err_irq:
1100 free_irq(irq, cp); 1100 free_irq(irq, cp);
1101 if (!IS_ERR(cp->clk)) {
1102 clk_disable_unprepare(cp->clk);
1103 clk_put(cp->clk);
1104 }
1101err_thread: 1105err_thread:
1102 kthread_stop(cp->queue_th); 1106 kthread_stop(cp->queue_th);
1103err_unmap_sram: 1107err_unmap_sram:
diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 3b9136c1a475..a61cb5fca22d 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -839,6 +839,10 @@ out:
839 if (r) 839 if (r)
840 release_resource(r); 840 release_resource(r);
841 if (mmc) 841 if (mmc)
842 if (!IS_ERR_OR_NULL(host->clk)) {
843 clk_disable_unprepare(host->clk);
844 clk_put(host->clk);
845 }
842 mmc_free_host(mmc); 846 mmc_free_host(mmc);
843 847
844 return ret; 848 return ret;
diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c
index 513dc88a05ca..9b8fd3d77168 100644
--- a/drivers/mtd/nand/orion_nand.c
+++ b/drivers/mtd/nand/orion_nand.c
@@ -183,6 +183,10 @@ static int __init orion_nand_probe(struct platform_device *pdev)
183 return 0; 183 return 0;
184 184
185no_dev: 185no_dev:
186 if (!IS_ERR(clk)) {
187 clk_disable_unprepare(clk);
188 clk_put(clk);
189 }
186 platform_set_drvdata(pdev, NULL); 190 platform_set_drvdata(pdev, NULL);
187 iounmap(io_base); 191 iounmap(io_base);
188no_res: 192no_res:
diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index f0f06b2bc28b..4fbba57b8ff4 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -2983,6 +2983,12 @@ static int mv643xx_eth_probe(struct platform_device *pdev)
2983 return 0; 2983 return 0;
2984 2984
2985out: 2985out:
2986#if defined(CONFIG_HAVE_CLK)
2987 if (!IS_ERR(mp->clk)) {
2988 clk_disable_unprepare(mp->clk);
2989 clk_put(mp->clk);
2990 }
2991#endif
2986 free_netdev(dev); 2992 free_netdev(dev);
2987 2993
2988 return err; 2994 return err;
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
index 82de1073aa52..c6903e3af29c 100644
--- a/drivers/usb/host/ehci-orion.c
+++ b/drivers/usb/host/ehci-orion.c
@@ -298,6 +298,10 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev)
298err4: 298err4:
299 usb_put_hcd(hcd); 299 usb_put_hcd(hcd);
300err3: 300err3:
301 if (!IS_ERR(clk)) {
302 clk_disable_unprepare(clk);
303 clk_put(clk);
304 }
301 iounmap(regs); 305 iounmap(regs);
302err2: 306err2:
303 release_mem_region(res->start, resource_size(res)); 307 release_mem_region(res->start, resource_size(res));