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