Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit baffab28 authored by Simon Baatz's avatar Simon Baatz Committed by Andrew Lunn
Browse files

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: default avatarSimon Baatz <gmbnomis@gmail.com>
Signed-off-by: default avatarAndrew Lumm <andrew@lunn.ch>
parent 30e0f580
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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:
+4 −0
Original line number Diff line number Diff line
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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:
+6 −0
Original line number Diff line number Diff line
@@ -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;
+4 −0
Original line number Diff line number Diff line
@@ -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));
Loading