@@ -19,6 +19,7 @@ LED sub-node properties:
see Documentation/devicetree/bindings/leds/common.txt
- linux,default-trigger : (optional)
see Documentation/devicetree/bindings/leds/common.txt
+- pwm,uninitalized : defer PWM init to first brightness change of led
Example:
@@ -97,7 +97,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
* FIXME: pwm_apply_args() should be removed when switching to the
* atomic PWM API.
*/
- pwm_apply_args(led_data->pwm);
+ if (!led->pwm_uninitialized)
+ pwm_apply_args(led_data->pwm);
pwm_get_args(led_data->pwm, &pargs);
@@ -108,7 +109,9 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
ret = devm_led_classdev_register(dev, &led_data->cdev);
if (ret == 0) {
priv->num_leds++;
- led_pwm_set(&led_data->cdev, led_data->cdev.brightness);
+ if (!led->pwm_uninitialized)
+ led_pwm_set(&led_data->cdev,
+ led_data->cdev.brightness);
} else {
dev_err(dev, "failed to register PWM led for %s: %d\n",
led->name, ret);
@@ -143,6 +146,9 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
fwnode_property_read_u32(fwnode, "max-brightness",
&led.max_brightness);
+ led.pwm_uninitialized = fwnode_property_read_bool(fwnode,
+ "pwm,uninitialized");
+
ret = led_pwm_add(dev, priv, &led, fwnode);
if (ret) {
fwnode_handle_put(fwnode);
@@ -10,6 +10,7 @@ struct led_pwm {
const char *default_trigger;
unsigned pwm_id __deprecated;
u8 active_low;
+ u8 pwm_uninitialized;
unsigned max_brightness;
unsigned pwm_period_ns;
};
This patch add "pwm,uninitalized" devicetree flag support to pwm leds, which allows to defer pwm init to first use of led. This allows to configure the PWM early in bootloader to let the LED blink until an application in Linux userspace set something different. Signed-off-by: Denis Osterland-Heim <Denis.Osterland@diehl.com> --- Hi, I want to ask if such a patch is intresting for mainline and if it is woth to think about how to represent this state to user space. Regards Denis Documentation/devicetree/bindings/leds/leds-pwm.txt | 1 + drivers/leds/leds-pwm.c | 10 ++++++++-- include/linux/leds_pwm.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-)