battery: Add the battery hooking API
Subsystems (3)
PATCH v5 1/3 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.
--- drivers/acpi/ac.c | 2 +- drivers/acpi/battery.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++- drivers/acpi/battery.h | 11 ---- drivers/acpi/sbs.c | 2 +- include/acpi/battery.h | 21 ++++++++ 5 files changed, 160 insertions(+), 15 deletions(-) delete mode 100644 drivers/acpi/battery.h create mode 100644 include/acpi/battery.h
drivers/acpi/ac.c +1 -1
@@ -33,7 +33,7 @@#include <linux/platform_device.h> #include <linux/power_supply.h> #include <linux/acpi.h> -#include "battery.h" +#include <acpi/battery.h> #define PREFIX "ACPI: "
drivers/acpi/battery.c +137 -2
175 lines not on this page · raw message
drivers/acpi/battery.h deleted +0 -11
@@ -1,11 +0,0 @@ -/* 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 - -#endif
drivers/acpi/sbs.c +1 -1
@@ -32,9 +32,9 @@#include <linux/delay.h> #include <linux/power_supply.h> #include <linux/platform_data/x86/apple.h> +#include <acpi/battery.h> #include "sbshc.h" -#include "battery.h" #define PREFIX "ACPI: "
include/acpi/battery.h new file +21 -0
@@ -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
Signature · 1 line
2.7.4
Quoted 1 line · Ognjen Galic
Tested-by Christoph Böhmwalder <[email protected]>
I confirm my Tested-by on all 3 patches.
Also please note the checkpatch errors I pointed out on the previous revision.
Thanks for taking the time to implement this!
--
Regards,
Christoph
Quoted 7 lines · Christoph Böhmwalder
Quoted 1 line · Ognjen Galic
Tested-by Christoph Böhmwalder <[email protected]>I confirm my Tested-by on all 3 patches.
Also please note the checkpatch errors I pointed out on the previous revision.
The 80-char warning can be omitted if the line looks ugly when broken. This is noted in the style guide.
About the MAINTAINERS file, I don't know how, when or why to edit that file so I did not touch it.
Quoted 2 lines · Ognjen Galic
The 80-char warning can be omitted if the line looks ugly when broken. This is noted in the style guide.
Indeed, you're right here. The line is just barely over 80 characters anyway, so it really doesn't matter here.
Quoted 2 lines
About the
MAINTAINERSfile, I don't know how, when or why to edit that file so I did not touch it.
That was just a warning about you moving drivers/acpi/battery.h to include/acpi/battery.h, which could potentially lead to an edit to MAINTAINERS being neccessary. I just double-checked this and the include/acpi/ path was already listed in the MAINTAINERS file, so you're good.
Andy Shevchenko
Quoted 2 lines · Ognjen Galic
drivers/acpi/battery.h | 11 ---- include/acpi/battery.h | 21 ++++++++
Just a hint to the future: use -M -C (with perhaps some non-default thresholds in some cases) to avoid above.
Signature · 2 lines
With Best Regards, Andy Shevchenko