bq27x00_battery: Fix reporting status value for bq27500 battery
Pali Rohár [Tue, 1 Nov 2011 00:43:08 +0000 (01:43 +0100)]
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>

drivers/power/bq27x00_battery.c

index a22124a..c4c403e 100644 (file)
 
 #define BQ27500_REG_SOC                        0x2C
 #define BQ27500_REG_DCAP               0x3C /* Design capacity */
-#define BQ27500_FLAG_DSC               BIT(0)
+#define BQ27500_FLAG_DSG               BIT(0) /* Discharging */
 #define BQ27500_FLAG_SOCF              BIT(1) /* State-of-Charge threshold final */
 #define BQ27500_FLAG_SOC1              BIT(2) /* State-of-Charge threshold 1 */
-#define BQ27500_FLAG_FC                        BIT(9)
+#define BQ27500_FLAG_CHG               BIT(8) /* Charging */
+#define BQ27500_FLAG_FC                        BIT(9) /* Fully charged */
 
 #define BQ27000_RS                     20 /* Resistor sense */
 
@@ -395,10 +396,14 @@ static int bq27x00_battery_status(struct bq27x00_device_info *di,
        if (di->chip == BQ27500) {
                if (di->cache.flags & BQ27500_FLAG_FC)
                        status = POWER_SUPPLY_STATUS_FULL;
-               else if (di->cache.flags & BQ27500_FLAG_DSC)
+               else if (di->cache.flags & BQ27500_FLAG_DSG)
                        status = POWER_SUPPLY_STATUS_DISCHARGING;
-               else
+               else if (di->cache.flags & BQ27500_FLAG_CHG)
                        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_UNKNOWN;
        } else {
                if (di->cache.flags & BQ27000_FLAG_FC)
                        status = POWER_SUPPLY_STATUS_FULL;