Devicetree
 help / color / mirror / Atom feed
* [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support
@ 2025-07-07  2:07 LI Qingwu
  2025-07-07  2:07 ` [PATCH V6 1/2] dt-bindings: leds: pwm: add enable-gpios property LI Qingwu
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: LI Qingwu @ 2025-07-07  2:07 UTC (permalink / raw)
  To: lee, pavel, robh, krzk+dt, conor+dt, linux-leds, devicetree,
	linux-kernel, Qing-wu.Li
  Cc: bsp-development.geo

Add support for an optional GPIO enable pin to the PWM LED driver.
Some LED controllers require an additional enable GPIO to be enabled
on the device before PWM control can take effect.

Testing:
- Tested on i.MX8MP EVK board with TPS92380 LED backlight driver
- Verified GPIO enable/disable functionality works correctly
- Confirmed both GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW polarities
  work properly


Device tree configuration used for testing:

	backlight_keypad: backlight-keypad {
		compatible = "pwm-leds";

		led {
			color = <LED_COLOR_ID_WHITE>;
			enable-gpios = <&pca6416 11 GPIO_ACTIVE_HIGH>;
			function = LED_FUNCTION_KBD_BACKLIGHT;
			max-brightness = <100>;
			pwms = <&pwm3 0 2500 0>;
		};
	};

Changes in V6:
- Collected Reviewed-by from Krzysztof Kozlowski on 1/2 patch. (Thanks!)

Changes in V5:
- Reword commit message add TPS92380 and LT3743 LED driver chips

Changes in V4:
- Reword commit message to specify the LED driver chip TPS92380
- Add tested device tree configuration to cover letter

Changes in V3:
- fix make dt_binding_check failed on check leds-pwm.yaml

LI Qingwu (2):
  dt-bindings: leds: pwm: add enable-gpios property
  leds: pwm: Add optional GPIO enable pin support

 .../devicetree/bindings/leds/leds-pwm.yaml    |  7 ++++++
 drivers/leds/leds-pwm.c                       | 22 +++++++++++++++++++
 2 files changed, 29 insertions(+)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH V6 1/2] dt-bindings: leds: pwm: add enable-gpios property
  2025-07-07  2:07 [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
@ 2025-07-07  2:07 ` LI Qingwu
  2025-07-07  2:07 ` [PATCH V6 2/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
  2025-07-07  6:18 ` [PATCH V6 0/2] " Krzysztof Kozlowski
  2 siblings, 0 replies; 4+ messages in thread
From: LI Qingwu @ 2025-07-07  2:07 UTC (permalink / raw)
  To: lee, pavel, robh, krzk+dt, conor+dt, linux-leds, devicetree,
	linux-kernel, Qing-wu.Li
  Cc: bsp-development.geo, Krzysztof Kozlowski

Some PWM LED driver chips like TPS92380 and LT3743 require a separate
enable signal in addition to PWM control. Add this property to allow
device trees to specify such GPIO, which will be controlled automatically
by the driver based on the LED brightness state.

Link: https://www.ti.com/lit/gpn/tps92380
Link: https://www.analog.com/media/en/technical-documentation/data-sheets/3743fe.pdf

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Signed-off-by: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
---
 Documentation/devicetree/bindings/leds/leds-pwm.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/leds/leds-pwm.yaml b/Documentation/devicetree/bindings/leds/leds-pwm.yaml
index 61b97e8bc36d0..6c4fcefbe25f9 100644
--- a/Documentation/devicetree/bindings/leds/leds-pwm.yaml
+++ b/Documentation/devicetree/bindings/leds/leds-pwm.yaml
@@ -40,6 +40,13 @@ patternProperties:
           initialization. If the option is not set then max brightness is used.
         $ref: /schemas/types.yaml#/definitions/uint32
 
+      enable-gpios:
+        description:
+          GPIO for LED hardware enable control. Set active when brightness is
+          non-zero and inactive when brightness is zero.
+          The GPIO default state follows the "default-state" property.
+        maxItems: 1
+
     required:
       - pwms
       - max-brightness
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH V6 2/2] leds: pwm: Add optional GPIO enable pin support
  2025-07-07  2:07 [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
  2025-07-07  2:07 ` [PATCH V6 1/2] dt-bindings: leds: pwm: add enable-gpios property LI Qingwu
@ 2025-07-07  2:07 ` LI Qingwu
  2025-07-07  6:18 ` [PATCH V6 0/2] " Krzysztof Kozlowski
  2 siblings, 0 replies; 4+ messages in thread
From: LI Qingwu @ 2025-07-07  2:07 UTC (permalink / raw)
  To: lee, pavel, robh, krzk+dt, conor+dt, linux-leds, devicetree,
	linux-kernel, Qing-wu.Li
  Cc: bsp-development.geo

Add support for optional GPIO-based enable pin control to PWM LED driver.
Some PWM LED driver chips like TPS92380 and LT3743 require a separate
enable signal in addition to PWM control. Implement support for such
GPIO control through the "enable-gpios" device tree property, activating
the pin when LED brightness is non-zero and deactivating it when off.

Tested on i.MX8MP EVK with TPS92380 LED driver chip.

Signed-off-by: LI Qingwu <Qing-wu.Li@leica-geosystems.com.cn>
---
 drivers/leds/leds-pwm.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index c73134e7b9514..1397149464b35 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 #include <linux/pwm.h>
 #include <linux/slab.h>
+#include <linux/gpio/consumer.h>
 
 struct led_pwm {
 	const char	*name;
@@ -29,6 +30,7 @@ struct led_pwm_data {
 	struct led_classdev	cdev;
 	struct pwm_device	*pwm;
 	struct pwm_state	pwmstate;
+	struct gpio_desc	*enable_gpio;
 	unsigned int		active_low;
 };
 
@@ -51,6 +53,9 @@ static int led_pwm_set(struct led_classdev *led_cdev,
 	if (led_dat->active_low)
 		duty = led_dat->pwmstate.period - duty;
 
+	gpiod_set_value_cansleep(led_dat->enable_gpio,
+				 brightness == LED_OFF ? 0 : 1);
+
 	led_dat->pwmstate.duty_cycle = duty;
 	/*
 	 * Disabling a PWM doesn't guarantee that it emits the inactive level.
@@ -132,6 +137,23 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 		break;
 	}
 
+	/* Claim the GPIO as ASIS and set the value
+	 * later on to honor the different default states
+	 */
+	led_data->enable_gpio =
+		devm_fwnode_gpiod_get(dev, fwnode, "enable", GPIOD_ASIS, NULL);
+
+	/* enable_gpio is optional */
+	if (IS_ERR(led_data->enable_gpio)) {
+		if (PTR_ERR(led_data->enable_gpio) == -ENOENT)
+			led_data->enable_gpio = NULL;
+		else
+			return PTR_ERR(led_data->enable_gpio);
+	}
+
+	gpiod_direction_output(led_data->enable_gpio,
+			       !!led_data->cdev.brightness);
+
 	ret = devm_led_classdev_register_ext(dev, &led_data->cdev, &init_data);
 	if (ret) {
 		dev_err(dev, "failed to register PWM led for %s: %d\n",
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support
  2025-07-07  2:07 [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
  2025-07-07  2:07 ` [PATCH V6 1/2] dt-bindings: leds: pwm: add enable-gpios property LI Qingwu
  2025-07-07  2:07 ` [PATCH V6 2/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
@ 2025-07-07  6:18 ` Krzysztof Kozlowski
  2 siblings, 0 replies; 4+ messages in thread
From: Krzysztof Kozlowski @ 2025-07-07  6:18 UTC (permalink / raw)
  To: LI Qingwu
  Cc: lee, pavel, robh, krzk+dt, conor+dt, linux-leds, devicetree,
	linux-kernel, bsp-development.geo

On Mon, Jul 07, 2025 at 10:07:50AM +0800, LI Qingwu wrote:
> Add support for an optional GPIO enable pin to the PWM LED driver.
> Some LED controllers require an additional enable GPIO to be enabled
> on the device before PWM control can take effect.
> 
> Testing:
> - Tested on i.MX8MP EVK board with TPS92380 LED backlight driver
> - Verified GPIO enable/disable functionality works correctly
> - Confirmed both GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW polarities
>   work properly
> 
> 
> Device tree configuration used for testing:
> 
> 	backlight_keypad: backlight-keypad {
> 		compatible = "pwm-leds";
> 
> 		led {
> 			color = <LED_COLOR_ID_WHITE>;
> 			enable-gpios = <&pca6416 11 GPIO_ACTIVE_HIGH>;
> 			function = LED_FUNCTION_KBD_BACKLIGHT;
> 			max-brightness = <100>;
> 			pwms = <&pwm3 0 2500 0>;
> 		};
> 	};
> 
> Changes in V6:
> - Collected Reviewed-by from Krzysztof Kozlowski on 1/2 patch. (Thanks!)

Don't send new versions for that. It's just unnecessary traffic and
effort for us to sort out such emails.

Read submitting patches in this regard.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-07-07  6:18 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-07  2:07 [PATCH V6 0/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
2025-07-07  2:07 ` [PATCH V6 1/2] dt-bindings: leds: pwm: add enable-gpios property LI Qingwu
2025-07-07  2:07 ` [PATCH V6 2/2] leds: pwm: Add optional GPIO enable pin support LI Qingwu
2025-07-07  6:18 ` [PATCH V6 0/2] " Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox