diff options
author | Hans de Goede <hdegoede@redhat.com> | 2024-05-31 13:41:22 +0200 |
---|---|---|
committer | Lee Jones <lee@kernel.org> | 2024-05-31 12:57:41 +0100 |
commit | 5607ca92e6274dfb85d0ff7c4e91e6c4ddb6d25c (patch) | |
tree | eaf7f26330f7f320b87665a88364dad5f2432c3c /include | |
parent | e1b08c6f5b92d408a9fcc1030a340caeb9852250 (diff) | |
download | linux-5607ca92e6274dfb85d0ff7c4e91e6c4ddb6d25c.tar.gz linux-5607ca92e6274dfb85d0ff7c4e91e6c4ddb6d25c.tar.bz2 linux-5607ca92e6274dfb85d0ff7c4e91e6c4ddb6d25c.zip |
leds: core: Add led_mc_set_brightness() function
Add a new led_mc_set_brightness() function for in kernel color/brightness
changing of multi-color LEDs.
led-class-multicolor can be build as a module and led_mc_set_brightness()
will have the builtin callers, so put led_mc_set_brightness() inside
led-core instead, just like how led_set_brightness() is part of the core
and not of the led-class object.
This also adds a new LED_MULTI_COLOR led_classdev flag to allow
led_mc_set_brightness() to verify that it is operating on a multi-color
LED classdev, avoiding casting the passed in LED classdev to a multi-color
LED classdev, when it actually is not a multi-color LED.
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-5-hdegoede@redhat.com
Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/leds.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/linux/leds.h b/include/linux/leds.h index 6300313c46b7..ae07e44f1dcb 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -107,6 +107,7 @@ struct led_classdev { #define LED_BRIGHT_HW_CHANGED BIT(21) #define LED_RETAIN_AT_SHUTDOWN BIT(22) #define LED_INIT_DEFAULT_TRIGGER BIT(23) +#define LED_MULTI_COLOR BIT(24) /* set_brightness_work / blink_timer flags, atomic, private. */ unsigned long work_flags; @@ -374,6 +375,25 @@ void led_set_brightness(struct led_classdev *led_cdev, unsigned int brightness); int led_set_brightness_sync(struct led_classdev *led_cdev, unsigned int value); /** + * led_mc_set_brightness - set mc LED color intensity values and brightness + * @led_cdev: the LED to set + * @intensity_value: array of per color intensity values to set + * @num_colors: amount of entries in intensity_value array + * @brightness: the brightness to set the LED to + * + * Set a multi-color LED's per color intensity values and brightness. + * If necessary, this cancels the software blink timer. This function is + * guaranteed not to sleep. + * + * Calling this function on a non multi-color led_classdev or with the wrong + * num_colors value is an error. In this case an error will be logged once + * and the call will do nothing. + */ +void led_mc_set_brightness(struct led_classdev *led_cdev, + unsigned int *intensity_value, unsigned int num_colors, + unsigned int brightness); + +/** * led_update_brightness - update LED brightness * @led_cdev: the LED to query * |