]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pwm: atmel: Don't use pwm consumer API
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 29 Jan 2024 08:56:25 +0000 (09:56 +0100)
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 15 Feb 2024 11:28:02 +0000 (12:28 +0100)
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.

Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
Link: https://lore.kernel.org/r/20240129085627.2386470-2-u.kleine-koenig@pengutronix.de
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
drivers/pwm/pwm-atmel.c

index 47bcc8a3bf9d50c48cf80f29e1b03defdb388e4c..26573829e391427d2f5aa734df58424011d6c854 100644 (file)
@@ -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);
        }