xref: /openbmc/linux/drivers/acpi/battery.c (revision 930beb5a)
1 /*
2  *  battery.c - ACPI Battery Driver (Revision: 2.0)
3  *
4  *  Copyright (C) 2007 Alexey Starikovskiy <astarikovskiy@suse.de>
5  *  Copyright (C) 2004-2007 Vladimir Lebedev <vladimir.p.lebedev@intel.com>
6  *  Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
7  *  Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
8  *
9  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10  *
11  *  This program is free software; you can redistribute it and/or modify
12  *  it under the terms of the GNU General Public License as published by
13  *  the Free Software Foundation; either version 2 of the License, or (at
14  *  your option) any later version.
15  *
16  *  This program is distributed in the hope that it will be useful, but
17  *  WITHOUT ANY WARRANTY; without even the implied warranty of
18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  *  General Public License for more details.
20  *
21  *  You should have received a copy of the GNU General Public License along
22  *  with this program; if not, write to the Free Software Foundation, Inc.,
23  *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
24  *
25  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26  */
27 
28 #include <linux/kernel.h>
29 #include <linux/module.h>
30 #include <linux/init.h>
31 #include <linux/types.h>
32 #include <linux/jiffies.h>
33 #include <linux/async.h>
34 #include <linux/dmi.h>
35 #include <linux/slab.h>
36 #include <linux/suspend.h>
37 #include <asm/unaligned.h>
38 
39 #include <acpi/acpi_bus.h>
40 #include <acpi/acpi_drivers.h>
41 #include <linux/power_supply.h>
42 
43 #define PREFIX "ACPI: "
44 
45 #define ACPI_BATTERY_VALUE_UNKNOWN 0xFFFFFFFF
46 
47 #define ACPI_BATTERY_CLASS		"battery"
48 #define ACPI_BATTERY_DEVICE_NAME	"Battery"
49 #define ACPI_BATTERY_NOTIFY_STATUS	0x80
50 #define ACPI_BATTERY_NOTIFY_INFO	0x81
51 #define ACPI_BATTERY_NOTIFY_THRESHOLD   0x82
52 
53 /* Battery power unit: 0 means mW, 1 means mA */
54 #define ACPI_BATTERY_POWER_UNIT_MA	1
55 
56 #define _COMPONENT		ACPI_BATTERY_COMPONENT
57 
58 ACPI_MODULE_NAME("battery");
59 
60 MODULE_AUTHOR("Paul Diefenbaugh");
61 MODULE_AUTHOR("Alexey Starikovskiy <astarikovskiy@suse.de>");
62 MODULE_DESCRIPTION("ACPI Battery Driver");
63 MODULE_LICENSE("GPL");
64 
65 static int battery_bix_broken_package;
66 static unsigned int cache_time = 1000;
67 module_param(cache_time, uint, 0644);
68 MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
69 
70 static const struct acpi_device_id battery_device_ids[] = {
71 	{"PNP0C0A", 0},
72 	{"", 0},
73 };
74 
75 MODULE_DEVICE_TABLE(acpi, battery_device_ids);
76 
77 enum {
78 	ACPI_BATTERY_ALARM_PRESENT,
79 	ACPI_BATTERY_XINFO_PRESENT,
80 	ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY,
81 	/* On Lenovo Thinkpad models from 2010 and 2011, the power unit
82 	   switches between mWh and mAh depending on whether the system
83 	   is running on battery or not.  When mAh is the unit, most
84 	   reported values are incorrect and need to be adjusted by
85 	   10000/design_voltage.  Verified on x201, t410, t410s, and x220.
86 	   Pre-2010 and 2012 models appear to always report in mWh and
87 	   are thus unaffected (tested with t42, t61, t500, x200, x300,
88 	   and x230).  Also, in mid-2012 Lenovo issued a BIOS update for
89 	   the 2011 models that fixes the issue (tested on x220 with a
90 	   post-1.29 BIOS), but as of Nov. 2012, no such update is
91 	   available for the 2010 models.  */
92 	ACPI_BATTERY_QUIRK_THINKPAD_MAH,
93 };
94 
95 struct acpi_battery {
96 	struct mutex lock;
97 	struct mutex sysfs_lock;
98 	struct power_supply bat;
99 	struct acpi_device *device;
100 	struct notifier_block pm_nb;
101 	unsigned long update_time;
102 	int revision;
103 	int rate_now;
104 	int capacity_now;
105 	int voltage_now;
106 	int design_capacity;
107 	int full_charge_capacity;
108 	int technology;
109 	int design_voltage;
110 	int design_capacity_warning;
111 	int design_capacity_low;
112 	int cycle_count;
113 	int measurement_accuracy;
114 	int max_sampling_time;
115 	int min_sampling_time;
116 	int max_averaging_interval;
117 	int min_averaging_interval;
118 	int capacity_granularity_1;
119 	int capacity_granularity_2;
120 	int alarm;
121 	char model_number[32];
122 	char serial_number[32];
123 	char type[32];
124 	char oem_info[32];
125 	int state;
126 	int power_unit;
127 	unsigned long flags;
128 };
129 
130 #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat)
131 
132 static inline int acpi_battery_present(struct acpi_battery *battery)
133 {
134 	return battery->device->status.battery_present;
135 }
136 
137 static int acpi_battery_technology(struct acpi_battery *battery)
138 {
139 	if (!strcasecmp("NiCd", battery->type))
140 		return POWER_SUPPLY_TECHNOLOGY_NiCd;
141 	if (!strcasecmp("NiMH", battery->type))
142 		return POWER_SUPPLY_TECHNOLOGY_NiMH;
143 	if (!strcasecmp("LION", battery->type))
144 		return POWER_SUPPLY_TECHNOLOGY_LION;
145 	if (!strncasecmp("LI-ION", battery->type, 6))
146 		return POWER_SUPPLY_TECHNOLOGY_LION;
147 	if (!strcasecmp("LiP", battery->type))
148 		return POWER_SUPPLY_TECHNOLOGY_LIPO;
149 	return POWER_SUPPLY_TECHNOLOGY_UNKNOWN;
150 }
151 
152 static int acpi_battery_get_state(struct acpi_battery *battery);
153 
154 static int acpi_battery_is_charged(struct acpi_battery *battery)
155 {
156 	/* either charging or discharging */
157 	if (battery->state != 0)
158 		return 0;
159 
160 	/* battery not reporting charge */
161 	if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN ||
162 	    battery->capacity_now == 0)
163 		return 0;
164 
165 	/* good batteries update full_charge as the batteries degrade */
166 	if (battery->full_charge_capacity == battery->capacity_now)
167 		return 1;
168 
169 	/* fallback to using design values for broken batteries */
170 	if (battery->design_capacity == battery->capacity_now)
171 		return 1;
172 
173 	/* we don't do any sort of metric based on percentages */
174 	return 0;
175 }
176 
177 static int acpi_battery_get_property(struct power_supply *psy,
178 				     enum power_supply_property psp,
179 				     union power_supply_propval *val)
180 {
181 	int ret = 0;
182 	struct acpi_battery *battery = to_acpi_battery(psy);
183 
184 	if (acpi_battery_present(battery)) {
185 		/* run battery update only if it is present */
186 		acpi_battery_get_state(battery);
187 	} else if (psp != POWER_SUPPLY_PROP_PRESENT)
188 		return -ENODEV;
189 	switch (psp) {
190 	case POWER_SUPPLY_PROP_STATUS:
191 		if (battery->state & 0x01)
192 			val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
193 		else if (battery->state & 0x02)
194 			val->intval = POWER_SUPPLY_STATUS_CHARGING;
195 		else if (acpi_battery_is_charged(battery))
196 			val->intval = POWER_SUPPLY_STATUS_FULL;
197 		else
198 			val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
199 		break;
200 	case POWER_SUPPLY_PROP_PRESENT:
201 		val->intval = acpi_battery_present(battery);
202 		break;
203 	case POWER_SUPPLY_PROP_TECHNOLOGY:
204 		val->intval = acpi_battery_technology(battery);
205 		break;
206 	case POWER_SUPPLY_PROP_CYCLE_COUNT:
207 		val->intval = battery->cycle_count;
208 		break;
209 	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
210 		if (battery->design_voltage == ACPI_BATTERY_VALUE_UNKNOWN)
211 			ret = -ENODEV;
212 		else
213 			val->intval = battery->design_voltage * 1000;
214 		break;
215 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
216 		if (battery->voltage_now == ACPI_BATTERY_VALUE_UNKNOWN)
217 			ret = -ENODEV;
218 		else
219 			val->intval = battery->voltage_now * 1000;
220 		break;
221 	case POWER_SUPPLY_PROP_CURRENT_NOW:
222 	case POWER_SUPPLY_PROP_POWER_NOW:
223 		if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN)
224 			ret = -ENODEV;
225 		else
226 			val->intval = battery->rate_now * 1000;
227 		break;
228 	case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
229 	case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
230 		if (battery->design_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
231 			ret = -ENODEV;
232 		else
233 			val->intval = battery->design_capacity * 1000;
234 		break;
235 	case POWER_SUPPLY_PROP_CHARGE_FULL:
236 	case POWER_SUPPLY_PROP_ENERGY_FULL:
237 		if (battery->full_charge_capacity == ACPI_BATTERY_VALUE_UNKNOWN)
238 			ret = -ENODEV;
239 		else
240 			val->intval = battery->full_charge_capacity * 1000;
241 		break;
242 	case POWER_SUPPLY_PROP_CHARGE_NOW:
243 	case POWER_SUPPLY_PROP_ENERGY_NOW:
244 		if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN)
245 			ret = -ENODEV;
246 		else
247 			val->intval = battery->capacity_now * 1000;
248 		break;
249 	case POWER_SUPPLY_PROP_CAPACITY:
250 		if (battery->capacity_now && battery->full_charge_capacity)
251 			val->intval = battery->capacity_now * 100/
252 					battery->full_charge_capacity;
253 		else
254 			val->intval = 0;
255 		break;
256 	case POWER_SUPPLY_PROP_MODEL_NAME:
257 		val->strval = battery->model_number;
258 		break;
259 	case POWER_SUPPLY_PROP_MANUFACTURER:
260 		val->strval = battery->oem_info;
261 		break;
262 	case POWER_SUPPLY_PROP_SERIAL_NUMBER:
263 		val->strval = battery->serial_number;
264 		break;
265 	default:
266 		ret = -EINVAL;
267 	}
268 	return ret;
269 }
270 
271 static enum power_supply_property charge_battery_props[] = {
272 	POWER_SUPPLY_PROP_STATUS,
273 	POWER_SUPPLY_PROP_PRESENT,
274 	POWER_SUPPLY_PROP_TECHNOLOGY,
275 	POWER_SUPPLY_PROP_CYCLE_COUNT,
276 	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
277 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
278 	POWER_SUPPLY_PROP_CURRENT_NOW,
279 	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
280 	POWER_SUPPLY_PROP_CHARGE_FULL,
281 	POWER_SUPPLY_PROP_CHARGE_NOW,
282 	POWER_SUPPLY_PROP_CAPACITY,
283 	POWER_SUPPLY_PROP_MODEL_NAME,
284 	POWER_SUPPLY_PROP_MANUFACTURER,
285 	POWER_SUPPLY_PROP_SERIAL_NUMBER,
286 };
287 
288 static enum power_supply_property energy_battery_props[] = {
289 	POWER_SUPPLY_PROP_STATUS,
290 	POWER_SUPPLY_PROP_PRESENT,
291 	POWER_SUPPLY_PROP_TECHNOLOGY,
292 	POWER_SUPPLY_PROP_CYCLE_COUNT,
293 	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
294 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
295 	POWER_SUPPLY_PROP_POWER_NOW,
296 	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
297 	POWER_SUPPLY_PROP_ENERGY_FULL,
298 	POWER_SUPPLY_PROP_ENERGY_NOW,
299 	POWER_SUPPLY_PROP_CAPACITY,
300 	POWER_SUPPLY_PROP_MODEL_NAME,
301 	POWER_SUPPLY_PROP_MANUFACTURER,
302 	POWER_SUPPLY_PROP_SERIAL_NUMBER,
303 };
304 
305 /* --------------------------------------------------------------------------
306                                Battery Management
307    -------------------------------------------------------------------------- */
308 struct acpi_offsets {
309 	size_t offset;		/* offset inside struct acpi_sbs_battery */
310 	u8 mode;		/* int or string? */
311 };
312 
313 static struct acpi_offsets state_offsets[] = {
314 	{offsetof(struct acpi_battery, state), 0},
315 	{offsetof(struct acpi_battery, rate_now), 0},
316 	{offsetof(struct acpi_battery, capacity_now), 0},
317 	{offsetof(struct acpi_battery, voltage_now), 0},
318 };
319 
320 static struct acpi_offsets info_offsets[] = {
321 	{offsetof(struct acpi_battery, power_unit), 0},
322 	{offsetof(struct acpi_battery, design_capacity), 0},
323 	{offsetof(struct acpi_battery, full_charge_capacity), 0},
324 	{offsetof(struct acpi_battery, technology), 0},
325 	{offsetof(struct acpi_battery, design_voltage), 0},
326 	{offsetof(struct acpi_battery, design_capacity_warning), 0},
327 	{offsetof(struct acpi_battery, design_capacity_low), 0},
328 	{offsetof(struct acpi_battery, capacity_granularity_1), 0},
329 	{offsetof(struct acpi_battery, capacity_granularity_2), 0},
330 	{offsetof(struct acpi_battery, model_number), 1},
331 	{offsetof(struct acpi_battery, serial_number), 1},
332 	{offsetof(struct acpi_battery, type), 1},
333 	{offsetof(struct acpi_battery, oem_info), 1},
334 };
335 
336 static struct acpi_offsets extended_info_offsets[] = {
337 	{offsetof(struct acpi_battery, revision), 0},
338 	{offsetof(struct acpi_battery, power_unit), 0},
339 	{offsetof(struct acpi_battery, design_capacity), 0},
340 	{offsetof(struct acpi_battery, full_charge_capacity), 0},
341 	{offsetof(struct acpi_battery, technology), 0},
342 	{offsetof(struct acpi_battery, design_voltage), 0},
343 	{offsetof(struct acpi_battery, design_capacity_warning), 0},
344 	{offsetof(struct acpi_battery, design_capacity_low), 0},
345 	{offsetof(struct acpi_battery, cycle_count), 0},
346 	{offsetof(struct acpi_battery, measurement_accuracy), 0},
347 	{offsetof(struct acpi_battery, max_sampling_time), 0},
348 	{offsetof(struct acpi_battery, min_sampling_time), 0},
349 	{offsetof(struct acpi_battery, max_averaging_interval), 0},
350 	{offsetof(struct acpi_battery, min_averaging_interval), 0},
351 	{offsetof(struct acpi_battery, capacity_granularity_1), 0},
352 	{offsetof(struct acpi_battery, capacity_granularity_2), 0},
353 	{offsetof(struct acpi_battery, model_number), 1},
354 	{offsetof(struct acpi_battery, serial_number), 1},
355 	{offsetof(struct acpi_battery, type), 1},
356 	{offsetof(struct acpi_battery, oem_info), 1},
357 };
358 
359 static int extract_package(struct acpi_battery *battery,
360 			   union acpi_object *package,
361 			   struct acpi_offsets *offsets, int num)
362 {
363 	int i;
364 	union acpi_object *element;
365 	if (package->type != ACPI_TYPE_PACKAGE)
366 		return -EFAULT;
367 	for (i = 0; i < num; ++i) {
368 		if (package->package.count <= i)
369 			return -EFAULT;
370 		element = &package->package.elements[i];
371 		if (offsets[i].mode) {
372 			u8 *ptr = (u8 *)battery + offsets[i].offset;
373 			if (element->type == ACPI_TYPE_STRING ||
374 			    element->type == ACPI_TYPE_BUFFER)
375 				strncpy(ptr, element->string.pointer, 32);
376 			else if (element->type == ACPI_TYPE_INTEGER) {
377 				strncpy(ptr, (u8 *)&element->integer.value,
378 					sizeof(u64));
379 				ptr[sizeof(u64)] = 0;
380 			} else
381 				*ptr = 0; /* don't have value */
382 		} else {
383 			int *x = (int *)((u8 *)battery + offsets[i].offset);
384 			*x = (element->type == ACPI_TYPE_INTEGER) ?
385 				element->integer.value : -1;
386 		}
387 	}
388 	return 0;
389 }
390 
391 static int acpi_battery_get_status(struct acpi_battery *battery)
392 {
393 	if (acpi_bus_get_status(battery->device)) {
394 		ACPI_EXCEPTION((AE_INFO, AE_ERROR, "Evaluating _STA"));
395 		return -ENODEV;
396 	}
397 	return 0;
398 }
399 
400 static int acpi_battery_get_info(struct acpi_battery *battery)
401 {
402 	int result = -EFAULT;
403 	acpi_status status = 0;
404 	char *name = test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags) ?
405 			"_BIX" : "_BIF";
406 
407 	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
408 
409 	if (!acpi_battery_present(battery))
410 		return 0;
411 	mutex_lock(&battery->lock);
412 	status = acpi_evaluate_object(battery->device->handle, name,
413 						NULL, &buffer);
414 	mutex_unlock(&battery->lock);
415 
416 	if (ACPI_FAILURE(status)) {
417 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating %s", name));
418 		return -ENODEV;
419 	}
420 
421 	if (battery_bix_broken_package)
422 		result = extract_package(battery, buffer.pointer,
423 				extended_info_offsets + 1,
424 				ARRAY_SIZE(extended_info_offsets) - 1);
425 	else if (test_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags))
426 		result = extract_package(battery, buffer.pointer,
427 				extended_info_offsets,
428 				ARRAY_SIZE(extended_info_offsets));
429 	else
430 		result = extract_package(battery, buffer.pointer,
431 				info_offsets, ARRAY_SIZE(info_offsets));
432 	kfree(buffer.pointer);
433 	if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
434 		battery->full_charge_capacity = battery->design_capacity;
435 	if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
436 	    battery->power_unit && battery->design_voltage) {
437 		battery->design_capacity = battery->design_capacity *
438 		    10000 / battery->design_voltage;
439 		battery->full_charge_capacity = battery->full_charge_capacity *
440 		    10000 / battery->design_voltage;
441 		battery->design_capacity_warning =
442 		    battery->design_capacity_warning *
443 		    10000 / battery->design_voltage;
444 		/* Curiously, design_capacity_low, unlike the rest of them,
445 		   is correct.  */
446 		/* capacity_granularity_* equal 1 on the systems tested, so
447 		   it's impossible to tell if they would need an adjustment
448 		   or not if their values were higher.  */
449 	}
450 	return result;
451 }
452 
453 static int acpi_battery_get_state(struct acpi_battery *battery)
454 {
455 	int result = 0;
456 	acpi_status status = 0;
457 	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
458 
459 	if (!acpi_battery_present(battery))
460 		return 0;
461 
462 	if (battery->update_time &&
463 	    time_before(jiffies, battery->update_time +
464 			msecs_to_jiffies(cache_time)))
465 		return 0;
466 
467 	mutex_lock(&battery->lock);
468 	status = acpi_evaluate_object(battery->device->handle, "_BST",
469 				      NULL, &buffer);
470 	mutex_unlock(&battery->lock);
471 
472 	if (ACPI_FAILURE(status)) {
473 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _BST"));
474 		return -ENODEV;
475 	}
476 
477 	result = extract_package(battery, buffer.pointer,
478 				 state_offsets, ARRAY_SIZE(state_offsets));
479 	battery->update_time = jiffies;
480 	kfree(buffer.pointer);
481 
482 	/* For buggy DSDTs that report negative 16-bit values for either
483 	 * charging or discharging current and/or report 0 as 65536
484 	 * due to bad math.
485 	 */
486 	if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA &&
487 		battery->rate_now != ACPI_BATTERY_VALUE_UNKNOWN &&
488 		(s16)(battery->rate_now) < 0) {
489 		battery->rate_now = abs((s16)battery->rate_now);
490 		printk_once(KERN_WARNING FW_BUG "battery: (dis)charge rate"
491 			" invalid.\n");
492 	}
493 
494 	if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
495 	    && battery->capacity_now >= 0 && battery->capacity_now <= 100)
496 		battery->capacity_now = (battery->capacity_now *
497 				battery->full_charge_capacity) / 100;
498 	if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags) &&
499 	    battery->power_unit && battery->design_voltage) {
500 		battery->capacity_now = battery->capacity_now *
501 		    10000 / battery->design_voltage;
502 	}
503 	return result;
504 }
505 
506 static int acpi_battery_set_alarm(struct acpi_battery *battery)
507 {
508 	acpi_status status = 0;
509 
510 	if (!acpi_battery_present(battery) ||
511 	    !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags))
512 		return -ENODEV;
513 
514 	mutex_lock(&battery->lock);
515 	status = acpi_execute_simple_method(battery->device->handle, "_BTP",
516 					    battery->alarm);
517 	mutex_unlock(&battery->lock);
518 
519 	if (ACPI_FAILURE(status))
520 		return -ENODEV;
521 
522 	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Alarm set to %d\n", battery->alarm));
523 	return 0;
524 }
525 
526 static int acpi_battery_init_alarm(struct acpi_battery *battery)
527 {
528 	/* See if alarms are supported, and if so, set default */
529 	if (!acpi_has_method(battery->device->handle, "_BTP")) {
530 		clear_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags);
531 		return 0;
532 	}
533 	set_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags);
534 	if (!battery->alarm)
535 		battery->alarm = battery->design_capacity_warning;
536 	return acpi_battery_set_alarm(battery);
537 }
538 
539 static ssize_t acpi_battery_alarm_show(struct device *dev,
540 					struct device_attribute *attr,
541 					char *buf)
542 {
543 	struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
544 	return sprintf(buf, "%d\n", battery->alarm * 1000);
545 }
546 
547 static ssize_t acpi_battery_alarm_store(struct device *dev,
548 					struct device_attribute *attr,
549 					const char *buf, size_t count)
550 {
551 	unsigned long x;
552 	struct acpi_battery *battery = to_acpi_battery(dev_get_drvdata(dev));
553 	if (sscanf(buf, "%ld\n", &x) == 1)
554 		battery->alarm = x/1000;
555 	if (acpi_battery_present(battery))
556 		acpi_battery_set_alarm(battery);
557 	return count;
558 }
559 
560 static struct device_attribute alarm_attr = {
561 	.attr = {.name = "alarm", .mode = 0644},
562 	.show = acpi_battery_alarm_show,
563 	.store = acpi_battery_alarm_store,
564 };
565 
566 static int sysfs_add_battery(struct acpi_battery *battery)
567 {
568 	int result;
569 
570 	if (battery->power_unit == ACPI_BATTERY_POWER_UNIT_MA) {
571 		battery->bat.properties = charge_battery_props;
572 		battery->bat.num_properties =
573 			ARRAY_SIZE(charge_battery_props);
574 	} else {
575 		battery->bat.properties = energy_battery_props;
576 		battery->bat.num_properties =
577 			ARRAY_SIZE(energy_battery_props);
578 	}
579 
580 	battery->bat.name = acpi_device_bid(battery->device);
581 	battery->bat.type = POWER_SUPPLY_TYPE_BATTERY;
582 	battery->bat.get_property = acpi_battery_get_property;
583 
584 	result = power_supply_register(&battery->device->dev, &battery->bat);
585 	if (result)
586 		return result;
587 	return device_create_file(battery->bat.dev, &alarm_attr);
588 }
589 
590 static void sysfs_remove_battery(struct acpi_battery *battery)
591 {
592 	mutex_lock(&battery->sysfs_lock);
593 	if (!battery->bat.dev) {
594 		mutex_unlock(&battery->sysfs_lock);
595 		return;
596 	}
597 
598 	device_remove_file(battery->bat.dev, &alarm_attr);
599 	power_supply_unregister(&battery->bat);
600 	battery->bat.dev = NULL;
601 	mutex_unlock(&battery->sysfs_lock);
602 }
603 
604 static void find_battery(const struct dmi_header *dm, void *private)
605 {
606 	struct acpi_battery *battery = (struct acpi_battery *)private;
607 	/* Note: the hardcoded offsets below have been extracted from
608 	   the source code of dmidecode.  */
609 	if (dm->type == DMI_ENTRY_PORTABLE_BATTERY && dm->length >= 8) {
610 		const u8 *dmi_data = (const u8 *)(dm + 1);
611 		int dmi_capacity = get_unaligned((const u16 *)(dmi_data + 6));
612 		if (dm->length >= 18)
613 			dmi_capacity *= dmi_data[17];
614 		if (battery->design_capacity * battery->design_voltage / 1000
615 		    != dmi_capacity &&
616 		    battery->design_capacity * 10 == dmi_capacity)
617 			set_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
618 				&battery->flags);
619 	}
620 }
621 
622 /*
623  * According to the ACPI spec, some kinds of primary batteries can
624  * report percentage battery remaining capacity directly to OS.
625  * In this case, it reports the Last Full Charged Capacity == 100
626  * and BatteryPresentRate == 0xFFFFFFFF.
627  *
628  * Now we found some battery reports percentage remaining capacity
629  * even if it's rechargeable.
630  * https://bugzilla.kernel.org/show_bug.cgi?id=15979
631  *
632  * Handle this correctly so that they won't break userspace.
633  */
634 static void acpi_battery_quirks(struct acpi_battery *battery)
635 {
636 	if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags))
637 		return;
638 
639 	if (battery->full_charge_capacity == 100 &&
640 		battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN &&
641 		battery->capacity_now >= 0 && battery->capacity_now <= 100) {
642 		set_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags);
643 		battery->full_charge_capacity = battery->design_capacity;
644 		battery->capacity_now = (battery->capacity_now *
645 				battery->full_charge_capacity) / 100;
646 	}
647 
648 	if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH, &battery->flags))
649 		return;
650 
651 	if (battery->power_unit && dmi_name_in_vendors("LENOVO")) {
652 		const char *s;
653 		s = dmi_get_system_info(DMI_PRODUCT_VERSION);
654 		if (s && !strnicmp(s, "ThinkPad", 8)) {
655 			dmi_walk(find_battery, battery);
656 			if (test_bit(ACPI_BATTERY_QUIRK_THINKPAD_MAH,
657 				     &battery->flags) &&
658 			    battery->design_voltage) {
659 				battery->design_capacity =
660 				    battery->design_capacity *
661 				    10000 / battery->design_voltage;
662 				battery->full_charge_capacity =
663 				    battery->full_charge_capacity *
664 				    10000 / battery->design_voltage;
665 				battery->design_capacity_warning =
666 				    battery->design_capacity_warning *
667 				    10000 / battery->design_voltage;
668 				battery->capacity_now = battery->capacity_now *
669 				    10000 / battery->design_voltage;
670 			}
671 		}
672 	}
673 }
674 
675 static int acpi_battery_update(struct acpi_battery *battery)
676 {
677 	int result, old_present = acpi_battery_present(battery);
678 	result = acpi_battery_get_status(battery);
679 	if (result)
680 		return result;
681 	if (!acpi_battery_present(battery)) {
682 		sysfs_remove_battery(battery);
683 		battery->update_time = 0;
684 		return 0;
685 	}
686 	if (!battery->update_time ||
687 	    old_present != acpi_battery_present(battery)) {
688 		result = acpi_battery_get_info(battery);
689 		if (result)
690 			return result;
691 		acpi_battery_init_alarm(battery);
692 	}
693 	if (!battery->bat.dev) {
694 		result = sysfs_add_battery(battery);
695 		if (result)
696 			return result;
697 	}
698 	result = acpi_battery_get_state(battery);
699 	acpi_battery_quirks(battery);
700 	return result;
701 }
702 
703 static void acpi_battery_refresh(struct acpi_battery *battery)
704 {
705 	int power_unit;
706 
707 	if (!battery->bat.dev)
708 		return;
709 
710 	power_unit = battery->power_unit;
711 
712 	acpi_battery_get_info(battery);
713 
714 	if (power_unit == battery->power_unit)
715 		return;
716 
717 	/* The battery has changed its reporting units. */
718 	sysfs_remove_battery(battery);
719 	sysfs_add_battery(battery);
720 }
721 
722 /* --------------------------------------------------------------------------
723                                  Driver Interface
724    -------------------------------------------------------------------------- */
725 
726 static void acpi_battery_notify(struct acpi_device *device, u32 event)
727 {
728 	struct acpi_battery *battery = acpi_driver_data(device);
729 	struct device *old;
730 
731 	if (!battery)
732 		return;
733 	old = battery->bat.dev;
734 	if (event == ACPI_BATTERY_NOTIFY_INFO)
735 		acpi_battery_refresh(battery);
736 	acpi_battery_update(battery);
737 	acpi_bus_generate_netlink_event(device->pnp.device_class,
738 					dev_name(&device->dev), event,
739 					acpi_battery_present(battery));
740 	/* acpi_battery_update could remove power_supply object */
741 	if (old && battery->bat.dev)
742 		power_supply_changed(&battery->bat);
743 }
744 
745 static int battery_notify(struct notifier_block *nb,
746 			       unsigned long mode, void *_unused)
747 {
748 	struct acpi_battery *battery = container_of(nb, struct acpi_battery,
749 						    pm_nb);
750 	switch (mode) {
751 	case PM_POST_HIBERNATION:
752 	case PM_POST_SUSPEND:
753 		if (battery->bat.dev) {
754 			sysfs_remove_battery(battery);
755 			sysfs_add_battery(battery);
756 		}
757 		break;
758 	}
759 
760 	return 0;
761 }
762 
763 static struct dmi_system_id bat_dmi_table[] = {
764 	{
765 		.ident = "NEC LZ750/LS",
766 		.matches = {
767 			DMI_MATCH(DMI_SYS_VENDOR, "NEC"),
768 			DMI_MATCH(DMI_PRODUCT_NAME, "PC-LZ750LS"),
769 		},
770 	},
771 	{},
772 };
773 
774 static int acpi_battery_add(struct acpi_device *device)
775 {
776 	int result = 0;
777 	struct acpi_battery *battery = NULL;
778 
779 	if (!device)
780 		return -EINVAL;
781 	battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL);
782 	if (!battery)
783 		return -ENOMEM;
784 	battery->device = device;
785 	strcpy(acpi_device_name(device), ACPI_BATTERY_DEVICE_NAME);
786 	strcpy(acpi_device_class(device), ACPI_BATTERY_CLASS);
787 	device->driver_data = battery;
788 	mutex_init(&battery->lock);
789 	mutex_init(&battery->sysfs_lock);
790 	if (acpi_has_method(battery->device->handle, "_BIX"))
791 		set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
792 	result = acpi_battery_update(battery);
793 	if (result)
794 		goto fail;
795 
796 	printk(KERN_INFO PREFIX "%s Slot [%s] (battery %s)\n",
797 		ACPI_BATTERY_DEVICE_NAME, acpi_device_bid(device),
798 		device->status.battery_present ? "present" : "absent");
799 
800 	battery->pm_nb.notifier_call = battery_notify;
801 	register_pm_notifier(&battery->pm_nb);
802 
803 	return result;
804 
805 fail:
806 	sysfs_remove_battery(battery);
807 	mutex_destroy(&battery->lock);
808 	mutex_destroy(&battery->sysfs_lock);
809 	kfree(battery);
810 	return result;
811 }
812 
813 static int acpi_battery_remove(struct acpi_device *device)
814 {
815 	struct acpi_battery *battery = NULL;
816 
817 	if (!device || !acpi_driver_data(device))
818 		return -EINVAL;
819 	battery = acpi_driver_data(device);
820 	unregister_pm_notifier(&battery->pm_nb);
821 	sysfs_remove_battery(battery);
822 	mutex_destroy(&battery->lock);
823 	mutex_destroy(&battery->sysfs_lock);
824 	kfree(battery);
825 	return 0;
826 }
827 
828 #ifdef CONFIG_PM_SLEEP
829 /* this is needed to learn about changes made in suspended state */
830 static int acpi_battery_resume(struct device *dev)
831 {
832 	struct acpi_battery *battery;
833 
834 	if (!dev)
835 		return -EINVAL;
836 
837 	battery = acpi_driver_data(to_acpi_device(dev));
838 	if (!battery)
839 		return -EINVAL;
840 
841 	battery->update_time = 0;
842 	acpi_battery_update(battery);
843 	return 0;
844 }
845 #endif
846 
847 static SIMPLE_DEV_PM_OPS(acpi_battery_pm, NULL, acpi_battery_resume);
848 
849 static struct acpi_driver acpi_battery_driver = {
850 	.name = "battery",
851 	.class = ACPI_BATTERY_CLASS,
852 	.ids = battery_device_ids,
853 	.flags = ACPI_DRIVER_ALL_NOTIFY_EVENTS,
854 	.ops = {
855 		.add = acpi_battery_add,
856 		.remove = acpi_battery_remove,
857 		.notify = acpi_battery_notify,
858 		},
859 	.drv.pm = &acpi_battery_pm,
860 };
861 
862 static void __init acpi_battery_init_async(void *unused, async_cookie_t cookie)
863 {
864 	if (acpi_disabled)
865 		return;
866 
867 	if (dmi_check_system(bat_dmi_table))
868 		battery_bix_broken_package = 1;
869 	acpi_bus_register_driver(&acpi_battery_driver);
870 }
871 
872 static int __init acpi_battery_init(void)
873 {
874 	async_schedule(acpi_battery_init_async, NULL);
875 	return 0;
876 }
877 
878 static void __exit acpi_battery_exit(void)
879 {
880 	acpi_bus_unregister_driver(&acpi_battery_driver);
881 }
882 
883 module_init(acpi_battery_init);
884 module_exit(acpi_battery_exit);
885