From: "Lothar Waßmann" <LW@KARO-electronics.de> To: linux-pwm@vger.kernel.org Cc: "Sascha Hauer" <s.hauer@pengutronix.de>, "Thierry Reding" <thierry.reding@gmail.com>, linux-arm-kernel@lists.infradead.org, "Shawn Guo" <shawn.guo@linaro.org>, "Lothar Waßmann" <LW@KARO-electronics.de> Subject: [PATCHv6 2/3] pwm: make the PWM_POLARITY flag in DTB optional Date: Fri, 10 Oct 2014 16:22:28 +0200 [thread overview] Message-ID: <1412950949-7505-3-git-send-email-LW@KARO-electronics.de> (raw) In-Reply-To: <1412950949-7505-1-git-send-email-LW@KARO-electronics.de> Change the pwm chip driver registration, so that a chip driver that supports polarity inversion can still be used with DTBs that don't provide the 'PWM_POLARITY' flag. This is done to provide polarity inversion support for the pwm-imx driver without having to modify all existing DTS files. Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de> --- drivers/pwm/core.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 130bbea..0ff1bb0 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -136,9 +136,14 @@ 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) return ERR_PTR(-EINVAL); + /* flags in the third cell are optional */ + if (args->args_count < 2) + return ERR_PTR(-EINVAL); + if (args->args[0] >= pc->npwm) return ERR_PTR(-EINVAL); @@ -148,10 +153,12 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) pwm_set_period(pwm, args->args[1]); - if (args->args[2] & PWM_POLARITY_INVERTED) - pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); - else - pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); + if (args->args_count > 2) { + if (args->args[2] & PWM_POLARITY_INVERTED) + pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); + else + pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); + } return pwm; } @@ -162,9 +169,14 @@ of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) { struct pwm_device *pwm; + /* sanity check driver support */ if (pc->of_pwm_n_cells < 2) return ERR_PTR(-EINVAL); + /* all cells are required */ + if (args->args_count != pc->of_pwm_n_cells) + return ERR_PTR(-EINVAL); + if (args->args[0] >= pc->npwm) return ERR_PTR(-EINVAL); @@ -536,13 +548,6 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id) goto put; } - if (args.args_count != pc->of_pwm_n_cells) { - pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name, - args.np->full_name); - pwm = ERR_PTR(-EINVAL); - goto put; - } - pwm = pc->of_xlate(pc, &args); if (IS_ERR(pwm)) goto put; -- 1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: LW@KARO-electronics.de (Lothar Waßmann) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv6 2/3] pwm: make the PWM_POLARITY flag in DTB optional Date: Fri, 10 Oct 2014 16:22:28 +0200 [thread overview] Message-ID: <1412950949-7505-3-git-send-email-LW@KARO-electronics.de> (raw) In-Reply-To: <1412950949-7505-1-git-send-email-LW@KARO-electronics.de> Change the pwm chip driver registration, so that a chip driver that supports polarity inversion can still be used with DTBs that don't provide the 'PWM_POLARITY' flag. This is done to provide polarity inversion support for the pwm-imx driver without having to modify all existing DTS files. Signed-off-by: Lothar Wa?mann <LW@KARO-electronics.de> --- drivers/pwm/core.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 130bbea..0ff1bb0 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -136,9 +136,14 @@ 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) return ERR_PTR(-EINVAL); + /* flags in the third cell are optional */ + if (args->args_count < 2) + return ERR_PTR(-EINVAL); + if (args->args[0] >= pc->npwm) return ERR_PTR(-EINVAL); @@ -148,10 +153,12 @@ of_pwm_xlate_with_flags(struct pwm_chip *pc, const struct of_phandle_args *args) pwm_set_period(pwm, args->args[1]); - if (args->args[2] & PWM_POLARITY_INVERTED) - pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); - else - pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); + if (args->args_count > 2) { + if (args->args[2] & PWM_POLARITY_INVERTED) + pwm_set_polarity(pwm, PWM_POLARITY_INVERSED); + else + pwm_set_polarity(pwm, PWM_POLARITY_NORMAL); + } return pwm; } @@ -162,9 +169,14 @@ of_pwm_simple_xlate(struct pwm_chip *pc, const struct of_phandle_args *args) { struct pwm_device *pwm; + /* sanity check driver support */ if (pc->of_pwm_n_cells < 2) return ERR_PTR(-EINVAL); + /* all cells are required */ + if (args->args_count != pc->of_pwm_n_cells) + return ERR_PTR(-EINVAL); + if (args->args[0] >= pc->npwm) return ERR_PTR(-EINVAL); @@ -536,13 +548,6 @@ struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id) goto put; } - if (args.args_count != pc->of_pwm_n_cells) { - pr_debug("%s: wrong #pwm-cells for %s\n", np->full_name, - args.np->full_name); - pwm = ERR_PTR(-EINVAL); - goto put; - } - pwm = pc->of_xlate(pc, &args); if (IS_ERR(pwm)) goto put; -- 1.7.10.4
next prev parent reply other threads:[~2014-10-10 14:22 UTC|newest] Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-10-07 13:55 [PATCHv4 0/3] pwm: imx: support output polarity inversion Lothar Waßmann 2014-10-07 13:55 ` Lothar Waßmann 2014-10-07 13:55 ` [PATCHv5 1/3] pwm: print error messages with pr_err() instead of pr_debug() Lothar Waßmann 2014-10-07 13:55 ` Lothar Waßmann 2014-10-07 13:55 ` [PATCHv5 2/3] pwm: make the PWM_POLARITY flag in DTB optional Lothar Waßmann 2014-10-07 13:55 ` Lothar Waßmann 2014-10-09 15:16 ` Thierry Reding 2014-10-09 15:16 ` Thierry Reding 2014-10-10 14:22 ` [PATCHv6 0/3] pwm: imx: support output polarity inversion Lothar Waßmann 2014-10-10 14:22 ` Lothar Waßmann 2014-10-10 14:22 ` [PATCHv6 1/3] pwm: print error messages with pr_err() instead of pr_debug() Lothar Waßmann 2014-10-10 14:22 ` Lothar Waßmann 2014-10-10 14:22 ` Lothar Waßmann [this message] 2014-10-10 14:22 ` [PATCHv6 2/3] pwm: make the PWM_POLARITY flag in DTB optional Lothar Waßmann 2014-10-10 14:22 ` [PATCH 3/3] pwm: imx: support output polarity inversion Lothar Waßmann 2014-10-10 14:22 ` Lothar Waßmann 2016-09-08 22:15 ` [PATCHv6 0/3] " Stefan Agner 2016-09-08 22:15 ` Stefan Agner 2016-09-09 7:18 ` Lothar Waßmann 2016-09-09 7:18 ` Lothar Waßmann 2016-09-12 12:45 ` Alexandre Belloni 2016-09-12 12:45 ` Alexandre Belloni 2016-09-12 14:04 ` Uwe Kleine-König 2016-09-12 14:04 ` Uwe Kleine-König 2016-09-12 16:51 ` Stefan Agner 2016-09-12 16:51 ` Stefan Agner 2016-09-12 20:00 ` Uwe Kleine-König 2016-09-12 20:00 ` Uwe Kleine-König 2016-09-12 21:12 ` Clemens Gruber 2016-09-12 21:12 ` Clemens Gruber 2016-09-13 6:45 ` Uwe Kleine-König 2016-09-13 6:45 ` Uwe Kleine-König 2016-09-12 13:54 ` Vladimir Zapolskiy 2016-09-12 13:54 ` Vladimir Zapolskiy 2014-10-07 13:55 ` [PATCHv5 3/3] " Lothar Waßmann 2014-10-07 13:55 ` Lothar Waßmann
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1412950949-7505-3-git-send-email-LW@KARO-electronics.de \ --to=lw@karo-electronics.de \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-pwm@vger.kernel.org \ --cc=s.hauer@pengutronix.de \ --cc=shawn.guo@linaro.org \ --cc=thierry.reding@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.