pwm: Make of_pwm_xlate_with_flags() work with #pwm-cells = <2>
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 10 May 2021 14:06:37 +0000 (16:06 +0200)
committerThierry Reding <thierry.reding@gmail.com>
Tue, 25 May 2021 16:13:51 +0000 (18:13 +0200)
The two functions of_pwm_simple_xlate() and of_pwm_xlate_with_flags()
are quite similar. of_pwm_simple_xlate() only supports two-cell PWM
specifiers while of_pwm_xlate_with_flags() only supports PWM specifiers
with 3 or more cells. The latter can easily be modified to behave
identically to of_pwm_simple_xlate() for two-cell PWM specifiers. This
is implemented here and allows to drop of_pwm_simple_xlate() in the next
commit.

There is a small detail that is different now in the two-cell specifier
case in of_pwm_xlate_with_flags(): pwm->args.polarity is unconditionally
initialized to PWM_POLARITY_NORMAL in the latter. I didn't find a case
where this matters and doing that explicitly is the more robust
approach.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
[thierry.reding@gmail.com: fix up checkpatch warnings]
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/core.c

index c4d5c06..6d3a1c8 100644 (file)
@@ -126,8 +126,7 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
 {
        struct pwm_device *pwm;
 
-       /* check, whether the driver supports a third cell for flags */
-       if (pc->of_pwm_n_cells < 3)
+       if (pc->of_pwm_n_cells < 2)
                return ERR_PTR(-EINVAL);
 
        /* flags in the third cell are optional */
@@ -144,8 +143,10 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args)
        pwm->args.period = args->args[1];
        pwm->args.polarity = PWM_POLARITY_NORMAL;
 
-       if (args->args_count > 2 && args->args[2] & PWM_POLARITY_INVERTED)
-               pwm->args.polarity = PWM_POLARITY_INVERSED;
+       if (pc->of_pwm_n_cells >= 3) {
+               if (args->args_count > 2 && args->args[2] & PWM_POLARITY_INVERTED)
+                       pwm->args.polarity = PWM_POLARITY_INVERSED;
+       }
 
        return pwm;
 }