]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/power/olpc_battery.c
mpu401: reindent misindented spinlock
[linux-2.6-omap-h63xx.git] / drivers / power / olpc_battery.c
index d5fe6f0c9de0877e0cbef6477ddabda342d2eca1..32570af3c5c904fa86cffe26efbcc7650757d474 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,     *6250/15,    µ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 * 6250 / 15;
+               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 */
@@ -389,8 +398,14 @@ static int __init olpc_bat_init(void)
 
        if (!olpc_platform_info.ecver)
                return -ENXIO;
-       if (olpc_platform_info.ecver < 0x43) {
-               printk(KERN_NOTICE "OLPC EC version 0x%02x too old for battery driver.\n", olpc_platform_info.ecver);
+
+       /*
+        * We've seen a number of EC protocol changes; this driver requires
+        * the latest EC protocol, supported by 0x44 and above.
+        */
+       if (olpc_platform_info.ecver < 0x44) {
+               printk(KERN_NOTICE "OLPC EC version 0x%02x too old for "
+                       "battery driver.\n", olpc_platform_info.ecver);
                return -ENXIO;
        }