return tval * 60;
 }
 
-/*
- * Read an average power register.
- * Return < 0 if something fails.
- */
-static int bq27xxx_battery_read_pwr_avg(struct bq27xxx_device_info *di)
-{
-       int tval;
-
-       tval = bq27xxx_read(di, BQ27XXX_REG_AP, false);
-       if (tval < 0) {
-               dev_err(di->dev, "error reading average power register  %02x: %d\n",
-                       BQ27XXX_REG_AP, tval);
-               return tval;
-       }
-
-       if (di->opts & BQ27XXX_O_ZERO)
-               return (tval * BQ27XXX_POWER_CONSTANT) / BQ27XXX_RS;
-       else
-               return tval;
-}
-
 /*
  * Returns true if a battery over temperature condition is detected
  */
                }
                if (di->regs[BQ27XXX_REG_CYCT] != INVALID_REG_ADDR)
                        cache.cycle_count = bq27xxx_battery_read_cyct(di);
-               if (di->regs[BQ27XXX_REG_AP] != INVALID_REG_ADDR)
-                       cache.power_avg = bq27xxx_battery_read_pwr_avg(di);
 
                /* We only have to read charge design full once */
                if (di->charge_design_full <= 0)
        return 0;
 }
 
+/*
+ * Get the average power in µW
+ * Return < 0 if something fails.
+ */
+static int bq27xxx_battery_pwr_avg(struct bq27xxx_device_info *di,
+                                  union power_supply_propval *val)
+{
+       int power;
+
+       power = bq27xxx_read(di, BQ27XXX_REG_AP, false);
+       if (power < 0) {
+               dev_err(di->dev,
+                       "error reading average power register %02x: %d\n",
+                       BQ27XXX_REG_AP, power);
+               return power;
+       }
+
+       if (di->opts & BQ27XXX_O_ZERO)
+               val->intval = (power * BQ27XXX_POWER_CONSTANT) / BQ27XXX_RS;
+       else
+               /* Other gauges return a signed value in units of 10mW */
+               val->intval = (int)((s16)power) * 10000;
+
+       return 0;
+}
+
 static int bq27xxx_battery_status(struct bq27xxx_device_info *di,
                                  union power_supply_propval *val)
 {
                ret = bq27xxx_simple_value(di->cache.energy, val);
                break;
        case POWER_SUPPLY_PROP_POWER_AVG:
-               ret = bq27xxx_simple_value(di->cache.power_avg, val);
+               ret = bq27xxx_battery_pwr_avg(di, val);
                break;
        case POWER_SUPPLY_PROP_HEALTH:
                ret = bq27xxx_simple_value(di->cache.health, val);