diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2010-12-18 14:36:02 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-12-20 09:57:32 +0100 |
commit | 91d781f51df5d4de23d09a6777bfc968a0a7ca68 (patch) | |
tree | c157c2074ab337ee7512ebf3bd8ac38dfdd7c6a7 /drivers | |
parent | 51271530d2f824ee9e1ef01a2eb7f361622716aa (diff) | |
download | barebox-91d781f51df5d4de23d09a6777bfc968a0a7ca68.tar.gz barebox-91d781f51df5d4de23d09a6777bfc968a0a7ca68.tar.xz |
LED: Add gpio LED support
This patch adds support for registering gpios as LEDs.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/led/Kconfig | 8 | ||||
-rw-r--r-- | drivers/led/Makefile | 1 | ||||
-rw-r--r-- | drivers/led/led-gpio.c | 94 |
3 files changed, 103 insertions, 0 deletions
diff --git a/drivers/led/Kconfig b/drivers/led/Kconfig index 964626cdcd..048a0f456c 100644 --- a/drivers/led/Kconfig +++ b/drivers/led/Kconfig @@ -3,4 +3,12 @@ menuconfig LED if LED +config LED_GPIO + bool "gpio LED support" + depends on GENERIC_GPIO + +config LED_GPIO_RGB + bool "gpio rgb LED support" + depends on LED_GPIO + endif diff --git a/drivers/led/Makefile b/drivers/led/Makefile index 0c1a6b6b86..29b9fd522f 100644 --- a/drivers/led/Makefile +++ b/drivers/led/Makefile @@ -1 +1,2 @@ obj-$(CONFIG_LED) += core.o +obj-$(CONFIG_LED_GPIO) += led-gpio.o diff --git a/drivers/led/led-gpio.c b/drivers/led/led-gpio.c new file mode 100644 index 0000000000..10c25c6fbb --- /dev/null +++ b/drivers/led/led-gpio.c @@ -0,0 +1,94 @@ +/* + * gpio LED support for barebox + * + * (C) Copyright 2010 Sascha Hauer, Pengutronix + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ +#include <common.h> +#include <led.h> +#include <asm/gpio.h> + +static void led_gpio_set(struct led *led, unsigned int value) +{ + struct gpio_led *gpio_led = container_of(led, struct gpio_led, led); + + gpio_direction_output(gpio_led->gpio, !!value ^ gpio_led->active_low); +} + +/** + * led_gpio_register - register a gpio controlled LED + * @param led The gpio LED + * + * This function registers a single gpio as a LED. led->gpio + * should be initialized to the gpio to control. + */ +int led_gpio_register(struct gpio_led *led) +{ + led->led.set = led_gpio_set; + led->led.max_value = 1; + + return led_register(&led->led); +} + +/** + * led_gpio_unregister - remove a gpio controlled LED from the framework + * @param led The gpio LED + */ +void led_gpio_unregister(struct gpio_led *led) +{ + led_unregister(&led->led); +} + +#ifdef CONFIG_LED_GPIO_RGB + +static void led_gpio_rgb_set(struct led *led, unsigned int value) +{ + struct gpio_rgb_led *rgb = container_of(led, struct gpio_rgb_led, led); + int al = rgb->active_low; + + gpio_direction_output(rgb->gpio_r, !!(value & 4) ^ al); + gpio_direction_output(rgb->gpio_g, !!(value & 2) ^ al); + gpio_direction_output(rgb->gpio_b, !!(value & 1) ^ al); +} + +/** + * led_gpio_rgb_register - register three gpios as a rgb LED + * @param led The gpio rg LED + * + * This function registers three gpios as a rgb LED. led->gpio[rgb] + * should be initialized to the gpios to control. + */ +int led_gpio_rgb_register(struct gpio_rgb_led *led) +{ + led->led.set = led_gpio_rgb_set; + led->led.max_value = 7; + + return led_register(&led->led); +} + +/** + * led_gpio_rgb_unregister - remove a gpio controlled rgb LED from the framework + * @param led The gpio LED + */ +void led_gpio_rgb_unregister(struct gpio_led *led) +{ + led_unregister(&led->led); +} +#endif /* CONFIG_LED_GPIO_RGB */ |