Message ID | 20240129085627.2386470-2-u.kleine-koenig@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | pwm: atmel: Don't use pwm consumer API | expand |
On 29.01.2024 10:56, Uwe Kleine-König wrote: > Lowlevel driver callbacks are not supposed to use the consumer API > functions. Currently this works, but with the upcoming locking changes > this probably results in dead locks. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev> > --- > drivers/pwm/pwm-atmel.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c > index 47bcc8a3bf9d..26573829e391 100644 > --- a/drivers/pwm/pwm-atmel.c > +++ b/drivers/pwm/pwm-atmel.c > @@ -294,19 +294,16 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, > const struct pwm_state *state) > { > struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); > - struct pwm_state cstate; > unsigned long cprd, cdty; > u32 pres, val; > int ret; > > - pwm_get_state(pwm, &cstate); > - > if (state->enabled) { > unsigned long clkrate = clk_get_rate(atmel_pwm->clk); > > - if (cstate.enabled && > - cstate.polarity == state->polarity && > - cstate.period == state->period) { > + if (pwm->state.enabled && > + pwm->state.polarity == state->polarity && > + pwm->state.period == state->period) { > u32 cmr = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); > > cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, > @@ -328,7 +325,7 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, > > atmel_pwm_calculate_cdty(state, clkrate, cprd, pres, &cdty); > > - if (cstate.enabled) { > + if (pwm->state.enabled) { > atmel_pwm_disable(chip, pwm, false); > } else { > ret = clk_enable(atmel_pwm->clk); > @@ -348,7 +345,7 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, > atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); > atmel_pwm_set_cprd_cdty(chip, pwm, cprd, cdty); > atmel_pwm_writel(atmel_pwm, PWM_ENA, 1 << pwm->hwpwm); > - } else if (cstate.enabled) { > + } else if (pwm->state.enabled) { > atmel_pwm_disable(chip, pwm, true); > } >
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c index 47bcc8a3bf9d..26573829e391 100644 --- a/drivers/pwm/pwm-atmel.c +++ b/drivers/pwm/pwm-atmel.c @@ -294,19 +294,16 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state) { struct atmel_pwm_chip *atmel_pwm = to_atmel_pwm_chip(chip); - struct pwm_state cstate; unsigned long cprd, cdty; u32 pres, val; int ret; - pwm_get_state(pwm, &cstate); - if (state->enabled) { unsigned long clkrate = clk_get_rate(atmel_pwm->clk); - if (cstate.enabled && - cstate.polarity == state->polarity && - cstate.period == state->period) { + if (pwm->state.enabled && + pwm->state.polarity == state->polarity && + pwm->state.period == state->period) { u32 cmr = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, PWM_CMR); cprd = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm, @@ -328,7 +325,7 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, atmel_pwm_calculate_cdty(state, clkrate, cprd, pres, &cdty); - if (cstate.enabled) { + if (pwm->state.enabled) { atmel_pwm_disable(chip, pwm, false); } else { ret = clk_enable(atmel_pwm->clk); @@ -348,7 +345,7 @@ static int atmel_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, atmel_pwm_ch_writel(atmel_pwm, pwm->hwpwm, PWM_CMR, val); atmel_pwm_set_cprd_cdty(chip, pwm, cprd, cdty); atmel_pwm_writel(atmel_pwm, PWM_ENA, 1 << pwm->hwpwm); - } else if (cstate.enabled) { + } else if (pwm->state.enabled) { atmel_pwm_disable(chip, pwm, true); }
Lowlevel driver callbacks are not supposed to use the consumer API functions. Currently this works, but with the upcoming locking changes this probably results in dead locks. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- drivers/pwm/pwm-atmel.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-)