USB: msm: Use new clock framework APIs

Clock framework now provides two new APIs: clk_prepare and
clk_unprepare which can be called from non-atomic context only.
Other clk_enable and clk_disable APIs can be called from atomic
context.
To enable a clock drivers need to call both clk_prepare and
clk_enable. Similarly for disabling a clock - clk_disable and
clk_unprepare should be called.

Change-Id: I1ec0764e34619b92d811e1dadd2bb49b5cf36f5c
Signed-off-by: Manu Gautam <mgautam@codeaurora.org>
diff --git a/drivers/usb/host/ehci-msm-hsic.c b/drivers/usb/host/ehci-msm-hsic.c
index af7f2cf..ee71381 100644
--- a/drivers/usb/host/ehci-msm-hsic.c
+++ b/drivers/usb/host/ehci-msm-hsic.c
@@ -270,16 +270,16 @@
 {
 	int ret;
 
-	clk_enable(mehci->alt_core_clk);
+	clk_prepare_enable(mehci->alt_core_clk);
 
 	ret = clk_reset(mehci->core_clk, CLK_RESET_ASSERT);
 	if (ret) {
-		clk_disable(mehci->alt_core_clk);
+		clk_disable_unprepare(mehci->alt_core_clk);
 		dev_err(mehci->dev, "usb phy clk assert failed\n");
 		return ret;
 	}
 	usleep_range(10000, 12000);
-	clk_disable(mehci->alt_core_clk);
+	clk_disable_unprepare(mehci->alt_core_clk);
 
 	ret = clk_reset(mehci->core_clk, CLK_RESET_DEASSERT);
 	if (ret)
@@ -423,10 +423,10 @@
 	 */
 	mb();
 
-	clk_disable(mehci->core_clk);
-	clk_disable(mehci->phy_clk);
-	clk_disable(mehci->cal_clk);
-	clk_disable(mehci->ahb_clk);
+	clk_disable_unprepare(mehci->core_clk);
+	clk_disable_unprepare(mehci->phy_clk);
+	clk_disable_unprepare(mehci->cal_clk);
+	clk_disable_unprepare(mehci->ahb_clk);
 	pdata = mehci->dev->platform_data;
 	if (pdata->hub_reset) {
 		ret = msm_xo_mode_vote(mehci->xo_handle, MSM_XO_MODE_OFF);
@@ -477,10 +477,10 @@
 			pr_err("%s failed to vote for"
 				"TCXO D1 buffer%d\n", __func__, ret);
 	}
-	clk_enable(mehci->core_clk);
-	clk_enable(mehci->phy_clk);
-	clk_enable(mehci->cal_clk);
-	clk_enable(mehci->ahb_clk);
+	clk_prepare_enable(mehci->core_clk);
+	clk_prepare_enable(mehci->phy_clk);
+	clk_prepare_enable(mehci->cal_clk);
+	clk_prepare_enable(mehci->ahb_clk);
 
 	temp = readl_relaxed(USB_USBCMD);
 	temp &= ~ASYNC_INTR_CTRL;
@@ -678,18 +678,18 @@
 		goto put_cal_clk;
 	}
 
-	clk_enable(mehci->core_clk);
-	clk_enable(mehci->phy_clk);
-	clk_enable(mehci->cal_clk);
-	clk_enable(mehci->ahb_clk);
+	clk_prepare_enable(mehci->core_clk);
+	clk_prepare_enable(mehci->phy_clk);
+	clk_prepare_enable(mehci->cal_clk);
+	clk_prepare_enable(mehci->ahb_clk);
 
 	return 0;
 
 put_clocks:
-	clk_disable(mehci->core_clk);
-	clk_disable(mehci->phy_clk);
-	clk_disable(mehci->cal_clk);
-	clk_disable(mehci->ahb_clk);
+	clk_disable_unprepare(mehci->core_clk);
+	clk_disable_unprepare(mehci->phy_clk);
+	clk_disable_unprepare(mehci->cal_clk);
+	clk_disable_unprepare(mehci->ahb_clk);
 	clk_put(mehci->ahb_clk);
 put_cal_clk:
 	clk_put(mehci->cal_clk);
diff --git a/drivers/usb/host/ehci-msm72k.c b/drivers/usb/host/ehci-msm72k.c
index 87c75e7..b3939ef 100644
--- a/drivers/usb/host/ehci-msm72k.c
+++ b/drivers/usb/host/ehci-msm72k.c
@@ -79,9 +79,9 @@
 		return;
 
 	if (vote)
-		clk_enable(pdata->ebi1_clk);
+		clk_prepare_enable(pdata->ebi1_clk);
 	else
-		clk_disable(pdata->ebi1_clk);
+		clk_disable_unprepare(pdata->ebi1_clk);
 }
 
 static void msm_xusb_enable_clks(struct msmusb_hcd *mhcd)
