[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251230003250.1197744-1-professorjonny98@gmail.com>
Date: Tue, 30 Dec 2025 13:32:37 +1300
From: Jonathan Brophy <professorjonny98@...il.com>
To: lee Jones <lee@...nel.org>,
Pavel Machek <pavel@...nel.org>,
Andriy Shevencho <andriy.shevchenko@...ux.intel.com>,
Jonathan Brophy <professor_jonny@...mail.com>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Radoslav Tsvetkov <rtsvetkov@...dotech.eu>
Cc: devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
linux-leds@...r.kernel.org
Subject: [PATCH v4 0/7] leds: Add virtual LED group driver with priority arbitration
From: Jonathan Brophy <professor_jonny@...mail.com>
This patch series introduces a new LED driver that implements virtual LED
groups with priority-based arbitration for shared physical LEDs. The driver
provides a multicolor LED interface while solving the problem of multiple
subsystems needing to control the same physical LEDs.
Key features:
- Winner-takes-all priority-based arbitration
- Full multicolor LED ABI compliance
- Two operating modes (multicolor and standard/fixed-color)
- Deterministic channel ordering by LED_COLOR_ID
- Comprehensive debugfs telemetry (when CONFIG_DEBUG_FS enabled)
- Optimized memory footprint (~200 bytes per LED in production builds)
Use cases:
- System status indicators with boot/error/update priority levels
- RGB lighting with coordinated control
- Multi-element LED arrays unified into single logical controls
The series includes:
1. New LED function identifier for virtual LEDs
2. Device tree bindings for virtual LED class
3. Device tree bindings for virtual LED group controller
4. ABI documentation for sysfs interface
5. Comprehensive driver documentation
6. fwnode_led_get() helper for firmware-agnostic LED resolution
7. Complete driver implementation
Changes since last v3 commit
- convert driver to pure fwnode
- Multicolor LED ABI compliance - standard multi_intensity/multi_index attributes
- Winner-takes-all arbitration - deterministic control with sequence-based tie-breaking
- Proper LED reference management - fwnode_led_get() + led_put() prevents leaks
- 30% memory reduction - conditional debug compilation
- Global ownership tracking - prevents conflicts between multiple controllers
- Hierarchical locking - documented 3-tier lock order prevents deadlocks
- Lock-free hardware I/O - concurrent vLED updates during physical LED access
- Dual operating modes - multicolor (dynamic) and standard (fixed-color) modes
- Pre-allocated arbitration buffers - zero allocations in hot path
- Comprehensive power management - suspend/resume with runtime PM support
Additional highlights:
Update batching for software PWM workloads
Gamma correction for perceptual brightness
Rate limiting for runaway updates
Extensive debugfs telemetry with stress testing
Deferred probe handling for late-probing LEDs
Removal race prevention with atomic flags
Testing:
- Tested on ARM64 platform with GPIO and PWM LEDs
- Stress tested with 10,000 iterations
- Validated suspend/resume cycles
- Memory leak detection passes
Jonathan Brophy (7):
dt-bindings: leds: Add LED_FUNCTION_VIRTUAL_STATUS identifier
dt-bindings: leds: Add virtual LED class bindings
dt-bindings: leds: Add virtual LED group controller bindings
ABI: Add sysfs documentation for leds-group-virtualcolor
leds: Add driver documentation for leds-group-virtualcolor
leds: Add fwnode_led_get() for firmware-agnostic LED resolution
leds: Add virtual LED group driver with priority arbitration
.../sysfs-class-led-driver-virtualcolor | 168 +
.../leds/leds-class-virtualcolor.yaml | 197 +
.../leds/leds-group-virtualcolor.yaml | 170 +
.../leds/leds-group-virtualcolor.rst | 641 ++++
drivers/leds/led-class.c | 136 +-
drivers/leds/leds.h | 758 +++-
drivers/leds/rgb/Kconfig | 17 +
drivers/leds/rgb/Makefile | 1 +
drivers/leds/rgb/leds-group-virtualcolor.c | 3360 +++++++++++++++++
include/dt-bindings/leds/common.h | 3 +
10 files changed, 5399 insertions(+), 52 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-class-led-driver-virtualcolor
create mode 100644 Documentation/devicetree/bindings/leds/leds-class-virtualcolor.yaml
create mode 100644 Documentation/devicetree/bindings/leds/leds-group-virtualcolor.yaml
create mode 100644 Documentation/leds/leds-group-virtualcolor.rst
create mode 100644 drivers/leds/rgb/leds-group-virtualcolor.c
--
2.43.0
Powered by blists - more mailing lists