Introduce a multicolor class that groups colored LEDs within a LED node. 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 intensity file and the latter is controlled via brightness file. Signed-off-by: Dan Murphy <dmurphy@ti.com> Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com> Signed-off-by: Pavel Machek <pavel@ucw.cz> [squashed leds: multicolor: Fix camel case in documentation in]
		
			
				
	
	
		
			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
 |