[RFC PATCH 0/1] leds: Introduce the multi_max_intensity sysfs attribute

Armin Wolf posted 1 patch 3 weeks, 2 days ago
There is a newer version of this series
.../ABI/testing/sysfs-class-led-multicolor    | 16 +++++++--
Documentation/leds/leds-class-multicolor.rst  | 21 ++++++++++-
drivers/hid/hid-lg-g15.c                      |  3 ++
drivers/hid/hid-playstation.c                 |  3 ++
drivers/leds/flash/leds-mt6360.c              |  8 ++---
drivers/leds/led-class-multicolor.c           | 36 +++++++++++++++++--
drivers/leds/leds-blinkm.c                    |  3 ++
drivers/leds/leds-cros_ec.c                   |  1 +
drivers/leds/leds-lp50xx.c                    |  1 +
drivers/leds/leds-lp55xx-common.c             |  7 ++--
drivers/leds/leds-max77705.c                  |  1 +
drivers/leds/leds-sun50i-a100.c               |  3 ++
drivers/leds/leds-turris-omnia.c              |  1 +
drivers/leds/rgb/leds-group-multicolor.c      |  1 +
drivers/leds/rgb/leds-ktd202x.c               |  1 +
drivers/leds/rgb/leds-lp5812.c                |  1 +
drivers/leds/rgb/leds-mt6370-rgb.c            |  8 ++---
drivers/leds/rgb/leds-ncp5623.c               |  4 +--
drivers/leds/rgb/leds-pwm-multicolor.c        |  1 +
drivers/leds/rgb/leds-qcom-lpg.c              |  1 +
drivers/platform/x86/silicom-platform.c       | 30 ++++++++++++++++
drivers/platform/x86/uniwill/uniwill-acpi.c   |  4 +--
include/linux/led-class-multicolor.h          | 32 ++++++++++++++++-
23 files changed, 164 insertions(+), 23 deletions(-)
[RFC PATCH 0/1] leds: Introduce the multi_max_intensity sysfs attribute
Posted by Armin Wolf 3 weeks, 2 days ago
This patch series was born out of of a mailing list thread [1] where
i asked how to properly model a RGB LED as a multicolor LED. Said
LED has some exotic properties:

1. 5 global brightness levels.
2. 50 intensity levels for each R/G/B color components.

The current sysfs interface mandates that the maximum intensity value
for each color component should be the same as the maximum global
brightness. This makes sense for LEDs that only emulate global
brightness using led_mc_calc_color_components(), but causes problems
for LEDs that perform global brightness control in hardware.

Faking a maximum global brightness of 50 will not work in this case,
as the hardware can change the global brightness on its own. Userspace
applications might also prefer to know the true maximum brightness
value.

Because of this i decided to add a new sysfs attribute called
"multi_max_intensity". This attribute is similar to the
"max_brightness" sysfs attribute, except that it targets the intensity
values inside the "multi_intensity" sysfs atribute. I also decided to
cap intensity values comming from userspace to said maximum intensity
values to relieve drivers from doing it themself. This was already
proposed in a unrelated patch [2] and might break some misbehaving
userspace applications that do not respect max_brightness.

[1] https://lore.kernel.org/linux-leds/2d91a44e-fce2-42dc-b529-133ab4a191f0@gmx.de/
[2] https://lore.kernel.org/linux-leds/20260123-leds-multicolor-limit-intensity-v1-1-b37761c2fdfd@pengutronix.de/

Armin Wolf (1):
  leds: Introduce the multi_max_intensity sysfs attribute

 .../ABI/testing/sysfs-class-led-multicolor    | 16 +++++++--
 Documentation/leds/leds-class-multicolor.rst  | 21 ++++++++++-
 drivers/hid/hid-lg-g15.c                      |  3 ++
 drivers/hid/hid-playstation.c                 |  3 ++
 drivers/leds/flash/leds-mt6360.c              |  8 ++---
 drivers/leds/led-class-multicolor.c           | 36 +++++++++++++++++--
 drivers/leds/leds-blinkm.c                    |  3 ++
 drivers/leds/leds-cros_ec.c                   |  1 +
 drivers/leds/leds-lp50xx.c                    |  1 +
 drivers/leds/leds-lp55xx-common.c             |  7 ++--
 drivers/leds/leds-max77705.c                  |  1 +
 drivers/leds/leds-sun50i-a100.c               |  3 ++
 drivers/leds/leds-turris-omnia.c              |  1 +
 drivers/leds/rgb/leds-group-multicolor.c      |  1 +
 drivers/leds/rgb/leds-ktd202x.c               |  1 +
 drivers/leds/rgb/leds-lp5812.c                |  1 +
 drivers/leds/rgb/leds-mt6370-rgb.c            |  8 ++---
 drivers/leds/rgb/leds-ncp5623.c               |  4 +--
 drivers/leds/rgb/leds-pwm-multicolor.c        |  1 +
 drivers/leds/rgb/leds-qcom-lpg.c              |  1 +
 drivers/platform/x86/silicom-platform.c       | 30 ++++++++++++++++
 drivers/platform/x86/uniwill/uniwill-acpi.c   |  4 +--
 include/linux/led-class-multicolor.h          | 32 ++++++++++++++++-
 23 files changed, 164 insertions(+), 23 deletions(-)

