Browse Source

ramips: 6.1: pwm: rewrite mtk_pwm_ops to fix pwm driver

Upstream dropped support for legacy driver [0]. Rewrite the driver like
the renesas pwm driver [1].

Fixes erros in the form of:
   make: *** [/__w/openwrt/openwrt/openwrt/include/toplevel.mk:232: target/compile] Error 1
  ====== Make errors from logs/target/linux/compile.txt ======
        |                   ^~~~~~~~~~~~~~
  drivers/pwm/pwm-mediatek-ramips.c:107:19: note: (near initialization for 'mtk_pwm_ops.free')
  drivers/pwm/pwm-mediatek-ramips.c:108:10: error: 'const struct pwm_ops' has no member named 'disable'
    108 |         .disable = mtk_pwm_disable,
        |          ^~~~~~~
  drivers/pwm/pwm-mediatek-ramips.c:108:20: error: initialization of 'int (*)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int)' from incompatible pointer type 'void (*)(struct pwm_chip *, struct pwm_device *)' [-Werror=incompatible-pointer-types]
    108 |         .disable = mtk_pwm_disable,
        |                    ^~~~~~~~~~~~~~~
  drivers/pwm/pwm-mediatek-ramips.c:108:20: note: (near initialization for 'mtk_pwm_ops.capture')
  cc1: all warnings being treated as errors

[0] - https://github.com/torvalds/linux/commit/0829c35dc5346e90f428de61896362b51ab58296
[1] - https://github.com/torvalds/linux/commit/ec00cd5e63f05461ab48128775c73c851c3c2b18

Signed-off-by: Nick Hainke <[email protected]>
Nick Hainke 1 year ago
parent
commit
eeeb0b5349
1 changed files with 26 additions and 4 deletions
  1. 26 4
      target/linux/ramips/patches-6.1/845-pwm-add-mediatek-support.patch

+ 26 - 4
target/linux/ramips/patches-6.1/845-pwm-add-mediatek-support.patch

@@ -41,7 +41,7 @@ Signed-off-by: John Crispin <[email protected]>
  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 <[email protected]>
 +	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,
 +};
 +