Merge branch 'next' into for-linus
[linux-2.6-microblaze.git] / drivers / acpi / battery.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *  battery.c - ACPI Battery Driver (Revision: 2.0)
4  *
5  *  Copyright (C) 2007 Alexey Starikovskiy <astarikovskiy@suse.de>
6  *  Copyright (C) 2004-2007 Vladimir Lebedev <vladimir.p.lebedev@intel.com>
7  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
8  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
9  */
10
11 #define pr_fmt(fmt) "ACPI: battery: " fmt
12
13 #include <linux/async.h>
14 #include <linux/delay.h>
15 #include <linux/dmi.h>
16 #include <linux/jiffies.h>
17 #include <linux/kernel.h>
18 #include <linux/list.h>
19 #include <linux/module.h>
20 #include <linux/mutex.h>
21 #include <linux/slab.h>
22 #include <linux/suspend.h>
23 #include <linux/types.h>
24
25 #include <asm/unaligned.h>
26
27 #include <linux/acpi.h>
28 #include <linux/power_supply.h>
29
30 #include <acpi/battery.h>
31
32 #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF
33 #define ACPI_BATTERY_CAPACITY_VALID(capacity) \
34         ((capacity) != 0 && (capacity) != ACPI_BATTERY_VALUE_UNKNOWN)
35
36 #define ACPI_BATTERY_DEVICE_NAME        "Battery"
37
38 /* Battery power unit: 0 means mW, 1 means mA */
39 #define ACPI_BATTERY_POWER_UNIT_MA      1
40
41 #define ACPI_BATTERY_STATE_DISCHARGING  0x1
42 #define ACPI_BATTERY_STATE_CHARGING     0x2
43 #define ACPI_BATTERY_STATE_CRITICAL     0x4
44
45 MODULE_AUTHOR("Paul Diefenbaugh");
46 MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>");
47 MODULE_DESCRIPTION("ACPI Battery Driver");
48 MODULE_LICENSE("GPL");
49
50 static async_cookie_t async_cookie;
51 static bool battery_driver_registered;
52 static int battery_bix_broken_package;
53 static int battery_notification_delay_ms;
54 static int battery_ac_is_broken;
55 static int battery_check_pmic = 1;
56 static unsigned int cache_time = 1000;
57 module_param(cache_time, uint, 0644);
58 MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
59
60 static const struct acpi_device_id battery_device_ids[] = {
61         {"PNP0C0A", 0},
62         {"", 0},
63 };
64
65 MODULE_DEVICE_TABLE(acpi, battery_device_ids);
66
67 /* Lists of PMIC ACPI HIDs with an (often better) native battery driver */
68 static const char * const acpi_battery_blacklist[] = {
69         "INT33F4", /* X-Powers AXP288 PMIC */
70 };
71
72 enum {
73         ACPI_BATTERY_ALARM_PRESENT,
74         ACPI_BATTERY_XINFO_PRESENT,
75         ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
76         /* On Lenovo Thinkpad models from 2010 and 2011, the power unit
77            switches between mWh and mAh depending on whether the system
78            is running on battery or not.  When mAh is the unit, most
79            reported values are incorrect and need to be adjusted by
80            10000/design_voltage.  Verified on x201, t410, t410s, and x220.
81            Pre-2010 and 2012 models appear to always report in mWh and
82            are thus unaffected (tested with t42, t61, t500, x200, x300,
83            and x230).  Also, in mid-2012 Lenovo issued a BIOS update for
84            the 2011 models that fixes the issue (tested on x220 with a
85            post-1.29 BIOS), but as of Nov. 2012, no such update is
86            available for the 2010 models.  */
87         ACPI_BATTERY_QUIRK_THINKPAD_MAH,
88         /* for batteries reporting current capacity with design capacity
89          * on a full charge, but showing degradation in full charge cap.
90          */
91         ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE,
92 };
93
94 struct acpi_battery {
95         struct mutex lock;
96         struct mutex sysfs_lock;
97         struct power_supply *bat;
98         struct power_supply_desc bat_desc;
99         struct acpi_device *device;
100         struct notifier_block pm_nb;
101         struct list_head list;
102         unsigned long update_time;
103         int revision;
104         int rate_now;
105         int capacity_now;
106         int voltage_now;
107         int design_capacity;
108         int full_charge_capacity;
109         int technology;
110         int design_voltage;
111         int design_capacity_warning;
112         int design_capacity_low;
113         int cycle_count;
114         int measurement_accuracy;
115         int max_sampling_time;
116         int min_sampling_time;
117         int max_averaging_interval;
118         int min_averaging_interval;
119         int capacity_granularity_1;
120         int capacity_granularity_2;
121         int alarm;
122         char model_number[32];
123         char serial_number[32];
124         char type[32];
125         char oem_info[32];
126         int state;
127         int power_unit;
128         unsigned long flags;
129 };
130
131 #define to_acpi_battery(x) power_supply_get_drvdata(x)
132
133 static inline int acpi_battery_present(struct acpi_battery *battery)
134 {
135         return battery->device->status.battery_present;
136 }
137
138 static int acpi_battery_technology(struct acpi_battery *battery)
139 {
140         if (!strcasecmp("NiCd", battery->type))
141                 return POWER_SUPPLY_TECHNOLOGY_NiCd;
142         if (!strcasecmp("NiMH", battery->type))
143                 return POWER_SUPPLY_TECHNOLOGY_NiMH;
144         if (!strcasecmp("LION", battery->type))
145                 return POWER_SUPPLY_TECHNOLOGY_LION;
146         if (!strncasecmp("LI-ION", battery->type, 6))
147                 return POWER_SUPPLY_TECHNOLOGY_LION;
148         if (!strcasecmp("LiP", battery->type))
149                 return POWER_SUPPLY_TECHNOLOGY_LIPO;
150         return POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
151 }
152
153 static int acpi_battery_get_state(struct acpi_battery *battery);
154
155 static int acpi_battery_is_charged(struct acpi_battery *battery)
156 {
157         /* charging, discharging or critical low */
158         if (battery->state != 0)
159                 return 0;
160
161         /* battery not reporting charge */
162         if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN ||
163             battery->capacity_now == 0)
164                 return 0;
165
166         /* good batteries update full_charge as the batteries degrade */
167         if (battery->full_charge_capacity == battery->capacity_now)
168                 return 1;
169
170         /* fallback to using design values for broken batteries */
171         if (battery->design_capacity == battery->capacity_now)
172                 return 1;
173
174         /* we don't do any sort of metric based on percentages */
175         return 0;
176 }
177
178 static bool acpi_battery_is_degraded(struct acpi_battery *battery)
179 {
180         return ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) &&
181                 ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity) &&
182                 battery->full_charge_capacity < battery->design_capacity;
183 }
184
185 static int acpi_battery_handle_discharging(struct acpi_battery *battery)
186 {
187         /*
188          * Some devices wrongly report discharging if the battery's charge level
189          * was above the device's start charging threshold atm the AC adapter
190          * was plugged in and the device thus did not start a new charge cycle.
191          */
192         if ((battery_ac_is_broken || power_supply_is_system_supplied()) &&
193             battery->rate_now == 0)
194                 return POWER_SUPPLY_STATUS_NOT_CHARGING;
195
196         return POWER_SUPPLY_STATUS_DISCHARGING;
197 }
198
199 static int acpi_battery_get_property(struct power_supply *psy,
200                                      enum power_supply_property psp,
201                                      union power_supply_propval *val)
202 {
203         int full_capacity = ACPI_BATTERY_VALUE_UNKNOWN, ret = 0;
204         struct acpi_battery *battery = to_acpi_battery(psy);
205
206         if (acpi_battery_present(battery)) {
207                 /* run battery update only if it is present */
208                 acpi_battery_get_state(battery);
209         } else if (psp != POWER_SUPPLY_PROP_PRESENT)
210                 return -ENODEV;
211         switch (psp) {
212         case POWER_SUPPLY_PROP_STATUS:
213                 if (battery->state & ACPI_BATTERY_STATE_DISCHARGING)
214                         val->intval = acpi_battery_handle_discharging(battery);
215                 else if (battery->state & ACPI_BATTERY_STATE_CHARGING)
216                         val->intval = POWER_SUPPLY_STATUS_CHARGING;
217                 else if (acpi_battery_is_charged(battery))
218                         val->intval = POWER_SUPPLY_STATUS_FULL;
219                 else
220                         val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
221                 break;
222         case POWER_SUPPLY_PROP_PRESENT:
223                 val->intval = acpi_battery_present(battery);
224                 break;
225         case POWER_SUPPLY_PROP_TECHNOLOGY:
226                 val->intval = acpi_battery_technology(battery);
227                 break;
228         case POWER_SUPPLY_PROP_CYCLE_COUNT:
229                 val->intval = battery->cycle_count;
230                 break;
231         case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
232                 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN)
233                         ret = -ENODEV;
234                 else
235                         val->intval = battery->design_voltage * 1000;
236                 break;
237         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
238                 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN)
239                         ret = -ENODEV;
240                 else
241                         val->intval = battery->voltage_now * 1000;
242                 break;
243         case POWER_SUPPLY_PROP_CURRENT_NOW:
244         case POWER_SUPPLY_PROP_POWER_NOW:
245                 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN)
246                         ret = -ENODEV;
247                 else
248                         val->intval = battery->rate_now * 1000;
249                 break;
250         case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
251         case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
252                 if (!ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
253                         ret = -ENODEV;
254                 else
255                         val->intval = battery->design_capacity * 1000;
256                 break;
257         case POWER_SUPPLY_PROP_CHARGE_FULL:
258         case POWER_SUPPLY_PROP_ENERGY_FULL:
259                 if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity))
260                         ret = -ENODEV;
261                 else
262                         val->intval = battery->full_charge_capacity * 1000;
263                 break;
264         case POWER_SUPPLY_PROP_CHARGE_NOW:
265         case POWER_SUPPLY_PROP_ENERGY_NOW:
266                 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN)
267                         ret = -ENODEV;
268                 else
269                         val->intval = battery->capacity_now * 1000;
270                 break;
271         case POWER_SUPPLY_PROP_CAPACITY:
272                 if (ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity))
273                         full_capacity = battery->full_charge_capacity;
274                 else if (ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
275                         full_capacity = battery->design_capacity;
276
277                 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN ||
278                     full_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
279                         ret = -ENODEV;
280                 else
281                         val->intval = battery->capacity_now * 100/
282                                         full_capacity;
283                 break;
284         case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
285                 if (battery->state & ACPI_BATTERY_STATE_CRITICAL)
286                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
287                 else if (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
288                         (battery->capacity_now <= battery->alarm))
289                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
290                 else if (acpi_battery_is_charged(battery))
291                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
292                 else
293                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
294                 break;
295         case POWER_SUPPLY_PROP_MODEL_NAME:
296                 val->strval = battery->model_number;
297                 break;
298         case POWER_SUPPLY_PROP_MANUFACTURER:
299                 val->strval = battery->oem_info;
300                 break;
301         case POWER_SUPPLY_PROP_SERIAL_NUMBER:
302                 val->strval = battery->serial_number;
303                 break;
304         default:
305                 ret = -EINVAL;
306         }
307         return ret;
308 }
309
310 static enum power_supply_property charge_battery_props[] = {
311         POWER_SUPPLY_PROP_STATUS,
312         POWER_SUPPLY_PROP_PRESENT,
313         POWER_SUPPLY_PROP_TECHNOLOGY,
314         POWER_SUPPLY_PROP_CYCLE_COUNT,
315         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
316         POWER_SUPPLY_PROP_VOLTAGE_NOW,
317         POWER_SUPPLY_PROP_CURRENT_NOW,
318         POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
319         POWER_SUPPLY_PROP_CHARGE_FULL,
320         POWER_SUPPLY_PROP_CHARGE_NOW,
321         POWER_SUPPLY_PROP_CAPACITY,
322         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
323         POWER_SUPPLY_PROP_MODEL_NAME,
324         POWER_SUPPLY_PROP_MANUFACTURER,
325         POWER_SUPPLY_PROP_SERIAL_NUMBER,
326 };
327
328 static enum power_supply_property charge_battery_full_cap_broken_props[] = {
329         POWER_SUPPLY_PROP_STATUS,
330         POWER_SUPPLY_PROP_PRESENT,
331         POWER_SUPPLY_PROP_TECHNOLOGY,
332         POWER_SUPPLY_PROP_CYCLE_COUNT,
333         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
334         POWER_SUPPLY_PROP_VOLTAGE_NOW,
335         POWER_SUPPLY_PROP_CURRENT_NOW,
336         POWER_SUPPLY_PROP_CHARGE_NOW,
337         POWER_SUPPLY_PROP_MODEL_NAME,
338         POWER_SUPPLY_PROP_MANUFACTURER,
339         POWER_SUPPLY_PROP_SERIAL_NUMBER,
340 };
341
342 static enum power_supply_property energy_battery_props[] = {
343         POWER_SUPPLY_PROP_STATUS,
344         POWER_SUPPLY_PROP_PRESENT,
345         POWER_SUPPLY_PROP_TECHNOLOGY,
346         POWER_SUPPLY_PROP_CYCLE_COUNT,
347         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
348         POWER_SUPPLY_PROP_VOLTAGE_NOW,
349         POWER_SUPPLY_PROP_POWER_NOW,
350         POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
351         POWER_SUPPLY_PROP_ENERGY_FULL,
352         POWER_SUPPLY_PROP_ENERGY_NOW,
353         POWER_SUPPLY_PROP_CAPACITY,
354         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
355         POWER_SUPPLY_PROP_MODEL_NAME,
356         POWER_SUPPLY_PROP_MANUFACTURER,
357         POWER_SUPPLY_PROP_SERIAL_NUMBER,
358 };
359
360 static enum power_supply_property energy_battery_full_cap_broken_props[] = {
361         POWER_SUPPLY_PROP_STATUS,
362         POWER_SUPPLY_PROP_PRESENT,
363         POWER_SUPPLY_PROP_TECHNOLOGY,
364         POWER_SUPPLY_PROP_CYCLE_COUNT,
365         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
366         POWER_SUPPLY_PROP_VOLTAGE_NOW,
367         POWER_SUPPLY_PROP_POWER_NOW,
368         POWER_SUPPLY_PROP_ENERGY_NOW,
369         POWER_SUPPLY_PROP_MODEL_NAME,
370         POWER_SUPPLY_PROP_MANUFACTURER,
371         POWER_SUPPLY_PROP_SERIAL_NUMBER,
372 };
373
374 /* --------------------------------------------------------------------------
375                                Battery Management
376    -------------------------------------------------------------------------- */
377 struct acpi_offsets {
378         size_t offset;          /* offset inside struct acpi_sbs_battery */
379         u8 mode;                /* int or string? */
380 };
381
382 static const struct acpi_offsets state_offsets[] = {
383         {offsetof(struct acpi_battery, state), 0},
384         {offsetof(struct acpi_battery, rate_now), 0},
385         {offsetof(struct acpi_battery, capacity_now), 0},
386         {offsetof(struct acpi_battery, voltage_now), 0},
387 };
388
389 static const struct acpi_offsets info_offsets[] = {
390         {offsetof(struct acpi_battery, power_unit), 0},
391         {offsetof(struct acpi_battery, design_capacity), 0},
392         {offsetof(struct acpi_battery, full_charge_capacity), 0},
393         {offsetof(struct acpi_battery, technology), 0},
394         {offsetof(struct acpi_battery, design_voltage), 0},
395         {offsetof(struct acpi_battery, design_capacity_warning), 0},
396         {offsetof(struct acpi_battery, design_capacity_low), 0},
397         {offsetof(struct acpi_battery, capacity_granularity_1), 0},
398         {offsetof(struct acpi_battery, capacity_granularity_2), 0},
399         {offsetof(struct acpi_battery, model_number), 1},
400         {offsetof(struct acpi_battery, serial_number), 1},
401         {offsetof(struct acpi_battery, type), 1},
402         {offsetof(struct acpi_battery, oem_info), 1},
403 };
404
405 static const struct acpi_offsets extended_info_offsets[] = {
406         {offsetof(struct acpi_battery, revision), 0},
407         {offsetof(struct acpi_battery, power_unit), 0},
408         {offsetof(struct acpi_battery, design_capacity), 0},
409         {offsetof(struct acpi_battery, full_charge_capacity), 0},
410         {offsetof(struct acpi_battery, technology), 0},
411         {offsetof(struct acpi_battery, design_voltage), 0},
412         {offsetof(struct acpi_battery, design_capacity_warning), 0},
413         {offsetof(struct acpi_battery, design_capacity_low), 0},
414         {offsetof(struct acpi_battery, cycle_count), 0},
415         {offsetof(struct acpi_battery, measurement_accuracy), 0},
416         {offsetof(struct acpi_battery, max_sampling_time), 0},
417         {offsetof(struct acpi_battery, min_sampling_time), 0},
418         {offsetof(struct acpi_battery, max_averaging_interval), 0},
419         {offsetof(struct acpi_battery, min_averaging_interval), 0},
420         {offsetof(struct acpi_battery, capacity_granularity_1), 0},
421         {offsetof(struct acpi_battery, capacity_granularity_2), 0},
422         {offsetof(struct acpi_battery, model_number), 1},
423         {offsetof(struct acpi_battery, serial_number), 1},
424         {offsetof(struct acpi_battery, type), 1},
425         {offsetof(struct acpi_battery, oem_info), 1},
426 };
427
428 static int extract_package(struct acpi_battery *battery,
429                            union acpi_object *package,
430                            const struct acpi_offsets *offsets, int num)
431 {
432         int i;
433         union acpi_object *element;
434         if (package->type != ACPI_TYPE_PACKAGE)
435                 return -EFAULT;
436         for (i = 0; i < num; ++i) {
437                 if (package->package.count <= i)
438                         return -EFAULT;
439                 element = &package->package.elements[i];
440                 if (offsets[i].mode) {
441                         u8 *ptr = (u8 *)battery + offsets[i].offset;
442                         if (element->type == ACPI_TYPE_STRING ||
443                             element->type == ACPI_TYPE_BUFFER)
444                                 strncpy(ptr, element->string.pointer, 32);
445                         else if (element->type == ACPI_TYPE_INTEGER) {
446                                 strncpy(ptr, (u8 *)&element->integer.value,
447                                         sizeof(u64));
448                                 ptr[sizeof(u64)] = 0;
449                         } else
450                                 *ptr = 0; /* don't have value */
451                 } else {
452                         int *x = (int *)((u8 *)battery + offsets[i].offset);
453                         *x = (element->type == ACPI_TYPE_INTEGER) ?
454                                 element->integer.value : -1;
455                 }
456         }
457         return 0;
458 }
459
460 static int acpi_battery_get_status(struct acpi_battery *battery)
461 {
462         if (acpi_bus_get_status(battery->device)) {
463                 acpi_handle_info(battery->device->handle,
464                                  "_STA evaluation failed\n");
465                 return -ENODEV;
466         }
467         return 0;
468 }
469
470
471 static int extract_battery_info(const int use_bix,
472                          struct acpi_battery *battery,
473                          const struct acpi_buffer *buffer)
474 {
475         int result = -EFAULT;
476
477         if (use_bix && battery_bix_broken_package)
478                 result = extract_package(battery, buffer->pointer,
479                                 extended_info_offsets + 1,
480                                 ARRAY_SIZE(extended_info_offsets) - 1);
481         else if (use_bix)
482                 result = extract_package(battery, buffer->pointer,
483                                 extended_info_offsets,
484                                 ARRAY_SIZE(extended_info_offsets));
485         else
486                 result = extract_package(battery, buffer->pointer,
487                                 info_offsets, ARRAY_SIZE(info_offsets));
488         if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
489                 battery->full_charge_capacity = battery->design_capacity;
490         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
491             battery->power_unit && battery->design_voltage) {
492                 battery->design_capacity = battery->design_capacity *
493                     10000 / battery->design_voltage;
494                 battery->full_charge_capacity = battery->full_charge_capacity *
495                     10000 / battery->design_voltage;
496                 battery->design_capacity_warning =
497                     battery->design_capacity_warning *
498                     10000 / battery->design_voltage;
499                 /* Curiously, design_capacity_low, unlike the rest of them,
500                    is correct.  */
501                 /* capacity_granularity_* equal 1 on the systems tested, so
502                    it's impossible to tell if they would need an adjustment
503                    or not if their values were higher.  */
504         }
505         if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) &&
506             battery->capacity_now > battery->full_charge_capacity)
507                 battery->capacity_now = battery->full_charge_capacity;
508
509         return result;
510 }
511
512 static int acpi_battery_get_info(struct acpi_battery *battery)
513 {
514         const int xinfo = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
515         int use_bix;
516         int result = -ENODEV;
517
518         if (!acpi_battery_present(battery))
519                 return 0;
520
521
522         for (use_bix = xinfo ? 1 : 0; use_bix >= 0; use_bix--) {
523                 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
524                 acpi_status status = AE_ERROR;
525
526                 mutex_lock(&battery->lock);
527                 status = acpi_evaluate_object(battery->device->handle,
528                                               use_bix ? "_BIX":"_BIF",
529                                               NULL, &buffer);
530                 mutex_unlock(&battery->lock);
531
532                 if (ACPI_FAILURE(status)) {
533                         acpi_handle_info(battery->device->handle,
534                                          "%s evaluation failed: %s\n",
535                                          use_bix ?"_BIX":"_BIF",
536                                          acpi_format_exception(status));
537                 } else {
538                         result = extract_battery_info(use_bix,
539                                                       battery,
540                                                       &buffer);
541
542                         kfree(buffer.pointer);
543                         break;
544                 }
545         }
546
547         if (!result && !use_bix && xinfo)
548                 pr_warn(FW_BUG "The _BIX method is broken, using _BIF.\n");
549
550         return result;
551 }
552
553 static int acpi_battery_get_state(struct acpi_battery *battery)
554 {
555         int result = 0;
556         acpi_status status = 0;
557         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
558
559         if (!acpi_battery_present(battery))
560                 return 0;
561
562         if (battery->update_time &&
563             time_before(jiffies, battery->update_time +
564                         msecs_to_jiffies(cache_time)))
565                 return 0;
566
567         mutex_lock(&battery->lock);
568         status = acpi_evaluate_object(battery->device->handle, "_BST",
569                                       NULL, &buffer);
570         mutex_unlock(&battery->lock);
571
572         if (ACPI_FAILURE(status)) {
573                 acpi_handle_info(battery->device->handle,
574                                  "_BST evaluation failed: %s",
575                                  acpi_format_exception(status));
576                 return -ENODEV;
577         }
578
579         result = extract_package(battery, buffer.pointer,
580                                  state_offsets, ARRAY_SIZE(state_offsets));
581         battery->update_time = jiffies;
582         kfree(buffer.pointer);
583
584         /* For buggy DSDTs that report negative 16-bit values for either
585          * charging or discharging current and/or report 0 as 65536
586          * due to bad math.
587          */
588         if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA &&
589                 battery->rate_now != ACPI_BATTERY_VALUE_UNKNOWN &&
590                 (s16)(battery->rate_now) < 0) {
591                 battery->rate_now = abs((s16)battery->rate_now);
592                 pr_warn_once(FW_BUG "(dis)charge rate invalid.\n");
593         }
594
595         if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
596             && battery->capacity_now >= 0 && battery->capacity_now <= 100)
597                 battery->capacity_now = (battery->capacity_now *
598                                 battery->full_charge_capacity) / 100;
599         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
600             battery->power_unit && battery->design_voltage) {
601                 battery->capacity_now = battery->capacity_now *
602                     10000 / battery->design_voltage;
603         }
604         if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags) &&
605             battery->capacity_now > battery->full_charge_capacity)
606                 battery->capacity_now = battery->full_charge_capacity;
607
608         return result;
609 }
610
611 static int acpi_battery_set_alarm(struct acpi_battery *battery)
612 {
613         acpi_status status = 0;
614
615         if (!acpi_battery_present(battery) ||
616             !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags))
617                 return -ENODEV;
618
619         mutex_lock(&battery->lock);
620         status = acpi_execute_simple_method(battery->device->handle, "_BTP",
621                                             battery->alarm);
622         mutex_unlock(&battery->lock);
623
624         if (ACPI_FAILURE(status))
625                 return -ENODEV;
626
627         acpi_handle_debug(battery->device->handle, "Alarm set to %d\n",
628                           battery->alarm);
629
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         bool full_cap_broken = false;
811
812         if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) &&
813             !ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
814                 full_cap_broken = true;
815
816         if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) {
817                 if (full_cap_broken) {
818                         battery->bat_desc.properties =
819                             charge_battery_full_cap_broken_props;
820                         battery->bat_desc.num_properties =
821                             ARRAY_SIZE(charge_battery_full_cap_broken_props);
822                 } else {
823                         battery->bat_desc.properties = charge_battery_props;
824                         battery->bat_desc.num_properties =
825                             ARRAY_SIZE(charge_battery_props);
826                 }
827         } else {
828                 if (full_cap_broken) {
829                         battery->bat_desc.properties =
830                             energy_battery_full_cap_broken_props;
831                         battery->bat_desc.num_properties =
832                             ARRAY_SIZE(energy_battery_full_cap_broken_props);
833                 } else {
834                         battery->bat_desc.properties = energy_battery_props;
835                         battery->bat_desc.num_properties =
836                             ARRAY_SIZE(energy_battery_props);
837                 }
838         }
839
840         battery->bat_desc.name = acpi_device_bid(battery->device);
841         battery->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY;
842         battery->bat_desc.get_property = acpi_battery_get_property;
843
844         battery->bat = power_supply_register_no_ws(&battery->device->dev,
845                                 &battery->bat_desc, &psy_cfg);
846
847         if (IS_ERR(battery->bat)) {
848                 int result = PTR_ERR(battery->bat);
849
850                 battery->bat = NULL;
851                 return result;
852         }
853         battery_hook_add_battery(battery);
854         return device_create_file(&battery->bat->dev, &alarm_attr);
855 }
856
857 static void sysfs_remove_battery(struct acpi_battery *battery)
858 {
859         mutex_lock(&battery->sysfs_lock);
860         if (!battery->bat) {
861                 mutex_unlock(&battery->sysfs_lock);
862                 return;
863         }
864         battery_hook_remove_battery(battery);
865         device_remove_file(&battery->bat->dev, &alarm_attr);
866         power_supply_unregister(battery->bat);
867         battery->bat = NULL;
868         mutex_unlock(&battery->sysfs_lock);
869 }
870
871 static void find_battery(const struct dmi_header *dm, void *private)
872 {
873         struct acpi_battery *battery = (struct acpi_battery *)private;
874         /* Note: the hardcoded offsets below have been extracted from
875            the source code of dmidecode.  */
876         if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) {
877                 const u8 *dmi_data = (const u8 *)(dm + 1);
878                 int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6));
879                 if (dm->length >= 18)
880                         dmi_capacity *= dmi_data[17];
881                 if (battery->design_capacity * battery->design_voltage / 1000
882                     != dmi_capacity &&
883                     battery->design_capacity * 10 == dmi_capacity)
884                         set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
885                                 &battery->flags);
886         }
887 }
888
889 /*
890  * According to the ACPI spec, some kinds of primary batteries can
891  * report percentage battery remaining capacity directly to OS.
892  * In this case, it reports the Last Full Charged Capacity == 100
893  * and BatteryPresentRate == 0xFFFFFFFF.
894  *
895  * Now we found some battery reports percentage remaining capacity
896  * even if it's rechargeable.
897  * https://bugzilla.kernel.org/show_bug.cgi?id=15979
898  *
899  * Handle this correctly so that they won't break userspace.
900  */
901 static void acpi_battery_quirks(struct acpi_battery *battery)
902 {
903         if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
904                 return;
905
906         if (battery->full_charge_capacity == 100 &&
907                 battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN &&
908                 battery->capacity_now >= 0 && battery->capacity_now <= 100) {
909                 set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags);
910                 battery->full_charge_capacity = battery->design_capacity;
911                 battery->capacity_now = (battery->capacity_now *
912                                 battery->full_charge_capacity) / 100;
913         }
914
915         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags))
916                 return;
917
918         if (battery->power_unit && dmi_name_in_vendors("LENOVO")) {
919                 const char *s;
920                 s = dmi_get_system_info(DMI_PRODUCT_VERSION);
921                 if (s && !strncasecmp(s, "ThinkPad", 8)) {
922                         dmi_walk(find_battery, battery);
923                         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
924                                      &battery->flags) &&
925                             battery->design_voltage) {
926                                 battery->design_capacity =
927                                     battery->design_capacity *
928                                     10000 / battery->design_voltage;
929                                 battery->full_charge_capacity =
930                                     battery->full_charge_capacity *
931                                     10000 / battery->design_voltage;
932                                 battery->design_capacity_warning =
933                                     battery->design_capacity_warning *
934                                     10000 / battery->design_voltage;
935                                 battery->capacity_now = battery->capacity_now *
936                                     10000 / battery->design_voltage;
937                         }
938                 }
939         }
940
941         if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags))
942                 return;
943
944         if (acpi_battery_is_degraded(battery) &&
945             battery->capacity_now > battery->full_charge_capacity) {
946                 set_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags);
947                 battery->capacity_now = battery->full_charge_capacity;
948         }
949 }
950
951 static int acpi_battery_update(struct acpi_battery *battery, bool resume)
952 {
953         int result = acpi_battery_get_status(battery);
954
955         if (result)
956                 return result;
957
958         if (!acpi_battery_present(battery)) {
959                 sysfs_remove_battery(battery);
960                 battery->update_time = 0;
961                 return 0;
962         }
963
964         if (resume)
965                 return 0;
966
967         if (!battery->update_time) {
968                 result = acpi_battery_get_info(battery);
969                 if (result)
970                         return result;
971                 acpi_battery_init_alarm(battery);
972         }
973
974         result = acpi_battery_get_state(battery);
975         if (result)
976                 return result;
977         acpi_battery_quirks(battery);
978
979         if (!battery->bat) {
980                 result = sysfs_add_battery(battery);
981                 if (result)
982                         return result;
983         }
984
985         /*
986          * Wakeup the system if battery is critical low
987          * or lower than the alarm level
988          */
989         if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) ||
990             (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
991              (battery->capacity_now <= battery->alarm)))
992                 acpi_pm_wakeup_event(&battery->device->dev);
993
994         return result;
995 }
996
997 static void acpi_battery_refresh(struct acpi_battery *battery)
998 {
999         int power_unit;
1000
1001         if (!battery->bat)
1002                 return;
1003
1004         power_unit = battery->power_unit;
1005
1006         acpi_battery_get_info(battery);
1007
1008         if (power_unit == battery->power_unit)
1009                 return;
1010
1011         /* The battery has changed its reporting units. */
1012         sysfs_remove_battery(battery);
1013         sysfs_add_battery(battery);
1014 }
1015
1016 /* --------------------------------------------------------------------------
1017                                  Driver Interface
1018    -------------------------------------------------------------------------- */
1019
1020 static void acpi_battery_notify(struct acpi_device *device, u32 event)
1021 {
1022         struct acpi_battery *battery = acpi_driver_data(device);
1023         struct power_supply *old;
1024
1025         if (!battery)
1026                 return;
1027         old = battery->bat;
1028         /*
1029         * On Acer Aspire V5-573G notifications are sometimes triggered too
1030         * early. For example, when AC is unplugged and notification is
1031         * triggered, battery state is still reported as "Full", and changes to
1032         * "Discharging" only after short delay, without any notification.
1033         */
1034         if (battery_notification_delay_ms > 0)
1035                 msleep(battery_notification_delay_ms);
1036         if (event == ACPI_BATTERY_NOTIFY_INFO)
1037                 acpi_battery_refresh(battery);
1038         acpi_battery_update(battery, false);
1039         acpi_bus_generate_netlink_event(device->pnp.device_class,
1040                                         dev_name(&device->dev), event,
1041                                         acpi_battery_present(battery));
1042         acpi_notifier_call_chain(device, event, acpi_battery_present(battery));
1043         /* acpi_battery_update could remove power_supply object */
1044         if (old && battery->bat)
1045                 power_supply_changed(battery->bat);
1046 }
1047
1048 static int battery_notify(struct notifier_block *nb,
1049                                unsigned long mode, void *_unused)
1050 {
1051         struct acpi_battery *battery = container_of(nb, struct acpi_battery,
1052                                                     pm_nb);
1053         int result;
1054
1055         switch (mode) {
1056         case PM_POST_HIBERNATION:
1057         case PM_POST_SUSPEND:
1058                 if (!acpi_battery_present(battery))
1059                         return 0;
1060
1061                 if (battery->bat) {
1062                         acpi_battery_refresh(battery);
1063                 } else {
1064                         result = acpi_battery_get_info(battery);
1065                         if (result)
1066                                 return result;
1067
1068                         result = sysfs_add_battery(battery);
1069                         if (result)
1070                                 return result;
1071                 }
1072
1073                 acpi_battery_init_alarm(battery);
1074                 acpi_battery_get_state(battery);
1075                 break;
1076         }
1077
1078         return 0;
1079 }
1080
1081 static int __init
1082 battery_bix_broken_package_quirk(const struct dmi_system_id *d)
1083 {
1084         battery_bix_broken_package = 1;
1085         return 0;
1086 }
1087
1088 static int __init
1089 battery_notification_delay_quirk(const struct dmi_system_id *d)
1090 {
1091         battery_notification_delay_ms = 1000;
1092         return 0;
1093 }
1094
1095 static int __init
1096 battery_ac_is_broken_quirk(const struct dmi_system_id *d)
1097 {
1098         battery_ac_is_broken = 1;
1099         return 0;
1100 }
1101
1102 static int __init
1103 battery_do_not_check_pmic_quirk(const struct dmi_system_id *d)
1104 {
1105         battery_check_pmic = 0;
1106         return 0;
1107 }
1108
1109 static const struct dmi_system_id bat_dmi_table[] __initconst = {
1110         {
1111                 /* NEC LZ750/LS */
1112                 .callback = battery_bix_broken_package_quirk,
1113                 .matches = {
1114                         DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
1115                         DMI_MATCH(DMI_PRODUCT_NAME, "PC-LZ750LS"),
1116                 },
1117         },
1118         {
1119                 /* Acer Aspire V5-573G */
1120                 .callback = battery_notification_delay_quirk,
1121                 .matches = {
1122                         DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1123                         DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
1124                 },
1125         },
1126         {
1127                 /* Point of View mobii wintab p800w */
1128                 .callback = battery_ac_is_broken_quirk,
1129                 .matches = {
1130                         DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
1131                         DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
1132                         DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
1133                         /* Above matches are too generic, add bios-date match */
1134                         DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
1135                 },
1136         },
1137         {
1138                 /* ECS EF20EA, AXP288 PMIC but uses separate fuel-gauge */
1139                 .callback = battery_do_not_check_pmic_quirk,
1140                 .matches = {
1141                         DMI_MATCH(DMI_PRODUCT_NAME, "EF20EA"),
1142                 },
1143         },
1144         {
1145                 /* Lenovo Ideapad Miix 320, AXP288 PMIC, separate fuel-gauge */
1146                 .callback = battery_do_not_check_pmic_quirk,
1147                 .matches = {
1148                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
1149                         DMI_MATCH(DMI_PRODUCT_NAME, "80XF"),
1150                         DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo MIIX 320-10ICR"),
1151                 },
1152         },
1153         {},
1154 };
1155
1156 /*
1157  * Some machines'(E,G Lenovo Z480) ECs are not stable
1158  * during boot up and this causes battery driver fails to be
1159  * probed due to failure of getting battery information
1160  * from EC sometimes. After several retries, the operation
1161  * may work. So add retry code here and 20ms sleep between
1162  * every retries.
1163  */
1164 static int acpi_battery_update_retry(struct acpi_battery *battery)
1165 {
1166         int retry, ret;
1167
1168         for (retry = 5; retry; retry--) {
1169                 ret = acpi_battery_update(battery, false);
1170                 if (!ret)
1171                         break;
1172
1173                 msleep(20);
1174         }
1175         return ret;
1176 }
1177
1178 static int acpi_battery_add(struct acpi_device *device)
1179 {
1180         int result = 0;
1181         struct acpi_battery *battery = NULL;
1182
1183         if (!device)
1184                 return -EINVAL;
1185
1186         if (device->dep_unmet)
1187                 return -EPROBE_DEFER;
1188
1189         battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL);
1190         if (!battery)
1191                 return -ENOMEM;
1192         battery->device = device;
1193         strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
1194         strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
1195         device->driver_data = battery;
1196         mutex_init(&battery->lock);
1197         mutex_init(&battery->sysfs_lock);
1198         if (acpi_has_method(battery->device->handle, "_BIX"))
1199                 set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
1200
1201         result = acpi_battery_update_retry(battery);
1202         if (result)
1203                 goto fail;
1204
1205         pr_info("Slot [%s] (battery %s)\n", acpi_device_bid(device),
1206                 device->status.battery_present ? "present" : "absent");
1207
1208         battery->pm_nb.notifier_call = battery_notify;
1209         register_pm_notifier(&battery->pm_nb);
1210
1211         device_init_wakeup(&device->dev, 1);
1212
1213         return result;
1214
1215 fail:
1216         sysfs_remove_battery(battery);
1217         mutex_destroy(&battery->lock);
1218         mutex_destroy(&battery->sysfs_lock);
1219         kfree(battery);
1220         return result;
1221 }
1222
1223 static int acpi_battery_remove(struct acpi_device *device)
1224 {
1225         struct acpi_battery *battery = NULL;
1226
1227         if (!device || !acpi_driver_data(device))
1228                 return -EINVAL;
1229         device_init_wakeup(&device->dev, 0);
1230         battery = acpi_driver_data(device);
1231         unregister_pm_notifier(&battery->pm_nb);
1232         sysfs_remove_battery(battery);
1233         mutex_destroy(&battery->lock);
1234         mutex_destroy(&battery->sysfs_lock);
1235         kfree(battery);
1236         return 0;
1237 }
1238
1239 #ifdef CONFIG_PM_SLEEP
1240 /* this is needed to learn about changes made in suspended state */
1241 static int acpi_battery_resume(struct device *dev)
1242 {
1243         struct acpi_battery *battery;
1244
1245         if (!dev)
1246                 return -EINVAL;
1247
1248         battery = acpi_driver_data(to_acpi_device(dev));
1249         if (!battery)
1250                 return -EINVAL;
1251
1252         battery->update_time = 0;
1253         acpi_battery_update(battery, true);
1254         return 0;
1255 }
1256 #else
1257 #define acpi_battery_resume NULL
1258 #endif
1259
1260 static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
1261
1262 static struct acpi_driver acpi_battery_driver = {
1263         .name = "battery",
1264         .class = ACPI_BATTERY_CLASS,
1265         .ids = battery_device_ids,
1266         .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
1267         .ops = {
1268                 .add = acpi_battery_add,
1269                 .remove = acpi_battery_remove,
1270                 .notify = acpi_battery_notify,
1271                 },
1272         .drv.pm = &acpi_battery_pm,
1273 };
1274
1275 static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
1276 {
1277         unsigned int i;
1278         int result;
1279
1280         dmi_check_system(bat_dmi_table);
1281
1282         if (battery_check_pmic) {
1283                 for (i = 0; i < ARRAY_SIZE(acpi_battery_blacklist); i++)
1284                         if (acpi_dev_present(acpi_battery_blacklist[i], "1", -1)) {
1285                                 pr_info("found native %s PMIC, not loading\n",
1286                                         acpi_battery_blacklist[i]);
1287                                 return;
1288                         }
1289         }
1290
1291         result = acpi_bus_register_driver(&acpi_battery_driver);
1292         battery_driver_registered = (result == 0);
1293 }
1294
1295 static int __init acpi_battery_init(void)
1296 {
1297         if (acpi_disabled)
1298                 return -ENODEV;
1299
1300         async_cookie = async_schedule(acpi_battery_init_async, NULL);
1301         return 0;
1302 }
1303
1304 static void __exit acpi_battery_exit(void)
1305 {
1306         async_synchronize_cookie(async_cookie + 1);
1307         if (battery_driver_registered) {
1308                 acpi_bus_unregister_driver(&acpi_battery_driver);
1309                 battery_hook_exit();
1310         }
1311 }
1312
1313 module_init(acpi_battery_init);
1314 module_exit(acpi_battery_exit);