leds: trigger: pattern: Add support for hrtimer
authorMartin Kurbanov <mmkurbanov@salutedevices.com>
Tue, 16 Apr 2024 20:18:05 +0000 (23:18 +0300)
committerLee Jones <lee@kernel.org>
Thu, 2 May 2024 16:32:01 +0000 (17:32 +0100)
commitaa172ba73948e2152e258ead7e9ddbd806e809b0
treebf60ae36c4cf5bf247eefffa24a117ca9a09ec30
parentfd05e3698649f253db5476929675a8cd954cb2b8
leds: trigger: pattern: Add support for hrtimer

Currently, led pattern trigger uses timer_list to schedule brightness
changing. As we know from timer_list API [1], it's not accurate to
milliseconds and depends on HZ granularity.

Example:
"0 10 0 0 50 10 50 0 100 10 100 0 150 10 150 0 200 10 200 0 250 10 250 0",
we expect it to be 60ms long, but it can actually be up to ~120ms
(add ~10ms for each pattern when HZ == 100).

But sometimes, userspace needs time accurate led patterns to make sure
that pattern will be executed during expected time slot.
To achieve this goal the patch introduces optional hrtimer usage for
led trigger pattern, because hrtimer is microseconds accurate timer.

[1]: kernel/time/timer.c#L104

Signed-off-by: Martin Kurbanov <mmkurbanov@salutedevices.com>
Link: https://lore.kernel.org/r/20240416201847.357099-1-mmkurbanov@salutedevices.com
Signed-off-by: Lee Jones <lee@kernel.org>
Documentation/ABI/testing/sysfs-class-led-trigger-pattern
drivers/leds/trigger/ledtrig-pattern.c