@@ -118,10 +118,17 @@ static bool is_batt_present(struct charger_manager *cm)
118
118
present = true;
119
119
break ;
120
120
case CM_CHARGER_STAT :
121
- for (i = 0 ; cm -> charger_stat [i ]; i ++ ) {
122
- ret = cm -> charger_stat [i ]-> get_property (
123
- cm -> charger_stat [i ],
124
- POWER_SUPPLY_PROP_PRESENT , & val );
121
+ for (i = 0 ; cm -> desc -> psy_charger_stat [i ]; i ++ ) {
122
+ psy = power_supply_get_by_name (
123
+ cm -> desc -> psy_charger_stat [i ]);
124
+ if (!psy ) {
125
+ dev_err (cm -> dev , "Cannot find power supply \"%s\"\n" ,
126
+ cm -> desc -> psy_charger_stat [i ]);
127
+ continue ;
128
+ }
129
+
130
+ ret = psy -> get_property (psy , POWER_SUPPLY_PROP_PRESENT ,
131
+ & val );
125
132
if (ret == 0 && val .intval ) {
126
133
present = true;
127
134
break ;
@@ -144,14 +151,20 @@ static bool is_batt_present(struct charger_manager *cm)
144
151
static bool is_ext_pwr_online (struct charger_manager * cm )
145
152
{
146
153
union power_supply_propval val ;
154
+ struct power_supply * psy ;
147
155
bool online = false;
148
156
int i , ret ;
149
157
150
158
/* If at least one of them has one, it's yes. */
151
- for (i = 0 ; cm -> charger_stat [i ]; i ++ ) {
152
- ret = cm -> charger_stat [i ]-> get_property (
153
- cm -> charger_stat [i ],
154
- POWER_SUPPLY_PROP_ONLINE , & val );
159
+ for (i = 0 ; cm -> desc -> psy_charger_stat [i ]; i ++ ) {
160
+ psy = power_supply_get_by_name (cm -> desc -> psy_charger_stat [i ]);
161
+ if (!psy ) {
162
+ dev_err (cm -> dev , "Cannot find power supply \"%s\"\n" ,
163
+ cm -> desc -> psy_charger_stat [i ]);
164
+ continue ;
165
+ }
166
+
167
+ ret = psy -> get_property (psy , POWER_SUPPLY_PROP_ONLINE , & val );
155
168
if (ret == 0 && val .intval ) {
156
169
online = true;
157
170
break ;
@@ -196,24 +209,30 @@ static bool is_charging(struct charger_manager *cm)
196
209
{
197
210
int i , ret ;
198
211
bool charging = false;
212
+ struct power_supply * psy ;
199
213
union power_supply_propval val ;
200
214
201
215
/* If there is no battery, it cannot be charged */
202
216
if (!is_batt_present (cm ))
203
217
return false;
204
218
205
219
/* If at least one of the charger is charging, return yes */
206
- for (i = 0 ; cm -> charger_stat [i ]; i ++ ) {
220
+ for (i = 0 ; cm -> desc -> psy_charger_stat [i ]; i ++ ) {
207
221
/* 1. The charger sholuld not be DISABLED */
208
222
if (cm -> emergency_stop )
209
223
continue ;
210
224
if (!cm -> charger_enabled )
211
225
continue ;
212
226
227
+ psy = power_supply_get_by_name (cm -> desc -> psy_charger_stat [i ]);
228
+ if (!psy ) {
229
+ dev_err (cm -> dev , "Cannot find power supply \"%s\"\n" ,
230
+ cm -> desc -> psy_charger_stat [i ]);
231
+ continue ;
232
+ }
233
+
213
234
/* 2. The charger should be online (ext-power) */
214
- ret = cm -> charger_stat [i ]-> get_property (
215
- cm -> charger_stat [i ],
216
- POWER_SUPPLY_PROP_ONLINE , & val );
235
+ ret = psy -> get_property (psy , POWER_SUPPLY_PROP_ONLINE , & val );
217
236
if (ret ) {
218
237
dev_warn (cm -> dev , "Cannot read ONLINE value from %s\n" ,
219
238
cm -> desc -> psy_charger_stat [i ]);
@@ -226,9 +245,7 @@ static bool is_charging(struct charger_manager *cm)
226
245
* 3. The charger should not be FULL, DISCHARGING,
227
246
* or NOT_CHARGING.
228
247
*/
229
- ret = cm -> charger_stat [i ]-> get_property (
230
- cm -> charger_stat [i ],
231
- POWER_SUPPLY_PROP_STATUS , & val );
248
+ ret = psy -> get_property (psy , POWER_SUPPLY_PROP_STATUS , & val );
232
249
if (ret ) {
233
250
dev_warn (cm -> dev , "Cannot read STATUS value from %s\n" ,
234
251
cm -> desc -> psy_charger_stat [i ]);
@@ -1772,15 +1789,12 @@ static int charger_manager_probe(struct platform_device *pdev)
1772
1789
while (desc -> psy_charger_stat [i ])
1773
1790
i ++ ;
1774
1791
1775
- cm -> charger_stat = devm_kzalloc (& pdev -> dev ,
1776
- sizeof (struct power_supply * ) * i , GFP_KERNEL );
1777
- if (!cm -> charger_stat )
1778
- return - ENOMEM ;
1779
-
1792
+ /* Check if charger's supplies are present at probe */
1780
1793
for (i = 0 ; desc -> psy_charger_stat [i ]; i ++ ) {
1781
- cm -> charger_stat [i ] = power_supply_get_by_name (
1782
- desc -> psy_charger_stat [i ]);
1783
- if (!cm -> charger_stat [i ]) {
1794
+ struct power_supply * psy ;
1795
+
1796
+ psy = power_supply_get_by_name (desc -> psy_charger_stat [i ]);
1797
+ if (!psy ) {
1784
1798
dev_err (& pdev -> dev , "Cannot find power supply \"%s\"\n" ,
1785
1799
desc -> psy_charger_stat [i ]);
1786
1800
return - ENODEV ;
@@ -2102,8 +2116,8 @@ static bool find_power_supply(struct charger_manager *cm,
2102
2116
int i ;
2103
2117
bool found = false;
2104
2118
2105
- for (i = 0 ; cm -> charger_stat [i ]; i ++ ) {
2106
- if (psy == cm -> charger_stat [i ]) {
2119
+ for (i = 0 ; cm -> desc -> psy_charger_stat [i ]; i ++ ) {
2120
+ if (! strcmp ( psy -> name , cm -> desc -> psy_charger_stat [i ]) ) {
2107
2121
found = true;
2108
2122
break ;
2109
2123
}
0 commit comments