diff options
| author | Zhang Rui <rui.zhang@intel.com> | 2014-05-28 03:23:36 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-05-30 07:45:24 -0400 |
| commit | 1ac5aaa67290b397712e4410de7f067d5cd85871 (patch) | |
| tree | c44021fda631460070b1a5b90cbefb3acb356756 | |
| parent | cbcd085da2f99a8b36a07256dd7d1aae38b1d80f (diff) | |
ACPI / battery: introduce support for POWER_SUPPLY_PROP_CAPACITY_LEVEL
ACPI battery device receives notifications when
1. the remaining battery capacity becomes critical low
2. the trip point set by the _BTP (Design capacity of Warning by default)
is reached or crossed.
So it is able to support POWER_SUPPLY_PROP_CAPACITY_LEVEL to report
POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
POWER_SUPPLY_CAPACITY_LEVEL_LOW,
POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
POWER_SUPPLY_CAPACITY_LEVEL_FULL,
capacity levels to power supply core and user space.
Introduce support for POWER_SUPPLY_PROP_CAPACITY_LEVEL in this patch.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
| -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, |
