LEDs: power_supply: Add ability to blink via simple trigger
Subsystems (2)
cover LEDs: power_supply: Add ability to blink via simple trigger
LEDs blinking API is now available, so it's possible to add ability to blink via simple trigger and add blinking support to power supply LEDs. It can be usefull if there's only one LED available, but you want to indicate if battery is charging or fully charged.
Anton, if it's possible, I'd like these patches to be merged via your battery-2.6 tree, because cross-tree dependencies is evil.
RFC PATCH 1/2 LEDs: Add ability to blink via simple trigger
As blink API is now available, it's possible to add ability to blink via simple trigger.
--- drivers/leds/led-triggers.c | 20 ++++++++++++++++++++ include/linux/leds.h | 3 +++ 2 files changed, 23 insertions(+), 0 deletions(-)
drivers/leds/led-triggers.c +20 -0
@@ -231,6 +231,26 @@ void led_trigger_event(struct led_trigger *trigger, }EXPORT_SYMBOL_GPL (led_trigger_event); +void led_trigger_blink (struct led_trigger *trigger, +unsigned long *delay_on, +unsigned long *delay_off) +{ +struct list_head *entry; + +if (!trigger) +return ; + +read_lock (&trigger->leddev_list_lock); +list_for_each (entry, &trigger->led_cdevs) { +struct led_classdev *led_cdev; + + led_cdev = list_entry(entry, struct led_classdev, trig_list); +led_blink_set (led_cdev, delay_on, delay_off); + } +read_unlock (&trigger->leddev_list_lock); +} +EXPORT_SYMBOL_GPL (led_trigger_blink); +void led_trigger_register_simple (const char *name,struct led_trigger **tp) {struct led_trigger *trigger;
include/linux/leds.h +3 -0
@@ -145,6 +145,9 @@ extern void led_trigger_register_simple(const char *name,extern void led_trigger_unregister_simple (struct led_trigger *trigger);extern void led_trigger_event (struct led_trigger *trigger,enum led_brightness event); +extern void led_trigger_blink (struct led_trigger *trigger, +unsigned long *delay_on, +unsigned long *delay_off);#else
Signature · 1 line
1.7.3.2
RFC PATCH 2/2 power_supply: Add new LED trigger charging-blink-solid-full
In reply to Vasily KhoruzhickAdd new trigger to power_supply LEDs. It will blink when battery is charging, and stay solid when battery is charged. It's usefull to indicate battery state when there's only one LED available.
--- drivers/power/power_supply_leds.c | 18 ++++++++++++++++++ include/linux/power_supply.h | 2 ++ 2 files changed, 20 insertions(+), 0 deletions(-)
drivers/power/power_supply_leds.c +18 -0
@@ -21,6 +21,7 @@static void power_supply_update_bat_leds (struct power_supply *psy) {union power_supply_propval status; +unsigned long delay_on =0 , delay_off =0 ;if (psy->get_property (psy,POWER_SUPPLY_PROP_STATUS , &status))return ;
@@ -32,16 +33,22 @@ static void power_supply_update_bat_leds(struct power_supply *psy)led_trigger_event (psy->charging_full_trig,LED_FULL );led_trigger_event (psy->charging_trig,LED_OFF );led_trigger_event (psy->full_trig,LED_FULL ); +led_trigger_event (psy->charging_blink_full_solid_trig, +LED_FULL );break ;case POWER_SUPPLY_STATUS_CHARGING :led_trigger_event (psy->charging_full_trig,LED_FULL );led_trigger_event (psy->charging_trig,LED_FULL );led_trigger_event (psy->full_trig,LED_OFF ); +led_trigger_blink (psy->charging_blink_full_solid_trig, + &delay_on, &delay_off);break ;default :led_trigger_event (psy->charging_full_trig,LED_OFF );led_trigger_event (psy->charging_trig,LED_OFF );led_trigger_event (psy->full_trig,LED_OFF ); +led_trigger_event (psy->charging_blink_full_solid_trig, +LED_OFF );break ; } }
@@ -64,15 +71,24 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)if (!psy->full_trig_name) goto full_failed; + psy->charging_blink_full_solid_trig_name =kasprintf (GFP_KERNEL , +"%s-charging-blink-full-solid" , psy->name); +if (!psy->charging_blink_full_solid_trig_name) + goto charging_blink_full_solid_failed; +led_trigger_register_simple (psy->charging_full_trig_name, &psy->charging_full_trig);led_trigger_register_simple (psy->charging_trig_name, &psy->charging_trig);led_trigger_register_simple (psy->full_trig_name, &psy->full_trig); +led_trigger_register_simple (psy->charging_blink_full_solid_trig_name, + &psy->charging_blink_full_solid_trig); goto success; +charging_blink_full_solid_failed: +kfree (psy->full_trig_name); full_failed:kfree (psy->charging_trig_name); charging_failed:
@@ -88,6 +104,8 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy)led_trigger_unregister_simple (psy->charging_full_trig);led_trigger_unregister_simple (psy->charging_trig);led_trigger_unregister_simple (psy->full_trig); +led_trigger_unregister_simple (psy->charging_blink_full_solid_trig); +kfree (psy->charging_blink_full_solid_trig_name);kfree (psy->full_trig_name);kfree (psy->charging_trig_name);kfree (psy->charging_full_trig_name);
include/linux/power_supply.h +2 -0
@@ -173,6 +173,8 @@ struct power_supply {char *full_trig_name;struct led_trigger *online_trig;char *online_trig_name; +struct led_trigger *charging_blink_full_solid_trig; +char *charging_blink_full_solid_trig_name;#endif };
Signature · 1 line
1.7.3.2
Re: [RFC PATCH 2/2] power_supply: Add new LED trigger charging-blink-solid-full
Quoted 6 lines · Vasily Khoruzhick
Add new trigger to
power_supplyLEDs. It will blink when battery is charging, and stay solid when battery is charged. It's usefull to indicate battery state when there's only one LED available.Signed-off-by Vasily Khoruzhick <[email protected]>
Strange, I got neither 0/2 nor 1/2.
Anyway, I'm fine with this particular patch, but to take 1/2 via battery-2.6.git I need Richard's Acked-by tag.
A note wrt the new LEDs API...
Quoted 14 lines
--- drivers/power/power_supply_leds.c | 18 ++++++++++++++++++ include/linux/power_supply.h | 2 ++ 2 files changed, 20 insertions(+), 0 deletions(-)drivers/power/power_supply_leds.c +1
-0@@ -21,6 +21,7 @@static void power_supply_update_bat_leds (struct power_supply *psy) {union power_supply_propval status; +unsigned long delay_on =0 , delay_off =0 ;
[...]
drivers/power/power_supply_leds.c static void power_supply_update_bat_leds(struct power_supply *psy) · line 44
Quoted 2 lines
drivers/power/power_supply_leds.c +2
-0+led_trigger_blink (psy->charging_blink_full_solid_trig, + &delay_on, &delay_off);
I think it's better to allow passing NULL to led_trigger_blink() and thus avoid delay_{on,off} dummy variables.
Thanks,
Signature · 2 lines
Anton Vorontsov Email: [email protected]
Re: [RFC PATCH 2/2] power_supply: Add new LED trigger charging-blink-solid-full
Quoted 1 line · On Friday 14 January 2011 18:18:51 Anton Vorontsov wrote:
Strange, I got neither 0/2 nor 1/2.
Hmm, patches are definitely on ML, here's link to 1st patch on patchwork:
https://patchwork.kernel.org/patch/464481/
However, if you want, I can forward copy of 0/2 and 1/2 to you directly, but check your 'spam' folder first ;)
Quoted 2 lines
Anyway, I'm fine with this particular patch, but to take 1/2 via battery-2.6.git I need Richard's Acked-by tag.
Ok
Quoted 5 lines
drivers/power/power_supply_leds.c static void power_supply_update_bat_leds(struct power_supply *psy) · line 44
Quoted 2 lines
drivers/power/power_supply_leds.c +2
-0+led_trigger_blink (psy->charging_blink_full_solid_trig, + &delay_on, &delay_off);I think it's better to allow passing NULL to
led_trigger_blink()and thus avoid delay_{on,off} dummy variables.
It mimics led_blink_set function, and I prefer to keep it this way (just to keep consistency), or change led_blink_set behavior.
Regards
Vasily
Re: [RFC PATCH 2/2] power_supply: Add new LED trigger charging-blink-solid-full
In reply to Vasily KhoruzhickQuoted 7 lines · Vasily Khoruzhick
Add new trigger to
power_supplyLEDs. It will blink when battery is charging, and stay solid when battery is charged. It's usefull to indicate battery state when there's only one LED available.Signed-off-by Vasily Khoruzhick <[email protected]>---
Appled both patches to battery-2.6.git, thanks!
drivers/power/power_supply_leds.c line 24
Quoted 13 lines
drivers/power/power_supply_leds.c | 18 ++++++++++++++++++ include/linux/power_supply.h | 2 ++ 2 files changed, 20 insertions(+), 0 deletions(-)drivers/power/power_supply_leds.c +1
-0@@ -21,6 +21,7 @@static void power_supply_update_bat_leds (struct power_supply *psy) {union power_supply_propval status; +unsigned long delay_on =0 , delay_off =0 ;
Changed this to
unsigned long delay_on = 0; unsigned long delay_off = 0;
Thanks!
Signature · 2 lines
Anton Vorontsov Email: [email protected]