From: Mark Brown broonie@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 broonie@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;