pwm: ep93xx: Implement .apply callback
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 23 Jun 2021 14:02:39 +0000 (16:02 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Wed, 30 Jun 2021 17:12:20 +0000 (19:12 +0200)
To ease review this reuses the formerly implemented callbacks.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/pwm-ep93xx.c

index 4ca7079..3ef4b41 100644 (file)
@@ -156,13 +156,48 @@ static void ep93xx_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
        clk_disable(ep93xx_pwm->clk);
 }
 
+static int ep93xx_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
+                           const struct pwm_state *state)
+{
+       int ret;
+       bool enabled = state->enabled;
+
+       if (state->polarity != pwm->state.polarity) {
+               if (enabled) {
+                       ep93xx_pwm_disable(chip, pwm);
+                       enabled = false;
+               }
+
+               ret = ep93xx_pwm_polarity(chip, pwm, state->polarity);
+               if (ret)
+                       return ret;
+       }
+
+       if (!state->enabled) {
+               if (enabled)
+                       ep93xx_pwm_disable(chip, pwm);
+
+               return 0;
+       }
+
+       if (state->period != pwm->state.period ||
+           state->duty_cycle != pwm->state.duty_cycle) {
+               ret = ep93xx_pwm_config(chip, pwm, (int)state->duty_cycle,
+                                       (int)state->period);
+               if (ret)
+                       return ret;
+       }
+
+       if (!enabled)
+               return ep93xx_pwm_enable(chip, pwm);
+
+       return 0;
+}
+
 static const struct pwm_ops ep93xx_pwm_ops = {
        .request = ep93xx_pwm_request,
        .free = ep93xx_pwm_free,
-       .config = ep93xx_pwm_config,
-       .set_polarity = ep93xx_pwm_polarity,
-       .enable = ep93xx_pwm_enable,
-       .disable = ep93xx_pwm_disable,
+       .apply = ep93xx_pwm_apply,
        .owner = THIS_MODULE,
 };