diff options
-rw-r--r-- | Documentation/power/power_supply_class.txt | 4 | ||||
-rw-r--r-- | drivers/power/olpc_battery.c | 11 | ||||
-rw-r--r-- | drivers/power/power_supply_sysfs.c | 1 | ||||
-rw-r--r-- | include/linux/power_supply.h | 1 |
4 files changed, 16 insertions, 1 deletions
diff --git a/Documentation/power/power_supply_class.txt b/Documentation/power/power_supply_class.txt index a8686e5a6857..c6cd4956047c 100644 --- a/Documentation/power/power_supply_class.txt +++ b/Documentation/power/power_supply_class.txt | |||
@@ -101,6 +101,10 @@ of charge when battery became full/empty". It also could mean "value of | |||
101 | charge when battery considered full/empty at given conditions (temperature, | 101 | charge when battery considered full/empty at given conditions (temperature, |
102 | age)". I.e. these attributes represents real thresholds, not design values. | 102 | age)". I.e. these attributes represents real thresholds, not design values. |
103 | 103 | ||
104 | CHARGE_COUNTER - the current charge counter (in µAh). This could easily | ||
105 | be negative; there is no empty or full value. It is only useful for | ||
106 | relative, time-based measurements. | ||
107 | |||
104 | ENERGY_FULL, ENERGY_EMPTY - same as above but for energy. | 108 | ENERGY_FULL, ENERGY_EMPTY - same as above but for energy. |
105 | 109 | ||
106 | CAPACITY - capacity in percents. | 110 | CAPACITY - capacity in percents. |
diff --git a/drivers/power/olpc_battery.c b/drivers/power/olpc_battery.c index c8b596a7fc94..9dd1589733c2 100644 --- a/drivers/power/olpc_battery.c +++ b/drivers/power/olpc_battery.c | |||
@@ -19,7 +19,7 @@ | |||
19 | 19 | ||
20 | #define EC_BAT_VOLTAGE 0x10 /* uint16_t, *9.76/32, mV */ | 20 | #define EC_BAT_VOLTAGE 0x10 /* uint16_t, *9.76/32, mV */ |
21 | #define EC_BAT_CURRENT 0x11 /* int16_t, *15.625/120, mA */ | 21 | #define EC_BAT_CURRENT 0x11 /* int16_t, *15.625/120, mA */ |
22 | #define EC_BAT_ACR 0x12 | 22 | #define EC_BAT_ACR 0x12 /* int16_t, *416.7, µAh */ |
23 | #define EC_BAT_TEMP 0x13 /* uint16_t, *100/256, °C */ | 23 | #define EC_BAT_TEMP 0x13 /* uint16_t, *100/256, °C */ |
24 | #define EC_AMB_TEMP 0x14 /* uint16_t, *100/256, °C */ | 24 | #define EC_AMB_TEMP 0x14 /* uint16_t, *100/256, °C */ |
25 | #define EC_BAT_STATUS 0x15 /* uint8_t, bitmask */ | 25 | #define EC_BAT_STATUS 0x15 /* uint8_t, bitmask */ |
@@ -289,6 +289,14 @@ static int olpc_bat_get_property(struct power_supply *psy, | |||
289 | ec_word = be16_to_cpu(ec_word); | 289 | ec_word = be16_to_cpu(ec_word); |
290 | val->intval = ec_word * 100 / 256; | 290 | val->intval = ec_word * 100 / 256; |
291 | break; | 291 | break; |
292 | case POWER_SUPPLY_PROP_CHARGE_COUNTER: | ||
293 | ret = olpc_ec_cmd(EC_BAT_ACR, NULL, 0, (void *)&ec_word, 2); | ||
294 | if (ret) | ||
295 | return ret; | ||
296 | |||
297 | ec_word = be16_to_cpu(ec_word); | ||
298 | val->intval = ec_word * 4167 / 10; | ||
299 | break; | ||
292 | case POWER_SUPPLY_PROP_SERIAL_NUMBER: | 300 | case POWER_SUPPLY_PROP_SERIAL_NUMBER: |
293 | ret = olpc_ec_cmd(EC_BAT_SERIAL, NULL, 0, (void *)&ser_buf, 8); | 301 | ret = olpc_ec_cmd(EC_BAT_SERIAL, NULL, 0, (void *)&ser_buf, 8); |
294 | if (ret) | 302 | if (ret) |
@@ -317,6 +325,7 @@ static enum power_supply_property olpc_bat_props[] = { | |||
317 | POWER_SUPPLY_PROP_TEMP_AMBIENT, | 325 | POWER_SUPPLY_PROP_TEMP_AMBIENT, |
318 | POWER_SUPPLY_PROP_MANUFACTURER, | 326 | POWER_SUPPLY_PROP_MANUFACTURER, |
319 | POWER_SUPPLY_PROP_SERIAL_NUMBER, | 327 | POWER_SUPPLY_PROP_SERIAL_NUMBER, |
328 | POWER_SUPPLY_PROP_CHARGE_COUNTER, | ||
320 | }; | 329 | }; |
321 | 330 | ||
322 | /* EEPROM reading goes completely around the power_supply API, sadly */ | 331 | /* EEPROM reading goes completely around the power_supply API, sadly */ |
diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c index c444d6b10c58..82e1246eeb0a 100644 --- a/drivers/power/power_supply_sysfs.c +++ b/drivers/power/power_supply_sysfs.c | |||
@@ -99,6 +99,7 @@ static struct device_attribute power_supply_attrs[] = { | |||
99 | POWER_SUPPLY_ATTR(charge_empty), | 99 | POWER_SUPPLY_ATTR(charge_empty), |
100 | POWER_SUPPLY_ATTR(charge_now), | 100 | POWER_SUPPLY_ATTR(charge_now), |
101 | POWER_SUPPLY_ATTR(charge_avg), | 101 | POWER_SUPPLY_ATTR(charge_avg), |
102 | POWER_SUPPLY_ATTR(charge_counter), | ||
102 | POWER_SUPPLY_ATTR(energy_full_design), | 103 | POWER_SUPPLY_ATTR(energy_full_design), |
103 | POWER_SUPPLY_ATTR(energy_empty_design), | 104 | POWER_SUPPLY_ATTR(energy_empty_design), |
104 | POWER_SUPPLY_ATTR(energy_full), | 105 | POWER_SUPPLY_ATTR(energy_full), |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 68ed19ccf1f7..ea96ead1d39d 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
@@ -78,6 +78,7 @@ enum power_supply_property { | |||
78 | POWER_SUPPLY_PROP_CHARGE_EMPTY, | 78 | POWER_SUPPLY_PROP_CHARGE_EMPTY, |
79 | POWER_SUPPLY_PROP_CHARGE_NOW, | 79 | POWER_SUPPLY_PROP_CHARGE_NOW, |
80 | POWER_SUPPLY_PROP_CHARGE_AVG, | 80 | POWER_SUPPLY_PROP_CHARGE_AVG, |
81 | POWER_SUPPLY_PROP_CHARGE_COUNTER, | ||
81 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, | 82 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, |
82 | POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN, | 83 | POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN, |
83 | POWER_SUPPLY_PROP_ENERGY_FULL, | 84 | POWER_SUPPLY_PROP_ENERGY_FULL, |