-- 
2.39.5
Re: [RFC PATCH 0/1] leds: Introduce the multi_max_intensity sysfs attribute
Posted by Werner Sembach 3 weeks ago
Hi,

Am 15.03.26 um 00:01 schrieb Armin Wolf:
> This patch series was born out of of a mailing list thread [1] where
> i asked how to properly model a RGB LED as a multicolor LED. Said
> LED has some exotic properties:
>
> 1. 5 global brightness levels.
> 2. 50 intensity levels for each R/G/B color components.
>
> The current sysfs interface mandates that the maximum intensity value
> for each color component should be the same as the maximum global
> brightness. This makes sense for LEDs that only emulate global
> brightness using led_mc_calc_color_components(), but causes problems
> for LEDs that perform global brightness control in hardware.
>
> Faking a maximum global brightness of 50 will not work in this case,
> as the hardware can change the global brightness on its own. Userspace
> applications might also prefer to know the true maximum brightness
> value.
+1 from me for this change, found it strange that it wasn't already the case.
>
> Because of this i decided to add a new sysfs attribute called
> "multi_max_intensity". This attribute is similar to the
> "max_brightness" sysfs attribute, except that it targets the intensity
> values inside the "multi_intensity" sysfs atribute. I also decided to
> cap intensity values comming from userspace to said maximum intensity
> values to relieve drivers from doing it themself. This was already
> proposed in a unrelated patch [2] and might break some misbehaving
> userspace applications that do not respect max_brightness.

Also +1, max_brightness is checked too in the generic part of the code, 
multi_max_intensity should behave the same.

Since writing a wrong intensity does not return an error but just caps the 
value, the risk of breakage should be minimal i think? It might even repair some 
misbehaving userspace applications by avoiding undefined behavior.

Best regards,

Werner

>
> [1] https://lore.kernel.org/linux-leds/2d91a44e-fce2-42dc-b529-133ab4a191f0@gmx.de/
> [2] https://lore.kernel.org/linux-leds/20260123-leds-multicolor-limit-intensity-v1-1-b37761c2fdfd@pengutronix.de/
>
> Armin Wolf (1):
>    leds: Introduce the multi_max_intensity sysfs attribute
>
>   .../ABI/testing/sysfs-class-led-multicolor    | 16 +++++++--
>   Documentation/leds/leds-class-multicolor.rst  | 21 ++++++++++-
>   drivers/hid/hid-lg-g15.c                      |  3 ++
>   drivers/hid/hid-playstation.c                 |  3 ++
>   drivers/leds/flash/leds-mt6360.c              |  8 ++---
>   drivers/leds/led-class-multicolor.c           | 36 +++++++++++++++++--
>   drivers/leds/leds-blinkm.c                    |  3 ++
>   drivers/leds/leds-cros_ec.c                   |  1 +
>   drivers/leds/leds-lp50xx.c                    |  1 +
>   drivers/leds/leds-lp55xx-common.c             |  7 ++--
>   drivers/leds/leds-max77705.c                  |  1 +
>   drivers/leds/leds-sun50i-a100.c               |  3 ++
>   drivers/leds/leds-turris-omnia.c              |  1 +
>   drivers/leds/rgb/leds-group-multicolor.c      |  1 +
>   drivers/leds/rgb/leds-ktd202x.c               |  1 +
>   drivers/leds/rgb/leds-lp5812.c                |  1 +
>   drivers/leds/rgb/leds-mt6370-rgb.c            |  8 ++---
>   drivers/leds/rgb/leds-ncp5623.c               |  4 +--
>   drivers/leds/rgb/leds-pwm-multicolor.c        |  1 +
>   drivers/leds/rgb/leds-qcom-lpg.c              |  1 +
>   drivers/platform/x86/silicom-platform.c       | 30 ++++++++++++++++
>   drivers/platform/x86/uniwill/uniwill-acpi.c   |  4 +--
>   include/linux/led-class-multicolor.h          | 32 ++++++++++++++++-
>   23 files changed, 164 insertions(+), 23 deletions(-)
>