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-koenig@xxxxxxxxxxxxxx> LED part: Acked-by: Pavel Machek <pavel@xxxxxx> 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