^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) Userspace LEDs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ==============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) The uleds driver supports userspace LEDs. This can be useful for testing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) triggers and can also be used to implement virtual LEDs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) Usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) When the driver is loaded, a character device is created at /dev/uleds. To
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) create a new LED class device, open /dev/uleds and write a uleds_user_dev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) structure to it (found in kernel public header file linux/uleds.h)::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define LED_MAX_NAME_SIZE 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) struct uleds_user_dev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) char name[LED_MAX_NAME_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) A new LED class device will be created with the name given. The name can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) any valid sysfs device node name, but consider using the LED class naming
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) convention of "devicename:color:function".
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) The current brightness is found by reading a single byte from the character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) device. Values are unsigned: 0 to 255. Reading will block until the brightness
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) changes. The device node can also be polled to notify when the brightness value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) changes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) The LED class device will be removed when the open file handle to /dev/uleds
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) is closed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) Multiple LED class devices are created by opening additional file handles to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /dev/uleds.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) See tools/leds/uledmon.c for an example userspace program.