summaryrefslogtreecommitdiffstats
path: root/include/acpi/battery.h
diff options
context:
space:
mode:
authorOgnjen Galic <smclt30p@gmail.com>2018-02-07 15:58:13 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-02-21 23:27:13 +0100
commitfa93854f7a7ed63d054405bf3779247d5300edd3 (patch)
treefa4d31fbd9f2946d683a0534b456be3c68b6ad03 /include/acpi/battery.h
parentLinux 4.16-rc2 (diff)
downloadlinux-fa93854f7a7ed63d054405bf3779247d5300edd3.tar.xz
linux-fa93854f7a7ed63d054405bf3779247d5300edd3.zip
battery: Add the battery hooking API
This is a patch that implements a generic hooking API for the generic ACPI battery driver. With this new generic API, drivers can expose platform specific behaviour via sysfs attributes in /sys/class/power_supply/BATn/ in a generic way. A perfect example of the need for this API are Lenovo ThinkPads. Lenovo ThinkPads have a ACPI extension that allows the setting of start and stop charge thresholds in the EC and battery firmware via ACPI. The thinkpad_acpi module can use this API to expose sysfs attributes that it controls inside the ACPI battery driver sysfs tree, under /sys/class/power_supply/BATN/. The file drivers/acpi/battery.h has been moved to include/acpi/battery.h and the includes inside ac.c, sbs.c, and battery.c have been adjusted to reflect that. When drivers hooks into the API, the API calls add_battery() for each battery in the system that passes it a acpi_battery struct. Then, the drivers can use device_create_file() to create new sysfs attributes with that struct and identify the batteries for per-battery attributes. Signed-off-by: Ognjen Galic <smclt30p@gmail.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'include/acpi/battery.h')
-rw-r--r--include/acpi/battery.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/acpi/battery.h b/include/acpi/battery.h
new file mode 100644
index 000000000000..5d8f5d910c82
--- /dev/null
+++ b/include/acpi/battery.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ACPI_BATTERY_H
+#define __ACPI_BATTERY_H
+
+#define ACPI_BATTERY_CLASS "battery"
+
+#define ACPI_BATTERY_NOTIFY_STATUS 0x80
+#define ACPI_BATTERY_NOTIFY_INFO 0x81
+#define ACPI_BATTERY_NOTIFY_THRESHOLD 0x82
+
+struct acpi_battery_hook {
+ const char *name;
+ int (*add_battery)(struct power_supply *battery);
+ int (*remove_battery)(struct power_supply *battery);
+ struct list_head list;
+};
+
+void battery_hook_register(struct acpi_battery_hook *hook);
+void battery_hook_unregister(struct acpi_battery_hook *hook);
+
+#endif