pwm: lpc18xx-sct: Simplify using devm_clk_get_enabled()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 18 Jul 2023 14:41:28 +0000 (16:41 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Fri, 28 Jul 2023 07:38:04 +0000 (09:38 +0200)
With devm_clk_get_enabled() the call to clk_disable_unprepare() can be
dropped from the error path and the remove callback.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/pwm-lpc18xx-sct.c

index 9ff6311..7a19a84 100644 (file)
@@ -367,30 +367,21 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
        if (IS_ERR(lpc18xx_pwm->base))
                return PTR_ERR(lpc18xx_pwm->base);
 
-       lpc18xx_pwm->pwm_clk = devm_clk_get(&pdev->dev, "pwm");
+       lpc18xx_pwm->pwm_clk = devm_clk_get_enabled(&pdev->dev, "pwm");
        if (IS_ERR(lpc18xx_pwm->pwm_clk))
                return dev_err_probe(&pdev->dev, PTR_ERR(lpc18xx_pwm->pwm_clk),
                                     "failed to get pwm clock\n");
 
-       ret = clk_prepare_enable(lpc18xx_pwm->pwm_clk);
-       if (ret < 0)
-               return dev_err_probe(&pdev->dev, ret,
-                                    "could not prepare or enable pwm clock\n");
-
        lpc18xx_pwm->clk_rate = clk_get_rate(lpc18xx_pwm->pwm_clk);
-       if (!lpc18xx_pwm->clk_rate) {
-               ret = dev_err_probe(&pdev->dev,
-                                   -EINVAL, "pwm clock has no frequency\n");
-               goto disable_pwmclk;
-       }
+       if (!lpc18xx_pwm->clk_rate)
+               return dev_err_probe(&pdev->dev,
+                                    -EINVAL, "pwm clock has no frequency\n");
 
        /*
         * If clkrate is too fast, the calculations in .apply() might overflow.
         */
-       if (lpc18xx_pwm->clk_rate > NSEC_PER_SEC) {
-               ret = dev_err_probe(&pdev->dev, -EINVAL, "pwm clock to fast\n");
-               goto disable_pwmclk;
-       }
+       if (lpc18xx_pwm->clk_rate > NSEC_PER_SEC)
+               return dev_err_probe(&pdev->dev, -EINVAL, "pwm clock to fast\n");
 
        mutex_init(&lpc18xx_pwm->res_lock);
        mutex_init(&lpc18xx_pwm->period_lock);
@@ -436,18 +427,12 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
        lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL, val);
 
        ret = pwmchip_add(&lpc18xx_pwm->chip);
-       if (ret < 0) {
-               dev_err_probe(&pdev->dev, ret, "pwmchip_add failed\n");
-               goto disable_pwmclk;
-       }
+       if (ret < 0)
+               return dev_err_probe(&pdev->dev, ret, "pwmchip_add failed\n");
 
        platform_set_drvdata(pdev, lpc18xx_pwm);
 
        return 0;
-
-disable_pwmclk:
-       clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
-       return ret;
 }
 
 static void lpc18xx_pwm_remove(struct platform_device *pdev)
@@ -460,8 +445,6 @@ static void lpc18xx_pwm_remove(struct platform_device *pdev)
        val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
        lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL,
                           val | LPC18XX_PWM_CTRL_HALT);
-
-       clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
 }
 
 static struct platform_driver lpc18xx_pwm_driver = {