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:
parent
28a1dadc49
commit
4aed0ccd68
@ -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 = {
|
||||||
|
Loading…
Reference in New Issue
Block a user