leds: trigger: Enforce strict checks in led_trigger_is_hw_controlled()

With all existing triggers adopting the new interface, strict checks
could be enforced to make the semantics of hardware control triggers
clearer.

In detail, a hardware control trigger should:

- Implement hw_offloaded() callback to indicate hardware control
- Associate with the LED classdev's hw_control_trigger string

The fallback path is kept, but a warning message is emitted when it
reaches there.

Acked-by: Ike Panhc <ikepanhc@gmail.com>
Signed-off-by: Rong Zhang <i@rong.moe>
Link: https://patch.msgid.link/20260921-leds-trigger-hw-changed-v7-9-fe3cdb6dec51@rong.moe
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Rong Zhang 2026-09-21 03:40:23 +08:00 committed by Lee Jones
parent 072e0e799b
commit 7b9a609575

View File

@ -42,9 +42,17 @@ static bool __led_trigger_is_hw_controlled(struct led_classdev *led_cdev)
if (!led_cdev->trigger)
return false;
if (!led_cdev->hw_control_trigger ||
strcmp(led_cdev->hw_control_trigger, led_cdev->trigger->name))
return false;
if (led_cdev->trigger->hw_offloaded)
return led_cdev->trigger->hw_offloaded(led_cdev);
dev_warn_once(led_cdev->dev,
"Hardware control trigger %s doesn't provide offloaded state\n",
led_cdev->trigger->name);
/* Otherwise assume private triggers are always offloaded. */
return led_cdev->trigger->trigger_type;
}