led-gpio: add bicolor led support
those led can have 2 colors but one at a time otherwise they are black Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
cc37eb4a4d
commit
06e641353e
|
@ -11,6 +11,10 @@ config LED_GPIO_RGB
|
||||||
bool "gpio rgb LED support"
|
bool "gpio rgb LED support"
|
||||||
depends on LED_GPIO
|
depends on LED_GPIO
|
||||||
|
|
||||||
|
config LED_GPIO_BICOLOR
|
||||||
|
bool "gpio bicolor LED support"
|
||||||
|
depends on LED_GPIO
|
||||||
|
|
||||||
config LED_TRIGGERS
|
config LED_TRIGGERS
|
||||||
select POLLER
|
select POLLER
|
||||||
bool "LED triggers support"
|
bool "LED triggers support"
|
||||||
|
|
|
@ -52,6 +52,53 @@ void led_gpio_unregister(struct gpio_led *led)
|
||||||
led_unregister(&led->led);
|
led_unregister(&led->led);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_LED_GPIO_BICOLOR
|
||||||
|
static void led_gpio_bicolor_set(struct led *led, unsigned int value)
|
||||||
|
{
|
||||||
|
struct gpio_bicolor_led *bi = container_of(led, struct gpio_bicolor_led, led);
|
||||||
|
int al = bi->active_low;
|
||||||
|
|
||||||
|
switch (value) {
|
||||||
|
case 0:
|
||||||
|
gpio_direction_output(bi->gpio_c0, al);
|
||||||
|
gpio_direction_output(bi->gpio_c1, al);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
gpio_direction_output(bi->gpio_c0, !al);
|
||||||
|
gpio_direction_output(bi->gpio_c1, al);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
gpio_direction_output(bi->gpio_c0, al);
|
||||||
|
gpio_direction_output(bi->gpio_c1, !al);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* led_gpio_bicolor_register - register three gpios as a bicolor LED
|
||||||
|
* @param led The gpio bicolor LED
|
||||||
|
*
|
||||||
|
* This function registers three gpios as a bicolor LED. led->gpio[rg]
|
||||||
|
* should be initialized to the gpios to control.
|
||||||
|
*/
|
||||||
|
int led_gpio_bicolor_register(struct gpio_bicolor_led *led)
|
||||||
|
{
|
||||||
|
led->led.set = led_gpio_bicolor_set;
|
||||||
|
led->led.max_value = 2;
|
||||||
|
|
||||||
|
return led_register(&led->led);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* led_gpio_bicolor_unregister - remove a gpio controlled bicolor LED from the framework
|
||||||
|
* @param led The gpio LED
|
||||||
|
*/
|
||||||
|
void led_gpio_bicolor_unregister(struct gpio_bicolor_led *led)
|
||||||
|
{
|
||||||
|
led_unregister(&led->led);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_LED_GPIO_RGB
|
#ifdef CONFIG_LED_GPIO_RGB
|
||||||
|
|
||||||
static void led_gpio_rgb_set(struct led *led, unsigned int value)
|
static void led_gpio_rgb_set(struct led *led, unsigned int value)
|
||||||
|
|
|
@ -65,6 +65,12 @@ struct gpio_led {
|
||||||
struct led led;
|
struct led led;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct gpio_bicolor_led {
|
||||||
|
int gpio_c0, gpio_c1;
|
||||||
|
bool active_low;
|
||||||
|
struct led led;
|
||||||
|
};
|
||||||
|
|
||||||
struct gpio_rgb_led {
|
struct gpio_rgb_led {
|
||||||
int gpio_r, gpio_g, gpio_b;
|
int gpio_r, gpio_g, gpio_b;
|
||||||
bool active_low;
|
bool active_low;
|
||||||
|
@ -85,6 +91,20 @@ static inline void led_gpio_unregister(struct gpio_led *led)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_LED_GPIO_BICOLOR
|
||||||
|
int led_gpio_bicolor_register(struct gpio_bicolor_led *led);
|
||||||
|
void led_gpio_bicolor_unregister(struct gpio_bicolor_led *led);
|
||||||
|
#else
|
||||||
|
static inline int led_gpio_bicolor_register(struct gpio_bicolor_led *led)
|
||||||
|
{
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void led_gpio_bicolor_unregister(struct gpio_bicolor_led *led)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_LED_GPIO_RGB
|
#ifdef CONFIG_LED_GPIO_RGB
|
||||||
int led_gpio_rgb_register(struct gpio_rgb_led *led);
|
int led_gpio_rgb_register(struct gpio_rgb_led *led);
|
||||||
void led_gpio_rgb_unregister(struct gpio_led *led);
|
void led_gpio_rgb_unregister(struct gpio_led *led);
|
||||||
|
|
Loading…
Reference in New Issue