On Thu, Feb 10, 2022 at 05:05:02PM +0800, Song Chen wrote: > Introduce apply in pwm_ops to replace legacy operations, > like enable, disable, config and set_polarity. > > Signed-off-by: Song Chen > --- > drivers/staging/greybus/pwm.c | 46 +++++++++++++++-------------------- > 1 file changed, 19 insertions(+), 27 deletions(-) > > diff --git a/drivers/staging/greybus/pwm.c b/drivers/staging/greybus/pwm.c > index 891a6a672378..e1889cf979b2 100644 > --- a/drivers/staging/greybus/pwm.c > +++ b/drivers/staging/greybus/pwm.c > @@ -204,43 +204,35 @@ static void gb_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm) > gb_pwm_deactivate_operation(pwmc, pwm->hwpwm); > } > > -static int gb_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm, > - int duty_ns, int period_ns) > -{ > - struct gb_pwm_chip *pwmc = pwm_chip_to_gb_pwm_chip(chip); > - > - return gb_pwm_config_operation(pwmc, pwm->hwpwm, duty_ns, period_ns); > -}; > - > -static int gb_pwm_set_polarity(struct pwm_chip *chip, struct pwm_device *pwm, > - enum pwm_polarity polarity) > +static int gb_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, > + const struct pwm_state *state) > { > + int ret; > struct gb_pwm_chip *pwmc = pwm_chip_to_gb_pwm_chip(chip); > > - return gb_pwm_set_polarity_operation(pwmc, pwm->hwpwm, polarity); > -}; > - > -static int gb_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) > -{ > - struct gb_pwm_chip *pwmc = pwm_chip_to_gb_pwm_chip(chip); > + /* set period and duty cycle*/ > + ret = gb_pwm_config_operation(pwmc, pwm->hwpwm, state->duty_cycle, state->period); gb_pwm_config_operation's 3rd parameter is an u32, so you're loosing bits here as state->duty_cycle is a u64. Ditto for period. Also it would be nice if you go from .duty_cycle = A, .period = B, .enabled = 1 to .duty_cycle = C, .period = D, .enabled = 0 that C/D wasn't visible on the output pin. So please disable earlier (but keep enable at the end). Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |