ramips: 6.1: pwm: rewrite mtk_pwm_ops to fix pwm driver
[openwrt/staging/jow.git] / target / linux / ramips / patches-6.1 / 845-pwm-add-mediatek-support.patch
index 06074d6031028e91c7a0bea4da8b639462d9957c..15c7cf39a29e1471e8f837784771609c4abbe2eb 100644 (file)
@@ -41,7 +41,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
  obj-$(CONFIG_PWM_NTXEC)               += pwm-ntxec.o
 --- /dev/null
 +++ b/drivers/pwm/pwm-mediatek-ramips.c
-@@ -0,0 +1,175 @@
+@@ -0,0 +1,197 @@
 +/*
 + * Mediatek Pulse Width Modulator driver
 + *
@@ -146,10 +146,32 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
 +      iowrite32(val, pc->mmio_base);
 +}
 +
++static int mtk_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
++                       const struct pwm_state *state)
++{
++      int err;
++      bool enabled = pwm->state.enabled;
++
++      if (!state->enabled) {
++              if (enabled)
++                      mtk_pwm_disable(chip, pwm);
++
++              return 0;
++      }
++
++      err = mtk_pwm_config(pwm->chip, pwm,
++                           state->duty_cycle, state->period);
++      if (err)
++              return err;
++
++      if (!enabled)
++              err = mtk_pwm_enable(chip, pwm);
++
++      return err;
++}
++
 +static const struct pwm_ops mtk_pwm_ops = {
-+      .config = mtk_pwm_config,
-+      .enable = mtk_pwm_enable,
-+      .disable = mtk_pwm_disable,
++      .apply = mtk_pwm_apply,
 +      .owner = THIS_MODULE,
 +};
 +