On Thu, Sep 23, 2021 at 09:12:24PM -0500, Bjorn Andersson wrote:
The existing pxa driver and the upcoming addition of PWM support in the TI sn565dsi86 DSI/eDP bridge driver both has a single PWM channel and thereby a need for a of_xlate function with the period as its single argument.
Introduce a common helper function in the core that can be used as of_xlate by such drivers and migrate the pxa driver to use this.
Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
Changes since v4:
- None
drivers/pwm/core.c | 26 ++++++++++++++++++++++++++ drivers/pwm/pwm-pxa.c | 16 +--------------- include/linux/pwm.h | 2 ++ 3 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 4527f09a5c50..2c6b155002a2 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -152,6 +152,32 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) } EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags);
+struct pwm_device * +of_pwm_single_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) +{
- struct pwm_device *pwm;
- if (pc->of_pwm_n_cells < 1)
return ERR_PTR(-EINVAL);
- /* validate that one cell is specified, optionally with flags */
- if (args->args_count != 1 && args->args_count != 2)
return ERR_PTR(-EINVAL);
- pwm = pwm_request_from_chip(pc, 0, NULL);
- if (IS_ERR(pwm))
return pwm;
- pwm->args.period = args->args[0];
- pwm->args.polarity = PWM_POLARITY_NORMAL;
- if (args->args_count == 2 && args->args[2] & PWM_POLARITY_INVERTED)
pwm->args.polarity = PWM_POLARITY_INVERSED;
of_pwm_xlate_with_flags is a bit more complicated. Translating accordingly this would yield:
if (pc->of_pwm_n_cells >= 2) { if (args->args_count > 1 && args->args[1] & PWM_POLARITY_INVERTED) pwm->args.polarity = PWM_POLARITY_INVERSED; }
Given that pc->of_pwm_n_cells isn't used when a phandle is parsed (in of_pwm_get()) I think your variant is fine.
So I think technically the patch is good, for me the question is if we want to make new drivers of_pwm_xlate_with_flags for consistency even though this would mean that the first argument has to be 0 for all phandles. Thierry? Lee?
Best regards Uwe