led: triggers: Break the for loop after default trigger is found
PATCH 1/2 led: triggers: Break the for loop after default trigger is found
It is of no avail to continue iterating through registered triggers in the led_trigger_set_default() after the trigger to set has been found. Add "break" statement to fix this omission.
--- drivers/leds/led-triggers.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/leds/led-triggers.c +3 -1
@@ -200,8 +200,10 @@ void led_trigger_set_default(struct led_classdev *led_cdev)down_read (&triggers_list_lock);down_write (&led_cdev->trigger_lock);list_for_each_entry (trig, &trigger_list, next_trig) { -if (!strcmp (led_cdev->default_trigger, trig->name)) +if (!strcmp (led_cdev->default_trigger, trig->name)) {led_trigger_set (led_cdev, trig); +break ; + } }up_write (&led_cdev->trigger_lock);up_read (&triggers_list_lock);
Signature · 1 line
2.11.0
PATCH 2/2 led: triggers: Add LED_INIT_DEFAULT_TRIGGER flag
Add the flag LED_INIT_DEFAULT_TRIGGER for indicating that trigger being set is a default trigger for the LED class device, and thus it should be initialized with settings provided in the fwnode.
Set the flag in the led_trigger_set_default(). It is expected to be cleared in the activate() op of a trigger after trigger fwnode initialization data is parsed and applied. This should happen only once after LED class device registration, to allow leaving triggers in the idle state on re-apply and let the users apply their own settings without being interfered with the default ones.
--- drivers/leds/led-triggers.c | 2 ++ include/linux/leds.h | 1 + 2 files changed, 3 insertions(+)
drivers/leds/led-triggers.c +2 -0
@@ -201,10 +201,12 @@ void led_trigger_set_default(struct led_classdev *led_cdev)down_write (&led_cdev->trigger_lock);list_for_each_entry (trig, &trigger_list, next_trig) {if (!strcmp (led_cdev->default_trigger, trig->name)) { + led_cdev->flags |=LED_INIT_DEFAULT_TRIGGER ;led_trigger_set (led_cdev, trig);break ; } } +up_write (&led_cdev->trigger_lock);up_read (&triggers_list_lock); }
include/linux/leds.h +1 -0
@@ -51,6 +51,7 @@ struct led_classdev {#define LED_PANIC_INDICATOR BIT(20)#define LED_BRIGHT_HW_CHANGED BIT(21)#define LED_RETAIN_AT_SHUTDOWN BIT(22) +#define LED_INIT_DEFAULT_TRIGGER BIT(23)/* set_brightness_work / blink_timer flags, atomic, private. */ unsigned long work_flags;
Signature · 1 line
2.11.0
Re: [PATCH 2/2] led: triggers: Add LED_INIT_DEFAULT_TRIGGER flag
Quoted 6 lines
Set the flag in the
led_trigger_set_default(). It is expected to be cleared in theactivate()op of a trigger after trigger fwnode initialization data is parsed and applied. This should happen only once after LED class device registration, to allow leaving triggers in the idle state on re-apply and let the users apply their own settings without being interfered with the default ones.
This is not exactly english :-(. "without interference from"?
I guess we could wait with this till we have an in-tree user?
Thanks,
Pavel
Quoted 35 lines
Signed-off-by Jacek Anaszewski <[email protected]>--- drivers/leds/led-triggers.c | 2 ++ include/linux/leds.h | 1 + 2 files changed, 3 insertions(+)drivers/leds/led-triggers.c +2
-0@@ -201,10 +201,12 @@ void led_trigger_set_default(struct led_classdev *led_cdev)down_write (&led_cdev->trigger_lock);list_for_each_entry (trig, &trigger_list, next_trig) {if (!strcmp (led_cdev->default_trigger, trig->name)) { + led_cdev->flags |=LED_INIT_DEFAULT_TRIGGER ;led_trigger_set (led_cdev, trig);break ; } } +up_write (&led_cdev->trigger_lock);up_read (&triggers_list_lock); }include/linux/leds.h +1
-0@@ -51,6 +51,7 @@ struct led_classdev {#define LED_PANIC_INDICATOR BIT(20)#define LED_BRIGHT_HW_CHANGED BIT(21)#define LED_RETAIN_AT_SHUTDOWN BIT(22) +#define LED_INIT_DEFAULT_TRIGGER BIT(23)/* set_brightness_work / blink_timer flags, atomic, private. */ unsigned long work_flags;
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 2/2] led: triggers: Add LED_INIT_DEFAULT_TRIGGER flag
In reply to Jacek AnaszewskiQuoted 4 lines · Jacek Anaszewski
Add the flag
LED_INIT_DEFAULT_TRIGGERfor indicating that trigger being set is a default trigger for the LED class device, and thus it should be initialized with settings provided in the fwnode.
Quoted 8 lines
Set the flag in the
led_trigger_set_default(). It is expected to be cleared in theactivate()op of a trigger after trigger fwnode initialization data is parsed and applied. This should happen only once after LED class device registration, to allow leaving triggers in the idle state on re-apply and let the users apply their own settings without being interfered with the default ones.Signed-off-by Jacek Anaszewski <[email protected]>
Aha, I see the user now. Sorry for the noise.
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Quoted 5 lines · Jacek Anaszewski
It is of no avail to continue iterating through registered triggers in the
led_trigger_set_default()after the trigger to set has been found. Add "break" statement to fix this omission.Signed-off-by Jacek Anaszewski <[email protected]>
Quoted 16 lines
drivers/leds/led-triggers.c +3
-1@@ -200,8 +200,10 @@ void led_trigger_set_default(struct led_classdev *led_cdev)down_read (&triggers_list_lock);down_write (&led_cdev->trigger_lock);list_for_each_entry (trig, &trigger_list, next_trig) { -if (!strcmp (led_cdev->default_trigger, trig->name)) +if (!strcmp (led_cdev->default_trigger, trig->name)) {led_trigger_set (led_cdev, trig); +break ; + } }up_write (&led_cdev->trigger_lock);up_read (&triggers_list_lock);
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html