@@ -139,6 +139,19 @@ enum {
139
139
RT9471_PORTSTAT_DCP ,
140
140
};
141
141
142
+ enum {
143
+ RT9471_ICSTAT_SLEEP = 0 ,
144
+ RT9471_ICSTAT_VBUSRDY ,
145
+ RT9471_ICSTAT_TRICKLECHG ,
146
+ RT9471_ICSTAT_PRECHG ,
147
+ RT9471_ICSTAT_FASTCHG ,
148
+ RT9471_ICSTAT_IEOC ,
149
+ RT9471_ICSTAT_BGCHG ,
150
+ RT9471_ICSTAT_CHGDONE ,
151
+ RT9471_ICSTAT_CHGFAULT ,
152
+ RT9471_ICSTAT_OTG = 15 ,
153
+ };
154
+
142
155
struct rt9471_chip {
143
156
struct device * dev ;
144
157
struct regmap * regmap ;
@@ -255,31 +268,32 @@ static int rt9471_get_ieoc(struct rt9471_chip *chip, int *microamp)
255
268
256
269
static int rt9471_get_status (struct rt9471_chip * chip , int * status )
257
270
{
258
- unsigned int chg_ready , chg_done , fault_stat ;
271
+ unsigned int ic_stat ;
259
272
int ret ;
260
273
261
- ret = regmap_field_read (chip -> rm_fields [F_ST_CHG_RDY ], & chg_ready );
262
- if (ret )
263
- return ret ;
264
-
265
- ret = regmap_field_read (chip -> rm_fields [F_ST_CHG_DONE ], & chg_done );
274
+ ret = regmap_field_read (chip -> rm_fields [F_IC_STAT ], & ic_stat );
266
275
if (ret )
267
276
return ret ;
268
277
269
- ret = regmap_read (chip -> regmap , RT9471_REG_STAT1 , & fault_stat );
270
- if (ret )
271
- return ret ;
272
-
273
- fault_stat &= RT9471_CHGFAULT_MASK ;
274
-
275
- if (chg_ready && chg_done )
276
- * status = POWER_SUPPLY_STATUS_FULL ;
277
- else if (chg_ready && fault_stat )
278
+ switch (ic_stat ) {
279
+ case RT9471_ICSTAT_VBUSRDY :
280
+ case RT9471_ICSTAT_CHGFAULT :
278
281
* status = POWER_SUPPLY_STATUS_NOT_CHARGING ;
279
- else if (chg_ready && !fault_stat )
282
+ break ;
283
+ case RT9471_ICSTAT_TRICKLECHG ... RT9471_ICSTAT_BGCHG :
280
284
* status = POWER_SUPPLY_STATUS_CHARGING ;
281
- else
285
+ break ;
286
+ case RT9471_ICSTAT_CHGDONE :
287
+ * status = POWER_SUPPLY_STATUS_FULL ;
288
+ break ;
289
+ case RT9471_ICSTAT_SLEEP :
290
+ case RT9471_ICSTAT_OTG :
282
291
* status = POWER_SUPPLY_STATUS_DISCHARGING ;
292
+ break ;
293
+ default :
294
+ * status = POWER_SUPPLY_STATUS_UNKNOWN ;
295
+ break ;
296
+ }
283
297
284
298
return 0 ;
285
299
}
0 commit comments