Commit 4aed0ccd authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Thierry Reding
Browse files

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: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent 28a1dadc
Loading
Loading
Loading
Loading
+8 −25
Original line number Diff line number Diff line
@@ -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,
	if (!lpc18xx_pwm->clk_rate)
		return dev_err_probe(&pdev->dev,
				     -EINVAL, "pwm clock has no frequency\n");
		goto disable_pwmclk;
	}

	/*
	 * 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 = {