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/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);