Commit 56e8c56c authored by Joseph Strauss's avatar Joseph Strauss Committed by Lee Jones

leds: Add multicolor support to BlinkM LED driver

Add multicolor support to the BlinkM driver, making it easier to control
from userspace. The BlinkM LED is a programmable RGB LED. The driver
currently supports only the regular LED sysfs class, resulting in the
creation of three distinct classes, one for red, green, and blue. The
user then has to input three values into the three seperate brightness
files within those classes. The multicolor LED framework makes the
device easier to control with the multi_intensity file: the user can
input three values at once to form a color, while still controlling the
lightness with the brightness file.

The main struct blinkm_led has changed slightly. The struct led_classdev
for the regular sysfs classes remain. The blinkm_probe function checks
CONFIG_LEDS_BLINKM_MULTICOLOR to decide whether to load the seperate
sysfs classes or the single multicolor one, but never both. The
blinkm_set_mc_brightness() function had to be added to calculate the
three color components and then set the fields of the blinkm_data
structure accordingly.
Signed-off-by: default avatarJoseph Strauss <jstrauss@mailbox.org>
Link: https://lore.kernel.org/r/20240710184844.108006-1-jstrauss@mailbox.orgSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 6b08d07c
......@@ -13,9 +13,31 @@ The device accepts RGB and HSB color values through separate commands.
Also you can store blinking sequences as "scripts" in
the controller and run them. Also fading is an option.
The interface this driver provides is 2-fold:
The interface this driver provides is 3-fold:
a) LED class interface for use with triggers
a) LED multicolor class interface for use with triggers
#######################################################
The registration follows the scheme::
blinkm-<i2c-bus-nr>-<i2c-device-nr>:rgb:indicator
$ ls -h /sys/class/leds/blinkm-1-9:rgb:indicator
brightness device max_brightness multi_index multi_intensity power subsystem trigger uevent
Hue is controlled by the multi_intensity file and lightness is controlled by
the brightness file.
The order in which to write the intensity values can be found in multi_index.
Exactly three values between 0 and 255 must be written to multi_intensity to
change the color::
$ echo 255 100 50 > multi_intensity
The overall lightness be changed by writing a value between 0 and 255 to the
brightness file.
b) LED class interface for use with triggers
############################################
The registration follows the scheme::
......@@ -79,6 +101,7 @@ E.g.::
as of 6/2012
as of 07/2024
dl9pf <at> gmx <dot> de
jstrauss <at> mailbox <dot> org
......@@ -72,6 +72,14 @@ Good: "platform:*:charging" (allwinner sun50i, leds-cht-wcove)
Good: ":backlight" (Motorola Droid 4)
* Indicators
Good: ":indicator" (Blinkm)
* RGB
Good: ":rgb" (Blinkm)
* Ethernet LEDs
Currently two types of Network LEDs are support, those controlled by
......
......@@ -825,6 +825,14 @@ config LEDS_BLINKM
This option enables support for the BlinkM RGB LED connected
through I2C. Say Y to enable support for the BlinkM LED.
config LEDS_BLINKM_MULTICOLOR
bool "Enable multicolor support for BlinkM I2C RGB LED"
depends on LEDS_BLINKM
depends on LEDS_CLASS_MULTICOLOR
help
This option enables multicolor sysfs class support for BlinkM LED and
disables the older, separated sysfs interface
config LEDS_POWERNV
tristate "LED support for PowerNV Platform"
depends on LEDS_CLASS
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment