Linux Audio

Check our new training course

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