diff options
-rw-r--r-- | drivers/acpi/battery.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 3b4921e4dc4e..11285e7df278 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
@@ -56,6 +56,10 @@ | |||
56 | /* Battery power unit: 0 means mW, 1 means mA */ | 56 | /* Battery power unit: 0 means mW, 1 means mA */ |
57 | #define ACPI_BATTERY_POWER_UNIT_MA 1 | 57 | #define ACPI_BATTERY_POWER_UNIT_MA 1 |
58 | 58 | ||
59 | #define ACPI_BATTERY_STATE_DISCHARGING 0x1 | ||
60 | #define ACPI_BATTERY_STATE_CHARGING 0x2 | ||
61 | #define ACPI_BATTERY_STATE_CRITICAL 0x4 | ||
62 | |||
59 | #define _COMPONENT ACPI_BATTERY_COMPONENT | 63 | #define _COMPONENT ACPI_BATTERY_COMPONENT |
60 | 64 | ||
61 | ACPI_MODULE_NAME("battery"); | 65 | ACPI_MODULE_NAME("battery"); |
@@ -169,7 +173,7 @@ static int acpi_battery_get_state(struct acpi_battery *battery); | |||
169 | 173 | ||
170 | static int acpi_battery_is_charged(struct acpi_battery *battery) | 174 | static int acpi_battery_is_charged(struct acpi_battery *battery) |
171 | { | 175 | { |
172 | /* either charging or discharging */ | 176 | /* charging, discharging or critical low */ |
173 | if (battery->state != 0) | 177 | if (battery->state != 0) |
174 | return 0; | 178 | return 0; |
175 | 179 | ||
@@ -204,9 +208,9 @@ static int acpi_battery_get_property(struct power_supply *psy, | |||
204 | return -ENODEV; | 208 | return -ENODEV; |
205 | switch (psp) { | 209 | switch (psp) { |
206 | case POWER_SUPPLY_PROP_STATUS: | 210 | case POWER_SUPPLY_PROP_STATUS: |
207 | if (battery->state & 0x01) | 211 | if (battery->state & ACPI_BATTERY_STATE_DISCHARGING) |
208 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; | 212 | val->intval = POWER_SUPPLY_STATUS_DISCHARGING; |
209 | else if (battery->state & 0x02) | 213 | else if (battery->state & ACPI_BATTERY_STATE_CHARGING) |
210 | val->intval = POWER_SUPPLY_STATUS_CHARGING; | 214 | val->intval = POWER_SUPPLY_STATUS_CHARGING; |
211 | else if (acpi_battery_is_charged(battery)) | 215 | else if (acpi_battery_is_charged(battery)) |
212 | val->intval = POWER_SUPPLY_STATUS_FULL; | 216 | val->intval = POWER_SUPPLY_STATUS_FULL; |
@@ -269,6 +273,17 @@ static int acpi_battery_get_property(struct power_supply *psy, | |||
269 | else | 273 | else |
270 | val->intval = 0; | 274 | val->intval = 0; |
271 | break; | 275 | break; |
276 | case POWER_SUPPLY_PROP_CAPACITY_LEVEL: | ||
277 | if (battery->state & ACPI_BATTERY_STATE_CRITICAL) | ||
278 | val->intval = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; | ||
279 | else if (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && | ||
280 | (battery->capacity_now <= battery->alarm)) | ||
281 | val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW; | ||
282 | else if (acpi_battery_is_charged(battery)) | ||
283 | val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL; | ||
284 | else | ||
285 | val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; | ||
286 | break; | ||
272 | case POWER_SUPPLY_PROP_MODEL_NAME: | 287 | case POWER_SUPPLY_PROP_MODEL_NAME: |
273 | val->strval = battery->model_number; | 288 | val->strval = battery->model_number; |
274 | break; | 289 | break; |
@@ -296,6 +311,7 @@ static enum power_supply_property charge_battery_props[] = { | |||
296 | POWER_SUPPLY_PROP_CHARGE_FULL, | 311 | POWER_SUPPLY_PROP_CHARGE_FULL, |
297 | POWER_SUPPLY_PROP_CHARGE_NOW, | 312 | POWER_SUPPLY_PROP_CHARGE_NOW, |
298 | POWER_SUPPLY_PROP_CAPACITY, | 313 | POWER_SUPPLY_PROP_CAPACITY, |
314 | POWER_SUPPLY_PROP_CAPACITY_LEVEL, | ||
299 | POWER_SUPPLY_PROP_MODEL_NAME, | 315 | POWER_SUPPLY_PROP_MODEL_NAME, |
300 | POWER_SUPPLY_PROP_MANUFACTURER, | 316 | POWER_SUPPLY_PROP_MANUFACTURER, |
301 | POWER_SUPPLY_PROP_SERIAL_NUMBER, | 317 | POWER_SUPPLY_PROP_SERIAL_NUMBER, |
@@ -313,6 +329,7 @@ static enum power_supply_property energy_battery_props[] = { | |||
313 | POWER_SUPPLY_PROP_ENERGY_FULL, | 329 | POWER_SUPPLY_PROP_ENERGY_FULL, |
314 | POWER_SUPPLY_PROP_ENERGY_NOW, | 330 | POWER_SUPPLY_PROP_ENERGY_NOW, |
315 | POWER_SUPPLY_PROP_CAPACITY, | 331 | POWER_SUPPLY_PROP_CAPACITY, |
332 | POWER_SUPPLY_PROP_CAPACITY_LEVEL, | ||
316 | POWER_SUPPLY_PROP_MODEL_NAME, | 333 | POWER_SUPPLY_PROP_MODEL_NAME, |
317 | POWER_SUPPLY_PROP_MANUFACTURER, | 334 | POWER_SUPPLY_PROP_MANUFACTURER, |
318 | POWER_SUPPLY_PROP_SERIAL_NUMBER, | 335 | POWER_SUPPLY_PROP_SERIAL_NUMBER, |