87 lines
3.0 KiB
ReStructuredText
87 lines
3.0 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0
|
||
|
|
||
|
====================================
|
||
|
Multicolor LED handling under Linux
|
||
|
====================================
|
||
|
|
||
|
Description
|
||
|
===========
|
||
|
The multicolor class groups monochrome LEDs and allows controlling two
|
||
|
aspects of the final combined color: hue and lightness. The former is
|
||
|
controlled via the multi_intensity array file and the latter is controlled
|
||
|
via brightness file.
|
||
|
|
||
|
Multicolor Class Control
|
||
|
========================
|
||
|
The multicolor class presents files that groups the colors as indexes in an
|
||
|
array. These files are children under the LED parent node created by the
|
||
|
led_class framework. The led_class framework is documented in led-class.rst
|
||
|
within this documentation directory.
|
||
|
|
||
|
Each colored LED will be indexed under the multi_* files. The order of the
|
||
|
colors will be arbitrary. The multi_index file can be read to determine the
|
||
|
color name to indexed value.
|
||
|
|
||
|
The multi_index file is an array that contains the string list of the colors as
|
||
|
they are defined in each multi_* array file.
|
||
|
|
||
|
The multi_intensity is an array that can be read or written to for the
|
||
|
individual color intensities. All elements within this array must be written in
|
||
|
order for the color LED intensities to be updated.
|
||
|
|
||
|
Directory Layout Example
|
||
|
========================
|
||
|
root:/sys/class/leds/multicolor:status# ls -lR
|
||
|
-rw-r--r-- 1 root root 4096 Oct 19 16:16 brightness
|
||
|
-r--r--r-- 1 root root 4096 Oct 19 16:16 max_brightness
|
||
|
-r--r--r-- 1 root root 4096 Oct 19 16:16 multi_index
|
||
|
-rw-r--r-- 1 root root 4096 Oct 19 16:16 multi_intensity
|
||
|
|
||
|
Multicolor Class Brightness Control
|
||
|
===================================
|
||
|
The brightness level for each LED is calculated based on the color LED
|
||
|
intensity setting divided by the global max_brightness setting multiplied by
|
||
|
the requested brightness.
|
||
|
|
||
|
led_brightness = brightness * multi_intensity/max_brightness
|
||
|
|
||
|
Example:
|
||
|
A user first writes the multi_intensity file with the brightness levels
|
||
|
for each LED that are necessary to achieve a certain color output from a
|
||
|
multicolor LED group.
|
||
|
|
||
|
cat /sys/class/leds/multicolor:status/multi_index
|
||
|
green blue red
|
||
|
|
||
|
echo 43 226 138 > /sys/class/leds/multicolor:status/multi_intensity
|
||
|
|
||
|
red -
|
||
|
intensity = 138
|
||
|
max_brightness = 255
|
||
|
green -
|
||
|
intensity = 43
|
||
|
max_brightness = 255
|
||
|
blue -
|
||
|
intensity = 226
|
||
|
max_brightness = 255
|
||
|
|
||
|
The user can control the brightness of that multicolor LED group by writing the
|
||
|
global 'brightness' control. Assuming a max_brightness of 255 the user
|
||
|
may want to dim the LED color group to half. The user would write a value of
|
||
|
128 to the global brightness file then the values written to each LED will be
|
||
|
adjusted base on this value.
|
||
|
|
||
|
cat /sys/class/leds/multicolor:status/max_brightness
|
||
|
255
|
||
|
echo 128 > /sys/class/leds/multicolor:status/brightness
|
||
|
|
||
|
adjusted_red_value = 128 * 138/255 = 69
|
||
|
adjusted_green_value = 128 * 43/255 = 21
|
||
|
adjusted_blue_value = 128 * 226/255 = 113
|
||
|
|
||
|
Reading the global brightness file will return the current brightness value of
|
||
|
the color LED group.
|
||
|
|
||
|
cat /sys/class/leds/multicolor:status/brightness
|
||
|
128
|