Skip to content

Commit

Permalink
pwm: spear: Implement .apply() callback
Browse files Browse the repository at this point in the history
Just using the previous callbacks to implment a similar procedure as the
legacy handling in the core.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Uwe Kleine-König authored and Thierry Reding committed May 25, 2021
1 parent da0dea8 commit 98761ce
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions drivers/pwm/pwm-spear.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ static inline void spear_pwm_writel(struct spear_pwm_chip *chip,
}

static int spear_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
int duty_ns, int period_ns)
u64 duty_ns, u64 period_ns)
{
struct spear_pwm_chip *pc = to_spear_pwm_chip(chip);
u64 val, div, clk_rate;
Expand Down Expand Up @@ -163,10 +163,35 @@ static void spear_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
clk_disable(pc->clk);
}

static int spear_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
const struct pwm_state *state)
{
int err;

if (state->polarity != PWM_POLARITY_NORMAL)
return -EINVAL;

if (!state->enabled) {
if (pwm->state.enabled)
spear_pwm_disable(chip, pwm);
return 0;
}

if (state->period != pwm->state.period ||
state->duty_cycle != pwm->state.duty_cycle) {
err = spear_pwm_config(chip, pwm, state->duty_cycle, state->period);
if (err)
return err;
}

if (!pwm->state.enabled)
return spear_pwm_enable(chip, pwm);

return 0;
}

static const struct pwm_ops spear_pwm_ops = {
.config = spear_pwm_config,
.enable = spear_pwm_enable,
.disable = spear_pwm_disable,
.apply = spear_pwm_apply,
.owner = THIS_MODULE,
};

Expand Down

0 comments on commit 98761ce

Please sign in to comment.