Hi!

> .get_state() might fail in some cases. To make it possible that a driver
> signals such a failure change the prototype of .get_state() to return an
> error code.
> 
> This patch was created using coccinelle and the following semantic patch:
> 
> @p1@
> identifier getstatefunc;
> identifier driver;
> @@
>  struct pwm_ops driver = {
>         ...,
>         .get_state = getstatefunc
>         ,...
>  };
> 
> @p2@
> identifier p1.getstatefunc;
> identifier chip, pwm, state;
> @@
> -void
> +int
>  getstatefunc(struct pwm_chip *chip, struct pwm_device *pwm, struct pwm_state 
> *state)
>  {
>    ...
> -  return;
> +  return 0;
>    ...
>  }
> 
> plus the actual change of the prototype in include/linux/pwm.h (plus some
> manual fixing of indentions and empty lines).
> 
> So for now all drivers return success unconditionally. They are adapted
> in the following patches to make the changes easier reviewable.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koe...@pengutronix.de>

LED part:

Acked-by: Pavel Machek <pa...@ucw.cz>

Best regards,
                                                        Pavel

>  static const struct pwm_ops ti_sn_pwm_ops = {
> diff --git a/drivers/leds/rgb/leds-qcom-lpg.c 
> b/drivers/leds/rgb/leds-qcom-lpg.c
> index 02f51cc61837..741cc2fd817d 100644
> --- a/drivers/leds/rgb/leds-qcom-lpg.c
> +++ b/drivers/leds/rgb/leds-qcom-lpg.c
> @@ -968,8 +968,8 @@ static int lpg_pwm_apply(struct pwm_chip *chip, struct 
> pwm_device *pwm,
>       return ret;
>  }
>  
> -static void lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> -                           struct pwm_state *state)
> +static int lpg_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
> +                          struct pwm_state *state)
>  {
>       struct lpg *lpg = container_of(chip, struct lpg, pwm);
>       struct lpg_channel *chan = &lpg->channels[pwm->hwpwm];
> @@ -982,20 +982,20 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, 
> struct pwm_device *pwm,
>  
>       ret = regmap_read(lpg->map, chan->base + LPG_SIZE_CLK_REG, &val);
>       if (ret)
> -             return;
> +             return 0;
>  
>       refclk = lpg_clk_rates[val & PWM_CLK_SELECT_MASK];
>       if (refclk) {
>               ret = regmap_read(lpg->map, chan->base + LPG_PREDIV_CLK_REG, 
> &val);
>               if (ret)
> -                     return;
> +                     return 0;
>  
>               pre_div = lpg_pre_divs[FIELD_GET(PWM_FREQ_PRE_DIV_MASK, val)];
>               m = FIELD_GET(PWM_FREQ_EXP_MASK, val);
>  
>               ret = regmap_bulk_read(lpg->map, chan->base + PWM_VALUE_REG, 
> &pwm_value, sizeof(pwm_value));
>               if (ret)
> -                     return;
> +                     return 0;
>  
>               state->period = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * 
> LPG_RESOLUTION * pre_div * (1 << m), refclk);
>               state->duty_cycle = DIV_ROUND_UP_ULL((u64)NSEC_PER_SEC * 
> pwm_value * pre_div * (1 << m), refclk);
> @@ -1006,13 +1006,15 @@ static void lpg_pwm_get_state(struct pwm_chip *chip, 
> struct pwm_device *pwm,
>  
>       ret = regmap_read(lpg->map, chan->base + PWM_ENABLE_CONTROL_REG, &val);
>       if (ret)
> -             return;
> +             return 0;
>  
>       state->enabled = FIELD_GET(LPG_ENABLE_CONTROL_OUTPUT, val);
>       state->polarity = PWM_POLARITY_NORMAL;
>  
>       if (state->duty_cycle > state->period)
>               state->duty_cycle = state->period;
> +
> +     return 0;
>  }

-- 
People of Russia, stop Putin before his war on Ukraine escalates.

Attachment: signature.asc
Description: PGP signature

Reply via email to