bq27x00: Give more specific reports on battery status
[firefly-linux-kernel-4.4.55.git] / drivers / power / bq27x00_battery.c
index 0e99d02dea3355f5f93882f0e8f995d7181d13d7..003be5f1c785d34901b26c78f2442310e6d6a5eb 100644 (file)
@@ -54,6 +54,7 @@
 #define BQ27000_REG_RSOC               0x0B /* Relative State-of-Charge */
 #define BQ27000_REG_ILMD               0x76 /* Initial last measured discharge */
 #define BQ27000_FLAG_CHGS              BIT(7)
+#define BQ27000_FLAG_FC                        BIT(5)
 
 #define BQ27500_REG_SOC                        0x2c
 #define BQ27500_REG_DCAP               0x3C /* Design capacity */
@@ -365,8 +366,12 @@ static int bq27x00_battery_status(struct bq27x00_device_info *di,
                else
                        status = POWER_SUPPLY_STATUS_CHARGING;
        } else {
-               if (di->cache.flags & BQ27000_FLAG_CHGS)
+               if (di->cache.flags & BQ27000_FLAG_FC)
+                       status = POWER_SUPPLY_STATUS_FULL;
+               else if (di->cache.flags & BQ27000_FLAG_CHGS)
                        status = POWER_SUPPLY_STATUS_CHARGING;
+               else if (power_supply_am_i_supplied(&di->bat))
+                       status = POWER_SUPPLY_STATUS_NOT_CHARGING;
                else
                        status = POWER_SUPPLY_STATUS_DISCHARGING;
        }