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