22
22
static void power_supply_update_bat_leds (struct power_supply * psy )
23
23
{
24
24
union power_supply_propval status ;
25
+ unsigned int intensity_green [3 ] = { 0 , 255 , 0 };
26
+ unsigned int intensity_orange [3 ] = { 255 , 128 , 0 };
25
27
26
28
if (power_supply_get_property (psy , POWER_SUPPLY_PROP_STATUS , & status ))
27
29
return ;
@@ -36,19 +38,29 @@ static void power_supply_update_bat_leds(struct power_supply *psy)
36
38
/* Going from blink to LED on requires a LED_OFF event to stop blink */
37
39
led_trigger_event (psy -> charging_blink_full_solid_trig , LED_OFF );
38
40
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 );
39
45
break ;
40
46
case POWER_SUPPLY_STATUS_CHARGING :
41
47
led_trigger_event (psy -> charging_full_trig , LED_FULL );
42
48
led_trigger_event (psy -> charging_trig , LED_FULL );
43
49
led_trigger_event (psy -> full_trig , LED_OFF );
44
50
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 );
45
55
break ;
46
56
default :
47
57
led_trigger_event (psy -> charging_full_trig , LED_OFF );
48
58
led_trigger_event (psy -> charging_trig , LED_OFF );
49
59
led_trigger_event (psy -> full_trig , LED_OFF );
50
60
led_trigger_event (psy -> charging_blink_full_solid_trig ,
51
61
LED_OFF );
62
+ led_trigger_event (psy -> charging_orange_full_green_trig ,
63
+ LED_OFF );
52
64
break ;
53
65
}
54
66
}
@@ -74,6 +86,11 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
74
86
if (!psy -> charging_blink_full_solid_trig_name )
75
87
goto charging_blink_full_solid_failed ;
76
88
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
+
77
94
led_trigger_register_simple (psy -> charging_full_trig_name ,
78
95
& psy -> charging_full_trig );
79
96
led_trigger_register_simple (psy -> charging_trig_name ,
@@ -82,9 +99,13 @@ static int power_supply_create_bat_triggers(struct power_supply *psy)
82
99
& psy -> full_trig );
83
100
led_trigger_register_simple (psy -> charging_blink_full_solid_trig_name ,
84
101
& 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 );
85
104
86
105
return 0 ;
87
106
107
+ charging_red_full_green_failed :
108
+ kfree (psy -> charging_blink_full_solid_trig_name );
88
109
charging_blink_full_solid_failed :
89
110
kfree (psy -> full_trig_name );
90
111
full_failed :
@@ -101,10 +122,12 @@ static void power_supply_remove_bat_triggers(struct power_supply *psy)
101
122
led_trigger_unregister_simple (psy -> charging_trig );
102
123
led_trigger_unregister_simple (psy -> full_trig );
103
124
led_trigger_unregister_simple (psy -> charging_blink_full_solid_trig );
125
+ led_trigger_unregister_simple (psy -> charging_orange_full_green_trig );
104
126
kfree (psy -> charging_blink_full_solid_trig_name );
105
127
kfree (psy -> full_trig_name );
106
128
kfree (psy -> charging_trig_name );
107
129
kfree (psy -> charging_full_trig_name );
130
+ kfree (psy -> charging_orange_full_green_trig_name );
108
131
}
109
132
110
133
/* Generated power specific LEDs triggers. */
0 commit comments