Re: [PATCH RFC] leds: Add support for per-LED device triggers

From: Marek Behún
Date: Wed Jul 08 2020 - 10:56:24 EST


On Sat, 4 Jul 2020 14:59:00 +0200
Pavel Machek <pavel@xxxxxx> wrote:

> Hi!
>
> > Some criticism to this approach to HW triggers:
> > - every hw trigger for each LED has to be registered via current
> > trigger API. This will grow code size and memory footprint once
> > this API is widely used
> > - one HW trigger can only master one LED device (via private_led
> > member). So if I have, for example an ethernet switch with 8
> > ports, and each port has 2 LEDs, and each LED has 10 possible HW
> > triggering mechanisms, with your proposed API one would need to
> > register 8*2*10 = 160 triggers
>
> Well, code is simple, and so far I have seen 2 HW triggering
> mechanisms, not 10. Maybe we should have a function to regiter a hw
> trigger for a LED, so that internal implementation can be changed
> more easily.
>
> Ondrej: You already have code using this, right? Can we get an
> example?
>
> > I too have been thinking about an API for HW LED triggers, and I
> > tinkered with it a little. Some time ago I sent some emails, with
> > subjects:
> > "RFC: LED hw triggering API"
> > "about my trigger-sources work"
>
> Perhaps it is time to send them one more time, so Ondrej can say if it
> works for him/looks okay for him?
>
> > My current thoughts about how HW LED triggers could work nicely is
> > as such:
> > - these members (maybe with different names) shall be added to
> > struct led_classdev:
> > available_hw_triggers()
> > - shall return a NULL terminated list of HW trigger names
> > available for this LED
> > set_hw_trigger()
> > - sets HW trigger for this LED. The LED triggering API shall
> > call this method after previous LED trigger is unset. If
> > called with NULL parameter, unsets HW trigger
> > current_hw_trigger
> > - name of the currently set HW LED trigger for this LED
> > - the driver registering the LED cdev informs abouth the LED being
> > capable of HW triggering - members available_hw_triggers and
> > set_hw_trigger must be set
> > - SW LED trigger and HW LED trigger are mutualy exclusive on one
> > LED
> > - the trigger file in sysfs (/sys/class/leds/LED/trigger) shall
> > first list the available SW triggers, and then available hw
> > triggers for this LED, prefixed with "hw:"
> > When written, if the written trigger name starts with "hw:",
> > instead of setting SW trigger, a HW trigger is set via
> > set_hw_trigger() method
>
> This does not sound bad, either.
>
> Best regards,
> Pavel

Hi Pavel
I shall try to implement this and send a proposal within 2 weeks.
Marek