| .. 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 |