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