@@ -96,8 +96,8 @@
 		/* OTG driver takes care of clock management */
 		break;
 	case USB_PHY_SERIAL_PMIC:
-		clk_enable(mhcd->alt_core_clk);
-		clk_enable(mhcd->iface_clk);
+		clk_prepare_enable(mhcd->alt_core_clk);
+		clk_prepare_enable(mhcd->iface_clk);
 		break;
 	default:
 		pr_err("%s: undefined phy type ( %X )\n", __func__,
@@ -119,8 +119,8 @@
 		/* OTG driver takes care of clock management */
 		break;
 	case USB_PHY_SERIAL_PMIC:
-		clk_disable(mhcd->alt_core_clk);
-		clk_disable(mhcd->iface_clk);
+		clk_disable_unprepare(mhcd->alt_core_clk);
+		clk_disable_unprepare(mhcd->iface_clk);
 		break;
 	default:
 		pr_err("%s: undefined phy type ( %X )\n", __func__,
diff --git a/drivers/usb/otg/msm72k_otg.c b/drivers/usb/otg/msm72k_otg.c
index 59d9769..0ee1827 100644
--- a/drivers/usb/otg/msm72k_otg.c
+++ b/drivers/usb/otg/msm72k_otg.c
@@ -562,9 +562,9 @@
 
 	if (on)
 		/* enable clocks */
-		clk_enable(dev->alt_core_clk);
+		clk_prepare_enable(dev->alt_core_clk);
 	else
-		clk_disable(dev->alt_core_clk);
+		clk_disable_unprepare(dev->alt_core_clk);
 
 	return 0;
 }
@@ -589,7 +589,7 @@
 		 * low power mode routine
 		 */
 		if (dev->pdata->pclk_required_during_lpm)
-			clk_enable(dev->iface_clk);
+			clk_prepare_enable(dev->iface_clk);
 
 		usb_gadget_vbus_connect(xceiv->gadget);
 	} else {
@@ -601,7 +601,7 @@
 		 * low power mode routine
 		 */
 		if (dev->pdata->pclk_required_during_lpm)
-			clk_disable(dev->iface_clk);
+			clk_disable_unprepare(dev->iface_clk);
 
 		otg_pm_qos_update_latency(dev, 0);
 		if (pdata->setup_gpio)
@@ -628,9 +628,9 @@
 		 */
 		if (dev->pdata->pclk_required_during_lpm) {
 			if (on)
-				clk_enable(dev->iface_clk);
+				clk_prepare_enable(dev->iface_clk);
 			else
-				clk_disable(dev->iface_clk);
+				clk_disable_unprepare(dev->iface_clk);
 		}
 
 		dev->start_host(xceiv->host, on);
@@ -759,9 +759,9 @@
 	mb();
 
 	if (dev->iface_clk)
-		clk_disable(dev->iface_clk);
+		clk_disable_unprepare(dev->iface_clk);
 
-	clk_disable(dev->core_clk);
+	clk_disable_unprepare(dev->core_clk);
 	/* usb phy no more require TCXO clock, hence vote for TCXO disable*/
 	ret = msm_xo_mode_vote(dev->xo_handle, MSM_XO_MODE_OFF);
 	if (ret)
@@ -835,10 +835,10 @@
 		pr_err("%s failed to vote for"
 			"TCXO D1 buffer%d\n", __func__, ret);
 
-	clk_enable(dev->core_clk);
+	clk_prepare_enable(dev->core_clk);
 
 	if (dev->iface_clk)
-		clk_enable(dev->iface_clk);
+		clk_prepare_enable(dev->iface_clk);
 
 	temp = readl(USB_USBCMD);
 	temp &= ~ASYNC_INTR_CTRL;
@@ -1550,7 +1550,7 @@
 	unsigned long timeout;
 	u32 mode, work = 0;
 
-	clk_enable(dev->alt_core_clk);
+	clk_prepare_enable(dev->alt_core_clk);
 
 	if (!phy_reset)
 		goto reset_link;
@@ -1596,7 +1596,7 @@
 	/* Ensure that RESET operation is completed before turning off clock */
 	mb();
 
-	clk_disable(dev->alt_core_clk);
+	clk_disable_unprepare(dev->alt_core_clk);
 
 	if ((xceiv->gadget && xceiv->gadget->is_a_peripheral) ||
 			test_bit(ID, &dev->inputs))
@@ -2646,7 +2646,7 @@
 	 */
 	clk_set_rate(dev->core_clk, INT_MAX);
 
-	clk_enable(dev->core_clk);
+	clk_prepare_enable(dev->core_clk);
 
 	if (!dev->pdata->pclk_is_hw_gated) {
 		dev->iface_clk = clk_get(&pdev->dev, "iface_clk");
@@ -2655,7 +2655,7 @@
 			ret = PTR_ERR(dev->iface_clk);
 			goto put_core_clk;
 		}
-		clk_enable(dev->iface_clk);
+		clk_prepare_enable(dev->iface_clk);
 	}
 
 	if (!dev->pdata->phy_reset) {
@@ -2888,11 +2888,11 @@
 		clk_put(dev->phy_reset_clk);
 put_iface_clk:
 	if (dev->iface_clk) {
-		clk_disable(dev->iface_clk);
+		clk_disable_unprepare(dev->iface_clk);
 		clk_put(dev->iface_clk);
 	}
 put_core_clk:
-	clk_disable(dev->core_clk);
+	clk_disable_unprepare(dev->core_clk);
 	clk_put(dev->core_clk);
 put_alt_core_clk:
 	clk_put(dev->alt_core_clk);
@@ -2942,10 +2942,10 @@
 		dev->pdata->chg_init(0);
 	free_irq(dev->irq, pdev);
 	iounmap(dev->regs);
-	clk_disable(dev->core_clk);
+	clk_disable_unprepare(dev->core_clk);
 	clk_put(dev->core_clk);
 	if (dev->iface_clk) {
-		clk_disable(dev->iface_clk);
+		clk_disable_unprepare(dev->iface_clk);
 		clk_put(dev->iface_clk);
 	}
 	if (dev->alt_core_clk)
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index 4e1895f..6964835 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -538,7 +538,7 @@
 			motg->reset_counter++;
 	}
 
