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