leds: pwm: Add optional DT property default-brightness
authorGeorge Stark <gnstark@salutedevices.com>
Tue, 5 Nov 2024 18:50:06 +0000 (21:50 +0300)
committerLee Jones <lee@kernel.org>
Tue, 12 Nov 2024 12:14:00 +0000 (12:14 +0000)
When probing if default LED state is on then default brightness will be
applied instead of max brightness.

Signed-off-by: George Stark <gnstark@salutedevices.com>
Link: https://lore.kernel.org/r/20241105185006.1380166-3-gnstark@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/leds-pwm.c

index 34a03ef..c73134e 100644 (file)
@@ -62,6 +62,20 @@ static int led_pwm_set(struct led_classdev *led_cdev,
        return pwm_apply_might_sleep(led_dat->pwm, &led_dat->pwmstate);
 }
 
+static int led_pwm_default_brightness_get(struct fwnode_handle *fwnode,
+                                         int max_brightness)
+{
+       unsigned int default_brightness;
+       int ret;
+
+       ret = fwnode_property_read_u32(fwnode, "default-brightness",
+                                      &default_brightness);
+       if (ret < 0 || default_brightness > max_brightness)
+               default_brightness = max_brightness;
+
+       return default_brightness;
+}
+
 __attribute__((nonnull))
 static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
                       struct led_pwm *led, struct fwnode_handle *fwnode)
@@ -103,7 +117,8 @@ static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
        /* set brightness */
        switch (led->default_state) {
        case LEDS_DEFSTATE_ON:
-               led_data->cdev.brightness = led->max_brightness;
+               led_data->cdev.brightness =
+                       led_pwm_default_brightness_get(fwnode, led->max_brightness);
                break;
        case LEDS_DEFSTATE_KEEP:
                {