can: Use netif_rx().
[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_quirk_notcharging;
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 enum {
68         ACPI_BATTERY_ALARM_PRESENT,
69         ACPI_BATTERY_XINFO_PRESENT,
70         ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
71         /* On Lenovo Thinkpad models from 2010 and 2011, the power unit
72          * switches between mWh and mAh depending on whether the system
73          * is running on battery or not.  When mAh is the unit, most
74          * reported values are incorrect and need to be adjusted by
75          * 10000/design_voltage.  Verified on x201, t410, t410s, and x220.
76          * Pre-2010 and 2012 models appear to always report in mWh and
77          * are thus unaffected (tested with t42, t61, t500, x200, x300,
78          * and x230).  Also, in mid-2012 Lenovo issued a BIOS update for
79          *  the 2011 models that fixes the issue (tested on x220 with a
80          * post-1.29 BIOS), but as of Nov. 2012, no such update is
81          * available for the 2010 models.
82          */
83         ACPI_BATTERY_QUIRK_THINKPAD_MAH,
84         /* for batteries reporting current capacity with design capacity
85          * on a full charge, but showing degradation in full charge cap.
86          */
87         ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE,
88 };
89
90 struct acpi_battery {
91         struct mutex lock;
92         struct mutex sysfs_lock;
93         struct power_supply *bat;
94         struct power_supply_desc bat_desc;
95         struct acpi_device *device;
96         struct notifier_block pm_nb;
97         struct list_head list;
98         unsigned long update_time;
99         int revision;
100         int rate_now;
101         int capacity_now;
102         int voltage_now;
103         int design_capacity;
104         int full_charge_capacity;
105         int technology;
106         int design_voltage;
107         int design_capacity_warning;
108         int design_capacity_low;
109         int cycle_count;
110         int measurement_accuracy;
111         int max_sampling_time;
112         int min_sampling_time;
113         int max_averaging_interval;
114         int min_averaging_interval;
115         int capacity_granularity_1;
116         int capacity_granularity_2;
117         int alarm;
118         char model_number[32];
119         char serial_number[32];
120         char type[32];
121         char oem_info[32];
122         int state;
123         int power_unit;
124         unsigned long flags;
125 };
126
127 #define to_acpi_battery(x) power_supply_get_drvdata(x)
128
129 static inline int acpi_battery_present(struct acpi_battery *battery)
130 {
131         return battery->device->status.battery_present;
132 }
133
134 static int acpi_battery_technology(struct acpi_battery *battery)
135 {
136         if (!strcasecmp("NiCd", battery->type))
137                 return POWER_SUPPLY_TECHNOLOGY_NiCd;
138         if (!strcasecmp("NiMH", battery->type))
139                 return POWER_SUPPLY_TECHNOLOGY_NiMH;
140         if (!strcasecmp("LION", battery->type))
141                 return POWER_SUPPLY_TECHNOLOGY_LION;
142         if (!strncasecmp("LI-ION", battery->type, 6))
143                 return POWER_SUPPLY_TECHNOLOGY_LION;
144         if (!strcasecmp("LiP", battery->type))
145                 return POWER_SUPPLY_TECHNOLOGY_LIPO;
146         return POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
147 }
148
149 static int acpi_battery_get_state(struct acpi_battery *battery);
150
151 static int acpi_battery_is_charged(struct acpi_battery *battery)
152 {
153         /* charging, discharging or critical low */
154         if (battery->state != 0)
155                 return 0;
156
157         /* battery not reporting charge */
158         if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN ||
159             battery->capacity_now == 0)
160                 return 0;
161
162         /* good batteries update full_charge as the batteries degrade */
163         if (battery->full_charge_capacity == battery->capacity_now)
164                 return 1;
165
166         /* fallback to using design values for broken batteries */
167         if (battery->design_capacity <= battery->capacity_now)
168                 return 1;
169
170         /* we don't do any sort of metric based on percentages */
171         return 0;
172 }
173
174 static bool acpi_battery_is_degraded(struct acpi_battery *battery)
175 {
176         return ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) &&
177                 ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity) &&
178                 battery->full_charge_capacity < battery->design_capacity;
179 }
180
181 static int acpi_battery_handle_discharging(struct acpi_battery *battery)
182 {
183         /*
184          * Some devices wrongly report discharging if the battery's charge level
185          * was above the device's start charging threshold atm the AC adapter
186          * was plugged in and the device thus did not start a new charge cycle.
187          */
188         if ((battery_ac_is_broken || power_supply_is_system_supplied()) &&
189             battery->rate_now == 0)
190                 return POWER_SUPPLY_STATUS_NOT_CHARGING;
191
192         return POWER_SUPPLY_STATUS_DISCHARGING;
193 }
194
195 static int acpi_battery_get_property(struct power_supply *psy,
196                                      enum power_supply_property psp,
197                                      union power_supply_propval *val)
198 {
199         int full_capacity = ACPI_BATTERY_VALUE_UNKNOWN, ret = 0;
200         struct acpi_battery *battery = to_acpi_battery(psy);
201
202         if (acpi_battery_present(battery)) {
203                 /* run battery update only if it is present */
204                 acpi_battery_get_state(battery);
205         } else if (psp != POWER_SUPPLY_PROP_PRESENT)
206                 return -ENODEV;
207         switch (psp) {
208         case POWER_SUPPLY_PROP_STATUS:
209                 if (battery->state & ACPI_BATTERY_STATE_DISCHARGING)
210                         val->intval = acpi_battery_handle_discharging(battery);
211                 else if (battery->state & ACPI_BATTERY_STATE_CHARGING)
212                         val->intval = POWER_SUPPLY_STATUS_CHARGING;
213                 else if (acpi_battery_is_charged(battery))
214                         val->intval = POWER_SUPPLY_STATUS_FULL;
215                 else if (battery_quirk_notcharging)
216                         val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
217                 else
218                         val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
219                 break;
220         case POWER_SUPPLY_PROP_PRESENT:
221                 val->intval = acpi_battery_present(battery);
222                 break;
223         case POWER_SUPPLY_PROP_TECHNOLOGY:
224                 val->intval = acpi_battery_technology(battery);
225                 break;
226         case POWER_SUPPLY_PROP_CYCLE_COUNT:
227                 val->intval = battery->cycle_count;
228                 break;
229         case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
230                 if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN)
231                         ret = -ENODEV;
232                 else
233                         val->intval = battery->design_voltage * 1000;
234                 break;
235         case POWER_SUPPLY_PROP_VOLTAGE_NOW:
236                 if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN)
237                         ret = -ENODEV;
238                 else
239                         val->intval = battery->voltage_now * 1000;
240                 break;
241         case POWER_SUPPLY_PROP_CURRENT_NOW:
242         case POWER_SUPPLY_PROP_POWER_NOW:
243                 if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN)
244                         ret = -ENODEV;
245                 else
246                         val->intval = battery->rate_now * 1000;
247                 break;
248         case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
249         case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
250                 if (!ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
251                         ret = -ENODEV;
252                 else
253                         val->intval = battery->design_capacity * 1000;
254                 break;
255         case POWER_SUPPLY_PROP_CHARGE_FULL:
256         case POWER_SUPPLY_PROP_ENERGY_FULL:
257                 if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity))
258                         ret = -ENODEV;
259                 else
260                         val->intval = battery->full_charge_capacity * 1000;
261                 break;
262         case POWER_SUPPLY_PROP_CHARGE_NOW:
263         case POWER_SUPPLY_PROP_ENERGY_NOW:
264                 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN)
265                         ret = -ENODEV;
266                 else
267                         val->intval = battery->capacity_now * 1000;
268                 break;
269         case POWER_SUPPLY_PROP_CAPACITY:
270                 if (ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity))
271                         full_capacity = battery->full_charge_capacity;
272                 else if (ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
273                         full_capacity = battery->design_capacity;
274
275                 if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN ||
276                     full_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
277                         ret = -ENODEV;
278                 else
279                         val->intval = battery->capacity_now * 100/
280                                         full_capacity;
281                 break;
282         case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
283                 if (battery->state & ACPI_BATTERY_STATE_CRITICAL)
284                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
285                 else if (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
286                         (battery->capacity_now <= battery->alarm))
287                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
288                 else if (acpi_battery_is_charged(battery))
289                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
290                 else
291                         val->intval = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
292                 break;
293         case POWER_SUPPLY_PROP_MODEL_NAME:
294                 val->strval = battery->model_number;
295                 break;
296         case POWER_SUPPLY_PROP_MANUFACTURER:
297                 val->strval = battery->oem_info;
298                 break;
299         case POWER_SUPPLY_PROP_SERIAL_NUMBER:
300                 val->strval = battery->serial_number;
301                 break;
302         default:
303                 ret = -EINVAL;
304         }
305         return ret;
306 }
307
308 static enum power_supply_property charge_battery_props[] = {
309         POWER_SUPPLY_PROP_STATUS,
310         POWER_SUPPLY_PROP_PRESENT,
311         POWER_SUPPLY_PROP_TECHNOLOGY,
312         POWER_SUPPLY_PROP_CYCLE_COUNT,
313         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
314         POWER_SUPPLY_PROP_VOLTAGE_NOW,
315         POWER_SUPPLY_PROP_CURRENT_NOW,
316         POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
317         POWER_SUPPLY_PROP_CHARGE_FULL,
318         POWER_SUPPLY_PROP_CHARGE_NOW,
319         POWER_SUPPLY_PROP_CAPACITY,
320         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
321         POWER_SUPPLY_PROP_MODEL_NAME,
322         POWER_SUPPLY_PROP_MANUFACTURER,
323         POWER_SUPPLY_PROP_SERIAL_NUMBER,
324 };
325
326 static enum power_supply_property charge_battery_full_cap_broken_props[] = {
327         POWER_SUPPLY_PROP_STATUS,
328         POWER_SUPPLY_PROP_PRESENT,
329         POWER_SUPPLY_PROP_TECHNOLOGY,
330         POWER_SUPPLY_PROP_CYCLE_COUNT,
331         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
332         POWER_SUPPLY_PROP_VOLTAGE_NOW,
333         POWER_SUPPLY_PROP_CURRENT_NOW,
334         POWER_SUPPLY_PROP_CHARGE_NOW,
335         POWER_SUPPLY_PROP_MODEL_NAME,
336         POWER_SUPPLY_PROP_MANUFACTURER,
337         POWER_SUPPLY_PROP_SERIAL_NUMBER,
338 };
339
340 static enum power_supply_property energy_battery_props[] = {
341         POWER_SUPPLY_PROP_STATUS,
342         POWER_SUPPLY_PROP_PRESENT,
343         POWER_SUPPLY_PROP_TECHNOLOGY,
344         POWER_SUPPLY_PROP_CYCLE_COUNT,
345         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
346         POWER_SUPPLY_PROP_VOLTAGE_NOW,
347         POWER_SUPPLY_PROP_POWER_NOW,
348         POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
349         POWER_SUPPLY_PROP_ENERGY_FULL,
350         POWER_SUPPLY_PROP_ENERGY_NOW,
351         POWER_SUPPLY_PROP_CAPACITY,
352         POWER_SUPPLY_PROP_CAPACITY_LEVEL,
353         POWER_SUPPLY_PROP_MODEL_NAME,
354         POWER_SUPPLY_PROP_MANUFACTURER,
355         POWER_SUPPLY_PROP_SERIAL_NUMBER,
356 };
357
358 static enum power_supply_property energy_battery_full_cap_broken_props[] = {
359         POWER_SUPPLY_PROP_STATUS,
360         POWER_SUPPLY_PROP_PRESENT,
361         POWER_SUPPLY_PROP_TECHNOLOGY,
362         POWER_SUPPLY_PROP_CYCLE_COUNT,
363         POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
364         POWER_SUPPLY_PROP_VOLTAGE_NOW,
365         POWER_SUPPLY_PROP_POWER_NOW,
366         POWER_SUPPLY_PROP_ENERGY_NOW,
367         POWER_SUPPLY_PROP_MODEL_NAME,
368         POWER_SUPPLY_PROP_MANUFACTURER,
369         POWER_SUPPLY_PROP_SERIAL_NUMBER,
370 };
371
372 /* Battery Management */
373 struct acpi_offsets {
374         size_t offset;          /* offset inside struct acpi_sbs_battery */
375         u8 mode;                /* int or string? */
376 };
377
378 static const struct acpi_offsets state_offsets[] = {
379         {offsetof(struct acpi_battery, state), 0},
380         {offsetof(struct acpi_battery, rate_now), 0},
381         {offsetof(struct acpi_battery, capacity_now), 0},
382         {offsetof(struct acpi_battery, voltage_now), 0},
383 };
384
385 static const struct acpi_offsets info_offsets[] = {
386         {offsetof(struct acpi_battery, power_unit), 0},
387         {offsetof(struct acpi_battery, design_capacity), 0},
388         {offsetof(struct acpi_battery, full_charge_capacity), 0},
389         {offsetof(struct acpi_battery, technology), 0},
390         {offsetof(struct acpi_battery, design_voltage), 0},
391         {offsetof(struct acpi_battery, design_capacity_warning), 0},
392         {offsetof(struct acpi_battery, design_capacity_low), 0},
393         {offsetof(struct acpi_battery, capacity_granularity_1), 0},
394         {offsetof(struct acpi_battery, capacity_granularity_2), 0},
395         {offsetof(struct acpi_battery, model_number), 1},
396         {offsetof(struct acpi_battery, serial_number), 1},
397         {offsetof(struct acpi_battery, type), 1},
398         {offsetof(struct acpi_battery, oem_info), 1},
399 };
400
401 static const struct acpi_offsets extended_info_offsets[] = {
402         {offsetof(struct acpi_battery, revision), 0},
403         {offsetof(struct acpi_battery, power_unit), 0},
404         {offsetof(struct acpi_battery, design_capacity), 0},
405         {offsetof(struct acpi_battery, full_charge_capacity), 0},
406         {offsetof(struct acpi_battery, technology), 0},
407         {offsetof(struct acpi_battery, design_voltage), 0},
408         {offsetof(struct acpi_battery, design_capacity_warning), 0},
409         {offsetof(struct acpi_battery, design_capacity_low), 0},
410         {offsetof(struct acpi_battery, cycle_count), 0},
411         {offsetof(struct acpi_battery, measurement_accuracy), 0},
412         {offsetof(struct acpi_battery, max_sampling_time), 0},
413         {offsetof(struct acpi_battery, min_sampling_time), 0},
414         {offsetof(struct acpi_battery, max_averaging_interval), 0},
415         {offsetof(struct acpi_battery, min_averaging_interval), 0},
416         {offsetof(struct acpi_battery, capacity_granularity_1), 0},
417         {offsetof(struct acpi_battery, capacity_granularity_2), 0},
418         {offsetof(struct acpi_battery, model_number), 1},
419         {offsetof(struct acpi_battery, serial_number), 1},
420         {offsetof(struct acpi_battery, type), 1},
421         {offsetof(struct acpi_battery, oem_info), 1},
422 };
423
424 static int extract_package(struct acpi_battery *battery,
425                            union acpi_object *package,
426                            const struct acpi_offsets *offsets, int num)
427 {
428         int i;
429         union acpi_object *element;
430
431         if (package->type != ACPI_TYPE_PACKAGE)
432                 return -EFAULT;
433         for (i = 0; i < num; ++i) {
434                 if (package->package.count <= i)
435                         return -EFAULT;
436                 element = &package->package.elements[i];
437                 if (offsets[i].mode) {
438                         u8 *ptr = (u8 *)battery + offsets[i].offset;
439
440                         if (element->type == ACPI_TYPE_STRING ||
441                             element->type == ACPI_TYPE_BUFFER)
442                                 strncpy(ptr, element->string.pointer, 32);
443                         else if (element->type == ACPI_TYPE_INTEGER) {
444                                 strncpy(ptr, (u8 *)&element->integer.value,
445                                         sizeof(u64));
446                                 ptr[sizeof(u64)] = 0;
447                         } else
448                                 *ptr = 0; /* don't have value */
449                 } else {
450                         int *x = (int *)((u8 *)battery + offsets[i].offset);
451                         *x = (element->type == ACPI_TYPE_INTEGER) ?
452                                 element->integer.value : -1;
453                 }
454         }
455         return 0;
456 }
457
458 static int acpi_battery_get_status(struct acpi_battery *battery)
459 {
460         if (acpi_bus_get_status(battery->device)) {
461                 acpi_handle_info(battery->device->handle,
462                                  "_STA evaluation failed\n");
463                 return -ENODEV;
464         }
465         return 0;
466 }
467
468
469 static int extract_battery_info(const int use_bix,
470                          struct acpi_battery *battery,
471                          const struct acpi_buffer *buffer)
472 {
473         int result = -EFAULT;
474
475         if (use_bix && battery_bix_broken_package)
476                 result = extract_package(battery, buffer->pointer,
477                                 extended_info_offsets + 1,
478                                 ARRAY_SIZE(extended_info_offsets) - 1);
479         else if (use_bix)
480                 result = extract_package(battery, buffer->pointer,
481                                 extended_info_offsets,
482                                 ARRAY_SIZE(extended_info_offsets));
483         else
484                 result = extract_package(battery, buffer->pointer,
485                                 info_offsets, ARRAY_SIZE(info_offsets));
486         if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
487                 battery->full_charge_capacity = battery->design_capacity;
488         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
489             battery->power_unit && battery->design_voltage) {
490                 battery->design_capacity = battery->design_capacity *
491                     10000 / battery->design_voltage;
492                 battery->full_charge_capacity = battery->full_charge_capacity *
493                     10000 / battery->design_voltage;
494                 battery->design_capacity_warning =
495                     battery->design_capacity_warning *
496                     10000 / battery->design_voltage;
497                 /* Curiously, design_capacity_low, unlike the rest of them,
498                  *  is correct.
499                  */
500                 /* capacity_granularity_* equal 1 on the systems tested, so
501                  * it's impossible to tell if they would need an adjustment
502                  * or not if their values were higher.
503                  */
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
652         return sprintf(buf, "%d\n", battery->alarm * 1000);
653 }
654
655 static ssize_t acpi_battery_alarm_store(struct device *dev,
656                                         struct device_attribute *attr,
657                                         const char *buf, size_t count)
658 {
659         unsigned long x;
660         struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
661
662         if (sscanf(buf, "%lu\n", &x) == 1)
663                 battery->alarm = x/1000;
664         if (acpi_battery_present(battery))
665                 acpi_battery_set_alarm(battery);
666         return count;
667 }
668
669 static const struct device_attribute alarm_attr = {
670         .attr = {.name = "alarm", .mode = 0644},
671         .show = acpi_battery_alarm_show,
672         .store = acpi_battery_alarm_store,
673 };
674
675 /*
676  * The Battery Hooking API
677  *
678  * This API is used inside other drivers that need to expose
679  * platform-specific behaviour within the generic driver in a
680  * generic way.
681  *
682  */
683
684 static LIST_HEAD(acpi_battery_list);
685 static LIST_HEAD(battery_hook_list);
686 static DEFINE_MUTEX(hook_mutex);
687
688 static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock)
689 {
690         struct acpi_battery *battery;
691         /*
692          * In order to remove a hook, we first need to
693          * de-register all the batteries that are registered.
694          */
695         if (lock)
696                 mutex_lock(&hook_mutex);
697         list_for_each_entry(battery, &acpi_battery_list, list) {
698                 hook->remove_battery(battery->bat);
699         }
700         list_del(&hook->list);
701         if (lock)
702                 mutex_unlock(&hook_mutex);
703         pr_info("extension unregistered: %s\n", hook->name);
704 }
705
706 void battery_hook_unregister(struct acpi_battery_hook *hook)
707 {
708         __battery_hook_unregister(hook, 1);
709 }
710 EXPORT_SYMBOL_GPL(battery_hook_unregister);
711
712 void battery_hook_register(struct acpi_battery_hook *hook)
713 {
714         struct acpi_battery *battery;
715
716         mutex_lock(&hook_mutex);
717         INIT_LIST_HEAD(&hook->list);
718         list_add(&hook->list, &battery_hook_list);
719         /*
720          * Now that the driver is registered, we need
721          * to notify the hook that a battery is available
722          * for each battery, so that the driver may add
723          * its attributes.
724          */
725         list_for_each_entry(battery, &acpi_battery_list, list) {
726                 if (hook->add_battery(battery->bat)) {
727                         /*
728                          * If a add-battery returns non-zero,
729                          * the registration of the extension has failed,
730                          * and we will not add it to the list of loaded
731                          * hooks.
732                          */
733                         pr_err("extension failed to load: %s", hook->name);
734                         __battery_hook_unregister(hook, 0);
735                         goto end;
736                 }
737         }
738         pr_info("new extension: %s\n", hook->name);
739 end:
740         mutex_unlock(&hook_mutex);
741 }
742 EXPORT_SYMBOL_GPL(battery_hook_register);
743
744 /*
745  * This function gets called right after the battery sysfs
746  * attributes have been added, so that the drivers that
747  * define custom sysfs attributes can add their own.
748  */
749 static void battery_hook_add_battery(struct acpi_battery *battery)
750 {
751         struct acpi_battery_hook *hook_node, *tmp;
752
753         mutex_lock(&hook_mutex);
754         INIT_LIST_HEAD(&battery->list);
755         list_add(&battery->list, &acpi_battery_list);
756         /*
757          * Since we added a new battery to the list, we need to
758          * iterate over the hooks and call add_battery for each
759          * hook that was registered. This usually happens
760          * when a battery gets hotplugged or initialized
761          * during the battery module initialization.
762          */
763         list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) {
764                 if (hook_node->add_battery(battery->bat)) {
765                         /*
766                          * The notification of the extensions has failed, to
767                          * prevent further errors we will unload the extension.
768                          */
769                         pr_err("error in extension, unloading: %s",
770                                         hook_node->name);
771                         __battery_hook_unregister(hook_node, 0);
772                 }
773         }
774         mutex_unlock(&hook_mutex);
775 }
776
777 static void battery_hook_remove_battery(struct acpi_battery *battery)
778 {
779         struct acpi_battery_hook *hook;
780
781         mutex_lock(&hook_mutex);
782         /*
783          * Before removing the hook, we need to remove all
784          * custom attributes from the battery.
785          */
786         list_for_each_entry(hook, &battery_hook_list, list) {
787                 hook->remove_battery(battery->bat);
788         }
789         /* Then, just remove the battery from the list */
790         list_del(&battery->list);
791         mutex_unlock(&hook_mutex);
792 }
793
794 static void __exit battery_hook_exit(void)
795 {
796         struct acpi_battery_hook *hook;
797         struct acpi_battery_hook *ptr;
798         /*
799          * At this point, the acpi_bus_unregister_driver()
800          * has called remove for all batteries. We just
801          * need to remove the hooks.
802          */
803         list_for_each_entry_safe(hook, ptr, &battery_hook_list, list) {
804                 __battery_hook_unregister(hook, 1);
805         }
806         mutex_destroy(&hook_mutex);
807 }
808
809 static int sysfs_add_battery(struct acpi_battery *battery)
810 {
811         struct power_supply_config psy_cfg = { .drv_data = battery, };
812         bool full_cap_broken = false;
813
814         if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) &&
815             !ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
816                 full_cap_broken = true;
817
818         if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) {
819                 if (full_cap_broken) {
820                         battery->bat_desc.properties =
821                             charge_battery_full_cap_broken_props;
822                         battery->bat_desc.num_properties =
823                             ARRAY_SIZE(charge_battery_full_cap_broken_props);
824                 } else {
825                         battery->bat_desc.properties = charge_battery_props;
826                         battery->bat_desc.num_properties =
827                             ARRAY_SIZE(charge_battery_props);
828                 }
829         } else {
830                 if (full_cap_broken) {
831                         battery->bat_desc.properties =
832                             energy_battery_full_cap_broken_props;
833                         battery->bat_desc.num_properties =
834                             ARRAY_SIZE(energy_battery_full_cap_broken_props);
835                 } else {
836                         battery->bat_desc.properties = energy_battery_props;
837                         battery->bat_desc.num_properties =
838                             ARRAY_SIZE(energy_battery_props);
839                 }
840         }
841
842         battery->bat_desc.name = acpi_device_bid(battery->device);
843         battery->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY;
844         battery->bat_desc.get_property = acpi_battery_get_property;
845
846         battery->bat = power_supply_register_no_ws(&battery->device->dev,
847                                 &battery->bat_desc, &psy_cfg);
848
849         if (IS_ERR(battery->bat)) {
850                 int result = PTR_ERR(battery->bat);
851
852                 battery->bat = NULL;
853                 return result;
854         }
855         battery_hook_add_battery(battery);
856         return device_create_file(&battery->bat->dev, &alarm_attr);
857 }
858
859 static void sysfs_remove_battery(struct acpi_battery *battery)
860 {
861         mutex_lock(&battery->sysfs_lock);
862         if (!battery->bat) {
863                 mutex_unlock(&battery->sysfs_lock);
864                 return;
865         }
866         battery_hook_remove_battery(battery);
867         device_remove_file(&battery->bat->dev, &alarm_attr);
868         power_supply_unregister(battery->bat);
869         battery->bat = NULL;
870         mutex_unlock(&battery->sysfs_lock);
871 }
872
873 static void find_battery(const struct dmi_header *dm, void *private)
874 {
875         struct acpi_battery *battery = (struct acpi_battery *)private;
876         /* Note: the hardcoded offsets below have been extracted from
877          * the source code of dmidecode.
878          */
879         if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) {
880                 const u8 *dmi_data = (const u8 *)(dm + 1);
881                 int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6));
882
883                 if (dm->length >= 18)
884                         dmi_capacity *= dmi_data[17];
885                 if (battery->design_capacity * battery->design_voltage / 1000
886                     != dmi_capacity &&
887                     battery->design_capacity * 10 == dmi_capacity)
888                         set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
889                                 &battery->flags);
890         }
891 }
892
893 /*
894  * According to the ACPI spec, some kinds of primary batteries can
895  * report percentage battery remaining capacity directly to OS.
896  * In this case, it reports the Last Full Charged Capacity == 100
897  * and BatteryPresentRate == 0xFFFFFFFF.
898  *
899  * Now we found some battery reports percentage remaining capacity
900  * even if it's rechargeable.
901  * https://bugzilla.kernel.org/show_bug.cgi?id=15979
902  *
903  * Handle this correctly so that they won't break userspace.
904  */
905 static void acpi_battery_quirks(struct acpi_battery *battery)
906 {
907         if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
908                 return;
909
910         if (battery->full_charge_capacity == 100 &&
911                 battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN &&
912                 battery->capacity_now >= 0 && battery->capacity_now <= 100) {
913                 set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags);
914                 battery->full_charge_capacity = battery->design_capacity;
915                 battery->capacity_now = (battery->capacity_now *
916                                 battery->full_charge_capacity) / 100;
917         }
918
919         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags))
920                 return;
921
922         if (battery->power_unit && dmi_name_in_vendors("LENOVO")) {
923                 const char *s;
924
925                 s = dmi_get_system_info(DMI_PRODUCT_VERSION);
926                 if (s && !strncasecmp(s, "ThinkPad", 8)) {
927                         dmi_walk(find_battery, battery);
928                         if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
929                                      &battery->flags) &&
930                             battery->design_voltage) {
931                                 battery->design_capacity =
932                                     battery->design_capacity *
933                                     10000 / battery->design_voltage;
934                                 battery->full_charge_capacity =
935                                     battery->full_charge_capacity *
936                                     10000 / battery->design_voltage;
937                                 battery->design_capacity_warning =
938                                     battery->design_capacity_warning *
939                                     10000 / battery->design_voltage;
940                                 battery->capacity_now = battery->capacity_now *
941                                     10000 / battery->design_voltage;
942                         }
943                 }
944         }
945
946         if (test_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags))
947                 return;
948
949         if (acpi_battery_is_degraded(battery) &&
950             battery->capacity_now > battery->full_charge_capacity) {
951                 set_bit(ACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE, &battery->flags);
952                 battery->capacity_now = battery->full_charge_capacity;
953         }
954 }
955
956 static int acpi_battery_update(struct acpi_battery *battery, bool resume)
957 {
958         int result = acpi_battery_get_status(battery);
959
960         if (result)
961                 return result;
962
963         if (!acpi_battery_present(battery)) {
964                 sysfs_remove_battery(battery);
965                 battery->update_time = 0;
966                 return 0;
967         }
968
969         if (resume)
970                 return 0;
971
972         if (!battery->update_time) {
973                 result = acpi_battery_get_info(battery);
974                 if (result)
975                         return result;
976                 acpi_battery_init_alarm(battery);
977         }
978
979         result = acpi_battery_get_state(battery);
980         if (result)
981                 return result;
982         acpi_battery_quirks(battery);
983
984         if (!battery->bat) {
985                 result = sysfs_add_battery(battery);
986                 if (result)
987                         return result;
988         }
989
990         /*
991          * Wakeup the system if battery is critical low
992          * or lower than the alarm level
993          */
994         if ((battery->state & ACPI_BATTERY_STATE_CRITICAL) ||
995             (test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags) &&
996              (battery->capacity_now <= battery->alarm)))
997                 acpi_pm_wakeup_event(&battery->device->dev);
998
999         return result;
1000 }
1001
1002 static void acpi_battery_refresh(struct acpi_battery *battery)
1003 {
1004         int power_unit;
1005
1006         if (!battery->bat)
1007                 return;
1008
1009         power_unit = battery->power_unit;
1010
1011         acpi_battery_get_info(battery);
1012
1013         if (power_unit == battery->power_unit)
1014                 return;
1015
1016         /* The battery has changed its reporting units. */
1017         sysfs_remove_battery(battery);
1018         sysfs_add_battery(battery);
1019 }
1020
1021 /* Driver Interface */
1022 static void acpi_battery_notify(struct acpi_device *device, u32 event)
1023 {
1024         struct acpi_battery *battery = acpi_driver_data(device);
1025         struct power_supply *old;
1026
1027         if (!battery)
1028                 return;
1029         old = battery->bat;
1030         /*
1031          * On Acer Aspire V5-573G notifications are sometimes triggered too
1032          * early. For example, when AC is unplugged and notification is
1033          * triggered, battery state is still reported as "Full", and changes to
1034          * "Discharging" only after short delay, without any notification.
1035          */
1036         if (battery_notification_delay_ms > 0)
1037                 msleep(battery_notification_delay_ms);
1038         if (event == ACPI_BATTERY_NOTIFY_INFO)
1039                 acpi_battery_refresh(battery);
1040         acpi_battery_update(battery, false);
1041         acpi_bus_generate_netlink_event(device->pnp.device_class,
1042                                         dev_name(&device->dev), event,
1043                                         acpi_battery_present(battery));
1044         acpi_notifier_call_chain(device, event, acpi_battery_present(battery));
1045         /* acpi_battery_update could remove power_supply object */
1046         if (old && battery->bat)
1047                 power_supply_changed(battery->bat);
1048 }
1049
1050 static int battery_notify(struct notifier_block *nb,
1051                                unsigned long mode, void *_unused)
1052 {
1053         struct acpi_battery *battery = container_of(nb, struct acpi_battery,
1054                                                     pm_nb);
1055         int result;
1056
1057         switch (mode) {
1058         case PM_POST_HIBERNATION:
1059         case PM_POST_SUSPEND:
1060                 if (!acpi_battery_present(battery))
1061                         return 0;
1062
1063                 if (battery->bat) {
1064                         acpi_battery_refresh(battery);
1065                 } else {
1066                         result = acpi_battery_get_info(battery);
1067                         if (result)
1068                                 return result;
1069
1070                         result = sysfs_add_battery(battery);
1071                         if (result)
1072                                 return result;
1073                 }
1074
1075                 acpi_battery_init_alarm(battery);
1076                 acpi_battery_get_state(battery);
1077                 break;
1078         }
1079
1080         return 0;
1081 }
1082
1083 static int __init
1084 battery_bix_broken_package_quirk(const struct dmi_system_id *d)
1085 {
1086         battery_bix_broken_package = 1;
1087         return 0;
1088 }
1089
1090 static int __init
1091 battery_notification_delay_quirk(const struct dmi_system_id *d)
1092 {
1093         battery_notification_delay_ms = 1000;
1094         return 0;
1095 }
1096
1097 static int __init
1098 battery_ac_is_broken_quirk(const struct dmi_system_id *d)
1099 {
1100         battery_ac_is_broken = 1;
1101         return 0;
1102 }
1103
1104 static int __init battery_quirk_not_charging(const struct dmi_system_id *d)
1105 {
1106         battery_quirk_notcharging = 1;
1107         return 0;
1108 }
1109
1110 static const struct dmi_system_id bat_dmi_table[] __initconst = {
1111         {
1112                 /* NEC LZ750/LS */
1113                 .callback = battery_bix_broken_package_quirk,
1114                 .matches = {
1115                         DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
1116                         DMI_MATCH(DMI_PRODUCT_NAME, "PC-LZ750LS"),
1117                 },
1118         },
1119         {
1120                 /* Acer Aspire V5-573G */
1121                 .callback = battery_notification_delay_quirk,
1122                 .matches = {
1123                         DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1124                         DMI_MATCH(DMI_PRODUCT_NAME, "Aspire V5-573G"),
1125                 },
1126         },
1127         {
1128                 /* Point of View mobii wintab p800w */
1129                 .callback = battery_ac_is_broken_quirk,
1130                 .matches = {
1131                         DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
1132                         DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"),
1133                         DMI_MATCH(DMI_BIOS_VERSION, "3BAIR1013"),
1134                         /* Above matches are too generic, add bios-date match */
1135                         DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
1136                 },
1137         },
1138         {
1139                 /*
1140                  * On Lenovo ThinkPads the BIOS specification defines
1141                  * a state when the bits for charging and discharging
1142                  * are both set to 0. That state is "Not Charging".
1143                  */
1144                 .callback = battery_quirk_not_charging,
1145                 .ident = "Lenovo ThinkPad",
1146                 .matches = {
1147                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
1148                         DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad"),
1149                 },
1150         },
1151         {},
1152 };
1153
1154 /*
1155  * Some machines'(E,G Lenovo Z480) ECs are not stable
1156  * during boot up and this causes battery driver fails to be
1157  * probed due to failure of getting battery information
1158  * from EC sometimes. After several retries, the operation
1159  * may work. So add retry code here and 20ms sleep between
1160  * every retries.
1161  */
1162 static int acpi_battery_update_retry(struct acpi_battery *battery)
1163 {
1164         int retry, ret;
1165
1166         for (retry = 5; retry; retry--) {
1167                 ret = acpi_battery_update(battery, false);
1168                 if (!ret)
1169                         break;
1170
1171                 msleep(20);
1172         }
1173         return ret;
1174 }
1175
1176 static int acpi_battery_add(struct acpi_device *device)
1177 {
1178         int result = 0;
1179         struct acpi_battery *battery = NULL;
1180
1181         if (!device)
1182                 return -EINVAL;
1183
1184         if (device->dep_unmet)
1185                 return -EPROBE_DEFER;
1186
1187         battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL);
1188         if (!battery)
1189                 return -ENOMEM;
1190         battery->device = device;
1191         strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
1192         strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
1193         device->driver_data = battery;
1194         mutex_init(&battery->lock);
1195         mutex_init(&battery->sysfs_lock);
1196         if (acpi_has_method(battery->device->handle, "_BIX"))
1197                 set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
1198
1199         result = acpi_battery_update_retry(battery);
1200         if (result)
1201                 goto fail;
1202
1203         pr_info("Slot [%s] (battery %s)\n", acpi_device_bid(device),
1204                 device->status.battery_present ? "present" : "absent");
1205
1206         battery->pm_nb.notifier_call = battery_notify;
1207         register_pm_notifier(&battery->pm_nb);
1208
1209         device_init_wakeup(&device->dev, 1);
1210
1211         return result;
1212
1213 fail:
1214         sysfs_remove_battery(battery);
1215         mutex_destroy(&battery->lock);
1216         mutex_destroy(&battery->sysfs_lock);
1217         kfree(battery);
1218         return result;
1219 }
1220
1221 static int acpi_battery_remove(struct acpi_device *device)
1222 {
1223         struct acpi_battery *battery = NULL;
1224
1225         if (!device || !acpi_driver_data(device))
1226                 return -EINVAL;
1227         device_init_wakeup(&device->dev, 0);
1228         battery = acpi_driver_data(device);
1229         unregister_pm_notifier(&battery->pm_nb);
1230         sysfs_remove_battery(battery);
1231         mutex_destroy(&battery->lock);
1232         mutex_destroy(&battery->sysfs_lock);
1233         kfree(battery);
1234         return 0;
1235 }
1236
1237 #ifdef CONFIG_PM_SLEEP
1238 /* this is needed to learn about changes made in suspended state */
1239 static int acpi_battery_resume(struct device *dev)
1240 {
1241         struct acpi_battery *battery;
1242
1243         if (!dev)
1244                 return -EINVAL;
1245
1246         battery = acpi_driver_data(to_acpi_device(dev));
1247         if (!battery)
1248                 return -EINVAL;
1249
1250         battery->update_time = 0;
1251         acpi_battery_update(battery, true);
1252         return 0;
1253 }
1254 #else
1255 #define acpi_battery_resume NULL
1256 #endif
1257
1258 static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
1259
1260 static struct acpi_driver acpi_battery_driver = {
1261         .name = "battery",
1262         .class = ACPI_BATTERY_CLASS,
1263         .ids = battery_device_ids,
1264         .flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
1265         .ops = {
1266                 .add = acpi_battery_add,
1267                 .remove = acpi_battery_remove,
1268                 .notify = acpi_battery_notify,
1269                 },
1270         .drv.pm = &acpi_battery_pm,
1271 };
1272
1273 static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
1274 {
1275         int result;
1276
1277         if (acpi_quirk_skip_acpi_ac_and_battery())
1278                 return;
1279
1280         dmi_check_system(bat_dmi_table);
1281
1282         result = acpi_bus_register_driver(&acpi_battery_driver);
1283         battery_driver_registered = (result == 0);
1284 }
1285
1286 static int __init acpi_battery_init(void)
1287 {
1288         if (acpi_disabled)
1289                 return -ENODEV;
1290
1291         async_cookie = async_schedule(acpi_battery_init_async, NULL);
1292         return 0;
1293 }
1294
1295 static void __exit acpi_battery_exit(void)
1296 {
1297         async_synchronize_cookie(async_cookie + 1);
1298         if (battery_driver_registered) {
1299                 acpi_bus_unregister_driver(&acpi_battery_driver);
1300                 battery_hook_exit();
1301         }
1302 }
1303
1304 module_init(acpi_battery_init);
1305 module_exit(acpi_battery_exit);