power_supply: Add new LED trigger charging-blink-solid-full
Add 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. Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
This commit is contained in:
parent
0b9536c957
commit
6501f728c5
2 changed files with 21 additions and 0 deletions
|
@ -21,6 +21,8 @@
|
|||
static void power_supply_update_bat_leds(struct power_supply *psy)
|
||||
{
|
||||
union power_supply_propval status;
|
||||
unsigned long delay_on = 0;
|
||||
unsigned long delay_off = 0;
|
||||
|
||||
if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
|
||||
return;
|
||||
|
@ -32,16 +34,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 +72,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 +105,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);
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue