Commit 6501f728 authored by Vasily Khoruzhick's avatar Vasily Khoruzhick Committed by Anton Vorontsov

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: default avatarVasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: default avatarAnton Vorontsov <cbouatmailru@gmail.com>
parent 0b9536c9
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
static void power_supply_update_bat_leds(struct power_supply *psy) static void power_supply_update_bat_leds(struct power_supply *psy)
{ {
union power_supply_propval status; 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)) if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
return; return;
...@@ -32,16 +34,22 @@ static void power_supply_update_bat_leds(struct power_supply *psy) ...@@ -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_full_trig, LED_FULL);
led_trigger_event(psy->charging_trig, LED_OFF); led_trigger_event(psy->charging_trig, LED_OFF);
led_trigger_event(psy->full_trig, LED_FULL); led_trigger_event(psy->full_trig, LED_FULL);
led_trigger_event(psy->charging_blink_full_solid_trig,
LED_FULL);
break; break;
case POWER_SUPPLY_STATUS_CHARGING: case POWER_SUPPLY_STATUS_CHARGING:
led_trigger_event(psy->charging_full_trig, LED_FULL); led_trigger_event(psy->charging_full_trig, LED_FULL);
led_trigger_event(psy->charging_trig, LED_FULL); led_trigger_event(psy->charging_trig, LED_FULL);
led_trigger_event(psy->full_trig, LED_OFF); led_trigger_event(psy->full_trig, LED_OFF);
led_trigger_blink(psy->charging_blink_full_solid_trig,
&delay_on, &delay_off);
break; break;
default: default:
led_trigger_event(psy->charging_full_trig, LED_OFF); led_trigger_event(psy->charging_full_trig, LED_OFF);
led_trigger_event(psy->charging_trig, LED_OFF); led_trigger_event(psy->charging_trig, LED_OFF);
led_trigger_event(psy->full_trig, LED_OFF); led_trigger_event(psy->full_trig, LED_OFF);
led_trigger_event(psy->charging_blink_full_solid_trig,
LED_OFF);
break; break;
} }
} }
...@@ -64,15 +72,24 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) ...@@ -64,15 +72,24 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
if (!psy->full_trig_name) if (!psy->full_trig_name)
goto full_failed; 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, led_trigger_register_simple(psy->charging_full_trig_name,
&psy->charging_full_trig); &psy->charging_full_trig);
led_trigger_register_simple(psy->charging_trig_name, led_trigger_register_simple(psy->charging_trig_name,
&psy->charging_trig); &psy->charging_trig);
led_trigger_register_simple(psy->full_trig_name, led_trigger_register_simple(psy->full_trig_name,
&psy->full_trig); &psy->full_trig);
led_trigger_register_simple(psy->charging_blink_full_solid_trig_name,
&psy->charging_blink_full_solid_trig);
goto success; goto success;
charging_blink_full_solid_failed:
kfree(psy->full_trig_name);
full_failed: full_failed:
kfree(psy->charging_trig_name); kfree(psy->charging_trig_name);
charging_failed: charging_failed:
...@@ -88,6 +105,8 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy) ...@@ -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_full_trig);
led_trigger_unregister_simple(psy->charging_trig); led_trigger_unregister_simple(psy->charging_trig);
led_trigger_unregister_simple(psy->full_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->full_trig_name);
kfree(psy->charging_trig_name); kfree(psy->charging_trig_name);
kfree(psy->charging_full_trig_name); kfree(psy->charging_full_trig_name);
......
...@@ -173,6 +173,8 @@ struct power_supply { ...@@ -173,6 +173,8 @@ struct power_supply {
char *full_trig_name; char *full_trig_name;
struct led_trigger *online_trig; struct led_trigger *online_trig;
char *online_trig_name; char *online_trig_name;
struct led_trigger *charging_blink_full_solid_trig;
char *charging_blink_full_solid_trig_name;
#endif #endif
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment