aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhang Rui <rui.zhang@intel.com>2014-05-28 03:23:36 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-05-30 07:45:24 -0400
commit1ac5aaa67290b397712e4410de7f067d5cd85871 (patch)
treec44021fda631460070b1a5b90cbefb3acb356756
parentcbcd085da2f99a8b36a07256dd7d1aae38b1d80f (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.c23
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
61ACPI_MODULE_NAME("battery"); 65ACPI_MODULE_NAME("battery");
@@ -169,7 +173,7 @@ static int acpi_battery_get_state(struct acpi_battery *battery);
169 173
170static int acpi_battery_is_charged(struct acpi_battery *battery) 174static 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,