[v4,1/2] leds: multicolor: Add sysfs interface definition

Message ID 20190530181630.30373-1-dmurphy@ti.com
State New
Headers show
Series
  • [v4,1/2] leds: multicolor: Add sysfs interface definition
Related show

Commit Message

Dan Murphy May 30, 2019, 6:16 p.m.
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

Comments

Jacek Anaszewski June 9, 2019, 3:15 p.m. | #1
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()

Patch

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.