Message ID | 20190530181630.30373-1-dmurphy@ti.com |
---|---|
State | New |
Headers | show |
Series | [v4,1/2] leds: multicolor: Add sysfs interface definition | expand |
Hi Dan, On 5/30/19 8:16 PM, Dan Murphy wrote: [...] > +Multicolor Class Brightness Control > +----------------------------------- > +The multicolor class will redirect the device drivers call back > +function for brightness control to the multicolor class brightness > +control function. > + > +The brightness level for each LED is calculated based on the color LED > +brightness setting divided by the color LED max brightness setting multiplied by > +the requested value. > + > +led_brightness = requested_value*(led_color_brightness/led_color_max_brightness) > + > +Example: > +Three LEDs are present in the group as defined in "Directory Layout Example" > +within this document. > + > +A user first writes the color LED brightness file with the brightness level that > +is neccesary to achieve a blueish violet output from the RGB LED group. > + > +echo 138 > /sys/class/leds/rgb:grouped_leds/red/brightness > +echo 43 > /sys/class/leds/rgb:grouped_leds/green/brightness > +echo 226 > /sys/class/leds/rgb:grouped_leds/blue/brightness > + > +red - > + brightness = 138 > + max_brightness = 255 > +green - > + brightness = 43 > + max_brightness = 255 > +blue - > + brightness = 226 > + max_brightness = 255 > + > +The user can control the brightness of that RGB group by writing the parent > +'brightness' control. Assuming a parent 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 > +parent brightness file then the values written to each LED will be adjusted > +base on this value > + > +cat /sys/class/leds/rgb:grouped_leds/max_brightness > +255 > +echo 128 > /sys/class/leds/rgb:grouped_leds/brightness > + > +adjusted_red_value = 128 * (138/255) = 69 > +adjusted_green_value = 128 * (43/255) = 21 > +adjusted_blue_value = 128 * (226/255) = 113 > + > +Reading the parent brightness file will return the current brightness value of > +the color LED group. I've tested this algorithm with python script and at least on my LED monitor it works as expected. Attached is the script I've come up with. > +cat /sys/class/leds/rgb:grouped_leds/max_brightness > +255 > + > +echo 128 > /sys/class/leds/rgb:grouped_leds/brightness > + > +cat /sys/class/leds/rgb:grouped_leds/max_brightness > +128 > + > + > -- Best regards, Jacek Anaszewski #!/usr/bin/python3.5 from PIL import Image import sys import time WIDTH = 500 HEIGHT = 500 def print_usage(): print ('Usage: led_color.py RED GREEN BLUE TOP_BRIGHTNESS') sys.exit(0) def main(): if len(sys.argv) != 5: print_usage() MAX_R = int(sys.argv[4]) MAX_G = int(sys.argv[4]) MAX_B = int(sys.argv[4]) R = int(sys.argv[1]) G = int(sys.argv[2]) B = int(sys.argv[3]) TB = int(sys.argv[4]) for BR in range(1,TB+1): OUT_R = int(BR * R / MAX_R) OUT_G = int(BR * G / MAX_G) OUT_B = int(BR * B / MAX_B) print("red: {}, green: {}, blue: {}".format(OUT_R, OUT_G, OUT_B)) img = Image.new("RGB", (WIDTH,HEIGHT), (OUT_R,OUT_G,OUT_B)) img.show() time.sleep(0.1) if __name__ == "__main__": main()
diff --git a/Documentation/ABI/testing/sysfs-class-led-multicolor b/Documentation/ABI/testing/sysfs-class-led-multicolor new file mode 100644 index 000000000000..ec2b6ac63ecc --- /dev/null +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor @@ -0,0 +1,74 @@ +What: /sys/class/leds/<led>/brightness +Date: April 2019 +KernelVersion: 5.2 +Contact: Dan Murphy <dmurphy@ti.com> +Description: read/write + The multicolor class will redirect the device drivers call back + function for brightness control to the multicolor class + brightness control function. + + Writing to this file will update all LEDs within the group to a + calculated percentage of what each color LED in the group is set + to. Please refer to the leds-class-multicolor.txt in the + Documentation directory for a complete description. + + The value of the color is from 0 to + /sys/class/leds/<led>/max_brightness. + +What: /sys/class/leds/<led>/colors/sync_enable +Date: April 2019 +KernelVersion: 5.2 +Contact: Dan Murphy <dmurphy@ti.com> +Description: read/write + Writing a 1 to this file will enable the synchronization of all + the defined color LEDs within the LED node. Brightness values + for each LED will be stored and written when sync is set to 1. + Writing a 0 to this file will disable syncing and allow + individual control of the LEDs brightness settings. + +What: /sys/class/leds/<led>/colors/sync +Date: April 2019 +KernelVersion: 5.2 +Contact: Dan Murphy <dmurphy@ti.com> +Description: write only + Writing a 1 to this file while sync_enable is set to 1 will + write the current brightness values to all defined LEDs within + the LED node. All LEDs defined will be configured based + on the brightness that has been requested. + + If sync_enable is set to 0 then writing a 1 to sync has no + affect on the LEDs. + +What: /sys/class/leds/<led>/colors/<led_color>/brightness +Date: April 2019 +KernelVersion: 5.2 +Contact: Dan Murphy <dmurphy@ti.com> +Description: read/write + The led_color directory is dynamically created based on the + colors defined by the registrar of the class. + The led_color can be but not limited to red, green, blue, + white, amber, yellow and violet. Drivers can also declare a + LED color for presentation. There is one directory per color + presented. The brightness file is created under each + led_color directory and controls the individual LED color + setting. + + If sync is enabled then writing the brightness value of the LED + is deferred until a 1 is written to + /sys/class/leds/<led>/color/sync. If syncing is + disabled then the LED brightness value will be written + immediately to the LED driver. + + The value of the color is from 0 to + /sys/class/leds/<led>/colors/<led_color>/max_brightness. + +What: /sys/class/leds/<led>/colors/<led_color>/max_brightness +Date: April 2019 +KernelVersion: 5.2 +Contact: Dan Murphy <dmurphy@ti.com> +Description: read only + Maximum brightness level for the LED color, default is + 255 (LED_FULL). + + If the LED does not support different brightness levels, this + should be 1.
Add a documentation of LED Multicolor LED class specific sysfs attributes. Signed-off-by: Dan Murphy <dmurphy@ti.com> --- v4 - Add LED class parent brightness definition to the text - https://lore.kernel.org/patchwork/patch/1078398/ .../ABI/testing/sysfs-class-led-multicolor | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-class-led-multicolor -- 2.21.0.5.gaeb582a983