leds: trigger: Add led_mc_trigger_event() function
authorHans de Goede <hdegoede@redhat.com>
Fri, 31 May 2024 11:41:23 +0000 (13:41 +0200)
committerLee Jones <lee@kernel.org>
Fri, 31 May 2024 11:57:42 +0000 (12:57 +0100)
Add a new led_mc_trigger_event() function for triggers which want to
change the color of a multi-color LED based on their trigger conditions.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Reviewed-by: Andy Shevchenko <andy@kernel.org>
Link: https://lore.kernel.org/r/20240531114124.45346-6-hdegoede@redhat.com
Signed-off-by: Lee Jones <lee@kernel.org>
drivers/leds/led-triggers.c
include/linux/leds.h

index b1b323b19301d29949f50b0855c5887e7a15e23d..638aa6591092b89beb3923b8223c59d1d3657832 100644 (file)
@@ -396,6 +396,26 @@ void led_trigger_event(struct led_trigger *trig,
 }
 EXPORT_SYMBOL_GPL(led_trigger_event);
 
+void led_mc_trigger_event(struct led_trigger *trig,
+                         unsigned int *intensity_value, unsigned int num_colors,
+                         enum led_brightness brightness)
+{
+       struct led_classdev *led_cdev;
+
+       if (!trig)
+               return;
+
+       rcu_read_lock();
+       list_for_each_entry_rcu(led_cdev, &trig->led_cdevs, trig_list) {
+               if (!(led_cdev->flags & LED_MULTI_COLOR))
+                       continue;
+
+               led_mc_set_brightness(led_cdev, intensity_value, num_colors, brightness);
+       }
+       rcu_read_unlock();
+}
+EXPORT_SYMBOL_GPL(led_mc_trigger_event);
+
 static void led_trigger_blink_setup(struct led_trigger *trig,
                             unsigned long delay_on,
                             unsigned long delay_off,
index ae07e44f1dcb6f6e9a1e01ad36147162831486d0..517b6198df07674a82d61459da040693cf854244 100644 (file)
@@ -510,6 +510,9 @@ void led_trigger_register_simple(const char *name,
                                struct led_trigger **trigger);
 void led_trigger_unregister_simple(struct led_trigger *trigger);
 void led_trigger_event(struct led_trigger *trigger,  enum led_brightness event);
+void led_mc_trigger_event(struct led_trigger *trig,
+                         unsigned int *intensity_value, unsigned int num_colors,
+                         enum led_brightness brightness);
 void led_trigger_blink(struct led_trigger *trigger, unsigned long delay_on,
                       unsigned long delay_off);
 void led_trigger_blink_oneshot(struct led_trigger *trigger,
@@ -552,6 +555,9 @@ static inline void led_trigger_register_simple(const char *name,
 static inline void led_trigger_unregister_simple(struct led_trigger *trigger) {}
 static inline void led_trigger_event(struct led_trigger *trigger,
                                enum led_brightness event) {}
+static inline void led_mc_trigger_event(struct led_trigger *trig,
+                               unsigned int *intensity_value, unsigned int num_colors,
+                               enum led_brightness brightness) {}
 static inline void led_trigger_blink(struct led_trigger *trigger,
                                      unsigned long delay_on,
                                      unsigned long delay_off) {}