mirror of
https://github.com/Heleguo/lede.git
synced 2025-12-20 04:41:18 +00:00
62 lines
2.5 KiB
Diff
62 lines
2.5 KiB
Diff
From 895fe4537cc8586f51abb5c66524efaa42c29883 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@baylibre.com>
|
|
Date: Thu, 6 Feb 2025 13:06:25 +0100
|
|
Subject: [PATCH] pwm: Add upgrade path to #pwm-cells = <3> for users of
|
|
of_pwm_single_xlate()
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The PWM chip on PXA only has a single output. Back when the device tree
|
|
binding was defined it was considered a good idea to not pass the PWM
|
|
line index as is done for all other PWM types as it would be always zero
|
|
anyhow and so doesn't add any value.
|
|
|
|
However for consistency reasons it is nice when all PWMs use the same
|
|
binding. For that reason let of_pwm_single_xlate() (i.e. the function
|
|
that implements the PXA behaviour) behave in the same way as
|
|
of_pwm_xlate_with_flags() for 3 (or more) parameters. With that in
|
|
place, the pxa-pwm binding can be updated to #pwm-cells = <3> without
|
|
breaking old device trees that stick to #pwm-cells = <1>.
|
|
|
|
Reviewed-by: Herve Codina <herve.codina@bootlin.com>
|
|
Tested-by: Duje Mihanovi? <duje.mihanovic@skole.hr>
|
|
Reviewed-by: Daniel Mack <daniel@zonque.org>
|
|
Signed-off-by: Uwe Kleine-K?nig <u.kleine-koenig@baylibre.com>
|
|
Link: https://lore.kernel.org/r/b33a84d3f073880e94fc303cd32ebe095eb5ce46.1738842938.git.u.kleine-koenig@baylibre.com
|
|
Signed-off-by: Uwe Kleine-K?nig <ukleinek@kernel.org>
|
|
---
|
|
drivers/pwm/core.c | 16 ++++++++++++++++
|
|
1 file changed, 16 insertions(+)
|
|
|
|
--- a/drivers/pwm/core.c
|
|
+++ b/drivers/pwm/core.c
|
|
@@ -988,11 +988,27 @@ of_pwm_xlate_with_flags(struct pwm_chip
|
|
}
|
|
EXPORT_SYMBOL_GPL(of_pwm_xlate_with_flags);
|
|
|
|
+/*
|
|
+ * This callback is used for PXA PWM chips that only have a single PWM line.
|
|
+ * For such chips you could argue that passing the line number (i.e. the first
|
|
+ * parameter in the common case) is useless as it's always zero. So compared to
|
|
+ * the default xlate function of_pwm_xlate_with_flags() the first parameter is
|
|
+ * the default period and the second are flags.
|
|
+ *
|
|
+ * Note that if #pwm-cells = <3>, the semantic is the same as for
|
|
+ * of_pwm_xlate_with_flags() to allow converting the affected driver to
|
|
+ * #pwm-cells = <3> without breaking the legacy binding.
|
|
+ *
|
|
+ * Don't use for new drivers.
|
|
+ */
|
|
struct pwm_device *
|
|
of_pwm_single_xlate(struct pwm_chip *chip, const struct of_phandle_args *args)
|
|
{
|
|
struct pwm_device *pwm;
|
|
|
|
+ if (args->args_count >= 3)
|
|
+ return of_pwm_xlate_with_flags(chip, args);
|
|
+
|
|
pwm = pwm_request_from_chip(chip, 0, NULL);
|
|
if (IS_ERR(pwm))
|
|
return pwm;
|