[PATCH 3/4] leds: Add option to have GPIO LEDs start on
Grant Likely
grant.likely at secretlab.ca
Sat Oct 25 10:59:40 EST 2008
On Fri, Oct 24, 2008 at 5:09 PM, Trent Piepho <tpiepho at freescale.com> wrote:
> Yes, there is the "default-on" trigger but there are problems with that.
[...]
> The platform device binding gains a field in the platform data "default_state"
> that controls this. The OpenFirmware binding uses a property named
> "default-state" that can be set to "on" or "off". The default the property
> isn't present is off.
This look much preferred to setting the the default-on trigger. Why
not remove the default-on trigger entirely from the binding
documentation so there is no confusion?
Also, my preference would be an empty "led-default-on" property
instead of "default-state" with a value that needs to be parsed, but
I'm not concerned about it enough to argue.
Otherwise:
Acked-by: Grant Likely <grant.likely at secretlab.ca>
>
> Signed-off-by: Trent Piepho <tpiepho at freescale.com>
> ---
> Documentation/powerpc/dts-bindings/gpio/led.txt | 7 +++++++
> drivers/leds/leds-gpio.c | 8 ++++++--
> include/linux/leds.h | 1 +
> 3 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/powerpc/dts-bindings/gpio/led.txt b/Documentation/powerpc/dts-bindings/gpio/led.txt
> index 9f969c2..544ded7 100644
> --- a/Documentation/powerpc/dts-bindings/gpio/led.txt
> +++ b/Documentation/powerpc/dts-bindings/gpio/led.txt
> @@ -20,6 +20,11 @@ LED sub-node properties:
> "heartbeat" - LED "double" flashes at a load average based rate
> "ide-disk" - LED indicates disk activity
> "timer" - LED flashes at a fixed, configurable rate
> +- default-state: (optional) The initial state of the LED. Valid
> + values are "on" and "off". If the LED is already on or off and the
> + default-state property is set the to same value, then no glitch
> + should be produced where the LED momentarily turns off (or on).
> + The default is off if this property is not present.
>
> Examples:
>
> @@ -36,8 +41,10 @@ run-control {
> compatible = "gpio-leds";
> red {
> gpios = <&mpc8572 6 0>;
> + default-state = "off";
> };
> green {
> gpios = <&mpc8572 7 0>;
> + default-state = "on";
> };
> }
> diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
> index f41b841..0dbad87 100644
> --- a/drivers/leds/leds-gpio.c
> +++ b/drivers/leds/leds-gpio.c
> @@ -92,9 +92,10 @@ static int __devinit create_gpio_led(const struct gpio_led *template,
> led_dat->cdev.blink_set = gpio_blink_set;
> }
> led_dat->cdev.brightness_set = gpio_led_set;
> - led_dat->cdev.brightness = LED_OFF;
> + led_dat->cdev.brightness = template->default_state ? LED_FULL : LED_OFF;
>
> - gpio_direction_output(led_dat->gpio, led_dat->active_low);
> + gpio_direction_output(led_dat->gpio,
> + led_dat->active_low ^ template->default_state);
>
> INIT_WORK(&led_dat->work, gpio_led_work);
>
> @@ -256,12 +257,15 @@ static int __devinit of_gpio_leds_probe(struct of_device *ofdev,
> memset(&led, 0, sizeof(led));
> for_each_child_of_node(np, child) {
> unsigned int flags;
> + const char *state;
>
> led.gpio = of_get_gpio(child, 0, &flags);
> led.active_low = flags & OF_GPIO_ACTIVE_LOW;
> led.name = of_get_property(child, "label", NULL) ? : child->name;
> led.default_trigger =
> of_get_property(child, "linux,default-trigger", NULL);
> + state = of_get_property(child, "default-state", NULL);
> + led.default_state = state && !strcmp(state, "on");
>
> ret = create_gpio_led(&led, &pdata->led_data[pdata->num_leds++],
> &ofdev->dev, NULL);
> diff --git a/include/linux/leds.h b/include/linux/leds.h
> index d3a73f5..caa3987 100644
> --- a/include/linux/leds.h
> +++ b/include/linux/leds.h
> @@ -138,6 +138,7 @@ struct gpio_led {
> const char *default_trigger;
> unsigned gpio;
> u8 active_low;
> + u8 default_state;
> };
>
> struct gpio_led_platform_data {
> --
> 1.5.4.3
>
>
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
More information about the Linuxppc-dev
mailing list