From: Mark Brown <broo...@linaro.org>

Since we only enable the PHY clock on init and the PHY init and shutdown
does not occur in atomitc context there is no need to prepare the clock
before it is enabled.  Move the clk_prepare() operations to go along
with the enables, allowing the clock to be fully idle when not in use.

Signed-off-by: Mark Brown <broo...@linaro.org>
---
 drivers/usb/phy/phy-nop.c | 22 +++-------------------
 1 file changed, 3 insertions(+), 19 deletions(-)

diff --git a/drivers/usb/phy/phy-nop.c b/drivers/usb/phy/phy-nop.c
index f52b7f8..35838f4 100644
--- a/drivers/usb/phy/phy-nop.c
+++ b/drivers/usb/phy/phy-nop.c
@@ -80,7 +80,7 @@ static int nop_init(struct usb_phy *phy)
        }
 
        if (!IS_ERR(nop->clk))
-               clk_enable(nop->clk);
+               clk_prepare_enable(nop->clk);
 
        if (!IS_ERR(nop->reset)) {
                /* De-assert RESET */
@@ -102,7 +102,7 @@ static void nop_shutdown(struct usb_phy *phy)
        }
 
        if (!IS_ERR(nop->clk))
-               clk_disable(nop->clk);
+               clk_disable_unprepare(nop->clk);
 
        if (!IS_ERR(nop->vcc)) {
                if (regulator_disable(nop->vcc))
@@ -190,14 +190,6 @@ static int nop_usb_xceiv_probe(struct platform_device 
*pdev)
                }
        }
 
-       if (!IS_ERR(nop->clk)) {
-               err = clk_prepare(nop->clk);
-               if (err) {
-                       dev_err(&pdev->dev, "Error preparing clock\n");
-                       return err;
-               }
-       }
-
        nop->vcc = devm_regulator_get(&pdev->dev, "vcc");
        if (IS_ERR(nop->vcc)) {
                dev_dbg(&pdev->dev, "Error getting vcc regulator: %ld\n",
@@ -231,7 +223,7 @@ static int nop_usb_xceiv_probe(struct platform_device *pdev)
        if (err) {
                dev_err(&pdev->dev, "can't register transceiver, err: %d\n",
                        err);
-               goto err_add;
+               return err;
        }
 
        platform_set_drvdata(pdev, nop);
@@ -239,20 +231,12 @@ static int nop_usb_xceiv_probe(struct platform_device 
*pdev)
        ATOMIC_INIT_NOTIFIER_HEAD(&nop->phy.notifier);
 
        return 0;
-
-err_add:
-       if (!IS_ERR(nop->clk))
-               clk_unprepare(nop->clk);
-       return err;
 }
 
 static int nop_usb_xceiv_remove(struct platform_device *pdev)
 {
        struct nop_usb_xceiv *nop = platform_get_drvdata(pdev);
 
-       if (!IS_ERR(nop->clk))
-               clk_unprepare(nop->clk);
-
        usb_remove_phy(&nop->phy);
 
        return 0;
-- 
1.8.4.rc1

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

Reply via email to