pwm: lpc18xx-sct: Simplify using devm_clk_get_enabled()

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>
This commit is contained in:
Uwe Kleine-König 2023-07-18 16:41:28 +02:00 committed by Thierry Reding
parent 28a1dadc49
commit 4aed0ccd68

View file

@ -367,30 +367,21 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
if (IS_ERR(lpc18xx_pwm->base)) if (IS_ERR(lpc18xx_pwm->base))
return PTR_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)) if (IS_ERR(lpc18xx_pwm->pwm_clk))
return dev_err_probe(&pdev->dev, PTR_ERR(lpc18xx_pwm->pwm_clk), return dev_err_probe(&pdev->dev, PTR_ERR(lpc18xx_pwm->pwm_clk),
"failed to get pwm clock\n"); "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); lpc18xx_pwm->clk_rate = clk_get_rate(lpc18xx_pwm->pwm_clk);
if (!lpc18xx_pwm->clk_rate) { if (!lpc18xx_pwm->clk_rate)
ret = dev_err_probe(&pdev->dev, return dev_err_probe(&pdev->dev,
-EINVAL, "pwm clock has no frequency\n"); -EINVAL, "pwm clock has no frequency\n");
goto disable_pwmclk;
}
/* /*
* If clkrate is too fast, the calculations in .apply() might overflow. * If clkrate is too fast, the calculations in .apply() might overflow.
*/ */
if (lpc18xx_pwm->clk_rate > NSEC_PER_SEC) { if (lpc18xx_pwm->clk_rate > NSEC_PER_SEC)
ret = dev_err_probe(&pdev->dev, -EINVAL, "pwm clock to fast\n"); return dev_err_probe(&pdev->dev, -EINVAL, "pwm clock to fast\n");
goto disable_pwmclk;
}
mutex_init(&lpc18xx_pwm->res_lock); mutex_init(&lpc18xx_pwm->res_lock);
mutex_init(&lpc18xx_pwm->period_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); lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL, val);
ret = pwmchip_add(&lpc18xx_pwm->chip); ret = pwmchip_add(&lpc18xx_pwm->chip);
if (ret < 0) { if (ret < 0)
dev_err_probe(&pdev->dev, ret, "pwmchip_add failed\n"); return dev_err_probe(&pdev->dev, ret, "pwmchip_add failed\n");
goto disable_pwmclk;
}
platform_set_drvdata(pdev, lpc18xx_pwm); platform_set_drvdata(pdev, lpc18xx_pwm);
return 0; return 0;
disable_pwmclk:
clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
return ret;
} }
static void lpc18xx_pwm_remove(struct platform_device *pdev) 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); val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL, lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL,
val | LPC18XX_PWM_CTRL_HALT); val | LPC18XX_PWM_CTRL_HALT);
clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
} }
static struct platform_driver lpc18xx_pwm_driver = { static struct platform_driver lpc18xx_pwm_driver = {