-	clk_enable(motg->clk);
+	clk_prepare_enable(motg->clk);
 	ret = msm_otg_phy_reset(motg);
 	if (ret) {
 		dev_err(otg->dev, "phy_reset failed\n");
@@ -558,7 +558,7 @@
 	/* Ensure that RESET operation is completed before turning off clock */
 	mb();
 
-	clk_disable(motg->clk);
+	clk_disable_unprepare(motg->clk);
 
 	if (pdata->otg_control == OTG_PHY_CONTROL) {
 		val = readl_relaxed(USB_OTGSC);
@@ -711,8 +711,8 @@
 
 	/* Ensure that above operation is completed before turning off clocks */
 	mb();
-	clk_disable(motg->pclk);
-	clk_disable(motg->core_clk);
+	clk_disable_unprepare(motg->pclk);
+	clk_disable_unprepare(motg->core_clk);
 
 	/* usb phy no more require TCXO clock, hence vote for TCXO disable */
 	clk_disable_unprepare(motg->xo_handle);
@@ -765,9 +765,9 @@
 		dev_err(otg->dev, "%s failed to vote for "
 			"TCXO D0 buffer%d\n", __func__, ret);
 
-	clk_enable(motg->core_clk);
+	clk_prepare_enable(motg->core_clk);
 
-	clk_enable(motg->pclk);
+	clk_prepare_enable(motg->pclk);
 
 	if (motg->lpm_flags & PHY_PWR_COLLAPSED) {
 		msm_hsusb_ldo_enable(motg, 1);
@@ -2529,7 +2529,7 @@
 		goto free_xo_handle;
 	}
 
-	clk_enable(motg->pclk);
+	clk_prepare_enable(motg->pclk);
 
 	ret = msm_hsusb_init_vddcx(motg, 1);
 	if (ret) {
@@ -2554,7 +2554,7 @@
 		dev_err(&pdev->dev, "hsusb vreg enable failed\n");
 		goto free_ldo_init;
 	}
-	clk_enable(motg->core_clk);
+	clk_prepare_enable(motg->core_clk);
 
 	writel(0, USB_USBINTR);
 	writel(0, USB_OTGSC);
@@ -2652,14 +2652,14 @@
 	free_irq(motg->irq, motg);
 destroy_wlock:
 	wake_lock_destroy(&motg->wlock);
-	clk_disable(motg->core_clk);
+	clk_disable_unprepare(motg->core_clk);
 	msm_hsusb_ldo_enable(motg, 0);
 free_ldo_init:
 	msm_hsusb_ldo_init(motg, 0);
 free_init_vddcx:
 	msm_hsusb_init_vddcx(motg, 0);
 devote_xo_handle:
-	clk_disable(motg->pclk);
+	clk_disable_unprepare(motg->pclk);
 	clk_disable_unprepare(motg->xo_handle);
 free_xo_handle:
 	clk_put(motg->xo_handle);
@@ -2726,8 +2726,8 @@
 	if (cnt >= PHY_SUSPEND_TIMEOUT_USEC)
 		dev_err(otg->dev, "Unable to suspend PHY\n");
 
-	clk_disable(motg->pclk);
-	clk_disable(motg->core_clk);
+	clk_disable_unprepare(motg->pclk);
+	clk_disable_unprepare(motg->core_clk);
 	clk_put(motg->xo_handle);
 	msm_hsusb_ldo_enable(motg, 0);
 	msm_hsusb_ldo_init(motg, 0);