leds: triggers: add support for RGB triggers
PATCH v2 1/3 leds: triggers: add support for RGB triggers
Add basic support for RGB triggers. Triggers with flag LED_TRIG_CAP_RGB set are available to RGB LED devices only.
Signed-off-by Heiner Kallweit <[email protected]>
---
v2:
- renamed check to led_trigger_is_supported()
- removed unrelated other change
--- drivers/leds/led-triggers.c | 11 +++++++++++ include/linux/leds.h | 3 +++ 2 files changed, 14 insertions(+)
drivers/leds/led-triggers.c +11 -0
@@ -30,6 +30,13 @@ static LIST_HEAD(trigger_list);/* Used by LED Class */ +static inline bool led_trigger_is_supported (struct led_trigger *trig, +struct led_classdev *led_cdev) +{ +return !(trig->flags &LED_TRIG_CAP_RGB ) || + led_cdev->flags &LED_DEV_CAP_RGB ; +} +ssize_t led_trigger_store (struct device *dev,struct device_attribute *attr,const char *buf,size_t count) {
@@ -52,6 +59,8 @@ ssize_t led_trigger_store(struct device *dev, struct device_attribute *attr,down_read (&triggers_list_lock);list_for_each_entry (trig, &trigger_list, next_trig) {if (sysfs_streq (buf, trig->name)) { +if (!led_trigger_is_supported (trig, led_cdev)) +break ;down_write (&led_cdev->trigger_lock);led_trigger_set (led_cdev, trig);up_write (&led_cdev->trigger_lock);
@@ -84,6 +93,8 @@ ssize_t led_trigger_show(struct device *dev, struct device_attribute *attr, len +=sprintf (buf+len,"none " );list_for_each_entry (trig, &trigger_list, next_trig) { +if (!led_trigger_is_supported (trig, led_cdev)) +continue ;if (led_cdev->trigger && !strcmp (led_cdev->trigger->name, trig->name)) len +=sprintf (buf+len,"[%s] " , trig->name);
include/linux/leds.h +3 -0
@@ -248,6 +248,9 @@ enum led_brightness led_hsv_to_rgb(enum led_brightness hsv);struct led_trigger {/* Trigger Properties */ const char *name; +u8 flags; +#define LED_TRIG_CAP_RGB BIT(0) +void (*activate)(struct led_classdev *led_cdev);void (*deactivate)(struct led_classdev *led_cdev);
Signature · 1 line
2.7.3