1 /* 2 * battery.c - ACPI Battery Driver (Revision: 2.0) 3 * 4 * Copyright (C) 2007 Alexey Starikovskiy <astarikovskiy@suse.de> 5 * Copyright (C) 2004-2007 Vladimir Lebedev <vladimir.p.lebedev@intel.com> 6 * Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com> 7 * Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com> 8 * 9 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2 of the License, or (at 14 * your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, but 17 * WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * General Public License for more details. 20 * 21 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 22 */ 23 24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 25 26 #include <linux/async.h> 27 #include <linux/delay.h> 28 #include <linux/dmi.h> 29 #include <linux/jiffies.h> 30 #include <linux/kernel.h> 31 #include <linux/list.h> 32 #include <linux/module.h> 33 #include <linux/mutex.h> 34 #include <linux/slab.h> 35 #include <linux/suspend.h> 36 #include <linux/types.h> 37 38 #include <asm/unaligned.h> 39 40 #ifdef CONFIG_ACPI_PROCFS_POWER 41 #include <linux/proc_fs.h> 42 #include <linux/seq_file.h> 43 #include <linux/uaccess.h> 44 #endif 45 46 #include <linux/acpi.h> 47 #include <linux/power_supply.h> 48 49 #include <acpi/battery.h> 50 51 #define PREFIX "ACPI: " 52 53 #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF 54 55 #define ACPI_BATTERY_DEVICE_NAME "Battery" 56 57 /* Battery power unit: 0 means mW, 1 means mA */ 58 #define ACPI_BATTERY_POWER_UNIT_MA 1 59 60 #define ACPI_BATTERY_STATE_DISCHARGING 0x1 61 #define ACPI_BATTERY_STATE_CHARGING 0x2 62 #define ACPI_BATTERY_STATE_CRITICAL 0x4 63 64 #define _COMPONENT ACPI_BATTERY_COMPONENT 65 66 ACPI_MODULE_NAME("battery"); 67 68 MODULE_AUTHOR("Paul Diefenbaugh"); 69 MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>"); 70 MODULE_DESCRIPTION("ACPI Battery Driver"); 71 MODULE_LICENSE("GPL"); 72 73 static async_cookie_t async_cookie; 74 static bool battery_driver_registered; 75 static int battery_bix_broken_package; 76 static int battery_notification_delay_ms; 77 static int battery_ac_is_broken; 78 static int battery_check_pmic = 1; 79 static unsigned int cache_time = 1000; 80 module_param(cache_time, uint, 0644); 81 MODULE_PARM_DESC(cache_time, "cache time in milliseconds"); 82 83 #ifdef CONFIG_ACPI_PROCFS_POWER 84 extern struct proc_dir_entry *acpi_lock_battery_dir(void); 85 extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir); 86 #endif 87 88 static const struct acpi_device_id battery_device_ids[] = { 89 {"PNP0C0A", 0}, 90 {"", 0}, 91 }; 92 93 MODULE_DEVICE_TABLE(acpi, battery_device_ids); 94 95 /* Lists of PMIC ACPI HIDs with an (often better) native battery driver */ 96 static const char * const acpi_battery_blacklist[] = { 97 "INT33F4", /* X-Powers AXP288 PMIC */ 98 }; 99 100 enum { 101 ACPI_BATTERY_ALARM_PRESENT, 102 ACPI_BATTERY_XINFO_PRESENT, 103 ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, 104 /* On Lenovo Thinkpad models from 2010 and 2011, the power unit 105 switches between mWh and mAh depending on whether the system 106 is running on battery or not. When mAh is the unit, most 107 reported values are incorrect and need to be adjusted by 108 10000/design_voltage. Verified on x201, t410, t410s, and x220. 109 Pre-2010 and 2012 models appear to always report in mWh and 110 are thus unaffected (tested with t42, t61, t500, x200, x300, 111 and x230). Also, in mid-2012 Lenovo issued a BIOS update for 112 the 2011 models that fixes the issue (tested on x220 with a 113 post-1.29 BIOS), but as of Nov. 2012, no such update is 114 available for the 2010 models. */ 115 ACPI_BATTERY_QUIRK_THINKPAD_MAH, 116 /* for batteries reporting current capacity with design capacity 117 * on a full charge, but showing degradation in full charge cap. 118 */ 119 ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, 120 }; 121 122 struct acpi_battery { 123 struct mutex lock; 124 struct mutex sysfs_lock; 125 struct power_supply *bat; 126 struct power_supply_desc bat_desc; 127 struct acpi_device *device; 128 struct notifier_block pm_nb; 129 struct list_head list; 130 unsigned long update_time; 131 int revision; 132 int rate_now; 133 int capacity_now; 134 int voltage_now; 135 int design_capacity; 136 int full_charge_capacity; 137 int technology; 138 int design_voltage; 139 int design_capacity_warning; 140 int design_capacity_low; 141 int cycle_count; 142 int measurement_accuracy; 143 int max_sampling_time; 144 int min_sampling_time; 145 int max_averaging_interval; 146 int min_averaging_interval; 147 int capacity_granularity_1; 148 int capacity_granularity_2; 149 int alarm; 150 char model_number[32]; 151 char serial_number[32]; 152 char type[32]; 153 char oem_info[32]; 154 int state; 155 int power_unit; 156 unsigned long flags; 157 }; 158 159 #define to_acpi_battery(x) power_supply_get_drvdata(x) 160 161 static inline int acpi_battery_present(struct acpi_battery *battery) 162 { 163 return battery->device->status.battery_present; 164 } 165 166 static int acpi_battery_technology(struct acpi_battery *battery) 167 { 168 if (!strcasecmp("NiCd", battery->type)) 169 return POWER_SUPPLY_TECHNOLOGY_NiCd; 170 if (!strcasecmp("NiMH", battery->type)) 171 return POWER_SUPPLY_TECHNOLOGY_NiMH; 172 if (!strcasecmp("LION", battery->type)) 173 return POWER_SUPPLY_TECHNOLOGY_LION; 174 if (!strncasecmp("LI-ION", battery->type, 6)) 175 return POWER_SUPPLY_TECHNOLOGY_LION; 176 if (!strcasecmp("LiP", battery->type)) 177 return POWER_SUPPLY_TECHNOLOGY_LIPO; 178 return POWER_SUPPLY_TECHNOLOGY_UNKNOWN; 179 } 180 181 static int acpi_battery_get_state(struct acpi_battery *battery); 182 183 static int acpi_battery_is_charged(struct acpi_battery *battery) 184 { 185 /* charging, discharging or critical low */ 186 if (battery->state != 0) 187 return 0; 188 189 /* battery not reporting charge */ 190 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN || 191 battery->capacity_now == 0) 192 return 0; 193 194 /* good batteries update full_charge as the batteries degrade */ 195 if (battery->full_charge_capacity == battery->capacity_now) 196 return 1; 197 198 /* fallback to using design values for broken batteries */ 199 if (battery->design_capacity == battery->capacity_now) 200 return 1; 201 202 /* we don't do any sort of metric based on percentages */ 203 return 0; 204 } 205 206 static bool acpi_battery_is_degraded(struct acpi_battery *battery) 207 { 208 return battery->full_charge_capacity && battery->design_capacity && 209 battery->full_charge_capacity < battery->design_capacity; 210 } 211 212 static int acpi_battery_handle_discharging(struct acpi_battery *battery) 213 { 214 /* 215 * Some devices wrongly report discharging if the battery's charge level 216 * was above the device's start charging threshold atm the AC adapter 217 * was plugged in and the device thus did not start a new charge cycle. 218 */ 219 if ((battery_ac_is_broken || power_supply_is_system_supplied()) && 220 battery->rate_now == 0) 221 return POWER_SUPPLY_STATUS_NOT_CHARGING; 222 223 return POWER_SUPPLY_STATUS_DISCHARGING; 224 } 225 226 static int acpi_battery_get_property(struct power_supply *psy, 227 enum power_supply_property psp, 228 union power_supply_propval *val) 229 { 230 int ret = 0; 231 struct acpi_battery *battery = to_acpi_battery(psy); 232 233 if (acpi_battery_present(battery)) { 234 /* run battery update only if it is present */ 235 acpi_battery_get_state(battery); 236 } else if (psp != POWER_SUPPLY_PROP_PRESENT) 237 return -ENODEV; 238 switch (psp) { 239 case POWER_SUPPLY_PROP_STATUS: 240 if (battery->state & ACPI_BATTERY_STATE_DISCHARGING) 241 val->intval = acpi_battery_handle_discharging(battery); 242 else if (battery->state & ACPI_BATTERY_STATE_CHARGING) 243 val->intval = POWER_SUPPLY_STATUS_CHARGING; 244 else if (acpi_battery_is_charged(battery)) 245 val->intval = POWER_SUPPLY_STATUS_FULL; 246 else 247 val->intval = POWER_SUPPLY_STATUS_UNKNOWN; 248 break; 249 case POWER_SUPPLY_PROP_PRESENT: 250 val->intval = acpi_battery_present(battery); 251 break; 252 case POWER_SUPPLY_PROP_TECHNOLOGY: 253 val->intval = acpi_battery_technology(battery); 254 break; 255 case POWER_SUPPLY_PROP_CYCLE_COUNT: 256 val->intval = battery->cycle_count; 257 break; 258 case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: 259 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) 260 ret = -ENODEV; 261 else 262 val->intval = battery->design_voltage * 1000; 263 break; 264 case POWER_SUPPLY_PROP_VOLTAGE_NOW: 265 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN) 266 ret = -ENODEV; 267 else 268 val->intval = battery->voltage_now * 1000; 269 break; 270 case POWER_SUPPLY_PROP_CURRENT_NOW: 271 case POWER_SUPPLY_PROP_POWER_NOW: 272 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) 273 ret = -ENODEV; 274 else 275 val->intval = battery->rate_now * 1000; 276 break; 277 case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: 278 case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: 279 if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) 280 ret = -ENODEV; 281 else 282 val->intval = battery->design_capacity * 1000; 283 break; 284 case POWER_SUPPLY_PROP_CHARGE_FULL: 285 case POWER_SUPPLY_PROP_ENERGY_FULL: 286 if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN) 287 ret = -ENODEV; 288 else 289 val->intval = battery->full_charge_capacity * 1000; 290 break; 291 case POWER_SUPPLY_PROP_CHARGE_NOW: 292 case POWER_SUPPLY_PROP_ENERGY_NOW: 293 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN) 294 ret = -ENODEV; 295 else 296 val->intval = battery->capacity_now * 1000; 297 break; 298 case POWER_SUPPLY_PROP_CAPACITY: 299 if (battery->capacity_now && battery->full_charge_capacity) 300 val->intval = battery->capacity_now * 100/ 301 battery->full_charge_capacity; 302 else 303 val->intval = 0; 304 break; 305 case POWER_SUPPLY_PROP_CAPACITY_LEVEL: 306 if (battery->state & ACPI_BATTERY_STATE_CRITICAL) 307 val->intval = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL; 308 else if (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && 309 (battery->capacity_now <= battery->alarm)) 310 val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW; 311 else if (acpi_battery_is_charged(battery)) 312 val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL; 313 else 314 val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL; 315 break; 316 case POWER_SUPPLY_PROP_MODEL_NAME: 317 val->strval = battery->model_number; 318 break; 319 case POWER_SUPPLY_PROP_MANUFACTURER: 320 val->strval = battery->oem_info; 321 break; 322 case POWER_SUPPLY_PROP_SERIAL_NUMBER: 323 val->strval = battery->serial_number; 324 break; 325 default: 326 ret = -EINVAL; 327 } 328 return ret; 329 } 330 331 static enum power_supply_property charge_battery_props[] = { 332 POWER_SUPPLY_PROP_STATUS, 333 POWER_SUPPLY_PROP_PRESENT, 334 POWER_SUPPLY_PROP_TECHNOLOGY, 335 POWER_SUPPLY_PROP_CYCLE_COUNT, 336 POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, 337 POWER_SUPPLY_PROP_VOLTAGE_NOW, 338 POWER_SUPPLY_PROP_CURRENT_NOW, 339 POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, 340 POWER_SUPPLY_PROP_CHARGE_FULL, 341 POWER_SUPPLY_PROP_CHARGE_NOW, 342 POWER_SUPPLY_PROP_CAPACITY, 343 POWER_SUPPLY_PROP_CAPACITY_LEVEL, 344 POWER_SUPPLY_PROP_MODEL_NAME, 345 POWER_SUPPLY_PROP_MANUFACTURER, 346 POWER_SUPPLY_PROP_SERIAL_NUMBER, 347 }; 348 349 static enum power_supply_property energy_battery_props[] = { 350 POWER_SUPPLY_PROP_STATUS, 351 POWER_SUPPLY_PROP_PRESENT, 352 POWER_SUPPLY_PROP_TECHNOLOGY, 353 POWER_SUPPLY_PROP_CYCLE_COUNT, 354 POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, 355 POWER_SUPPLY_PROP_VOLTAGE_NOW, 356 POWER_SUPPLY_PROP_POWER_NOW, 357 POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, 358 POWER_SUPPLY_PROP_ENERGY_FULL, 359 POWER_SUPPLY_PROP_ENERGY_NOW, 360 POWER_SUPPLY_PROP_CAPACITY, 361 POWER_SUPPLY_PROP_CAPACITY_LEVEL, 362 POWER_SUPPLY_PROP_MODEL_NAME, 363 POWER_SUPPLY_PROP_MANUFACTURER, 364 POWER_SUPPLY_PROP_SERIAL_NUMBER, 365 }; 366 367 static enum power_supply_property energy_battery_full_cap_broken_props[] = { 368 POWER_SUPPLY_PROP_STATUS, 369 POWER_SUPPLY_PROP_PRESENT, 370 POWER_SUPPLY_PROP_TECHNOLOGY, 371 POWER_SUPPLY_PROP_CYCLE_COUNT, 372 POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, 373 POWER_SUPPLY_PROP_VOLTAGE_NOW, 374 POWER_SUPPLY_PROP_POWER_NOW, 375 POWER_SUPPLY_PROP_ENERGY_NOW, 376 POWER_SUPPLY_PROP_MODEL_NAME, 377 POWER_SUPPLY_PROP_MANUFACTURER, 378 POWER_SUPPLY_PROP_SERIAL_NUMBER, 379 }; 380 381 /* -------------------------------------------------------------------------- 382 Battery Management 383 -------------------------------------------------------------------------- */ 384 struct acpi_offsets { 385 size_t offset; /* offset inside struct acpi_sbs_battery */ 386 u8 mode; /* int or string? */ 387 }; 388 389 static const struct acpi_offsets state_offsets[] = { 390 {offsetof(struct acpi_battery, state), 0}, 391 {offsetof(struct acpi_battery, rate_now), 0}, 392 {offsetof(struct acpi_battery, capacity_now), 0}, 393 {offsetof(struct acpi_battery, voltage_now), 0}, 394 }; 395 396 static const struct acpi_offsets info_offsets[] = { 397 {offsetof(struct acpi_battery, power_unit), 0}, 398 {offsetof(struct acpi_battery, design_capacity), 0}, 399 {offsetof(struct acpi_battery, full_charge_capacity), 0}, 400 {offsetof(struct acpi_battery, technology), 0}, 401 {offsetof(struct acpi_battery, design_voltage), 0}, 402 {offsetof(struct acpi_battery, design_capacity_warning), 0}, 403 {offsetof(struct acpi_battery, design_capacity_low), 0}, 404 {offsetof(struct acpi_battery, capacity_granularity_1), 0}, 405 {offsetof(struct acpi_battery, capacity_granularity_2), 0}, 406 {offsetof(struct acpi_battery, model_number), 1}, 407 {offsetof(struct acpi_battery, serial_number), 1}, 408 {offsetof(struct acpi_battery, type), 1}, 409 {offsetof(struct acpi_battery, oem_info), 1}, 410 }; 411 412 static const struct acpi_offsets extended_info_offsets[] = { 413 {offsetof(struct acpi_battery, revision), 0}, 414 {offsetof(struct acpi_battery, power_unit), 0}, 415 {offsetof(struct acpi_battery, design_capacity), 0}, 416 {offsetof(struct acpi_battery, full_charge_capacity), 0}, 417 {offsetof(struct acpi_battery, technology), 0}, 418 {offsetof(struct acpi_battery, design_voltage), 0}, 419 {offsetof(struct acpi_battery, design_capacity_warning), 0}, 420 {offsetof(struct acpi_battery, design_capacity_low), 0}, 421 {offsetof(struct acpi_battery, cycle_count), 0}, 422 {offsetof(struct acpi_battery, measurement_accuracy), 0}, 423 {offsetof(struct acpi_battery, max_sampling_time), 0}, 424 {offsetof(struct acpi_battery, min_sampling_time), 0}, 425 {offsetof(struct acpi_battery, max_averaging_interval), 0}, 426 {offsetof(struct acpi_battery, min_averaging_interval), 0}, 427 {offsetof(struct acpi_battery, capacity_granularity_1), 0}, 428 {offsetof(struct acpi_battery, capacity_granularity_2), 0}, 429 {offsetof(struct acpi_battery, model_number), 1}, 430 {offsetof(struct acpi_battery, serial_number), 1}, 431 {offsetof(struct acpi_battery, type), 1}, 432 {offsetof(struct acpi_battery, oem_info), 1}, 433 }; 434 435 static int extract_package(struct acpi_battery *battery, 436 union acpi_object *package, 437 const struct acpi_offsets *offsets, int num) 438 { 439 int i; 440 union acpi_object *element; 441 if (package->type != ACPI_TYPE_PACKAGE) 442 return -EFAULT; 443 for (i = 0; i < num; ++i) { 444 if (package->package.count <= i) 445 return -EFAULT; 446 element = &package->package.elements[i]; 447 if (offsets[i].mode) { 448 u8 *ptr = (u8 *)battery + offsets[i].offset; 449 if (element->type == ACPI_TYPE_STRING || 450 element->type == ACPI_TYPE_BUFFER) 451 strncpy(ptr, element->string.pointer, 32); 452 else if (element->type == ACPI_TYPE_INTEGER) { 453 strncpy(ptr, (u8 *)&element->integer.value, 454 sizeof(u64)); 455 ptr[sizeof(u64)] = 0; 456 } else 457 *ptr = 0; /* don't have value */ 458 } else { 459 int *x = (int *)((u8 *)battery + offsets[i].offset); 460 *x = (element->type == ACPI_TYPE_INTEGER) ? 461 element->integer.value : -1; 462 } 463 } 464 return 0; 465 } 466 467 static int acpi_battery_get_status(struct acpi_battery *battery) 468 { 469 if (acpi_bus_get_status(battery->device)) { 470 ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Evaluating _STA")); 471 return -ENODEV; 472 } 473 return 0; 474 } 475 476 477 static int extract_battery_info(const int use_bix, 478 struct acpi_battery *battery, 479 const struct acpi_buffer *buffer) 480 { 481 int result = -EFAULT; 482 483 if (use_bix && battery_bix_broken_package) 484 result = extract_package(battery, buffer->pointer, 485 extended_info_offsets + 1, 486 ARRAY_SIZE(extended_info_offsets) - 1); 487 else if (use_bix) 488 result = extract_package(battery, buffer->pointer, 489 extended_info_offsets, 490 ARRAY_SIZE(extended_info_offsets)); 491 else 492 result = extract_package(battery, buffer->pointer, 493 info_offsets, ARRAY_SIZE(info_offsets)); 494 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) 495 battery->full_charge_capacity = battery->design_capacity; 496 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && 497 battery->power_unit && battery->design_voltage) { 498 battery->design_capacity = battery->design_capacity * 499 10000 / battery->design_voltage; 500 battery->full_charge_capacity = battery->full_charge_capacity * 501 10000 / battery->design_voltage; 502 battery->design_capacity_warning = 503 battery->design_capacity_warning * 504 10000 / battery->design_voltage; 505 /* Curiously, design_capacity_low, unlike the rest of them, 506 is correct. */ 507 /* capacity_granularity_* equal 1 on the systems tested, so 508 it's impossible to tell if they would need an adjustment 509 or not if their values were higher. */ 510 } 511 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) && 512 battery->capacity_now > battery->full_charge_capacity) 513 battery->capacity_now = battery->full_charge_capacity; 514 515 return result; 516 } 517 518 static int acpi_battery_get_info(struct acpi_battery *battery) 519 { 520 const int xinfo = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); 521 int use_bix; 522 int result = -ENODEV; 523 524 if (!acpi_battery_present(battery)) 525 return 0; 526 527 528 for (use_bix = xinfo ? 1 : 0; use_bix >= 0; use_bix--) { 529 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 530 acpi_status status = AE_ERROR; 531 532 mutex_lock(&battery->lock); 533 status = acpi_evaluate_object(battery->device->handle, 534 use_bix ? "_BIX":"_BIF", 535 NULL, &buffer); 536 mutex_unlock(&battery->lock); 537 538 if (ACPI_FAILURE(status)) { 539 ACPI_EXCEPTION((AE_INFO, status, "Evaluating %s", 540 use_bix ? "_BIX":"_BIF")); 541 } else { 542 result = extract_battery_info(use_bix, 543 battery, 544 &buffer); 545 546 kfree(buffer.pointer); 547 break; 548 } 549 } 550 551 if (!result && !use_bix && xinfo) 552 pr_warn(FW_BUG "The _BIX method is broken, using _BIF.\n"); 553 554 return result; 555 } 556 557 static int acpi_battery_get_state(struct acpi_battery *battery) 558 { 559 int result = 0; 560 acpi_status status = 0; 561 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 562 563 if (!acpi_battery_present(battery)) 564 return 0; 565 566 if (battery->update_time && 567 time_before(jiffies, battery->update_time + 568 msecs_to_jiffies(cache_time))) 569 return 0; 570 571 mutex_lock(&battery->lock); 572 status = acpi_evaluate_object(battery->device->handle, "_BST", 573 NULL, &buffer); 574 mutex_unlock(&battery->lock); 575 576 if (ACPI_FAILURE(status)) { 577 ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST")); 578 return -ENODEV; 579 } 580 581 result = extract_package(battery, buffer.pointer, 582 state_offsets, ARRAY_SIZE(state_offsets)); 583 battery->update_time = jiffies; 584 kfree(buffer.pointer); 585 586 /* For buggy DSDTs that report negative 16-bit values for either 587 * charging or discharging current and/or report 0 as 65536 588 * due to bad math. 589 */ 590 if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA && 591 battery->rate_now != ACPI_BATTERY_VALUE_UNKNOWN && 592 (s16)(battery->rate_now) < 0) { 593 battery->rate_now = abs((s16)battery->rate_now); 594 pr_warn_once(FW_BUG "battery: (dis)charge rate invalid.\n"); 595 } 596 597 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags) 598 && battery->capacity_now >= 0 && battery->capacity_now <= 100) 599 battery->capacity_now = (battery->capacity_now * 600 battery->full_charge_capacity) / 100; 601 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) && 602 battery->power_unit && battery->design_voltage) { 603 battery->capacity_now = battery->capacity_now * 604 10000 / battery->design_voltage; 605 } 606 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) && 607 battery->capacity_now > battery->full_charge_capacity) 608 battery->capacity_now = battery->full_charge_capacity; 609 610 return result; 611 } 612 613 static int acpi_battery_set_alarm(struct acpi_battery *battery) 614 { 615 acpi_status status = 0; 616 617 if (!acpi_battery_present(battery) || 618 !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags)) 619 return -ENODEV; 620 621 mutex_lock(&battery->lock); 622 status = acpi_execute_simple_method(battery->device->handle, "_BTP", 623 battery->alarm); 624 mutex_unlock(&battery->lock); 625 626 if (ACPI_FAILURE(status)) 627 return -ENODEV; 628 629 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Alarm set to %d\n", battery->alarm)); 630 return 0; 631 } 632 633 static int acpi_battery_init_alarm(struct acpi_battery *battery) 634 { 635 /* See if alarms are supported, and if so, set default */ 636 if (!acpi_has_method(battery->device->handle, "_BTP")) { 637 clear_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags); 638 return 0; 639 } 640 set_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags); 641 if (!battery->alarm) 642 battery->alarm = battery->design_capacity_warning; 643 return acpi_battery_set_alarm(battery); 644 } 645 646 static ssize_t acpi_battery_alarm_show(struct device *dev, 647 struct device_attribute *attr, 648 char *buf) 649 { 650 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); 651 return sprintf(buf, "%d\n", battery->alarm * 1000); 652 } 653 654 static ssize_t acpi_battery_alarm_store(struct device *dev, 655 struct device_attribute *attr, 656 const char *buf, size_t count) 657 { 658 unsigned long x; 659 struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev)); 660 if (sscanf(buf, "%lu\n", &x) == 1) 661 battery->alarm = x/1000; 662 if (acpi_battery_present(battery)) 663 acpi_battery_set_alarm(battery); 664 return count; 665 } 666 667 static const struct device_attribute alarm_attr = { 668 .attr = {.name = "alarm", .mode = 0644}, 669 .show = acpi_battery_alarm_show, 670 .store = acpi_battery_alarm_store, 671 }; 672 673 /* 674 * The Battery Hooking API 675 * 676 * This API is used inside other drivers that need to expose 677 * platform-specific behaviour within the generic driver in a 678 * generic way. 679 * 680 */ 681 682 static LIST_HEAD(acpi_battery_list); 683 static LIST_HEAD(battery_hook_list); 684 static DEFINE_MUTEX(hook_mutex); 685 686 static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock) 687 { 688 struct acpi_battery *battery; 689 /* 690 * In order to remove a hook, we first need to 691 * de-register all the batteries that are registered. 692 */ 693 if (lock) 694 mutex_lock(&hook_mutex); 695 list_for_each_entry(battery, &acpi_battery_list, list) { 696 hook->remove_battery(battery->bat); 697 } 698 list_del(&hook->list); 699 if (lock) 700 mutex_unlock(&hook_mutex); 701 pr_info("extension unregistered: %s\n", hook->name); 702 } 703 704 void battery_hook_unregister(struct acpi_battery_hook *hook) 705 { 706 __battery_hook_unregister(hook, 1); 707 } 708 EXPORT_SYMBOL_GPL(battery_hook_unregister); 709 710 void battery_hook_register(struct acpi_battery_hook *hook) 711 { 712 struct acpi_battery *battery; 713 714 mutex_lock(&hook_mutex); 715 INIT_LIST_HEAD(&hook->list); 716 list_add(&hook->list, &battery_hook_list); 717 /* 718 * Now that the driver is registered, we need 719 * to notify the hook that a battery is available 720 * for each battery, so that the driver may add 721 * its attributes. 722 */ 723 list_for_each_entry(battery, &acpi_battery_list, list) { 724 if (hook->add_battery(battery->bat)) { 725 /* 726 * If a add-battery returns non-zero, 727 * the registration of the extension has failed, 728 * and we will not add it to the list of loaded 729 * hooks. 730 */ 731 pr_err("extension failed to load: %s", hook->name); 732 __battery_hook_unregister(hook, 0); 733 goto end; 734 } 735 } 736 pr_info("new extension: %s\n", hook->name); 737 end: 738 mutex_unlock(&hook_mutex); 739 } 740 EXPORT_SYMBOL_GPL(battery_hook_register); 741 742 /* 743 * This function gets called right after the battery sysfs 744 * attributes have been added, so that the drivers that 745 * define custom sysfs attributes can add their own. 746 */ 747 static void battery_hook_add_battery(struct acpi_battery *battery) 748 { 749 struct acpi_battery_hook *hook_node, *tmp; 750 751 mutex_lock(&hook_mutex); 752 INIT_LIST_HEAD(&battery->list); 753 list_add(&battery->list, &acpi_battery_list); 754 /* 755 * Since we added a new battery to the list, we need to 756 * iterate over the hooks and call add_battery for each 757 * hook that was registered. This usually happens 758 * when a battery gets hotplugged or initialized 759 * during the battery module initialization. 760 */ 761 list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) { 762 if (hook_node->add_battery(battery->bat)) { 763 /* 764 * The notification of the extensions has failed, to 765 * prevent further errors we will unload the extension. 766 */ 767 pr_err("error in extension, unloading: %s", 768 hook_node->name); 769 __battery_hook_unregister(hook_node, 0); 770 } 771 } 772 mutex_unlock(&hook_mutex); 773 } 774 775 static void battery_hook_remove_battery(struct acpi_battery *battery) 776 { 777 struct acpi_battery_hook *hook; 778 779 mutex_lock(&hook_mutex); 780 /* 781 * Before removing the hook, we need to remove all 782 * custom attributes from the battery. 783 */ 784 list_for_each_entry(hook, &battery_hook_list, list) { 785 hook->remove_battery(battery->bat); 786 } 787 /* Then, just remove the battery from the list */ 788 list_del(&battery->list); 789 mutex_unlock(&hook_mutex); 790 } 791 792 static void __exit battery_hook_exit(void) 793 { 794 struct acpi_battery_hook *hook; 795 struct acpi_battery_hook *ptr; 796 /* 797 * At this point, the acpi_bus_unregister_driver() 798 * has called remove for all batteries. We just 799 * need to remove the hooks. 800 */ 801 list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) { 802 __battery_hook_unregister(hook, 1); 803 } 804 mutex_destroy(&hook_mutex); 805 } 806 807 static int sysfs_add_battery(struct acpi_battery *battery) 808 { 809 struct power_supply_config psy_cfg = { .drv_data = battery, }; 810 811 if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) { 812 battery->bat_desc.properties = charge_battery_props; 813 battery->bat_desc.num_properties = 814 ARRAY_SIZE(charge_battery_props); 815 } else if (battery->full_charge_capacity == 0) { 816 battery->bat_desc.properties = 817 energy_battery_full_cap_broken_props; 818 battery->bat_desc.num_properties = 819 ARRAY_SIZE(energy_battery_full_cap_broken_props); 820 } else { 821 battery->bat_desc.properties = energy_battery_props; 822 battery->bat_desc.num_properties = 823 ARRAY_SIZE(energy_battery_props); 824 } 825 826 battery->bat_desc.name = acpi_device_bid(battery->device); 827 battery->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY; 828 battery->bat_desc.get_property = acpi_battery_get_property; 829 830 battery->bat = power_supply_register_no_ws(&battery->device->dev, 831 &battery->bat_desc, &psy_cfg); 832 833 if (IS_ERR(battery->bat)) { 834 int result = PTR_ERR(battery->bat); 835 836 battery->bat = NULL; 837 return result; 838 } 839 battery_hook_add_battery(battery); 840 return device_create_file(&battery->bat->dev, &alarm_attr); 841 } 842 843 static void sysfs_remove_battery(struct acpi_battery *battery) 844 { 845 mutex_lock(&battery->sysfs_lock); 846 if (!battery->bat) { 847 mutex_unlock(&battery->sysfs_lock); 848 return; 849 } 850 battery_hook_remove_battery(battery); 851 device_remove_file(&battery->bat->dev, &alarm_attr); 852 power_supply_unregister(battery->bat); 853 battery->bat = NULL; 854 mutex_unlock(&battery->sysfs_lock); 855 } 856 857 static void find_battery(const struct dmi_header *dm, void *private) 858 { 859 struct acpi_battery *battery = (struct acpi_battery *)private; 860 /* Note: the hardcoded offsets below have been extracted from 861 the source code of dmidecode. */ 862 if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) { 863 const u8 *dmi_data = (const u8 *)(dm + 1); 864 int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6)); 865 if (dm->length >= 18) 866 dmi_capacity *= dmi_data[17]; 867 if (battery->design_capacity * battery->design_voltage / 1000 868 != dmi_capacity && 869 battery->design_capacity * 10 == dmi_capacity) 870 set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, 871 &battery->flags); 872 } 873 } 874 875 /* 876 * According to the ACPI spec, some kinds of primary batteries can 877 * report percentage battery remaining capacity directly to OS. 878 * In this case, it reports the Last Full Charged Capacity == 100 879 * and BatteryPresentRate == 0xFFFFFFFF. 880 * 881 * Now we found some battery reports percentage remaining capacity 882 * even if it's rechargeable. 883 * https://bugzilla.kernel.org/show_bug.cgi?id=15979 884 * 885 * Handle this correctly so that they won't break userspace. 886 */ 887 static void acpi_battery_quirks(struct acpi_battery *battery) 888 { 889 if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)) 890 return; 891 892 if (battery->full_charge_capacity == 100 && 893 battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN && 894 battery->capacity_now >= 0 && battery->capacity_now <= 100) { 895 set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags); 896 battery->full_charge_capacity = battery->design_capacity; 897 battery->capacity_now = (battery->capacity_now * 898 battery->full_charge_capacity) / 100; 899 } 900 901 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags)) 902 return; 903 904 if (battery->power_unit && dmi_name_in_vendors("LENOVO")) { 905 const char *s; 906 s = dmi_get_system_info(DMI_PRODUCT_VERSION); 907 if (s && !strncasecmp(s, "ThinkPad", 8)) { 908 dmi_walk(find_battery, battery); 909 if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, 910 &battery->flags) && 911 battery->design_voltage) { 912 battery->design_capacity = 913 battery->design_capacity * 914 10000 / battery->design_voltage; 915 battery->full_charge_capacity = 916 battery->full_charge_capacity * 917 10000 / battery->design_voltage; 918 battery->design_capacity_warning = 919 battery->design_capacity_warning * 920 10000 / battery->design_voltage; 921 battery->capacity_now = battery->capacity_now * 922 10000 / battery->design_voltage; 923 } 924 } 925 } 926 927 if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags)) 928 return; 929 930 if (acpi_battery_is_degraded(battery) && 931 battery->capacity_now > battery->full_charge_capacity) { 932 set_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags); 933 battery->capacity_now = battery->full_charge_capacity; 934 } 935 } 936 937 static int acpi_battery_update(struct acpi_battery *battery, bool resume) 938 { 939 int result = acpi_battery_get_status(battery); 940 941 if (result) 942 return result; 943 944 if (!acpi_battery_present(battery)) { 945 sysfs_remove_battery(battery); 946 battery->update_time = 0; 947 return 0; 948 } 949 950 if (resume) 951 return 0; 952 953 if (!battery->update_time) { 954 result = acpi_battery_get_info(battery); 955 if (result) 956 return result; 957 acpi_battery_init_alarm(battery); 958 } 959 960 result = acpi_battery_get_state(battery); 961 if (result) 962 return result; 963 acpi_battery_quirks(battery); 964 965 if (!battery->bat) { 966 result = sysfs_add_battery(battery); 967 if (result) 968 return result; 969 } 970 971 /* 972 * Wakeup the system if battery is critical low 973 * or lower than the alarm level 974 */ 975 if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) || 976 (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) && 977 (battery->capacity_now <= battery->alarm))) 978 acpi_pm_wakeup_event(&battery->device->dev); 979 980 return result; 981 } 982 983 static void acpi_battery_refresh(struct acpi_battery *battery) 984 { 985 int power_unit; 986 987 if (!battery->bat) 988 return; 989 990 power_unit = battery->power_unit; 991 992 acpi_battery_get_info(battery); 993 994 if (power_unit == battery->power_unit) 995 return; 996 997 /* The battery has changed its reporting units. */ 998 sysfs_remove_battery(battery); 999 sysfs_add_battery(battery); 1000 } 1001 1002 /* -------------------------------------------------------------------------- 1003 FS Interface (/proc) 1004 -------------------------------------------------------------------------- */ 1005 1006 #ifdef CONFIG_ACPI_PROCFS_POWER 1007 static struct proc_dir_entry *acpi_battery_dir; 1008 1009 static const char *acpi_battery_units(const struct acpi_battery *battery) 1010 { 1011 return (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) ? 1012 "mA" : "mW"; 1013 } 1014 1015 static int acpi_battery_info_proc_show(struct seq_file *seq, void *offset) 1016 { 1017 struct acpi_battery *battery = seq->private; 1018 int result = acpi_battery_update(battery, false); 1019 1020 if (result) 1021 goto end; 1022 1023 seq_printf(seq, "present: %s\n", 1024 acpi_battery_present(battery) ? "yes" : "no"); 1025 if (!acpi_battery_present(battery)) 1026 goto end; 1027 if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN) 1028 seq_printf(seq, "design capacity: unknown\n"); 1029 else 1030 seq_printf(seq, "design capacity: %d %sh\n", 1031 battery->design_capacity, 1032 acpi_battery_units(battery)); 1033 1034 if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN) 1035 seq_printf(seq, "last full capacity: unknown\n"); 1036 else 1037 seq_printf(seq, "last full capacity: %d %sh\n", 1038 battery->full_charge_capacity, 1039 acpi_battery_units(battery)); 1040 1041 seq_printf(seq, "battery technology: %srechargeable\n", 1042 battery->technology ? "" : "non-"); 1043 1044 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN) 1045 seq_printf(seq, "design voltage: unknown\n"); 1046 else 1047 seq_printf(seq, "design voltage: %d mV\n", 1048 battery->design_voltage); 1049 seq_printf(seq, "design capacity warning: %d %sh\n", 1050 battery->design_capacity_warning, 1051 acpi_battery_units(battery)); 1052 seq_printf(seq, "design capacity low: %d %sh\n", 1053 battery->design_capacity_low, 1054 acpi_battery_units(battery)); 1055 seq_printf(seq, "cycle count: %i\n", battery->cycle_count); 1056 seq_printf(seq, "capacity granularity 1: %d %sh\n", 1057 battery->capacity_granularity_1, 1058 acpi_battery_units(battery)); 1059 seq_printf(seq, "capacity granularity 2: %d %sh\n", 1060 battery->capacity_granularity_2, 1061 acpi_battery_units(battery)); 1062 seq_printf(seq, "model number: %s\n", battery->model_number); 1063 seq_printf(seq, "serial number: %s\n", battery->serial_number); 1064 seq_printf(seq, "battery type: %s\n", battery->type); 1065 seq_printf(seq, "OEM info: %s\n", battery->oem_info); 1066 end: 1067 if (result) 1068 seq_printf(seq, "ERROR: Unable to read battery info\n"); 1069 return result; 1070 } 1071 1072 static int acpi_battery_state_proc_show(struct seq_file *seq, void *offset) 1073 { 1074 struct acpi_battery *battery = seq->private; 1075 int result = acpi_battery_update(battery, false); 1076 1077 if (result) 1078 goto end; 1079 1080 seq_printf(seq, "present: %s\n", 1081 acpi_battery_present(battery) ? "yes" : "no"); 1082 if (!acpi_battery_present(battery)) 1083 goto end; 1084 1085 seq_printf(seq, "capacity state: %s\n", 1086 (battery->state & 0x04) ? "critical" : "ok"); 1087 if ((battery->state & 0x01) && (battery->state & 0x02)) 1088 seq_printf(seq, 1089 "charging state: charging/discharging\n"); 1090 else if (battery->state & 0x01) 1091 seq_printf(seq, "charging state: discharging\n"); 1092 else if (battery->state & 0x02) 1093 seq_printf(seq, "charging state: charging\n"); 1094 else 1095 seq_printf(seq, "charging state: charged\n"); 1096 1097 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) 1098 seq_printf(seq, "present rate: unknown\n"); 1099 else 1100 seq_printf(seq, "present rate: %d %s\n", 1101 battery->rate_now, acpi_battery_units(battery)); 1102 1103 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN) 1104 seq_printf(seq, "remaining capacity: unknown\n"); 1105 else 1106 seq_printf(seq, "remaining capacity: %d %sh\n", 1107 battery->capacity_now, acpi_battery_units(battery)); 1108 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN) 1109 seq_printf(seq, "present voltage: unknown\n"); 1110 else 1111 seq_printf(seq, "present voltage: %d mV\n", 1112 battery->voltage_now); 1113 end: 1114 if (result) 1115 seq_printf(seq, "ERROR: Unable to read battery state\n"); 1116 1117 return result; 1118 } 1119 1120 static int acpi_battery_alarm_proc_show(struct seq_file *seq, void *offset) 1121 { 1122 struct acpi_battery *battery = seq->private; 1123 int result = acpi_battery_update(battery, false); 1124 1125 if (result) 1126 goto end; 1127 1128 if (!acpi_battery_present(battery)) { 1129 seq_printf(seq, "present: no\n"); 1130 goto end; 1131 } 1132 seq_printf(seq, "alarm: "); 1133 if (battery->alarm) { 1134 seq_printf(seq, "%u %sh\n", battery->alarm, 1135 acpi_battery_units(battery)); 1136 } else { 1137 seq_printf(seq, "unsupported\n"); 1138 } 1139 end: 1140 if (result) 1141 seq_printf(seq, "ERROR: Unable to read battery alarm\n"); 1142 return result; 1143 } 1144 1145 static ssize_t acpi_battery_write_alarm(struct file *file, 1146 const char __user * buffer, 1147 size_t count, loff_t * ppos) 1148 { 1149 int result = 0; 1150 char alarm_string[12] = { '\0' }; 1151 struct seq_file *m = file->private_data; 1152 struct acpi_battery *battery = m->private; 1153 1154 if (!battery || (count > sizeof(alarm_string) - 1)) 1155 return -EINVAL; 1156 if (!acpi_battery_present(battery)) { 1157 result = -ENODEV; 1158 goto end; 1159 } 1160 if (copy_from_user(alarm_string, buffer, count)) { 1161 result = -EFAULT; 1162 goto end; 1163 } 1164 alarm_string[count] = '\0'; 1165 if (kstrtoint(alarm_string, 0, &battery->alarm)) { 1166 result = -EINVAL; 1167 goto end; 1168 } 1169 result = acpi_battery_set_alarm(battery); 1170 end: 1171 if (result) 1172 return result; 1173 return count; 1174 } 1175 1176 static int acpi_battery_alarm_proc_open(struct inode *inode, struct file *file) 1177 { 1178 return single_open(file, acpi_battery_alarm_proc_show, PDE_DATA(inode)); 1179 } 1180 1181 static const struct file_operations acpi_battery_alarm_fops = { 1182 .owner = THIS_MODULE, 1183 .open = acpi_battery_alarm_proc_open, 1184 .read = seq_read, 1185 .write = acpi_battery_write_alarm, 1186 .llseek = seq_lseek, 1187 .release = single_release, 1188 }; 1189 1190 static int acpi_battery_add_fs(struct acpi_device *device) 1191 { 1192 pr_warning(PREFIX "Deprecated procfs I/F for battery is loaded, please retry with CONFIG_ACPI_PROCFS_POWER cleared\n"); 1193 if (!acpi_device_dir(device)) { 1194 acpi_device_dir(device) = proc_mkdir(acpi_device_bid(device), 1195 acpi_battery_dir); 1196 if (!acpi_device_dir(device)) 1197 return -ENODEV; 1198 } 1199 1200 if (!proc_create_single_data("info", S_IRUGO, acpi_device_dir(device), 1201 acpi_battery_info_proc_show, acpi_driver_data(device))) 1202 return -ENODEV; 1203 if (!proc_create_single_data("state", S_IRUGO, acpi_device_dir(device), 1204 acpi_battery_state_proc_show, acpi_driver_data(device))) 1205 return -ENODEV; 1206 if (!proc_create_data("alarm", S_IFREG | S_IRUGO | S_IWUSR, 1207 acpi_device_dir(device), &acpi_battery_alarm_fops, 1208 acpi_driver_data(device))) 1209 return -ENODEV; 1210 return 0; 1211 } 1212 1213 static void acpi_battery_remove_fs(struct acpi_device *device) 1214 { 1215 if (!acpi_device_dir(device)) 1216 return; 1217 remove_proc_subtree(acpi_device_bid(device), acpi_battery_dir); 1218 acpi_device_dir(device) = NULL; 1219 } 1220 1221 #endif 1222 1223 /* -------------------------------------------------------------------------- 1224 Driver Interface 1225 -------------------------------------------------------------------------- */ 1226 1227 static void acpi_battery_notify(struct acpi_device *device, u32 event) 1228 { 1229 struct acpi_battery *battery = acpi_driver_data(device); 1230 struct power_supply *old; 1231 1232 if (!battery) 1233 return; 1234 old = battery->bat; 1235 /* 1236 * On Acer Aspire V5-573G notifications are sometimes triggered too 1237 * early. For example, when AC is unplugged and notification is 1238 * triggered, battery state is still reported as "Full", and changes to 1239 * "Discharging" only after short delay, without any notification. 1240 */ 1241 if (battery_notification_delay_ms > 0) 1242 msleep(battery_notification_delay_ms); 1243 if (event == ACPI_BATTERY_NOTIFY_INFO) 1244 acpi_battery_refresh(battery); 1245 acpi_battery_update(battery, false); 1246 acpi_bus_generate_netlink_event(device->pnp.device_class, 1247 dev_name(&device->dev), event, 1248 acpi_battery_present(battery)); 1249 acpi_notifier_call_chain(device, event, acpi_battery_present(battery)); 1250 /* acpi_battery_update could remove power_supply object */ 1251 if (old && battery->bat) 1252 power_supply_changed(battery->bat); 1253 } 1254 1255 static int battery_notify(struct notifier_block *nb, 1256 unsigned long mode, void *_unused) 1257 { 1258 struct acpi_battery *battery = container_of(nb, struct acpi_battery, 1259 pm_nb); 1260 int result; 1261 1262 switch (mode) { 1263 case PM_POST_HIBERNATION: 1264 case PM_POST_SUSPEND: 1265 if (!acpi_battery_present(battery)) 1266 return 0; 1267 1268 if (battery->bat) { 1269 acpi_battery_refresh(battery); 1270 } else { 1271 result = acpi_battery_get_info(battery); 1272 if (result) 1273 return result; 1274 1275 result = sysfs_add_battery(battery); 1276 if (result) 1277 return result; 1278 } 1279 1280 acpi_battery_init_alarm(battery); 1281 acpi_battery_get_state(battery); 1282 break; 1283 } 1284 1285 return 0; 1286 } 1287 1288 static int __init 1289 battery_bix_broken_package_quirk(const struct dmi_system_id *d) 1290 { 1291 battery_bix_broken_package = 1; 1292 return 0; 1293 } 1294 1295 static int __init 1296 battery_notification_delay_quirk(const struct dmi_system_id *d) 1297 { 1298 battery_notification_delay_ms = 1000; 1299 return 0; 1300 } 1301 1302 static int __init 1303 battery_ac_is_broken_quirk(const struct dmi_system_id *d) 1304 { 1305 battery_ac_is_broken = 1; 1306 return 0; 1307 } 1308 1309 static int __init 1310 battery_do_not_check_pmic_quirk(const struct dmi_system_id *d) 1311 { 1312 battery_check_pmic = 0; 1313 return 0; 1314 } 1315 1316 static const struct dmi_system_id bat_dmi_table[] __initconst = { 1317 { 1318 /* NEC LZ750/LS */ 1319 .callback = battery_bix_broken_package_quirk, 1320 .matches = { 1321 DMI_MATCH(DMI_SYS_VENDOR, "NEC"), 1322 DMI_MATCH(DMI_PRODUCT_NAME, "PC-LZ750LS"), 1323 }, 1324 }, 1325 { 1326 /* Acer Aspire V5-573G */ 1327 .callback = battery_notification_delay_quirk, 1328 .matches = { 1329 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 1330 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"), 1331 }, 1332 }, 1333 { 1334 /* Point of View mobii wintab p800w */ 1335 .callback = battery_ac_is_broken_quirk, 1336 .matches = { 1337 DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), 1338 DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), 1339 DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"), 1340 /* Above matches are too generic, add bios-date match */ 1341 DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"), 1342 }, 1343 }, 1344 { 1345 /* ECS EF20EA */ 1346 .callback = battery_do_not_check_pmic_quirk, 1347 .matches = { 1348 DMI_MATCH(DMI_PRODUCT_NAME, "EF20EA"), 1349 }, 1350 }, 1351 { 1352 /* Lenovo Ideapad Miix 320 */ 1353 .callback = battery_do_not_check_pmic_quirk, 1354 .matches = { 1355 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"), 1356 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "80XF"), 1357 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"), 1358 }, 1359 }, 1360 {}, 1361 }; 1362 1363 /* 1364 * Some machines'(E,G Lenovo Z480) ECs are not stable 1365 * during boot up and this causes battery driver fails to be 1366 * probed due to failure of getting battery information 1367 * from EC sometimes. After several retries, the operation 1368 * may work. So add retry code here and 20ms sleep between 1369 * every retries. 1370 */ 1371 static int acpi_battery_update_retry(struct acpi_battery *battery) 1372 { 1373 int retry, ret; 1374 1375 for (retry = 5; retry; retry--) { 1376 ret = acpi_battery_update(battery, false); 1377 if (!ret) 1378 break; 1379 1380 msleep(20); 1381 } 1382 return ret; 1383 } 1384 1385 static int acpi_battery_add(struct acpi_device *device) 1386 { 1387 int result = 0; 1388 struct acpi_battery *battery = NULL; 1389 1390 if (!device) 1391 return -EINVAL; 1392 1393 if (device->dep_unmet) 1394 return -EPROBE_DEFER; 1395 1396 battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL); 1397 if (!battery) 1398 return -ENOMEM; 1399 battery->device = device; 1400 strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME); 1401 strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS); 1402 device->driver_data = battery; 1403 mutex_init(&battery->lock); 1404 mutex_init(&battery->sysfs_lock); 1405 if (acpi_has_method(battery->device->handle, "_BIX")) 1406 set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); 1407 1408 result = acpi_battery_update_retry(battery); 1409 if (result) 1410 goto fail; 1411 1412 #ifdef CONFIG_ACPI_PROCFS_POWER 1413 result = acpi_battery_add_fs(device); 1414 if (result) { 1415 acpi_battery_remove_fs(device); 1416 goto fail; 1417 } 1418 #endif 1419 1420 pr_info(PREFIX "%s Slot [%s] (battery %s)\n", 1421 ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device), 1422 device->status.battery_present ? "present" : "absent"); 1423 1424 battery->pm_nb.notifier_call = battery_notify; 1425 register_pm_notifier(&battery->pm_nb); 1426 1427 device_init_wakeup(&device->dev, 1); 1428 1429 return result; 1430 1431 fail: 1432 sysfs_remove_battery(battery); 1433 mutex_destroy(&battery->lock); 1434 mutex_destroy(&battery->sysfs_lock); 1435 kfree(battery); 1436 return result; 1437 } 1438 1439 static int acpi_battery_remove(struct acpi_device *device) 1440 { 1441 struct acpi_battery *battery = NULL; 1442 1443 if (!device || !acpi_driver_data(device)) 1444 return -EINVAL; 1445 device_init_wakeup(&device->dev, 0); 1446 battery = acpi_driver_data(device); 1447 unregister_pm_notifier(&battery->pm_nb); 1448 #ifdef CONFIG_ACPI_PROCFS_POWER 1449 acpi_battery_remove_fs(device); 1450 #endif 1451 sysfs_remove_battery(battery); 1452 mutex_destroy(&battery->lock); 1453 mutex_destroy(&battery->sysfs_lock); 1454 kfree(battery); 1455 return 0; 1456 } 1457 1458 #ifdef CONFIG_PM_SLEEP 1459 /* this is needed to learn about changes made in suspended state */ 1460 static int acpi_battery_resume(struct device *dev) 1461 { 1462 struct acpi_battery *battery; 1463 1464 if (!dev) 1465 return -EINVAL; 1466 1467 battery = acpi_driver_data(to_acpi_device(dev)); 1468 if (!battery) 1469 return -EINVAL; 1470 1471 battery->update_time = 0; 1472 acpi_battery_update(battery, true); 1473 return 0; 1474 } 1475 #else 1476 #define acpi_battery_resume NULL 1477 #endif 1478 1479 static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume); 1480 1481 static struct acpi_driver acpi_battery_driver = { 1482 .name = "battery", 1483 .class = ACPI_BATTERY_CLASS, 1484 .ids = battery_device_ids, 1485 .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS, 1486 .ops = { 1487 .add = acpi_battery_add, 1488 .remove = acpi_battery_remove, 1489 .notify = acpi_battery_notify, 1490 }, 1491 .drv.pm = &acpi_battery_pm, 1492 }; 1493 1494 static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie) 1495 { 1496 unsigned int i; 1497 int result; 1498 1499 dmi_check_system(bat_dmi_table); 1500 1501 if (battery_check_pmic) { 1502 for (i = 0; i < ARRAY_SIZE(acpi_battery_blacklist); i++) 1503 if (acpi_dev_present(acpi_battery_blacklist[i], "1", -1)) { 1504 pr_info(PREFIX ACPI_BATTERY_DEVICE_NAME 1505 ": found native %s PMIC, not loading\n", 1506 acpi_battery_blacklist[i]); 1507 return; 1508 } 1509 } 1510 1511 #ifdef CONFIG_ACPI_PROCFS_POWER 1512 acpi_battery_dir = acpi_lock_battery_dir(); 1513 if (!acpi_battery_dir) 1514 return; 1515 #endif 1516 result = acpi_bus_register_driver(&acpi_battery_driver); 1517 #ifdef CONFIG_ACPI_PROCFS_POWER 1518 if (result < 0) 1519 acpi_unlock_battery_dir(acpi_battery_dir); 1520 #endif 1521 battery_driver_registered = (result == 0); 1522 } 1523 1524 static int __init acpi_battery_init(void) 1525 { 1526 if (acpi_disabled) 1527 return -ENODEV; 1528 1529 async_cookie = async_schedule(acpi_battery_init_async, NULL); 1530 return 0; 1531 } 1532 1533 static void __exit acpi_battery_exit(void) 1534 { 1535 async_synchronize_cookie(async_cookie + 1); 1536 if (battery_driver_registered) { 1537 acpi_bus_unregister_driver(&acpi_battery_driver); 1538 battery_hook_exit(); 1539 } 1540 #ifdef CONFIG_ACPI_PROCFS_POWER 1541 if (acpi_battery_dir) 1542 acpi_unlock_battery_dir(acpi_battery_dir); 1543 #endif 1544 } 1545 1546 module_init(acpi_battery_init); 1547 module_exit(acpi_battery_exit); 1548