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>

authored by Vasily Khoruzhick and committed by Anton Vorontsov 6501f728 0b9536c9

+21
+19
drivers/power/power_supply_leds.c
··· 21 static void power_supply_update_bat_leds(struct power_supply *psy) 22 { 23 union power_supply_propval status; 24 25 if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status)) 26 return; ··· 34 led_trigger_event(psy->charging_full_trig, LED_FULL); 35 led_trigger_event(psy->charging_trig, LED_OFF); 36 led_trigger_event(psy->full_trig, LED_FULL); 37 break; 38 case POWER_SUPPLY_STATUS_CHARGING: 39 led_trigger_event(psy->charging_full_trig, LED_FULL); 40 led_trigger_event(psy->charging_trig, LED_FULL); 41 led_trigger_event(psy->full_trig, LED_OFF); 42 break; 43 default: 44 led_trigger_event(psy->charging_full_trig, LED_OFF); 45 led_trigger_event(psy->charging_trig, LED_OFF); 46 led_trigger_event(psy->full_trig, LED_OFF); 47 break; 48 } 49 } ··· 72 if (!psy->full_trig_name) 73 goto full_failed; 74 75 led_trigger_register_simple(psy->charging_full_trig_name, 76 &psy->charging_full_trig); 77 led_trigger_register_simple(psy->charging_trig_name, 78 &psy->charging_trig); 79 led_trigger_register_simple(psy->full_trig_name, 80 &psy->full_trig); 81 82 goto success; 83 84 full_failed: 85 kfree(psy->charging_trig_name); 86 charging_failed: ··· 105 led_trigger_unregister_simple(psy->charging_full_trig); 106 led_trigger_unregister_simple(psy->charging_trig); 107 led_trigger_unregister_simple(psy->full_trig); 108 kfree(psy->full_trig_name); 109 kfree(psy->charging_trig_name); 110 kfree(psy->charging_full_trig_name);
··· 21 static void power_supply_update_bat_leds(struct power_supply *psy) 22 { 23 union power_supply_propval status; 24 + unsigned long delay_on = 0; 25 + unsigned long delay_off = 0; 26 27 if (psy->get_property(psy, POWER_SUPPLY_PROP_STATUS, &status)) 28 return; ··· 32 led_trigger_event(psy->charging_full_trig, LED_FULL); 33 led_trigger_event(psy->charging_trig, LED_OFF); 34 led_trigger_event(psy->full_trig, LED_FULL); 35 + led_trigger_event(psy->charging_blink_full_solid_trig, 36 + LED_FULL); 37 break; 38 case POWER_SUPPLY_STATUS_CHARGING: 39 led_trigger_event(psy->charging_full_trig, LED_FULL); 40 led_trigger_event(psy->charging_trig, LED_FULL); 41 led_trigger_event(psy->full_trig, LED_OFF); 42 + led_trigger_blink(psy->charging_blink_full_solid_trig, 43 + &delay_on, &delay_off); 44 break; 45 default: 46 led_trigger_event(psy->charging_full_trig, LED_OFF); 47 led_trigger_event(psy->charging_trig, LED_OFF); 48 led_trigger_event(psy->full_trig, LED_OFF); 49 + led_trigger_event(psy->charging_blink_full_solid_trig, 50 + LED_OFF); 51 break; 52 } 53 } ··· 64 if (!psy->full_trig_name) 65 goto full_failed; 66 67 + psy->charging_blink_full_solid_trig_name = kasprintf(GFP_KERNEL, 68 + "%s-charging-blink-full-solid", psy->name); 69 + if (!psy->charging_blink_full_solid_trig_name) 70 + goto charging_blink_full_solid_failed; 71 + 72 led_trigger_register_simple(psy->charging_full_trig_name, 73 &psy->charging_full_trig); 74 led_trigger_register_simple(psy->charging_trig_name, 75 &psy->charging_trig); 76 led_trigger_register_simple(psy->full_trig_name, 77 &psy->full_trig); 78 + led_trigger_register_simple(psy->charging_blink_full_solid_trig_name, 79 + &psy->charging_blink_full_solid_trig); 80 81 goto success; 82 83 + charging_blink_full_solid_failed: 84 + kfree(psy->full_trig_name); 85 full_failed: 86 kfree(psy->charging_trig_name); 87 charging_failed: ··· 88 led_trigger_unregister_simple(psy->charging_full_trig); 89 led_trigger_unregister_simple(psy->charging_trig); 90 led_trigger_unregister_simple(psy->full_trig); 91 + led_trigger_unregister_simple(psy->charging_blink_full_solid_trig); 92 + kfree(psy->charging_blink_full_solid_trig_name); 93 kfree(psy->full_trig_name); 94 kfree(psy->charging_trig_name); 95 kfree(psy->charging_full_trig_name);
+2
include/linux/power_supply.h
··· 173 char *full_trig_name; 174 struct led_trigger *online_trig; 175 char *online_trig_name; 176 #endif 177 }; 178
··· 173 char *full_trig_name; 174 struct led_trigger *online_trig; 175 char *online_trig_name; 176 + struct led_trigger *charging_blink_full_solid_trig; 177 + char *charging_blink_full_solid_trig_name; 178 #endif 179 }; 180