power_supply: add CHARGE_COUNTER property and olpc_battery support for it
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / power / olpc_battery.c
index c8b596a7fc946c94e66f92b39a0d00d402edcfa7..9dd1589733c2270bfcae12e8f3f82e894165d04a 100644 (file)
@@ -19,7 +19,7 @@
 
 #define EC_BAT_VOLTAGE 0x10    /* uint16_t,    *9.76/32,    mV   */
 #define EC_BAT_CURRENT 0x11    /* int16_t,     *15.625/120, mA   */
-#define EC_BAT_ACR     0x12
+#define EC_BAT_ACR     0x12    /* int16_t,     *416.7,      µAh  */
 #define EC_BAT_TEMP    0x13    /* uint16_t,    *100/256,   °C  */
 #define EC_AMB_TEMP    0x14    /* uint16_t,    *100/256,   °C  */
 #define EC_BAT_STATUS  0x15    /* uint8_t,     bitmask */
@@ -289,6 +289,14 @@ static int olpc_bat_get_property(struct power_supply *psy,
                ec_word = be16_to_cpu(ec_word);
                val->intval = ec_word * 100 / 256;
                break;
+       case POWER_SUPPLY_PROP_CHARGE_COUNTER:
+               ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2);
+               if (ret)
+                       return ret;
+
+               ec_word = be16_to_cpu(ec_word);
+               val->intval = ec_word * 4167 / 10;
+               break;
        case POWER_SUPPLY_PROP_SERIAL_NUMBER:
                ret = olpc_ec_cmd(EC_BAT_SERIAL, NULL, 0, (void *)&ser_buf, 8);
                if (ret)
@@ -317,6 +325,7 @@ static enum power_supply_property olpc_bat_props[] = {
        POWER_SUPPLY_PROP_TEMP_AMBIENT,
        POWER_SUPPLY_PROP_MANUFACTURER,
        POWER_SUPPLY_PROP_SERIAL_NUMBER,
+       POWER_SUPPLY_PROP_CHARGE_COUNTER,
 };
 
 /* EEPROM reading goes completely around the power_supply API, sadly */