[PATCH 1/2] leds: add DT support for LEDs wired to supply and default brightness

Bryan Wu cooloney at gmail.com
Thu Mar 27 18:28:32 EDT 2014


On Fri, Feb 28, 2014 at 1:25 PM, Russell King
<rmk+kernel at arm.linux.org.uk> wrote:
> Some PWM outputs are wired such that the LED they're controlling is
> connected to supply rather than ground.  Therefore, the duty cycle
> needs to be inverted to make the LED behave as it should do.
>
> We also provide a way to specify the default brightness when a
> trigger is not specified.
>
> Signed-off-by: Russell King <rmk+kernel at arm.linux.org.uk>
> ---
>  Documentation/devicetree/bindings/leds/leds-pwm.txt |  3 +++
>  drivers/leds/leds-pwm.c                             | 15 +++++++++++----
>  2 files changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/leds/leds-pwm.txt b/Documentation/devicetree/bindings/leds/leds-pwm.txt
> index 7297107cf832..ffcb74ab61fd 100644
> --- a/Documentation/devicetree/bindings/leds/leds-pwm.txt
> +++ b/Documentation/devicetree/bindings/leds/leds-pwm.txt
> @@ -13,6 +13,9 @@ node's name represents the name of the corresponding LED.
>    For the pwms and pwm-names property please refer to:
>    Documentation/devicetree/bindings/pwm/pwm.txt
>  - max-brightness : Maximum brightness possible for the LED
> +- default-brightness : (optional) Default brightness for the LED
> +- active-low : (optional) For PWMs where the LED is wired to supply
> +  rather than ground.
>  - label :  (optional)
>    see Documentation/devicetree/bindings/leds/common.txt
>  - linux,default-trigger :  (optional)

Why remove "max-brightness", "label" and "linux,default-trigger" here?
I believe you're still using them in your second patch like

+               front {
+                       active-low;
+                       default-brightness = <128>;
+                       label = "imx6:red:front";
+                       max-brightness = <248>;
+                       pwms = <&pwm1 0 50000>;
+               };

Others are good to me.

Thierry, could you please review this patchset?

Thanks,
-Bryan

> diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
> index 605047428b5a..fe2cd849b593 100644
> --- a/drivers/leds/leds-pwm.c
> +++ b/drivers/leds/leds-pwm.c
> @@ -70,6 +70,10 @@ static void led_pwm_set(struct led_classdev *led_cdev,
>
>         duty *= brightness;
>         do_div(duty, max);
> +
> +       if (led_dat->active_low)
> +               duty = led_dat->period - duty;
> +
>         led_dat->duty = duty;
>
>         if (led_dat->can_sleep)
> @@ -93,6 +97,10 @@ static int led_pwm_create_of(struct platform_device *pdev,
>         for_each_child_of_node(pdev->dev.of_node, child) {
>                 struct led_pwm_data *led_dat = &priv->leds[priv->num_leds];
>
> +               led_dat->cdev.brightness_set = led_pwm_set;
> +               led_dat->cdev.brightness = LED_OFF;
> +               led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
> +
>                 led_dat->cdev.name = of_get_property(child, "label",
>                                                      NULL) ? : child->name;
>
> @@ -110,10 +118,9 @@ static int led_pwm_create_of(struct platform_device *pdev,
>                                                 "linux,default-trigger", NULL);
>                 of_property_read_u32(child, "max-brightness",
>                                      &led_dat->cdev.max_brightness);
> -
> -               led_dat->cdev.brightness_set = led_pwm_set;
> -               led_dat->cdev.brightness = LED_OFF;
> -               led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
> +               of_property_read_u32(child, "default-brightness",
> +                                    &led_dat->cdev.brightness);
> +               led_dat->active_low = of_property_read_bool(child, "active-low");
>
>                 led_dat->can_sleep = pwm_can_sleep(led_dat->pwm);
>                 if (led_dat->can_sleep)
> --
> 1.8.3.1
>



More information about the linux-arm-kernel mailing list