[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <548dfa909f984868a62e04efc0c51bdf@emh-metering.com>
Date: Thu, 30 Oct 2025 11:53:27 +0000
From: "Krebs, Olaf" <Olaf.Krebs@...-metering.com>
To: Uwe Kleine-König <ukleinek@...nel.org>, Shawn Guo
	<shawnguo@...nel.org>, Sascha Hauer <s.hauer@...gutronix.de>, "Pengutronix
 Kernel Team" <kernel@...gutronix.de>, Fabio Estevam <festevam@...il.com>,
	"open list:PWM SUBSYSTEM" <linux-pwm@...r.kernel.org>, "open
 list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" <imx@...ts.linux.dev>,
	"moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE"
	<linux-arm-kernel@...ts.infradead.org>, open list
	<linux-kernel@...r.kernel.org>
Subject: [PATCH] Fix IMX PWM period setting
From: Olaf Krebs <okr@...w.emh-meter.de>
We use 3 PWM channels to control an RGB LED. Without this patch, an BUSY-error message is generated during initialization.
[    7.395326] leds_pwm_multicolor led-controller: error -EBUSY: failed to set led PWM value for (null)
[    7.405167] leds_pwm_multicolor led-controller: probe with driver leds_pwm_multicolor failed with error -16
Our DTS-Config for an imx93-Board:
	...
	led-controller {
		compatible = "pwm-leds-multicolor";
		multi-led {
			label = "RGBled";
			color = <LED_COLOR_ID_RGB>;
			function = LED_FUNCTION_INDICATOR;
			max-brightness = <255>;
			led-red {
				pwms = <&tpm5 0 1000000 PWM_POLARITY_INVERTED>;
				color = <LED_COLOR_ID_RED>;
			};
			led-green {
				pwms = <&tpm6 2 1000000 PWM_POLARITY_INVERTED>;
				color = <LED_COLOR_ID_GREEN>;
			};
			led-blue {
				pwms = <&tpm5 1 1000000 PWM_POLARITY_INVERTED>;
				color = <LED_COLOR_ID_BLUE>;
			};
		};
	};
	...
Signed-off-by: Olaf krebs <olaf.krebs@...-metering.com>
---
 drivers/pwm/pwm-imx-tpm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c index 5b399de16d60..411daa7711f1 100644
--- a/drivers/pwm/pwm-imx-tpm.c
+++ b/drivers/pwm/pwm-imx-tpm.c
@@ -190,7 +190,7 @@ static int pwm_imx_tpm_apply_hw(struct pwm_chip *chip,
 		 * there are multiple channels in use with different
 		 * period settings.
 		 */
-		if (tpm->user_count > 1)
+		if ((tpm->user_count > 1) && (tpm->real_period != 0))
 			return -EBUSY;
 
 		val = readl(tpm->base + PWM_IMX_TPM_SC);
--
2.47.3
Powered by blists - more mailing lists
 
