diff options
| author | Uwe Kleine-König <u.kleine-koenig@baylibre.com> | 2025-04-30 11:57:47 +0200 |
|---|---|---|
| committer | Stephen Boyd <sboyd@kernel.org> | 2025-06-19 18:09:55 -0700 |
| commit | 574c79582963319c39b0d9cfd231367fb96ec907 (patch) | |
| tree | cb7df67cf34560fe8fa7c128c98e66ea6e44cbb9 | |
| parent | 6ae97be59c7bce32c83d4cdb39902d64831dc714 (diff) | |
clk: pwm: Convert to use pwm_apply_might_sleep()
pwm_config() is an old function that I'd like to remove. So convert this
driver to use pwm_apply_might_sleep().
There is a minor change in behaviour as the explicitly calculated
duty_cycle used an uprounding division while pwm_set_relative_duty_cycle()
rounds down. I don't expect that difference to matter in practice though.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/f194fad5ee8bdd3fda6159324524979729683653.1746006578.git.ukleinek@baylibre.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
| -rw-r--r-- | drivers/clk/clk-pwm.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/clk/clk-pwm.c b/drivers/clk/clk-pwm.c index 429150bba8cf..f5e6fef3f4d5 100644 --- a/drivers/clk/clk-pwm.c +++ b/drivers/clk/clk-pwm.c @@ -14,6 +14,7 @@ struct clk_pwm { struct clk_hw hw; struct pwm_device *pwm; + struct pwm_state state; u32 fixed_rate; }; @@ -26,7 +27,7 @@ static int clk_pwm_prepare(struct clk_hw *hw) { struct clk_pwm *clk_pwm = to_clk_pwm(hw); - return pwm_enable(clk_pwm->pwm); + return pwm_apply_might_sleep(clk_pwm->pwm, &clk_pwm->state); } static void clk_pwm_unprepare(struct clk_hw *hw) @@ -106,15 +107,16 @@ static int clk_pwm_probe(struct platform_device *pdev) return -EINVAL; } - /* - * FIXME: pwm_apply_args() should be removed when switching to the - * atomic PWM API. - */ - pwm_apply_args(pwm); - ret = pwm_config(pwm, (pargs.period + 1) >> 1, pargs.period); + pwm_init_state(pwm, &clk_pwm->state); + pwm_set_relative_duty_cycle(&clk_pwm->state, 1, 2); + + ret = pwm_apply_might_sleep(pwm, &clk_pwm->state); if (ret < 0) return ret; + /* set enabled only now to not enable output above */ + clk_pwm->state.enabled = true; + clk_name = node->name; of_property_read_string(node, "clock-output-names", &clk_name); |
