Skip to content

Commit 9af12f5

Browse files
Kate Hsuanlag-linaro
authored andcommitted
power: supply: power-supply-leds: Add charging_orange_full_green trigger for RGB LED
Add a charging_orange_full_green LED trigger and the trigger is based on led_mc_trigger_event() which can set an RGB LED when the trigger is triggered. The LED will show orange when the battery status is charging. The LED will show green when the battery status is full. Link: https://lore.kernel.org/linux-leds/[email protected]/ Signed-off-by: Kate Hsuan <[email protected]> Acked-by: Sebastian Reichel <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> [[email protected] change color order to RGB] Signed-off-by: Hans de Goede <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Lee Jones <[email protected]>
1 parent 0921a57 commit 9af12f5

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

drivers/power/supply/power_supply_leds.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
static void power_supply_update_bat_leds(struct power_supply *psy)
2323
{
2424
union power_supply_propval status;
25+
unsigned int intensity_green[3] = { 0, 255, 0 };
26+
unsigned int intensity_orange[3] = { 255, 128, 0 };
2527

2628
if (power_supply_get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
2729
return;
@@ -36,19 +38,29 @@ static void power_supply_update_bat_leds(struct power_supply *psy)
3638
/* Going from blink to LED on requires a LED_OFF event to stop blink */
3739
led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF);
3840
led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL);
41+
led_mc_trigger_event(psy->charging_orange_full_green_trig,
42+
intensity_green,
43+
ARRAY_SIZE(intensity_green),
44+
LED_FULL);
3945
break;
4046
case POWER_SUPPLY_STATUS_CHARGING:
4147
led_trigger_event(psy->charging_full_trig, LED_FULL);
4248
led_trigger_event(psy->charging_trig, LED_FULL);
4349
led_trigger_event(psy->full_trig, LED_OFF);
4450
led_trigger_blink(psy->charging_blink_full_solid_trig, 0, 0);
51+
led_mc_trigger_event(psy->charging_orange_full_green_trig,
52+
intensity_orange,
53+
ARRAY_SIZE(intensity_orange),
54+
LED_FULL);
4555
break;
4656
default:
4757
led_trigger_event(psy->charging_full_trig, LED_OFF);
4858
led_trigger_event(psy->charging_trig, LED_OFF);
4959
led_trigger_event(psy->full_trig, LED_OFF);
5060
led_trigger_event(psy->charging_blink_full_solid_trig,
5161
LED_OFF);
62+
led_trigger_event(psy->charging_orange_full_green_trig,
63+
LED_OFF);
5264
break;
5365
}
5466
}
@@ -74,6 +86,11 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
7486
if (!psy->charging_blink_full_solid_trig_name)
7587
goto charging_blink_full_solid_failed;
7688

89+
psy->charging_orange_full_green_trig_name = kasprintf(GFP_KERNEL,
90+
"%s-charging-orange-full-green", psy->desc->name);
91+
if (!psy->charging_orange_full_green_trig_name)
92+
goto charging_red_full_green_failed;
93+
7794
led_trigger_register_simple(psy->charging_full_trig_name,
7895
&psy->charging_full_trig);
7996
led_trigger_register_simple(psy->charging_trig_name,
@@ -82,9 +99,13 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
8299
&psy->full_trig);
83100
led_trigger_register_simple(psy->charging_blink_full_solid_trig_name,
84101
&psy->charging_blink_full_solid_trig);
102+
led_trigger_register_simple(psy->charging_orange_full_green_trig_name,
103+
&psy->charging_orange_full_green_trig);
85104

86105
return 0;
87106

107+
charging_red_full_green_failed:
108+
kfree(psy->charging_blink_full_solid_trig_name);
88109
charging_blink_full_solid_failed:
89110
kfree(psy->full_trig_name);
90111
full_failed:
@@ -101,10 +122,12 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy)
101122
led_trigger_unregister_simple(psy->charging_trig);
102123
led_trigger_unregister_simple(psy->full_trig);
103124
led_trigger_unregister_simple(psy->charging_blink_full_solid_trig);
125+
led_trigger_unregister_simple(psy->charging_orange_full_green_trig);
104126
kfree(psy->charging_blink_full_solid_trig_name);
105127
kfree(psy->full_trig_name);
106128
kfree(psy->charging_trig_name);
107129
kfree(psy->charging_full_trig_name);
130+
kfree(psy->charging_orange_full_green_trig_name);
108131
}
109132

110133
/* Generated power specific LEDs triggers. */

include/linux/power_supply.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,8 @@ struct power_supply {
319319
char *online_trig_name;
320320
struct led_trigger *charging_blink_full_solid_trig;
321321
char *charging_blink_full_solid_trig_name;
322+
struct led_trigger *charging_orange_full_green_trig;
323+
char *charging_orange_full_green_trig_name;
322324
#endif
323325
};
324326

0 commit comments

Comments
 (0)