56e8c56c9a
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: Joseph Strauss <jstrauss@mailbox.org> Link: https://lore.kernel.org/r/20240710184844.108006-1-jstrauss@mailbox.org Signed-off-by: Lee Jones <lee@kernel.org>
108 lines
2.7 KiB
ReStructuredText
108 lines
2.7 KiB
ReStructuredText
==================
|
|
Leds BlinkM driver
|
|
==================
|
|
|
|
The leds-blinkm driver supports the devices of the BlinkM family.
|
|
|
|
They are RGB-LED modules driven by a (AT)tiny microcontroller and
|
|
communicate through I2C. The default address of these modules is
|
|
0x09 but this can be changed through a command. By this you could
|
|
daisy-chain up to 127 BlinkMs on an I2C bus.
|
|
|
|
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 3-fold:
|
|
|
|
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::
|
|
|
|
blinkm-<i2c-bus-nr>-<i2c-device-nr>-<color>
|
|
|
|
$ ls -h /sys/class/leds/blinkm-6-*
|
|
/sys/class/leds/blinkm-6-9-blue:
|
|
brightness device max_brightness power subsystem trigger uevent
|
|
|
|
/sys/class/leds/blinkm-6-9-green:
|
|
brightness device max_brightness power subsystem trigger uevent
|
|
|
|
/sys/class/leds/blinkm-6-9-red:
|
|
brightness device max_brightness power subsystem trigger uevent
|
|
|
|
(same is /sys/bus/i2c/devices/6-0009/leds)
|
|
|
|
We can control the colors separated into red, green and blue and
|
|
assign triggers on each color.
|
|
|
|
E.g.::
|
|
|
|
$ cat blinkm-6-9-blue/brightness
|
|
05
|
|
|
|
$ echo 200 > blinkm-6-9-blue/brightness
|
|
$
|
|
|
|
$ modprobe ledtrig-heartbeat
|
|
$ echo heartbeat > blinkm-6-9-green/trigger
|
|
$
|
|
|
|
|
|
b) Sysfs group to control rgb, fade, hsb, scripts ...
|
|
#####################################################
|
|
|
|
This extended interface is available as folder blinkm
|
|
in the sysfs folder of the I2C device.
|
|
E.g. below /sys/bus/i2c/devices/6-0009/blinkm
|
|
|
|
$ ls -h /sys/bus/i2c/devices/6-0009/blinkm/
|
|
blue green red test
|
|
|
|
Currently supported is just setting red, green, blue
|
|
and a test sequence.
|
|
|
|
E.g.::
|
|
|
|
$ cat *
|
|
00
|
|
00
|
|
00
|
|
#Write into test to start test sequence!#
|
|
|
|
$ echo 1 > test
|
|
$
|
|
|
|
$ echo 255 > red
|
|
$
|
|
|
|
|
|
|
|
as of 07/2024
|
|
|
|
dl9pf <at> gmx <dot> de
|
|
jstrauss <at> mailbox <dot> org
|