[PATCH 1/3] arm: omap: musb: proper error checking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Felipe Balbi <felipe.balbi@xxxxxxxxx>

We need to clk_put() and iounmap() to fully release
the resources.

Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxx>
---
 arch/arm/mach-omap2/usb-musb.c |   33 ++++++++++++++++++++++-----------
 1 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c
index 116548d..085e22e 100644
--- a/arch/arm/mach-omap2/usb-musb.c
+++ b/arch/arm/mach-omap2/usb-musb.c
@@ -60,23 +60,34 @@ static void __init usb_musb_pm_init(void)
 
 	dev_set_name(dev, "musb_hdrc");
 	otg_clk = clk_get(dev, "ick");
+	if (IS_ERR(otg_clk)) {
+		printk(KERN_WARNING "%s: Unable to get clock for MUSB.\n",
+				__func__);
+		goto out0;
+	}
 
-	if (otg_clk && clk_enable(otg_clk)) {
+	if (clk_enable(otg_clk)) {
 		printk(KERN_WARNING
 			"%s: Unable to enable clocks for MUSB, "
 			"cannot reset.\n",  __func__);
-	} else {
-		/* Reset OTG controller. After reset, it will be in
-		 * force-idle, force-standby mode. */
-		__raw_writel(OTG_SYSC_SOFTRESET, otg_base + OTG_SYSCONFIG);
-
-		while (!(OTG_SYSS_RESETDONE &
-					__raw_readl(otg_base + OTG_SYSSTATUS)))
-			cpu_relax();
+		goto out1;
 	}
 
-	if (otg_clk)
-		clk_disable(otg_clk);
+	/* Reset OTG controller. After reset, it will be in
+	 * force-idle, force-standby mode. */
+	__raw_writel(OTG_SYSC_SOFTRESET, otg_base + OTG_SYSCONFIG);
+
+	while (!(OTG_SYSS_RESETDONE &
+				__raw_readl(otg_base + OTG_SYSSTATUS)))
+		cpu_relax();
+
+	clk_disable(otg_clk);
+
+out1:
+	clk_put(otg_clk);
+
+out0:
+	iounmap(otg_base);
 }
 
 void usb_musb_disable_autoidle(void)
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux