Merge branch 'oprofile-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / drivers / power / olpc_battery.c
index 5fbca26..58e4192 100644 (file)
@@ -8,6 +8,7 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/err.h>
 #include <linux/platform_device.h>
@@ -35,6 +36,7 @@
 #define BAT_STAT_AC            0x10
 #define BAT_STAT_CHARGING      0x20
 #define BAT_STAT_DISCHARGING   0x40
+#define BAT_STAT_TRICKLE       0x80
 
 #define BAT_ERR_INFOFAIL       0x02
 #define BAT_ERR_OVERVOLTAGE    0x04
@@ -89,7 +91,7 @@ static char bat_serial[17]; /* Ick */
 static int olpc_bat_get_status(union power_supply_propval *val, uint8_t ec_byte)
 {
        if (olpc_platform_info.ecver > 0x44) {
-               if (ec_byte & BAT_STAT_CHARGING)
+               if (ec_byte & (BAT_STAT_CHARGING | BAT_STAT_TRICKLE))
                        val->intval = POWER_SUPPLY_STATUS_CHARGING;
                else if (ec_byte & BAT_STAT_DISCHARGING)
                        val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
@@ -219,7 +221,8 @@ static int olpc_bat_get_property(struct power_supply *psy,
           It doesn't matter though -- the EC will return the last-known
           information, and it's as if we just ran that _little_ bit faster
           and managed to read it out before the battery went away. */
-       if (!(ec_byte & BAT_STAT_PRESENT) && psp != POWER_SUPPLY_PROP_PRESENT)
+       if (!(ec_byte & (BAT_STAT_PRESENT | BAT_STAT_TRICKLE)) &&
+                       psp != POWER_SUPPLY_PROP_PRESENT)
                return -ENODEV;
 
        switch (psp) {
@@ -229,7 +232,8 @@ static int olpc_bat_get_property(struct power_supply *psy,
                        return ret;
                break;
        case POWER_SUPPLY_PROP_PRESENT:
-               val->intval = !!(ec_byte & BAT_STAT_PRESENT);
+               val->intval = !!(ec_byte & (BAT_STAT_PRESENT |
+                                           BAT_STAT_TRICKLE));
                break;
 
        case POWER_SUPPLY_PROP_HEALTH:
@@ -334,21 +338,21 @@ static ssize_t olpc_bat_eeprom_read(struct kobject *kobj,
                struct bin_attribute *attr, char *buf, loff_t off, size_t count)
 {
        uint8_t ec_byte;
-       int ret, end;
+       int ret;
+       int i;
 
        if (off >= EEPROM_SIZE)
                return 0;
        if (off + count > EEPROM_SIZE)
                count = EEPROM_SIZE - off;
 
-       end = EEPROM_START + off + count;
-       for (ec_byte = EEPROM_START + off; ec_byte < end; ec_byte++) {
-               ret = olpc_ec_cmd(EC_BAT_EEPROM, &ec_byte, 1,
-                               &buf[ec_byte - EEPROM_START], 1);
+       for (i = 0; i < count; i++) {
+               ec_byte = EEPROM_START + off + i;
+               ret = olpc_ec_cmd(EC_BAT_EEPROM, &ec_byte, 1, &buf[i], 1);
                if (ret) {
-                       printk(KERN_ERR "olpc-battery:  EC command "
-                                       "EC_BAT_EEPROM @ 0x%x failed -"
-                                       " %d!\n", ec_byte, ret);
+                       pr_err("olpc-battery: "
+                              "EC_BAT_EEPROM cmd @ 0x%x failed - %d!\n",
+                              ec_byte, ret);
                        return -EIO;
                }
        }