Commit 9af12f57 authored by Kate Hsuan's avatar Kate Hsuan Committed by Lee Jones

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/f40a0b1a-ceac-e269-c2dd-0158c5b4a1ad@gmail.com/Signed-off-by: default avatarKate Hsuan <hpa@redhat.com>
Acked-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
Reviewed-by: default avatarAndy Shevchenko <andy@kernel.org>
[hdegoede@redhat.com change color order to RGB]
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20240531114124.45346-7-hdegoede@redhat.comSigned-off-by: default avatarLee Jones <lee@kernel.org>
parent 0921a57c
...@@ -22,6 +22,8 @@ ...@@ -22,6 +22,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 int intensity_green[3] = { 0, 255, 0 };
unsigned int intensity_orange[3] = { 255, 128, 0 };
if (power_supply_get_property(psy, POWER_SUPPLY_PROP_STATUS, &status)) if (power_supply_get_property(psy, POWER_SUPPLY_PROP_STATUS, &status))
return; return;
...@@ -36,12 +38,20 @@ static void power_supply_update_bat_leds(struct power_supply *psy) ...@@ -36,12 +38,20 @@ static void power_supply_update_bat_leds(struct power_supply *psy)
/* Going from blink to LED on requires a LED_OFF event to stop blink */ /* Going from blink to LED on requires a LED_OFF event to stop blink */
led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF); led_trigger_event(psy->charging_blink_full_solid_trig, LED_OFF);
led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL); led_trigger_event(psy->charging_blink_full_solid_trig, LED_FULL);
led_mc_trigger_event(psy->charging_orange_full_green_trig,
intensity_green,
ARRAY_SIZE(intensity_green),
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, 0, 0); led_trigger_blink(psy->charging_blink_full_solid_trig, 0, 0);
led_mc_trigger_event(psy->charging_orange_full_green_trig,
intensity_orange,
ARRAY_SIZE(intensity_orange),
LED_FULL);
break; break;
default: default:
led_trigger_event(psy->charging_full_trig, LED_OFF); led_trigger_event(psy->charging_full_trig, LED_OFF);
...@@ -49,6 +59,8 @@ static void power_supply_update_bat_leds(struct power_supply *psy) ...@@ -49,6 +59,8 @@ static void power_supply_update_bat_leds(struct power_supply *psy)
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_trigger_event(psy->charging_blink_full_solid_trig,
LED_OFF); LED_OFF);
led_trigger_event(psy->charging_orange_full_green_trig,
LED_OFF);
break; break;
} }
} }
...@@ -74,6 +86,11 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) ...@@ -74,6 +86,11 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
if (!psy->charging_blink_full_solid_trig_name) if (!psy->charging_blink_full_solid_trig_name)
goto charging_blink_full_solid_failed; goto charging_blink_full_solid_failed;
psy->charging_orange_full_green_trig_name = kasprintf(GFP_KERNEL,
"%s-charging-orange-full-green", psy->desc->name);
if (!psy->charging_orange_full_green_trig_name)
goto charging_red_full_green_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,
...@@ -82,9 +99,13 @@ static int power_supply_create_bat_triggers(struct power_supply *psy) ...@@ -82,9 +99,13 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
&psy->full_trig); &psy->full_trig);
led_trigger_register_simple(psy->charging_blink_full_solid_trig_name, led_trigger_register_simple(psy->charging_blink_full_solid_trig_name,
&psy->charging_blink_full_solid_trig); &psy->charging_blink_full_solid_trig);
led_trigger_register_simple(psy->charging_orange_full_green_trig_name,
&psy->charging_orange_full_green_trig);
return 0; return 0;
charging_red_full_green_failed:
kfree(psy->charging_blink_full_solid_trig_name);
charging_blink_full_solid_failed: charging_blink_full_solid_failed:
kfree(psy->full_trig_name); kfree(psy->full_trig_name);
full_failed: full_failed:
...@@ -101,10 +122,12 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy) ...@@ -101,10 +122,12 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy)
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); led_trigger_unregister_simple(psy->charging_blink_full_solid_trig);
led_trigger_unregister_simple(psy->charging_orange_full_green_trig);
kfree(psy->charging_blink_full_solid_trig_name); 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);
kfree(psy->charging_orange_full_green_trig_name);
} }
/* Generated power specific LEDs triggers. */ /* Generated power specific LEDs triggers. */
......
...@@ -319,6 +319,8 @@ struct power_supply { ...@@ -319,6 +319,8 @@ struct power_supply {
char *online_trig_name; char *online_trig_name;
struct led_trigger *charging_blink_full_solid_trig; struct led_trigger *charging_blink_full_solid_trig;
char *charging_blink_full_solid_trig_name; char *charging_blink_full_solid_trig_name;
struct led_trigger *charging_orange_full_green_trig;
char *charging_orange_full_green_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