From: Hans de Goede <hdegoede@redhat.com>
To: Armin Wolf <W_Armin@gmx.de>, markgross@kernel.org
Cc: rafael@kernel.org, lenb@kernel.org, hmh@hmh.eng.br,
matan@svgalib.org, corentin.chary@gmail.com, jeremy@system76.com,
productdev@system76.com, platform-driver-x86@vger.kernel.org,
linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/5] ACPI: battery: Allow for passing data to battery hooks.
Date: Mon, 19 Sep 2022 12:08:19 +0100 [thread overview]
Message-ID: <2f76bf4d-4e7a-14fb-2247-5eb55112ad8e@redhat.com> (raw)
In-Reply-To: <20220912125342.7395-5-W_Armin@gmx.de>
Hi,
On 9/12/22 13:53, Armin Wolf wrote:
> Since a driver may register multiple instances of a
> battery hook, passing data to each instance is
> convenient.
>
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
Thanks, patch looks good to me:
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Regards,
Hans
> ---
> drivers/acpi/battery.c | 11 ++++++-----
> drivers/platform/x86/asus-wmi.c | 7 ++++---
> drivers/platform/x86/huawei-wmi.c | 6 +++---
> drivers/platform/x86/lg-laptop.c | 6 +++---
> drivers/platform/x86/system76_acpi.c | 6 +++---
> drivers/platform/x86/thinkpad_acpi.c | 6 +++---
> include/acpi/battery.h | 7 ++++---
> 7 files changed, 26 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
> index 15bb5d868a56..396a7324216c 100644
> --- a/drivers/acpi/battery.c
> +++ b/drivers/acpi/battery.c
> @@ -696,7 +696,7 @@ void battery_hook_unregister(struct acpi_battery_hook *hook)
> mutex_lock(&hook_mutex);
>
> list_for_each_entry(battery, &acpi_battery_list, list) {
> - hook->ops->remove_battery(battery->bat);
> + hook->ops->remove_battery(hook->data, battery->bat);
> }
> list_del(&hook->list);
>
> @@ -706,7 +706,7 @@ void battery_hook_unregister(struct acpi_battery_hook *hook)
> }
> EXPORT_SYMBOL_GPL(battery_hook_unregister);
>
> -struct acpi_battery_hook *battery_hook_register(const char *name,
> +struct acpi_battery_hook *battery_hook_register(const char *name, void *data,
> const struct acpi_battery_hook_ops *ops)
> {
> struct acpi_battery_hook *hook = kzalloc(sizeof(*hook), GFP_KERNEL);
> @@ -716,6 +716,7 @@ struct acpi_battery_hook *battery_hook_register(const char *name,
> return ERR_PTR(-ENOMEM);
>
> hook->name = name;
> + hook->data = data;
> hook->ops = ops;
>
> mutex_lock(&hook_mutex);
> @@ -728,7 +729,7 @@ struct acpi_battery_hook *battery_hook_register(const char *name,
> * its attributes.
> */
> list_for_each_entry(battery, &acpi_battery_list, list) {
> - hook->ops->add_battery(battery->bat);
> + hook->ops->add_battery(hook->data, battery->bat);
> }
> pr_info("new extension: %s\n", hook->name);
>
> @@ -758,7 +759,7 @@ static void battery_hook_add_battery(struct acpi_battery *battery)
> * during the battery module initialization.
> */
> list_for_each_entry_safe(hook_node, tmp, &battery_hook_list, list) {
> - hook_node->ops->add_battery(battery->bat);
> + hook_node->ops->add_battery(hook_node->data, battery->bat);
> }
> mutex_unlock(&hook_mutex);
> }
> @@ -773,7 +774,7 @@ static void battery_hook_remove_battery(struct acpi_battery *battery)
> * custom attributes from the battery.
> */
> list_for_each_entry(hook, &battery_hook_list, list) {
> - hook->ops->remove_battery(battery->bat);
> + hook->ops->remove_battery(hook->data, battery->bat);
> }
> /* Then, just remove the battery from the list */
> list_del(&battery->list);
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 37d8649418f4..18afcf38931f 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -882,7 +882,7 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
>
> static DEVICE_ATTR_RW(charge_control_end_threshold);
>
> -static int asus_wmi_battery_add(struct power_supply *battery)
> +static int asus_wmi_battery_add(void *data, struct power_supply *battery)
> {
> /* The WMI method does not provide a way to specific a battery, so we
> * just assume it is the first battery.
> @@ -909,7 +909,7 @@ static int asus_wmi_battery_add(struct power_supply *battery)
> return 0;
> }
>
> -static int asus_wmi_battery_remove(struct power_supply *battery)
> +static int asus_wmi_battery_remove(void *data, struct power_supply *battery)
> {
> device_remove_file(&battery->dev,
> &dev_attr_charge_control_end_threshold);
> @@ -924,7 +924,8 @@ static const struct acpi_battery_hook_ops battery_hook_ops = {
> static void asus_wmi_battery_init(struct asus_wmi *asus)
> {
> if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_RSOC)) {
> - asus->hook = battery_hook_register("ASUS Battery Extension", &battery_hook_ops);
> + asus->hook = battery_hook_register("ASUS Battery Extension", NULL,
> + &battery_hook_ops);
> }
> }
>
> diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c
> index 6fd02b25a97b..f23806299c1a 100644
> --- a/drivers/platform/x86/huawei-wmi.c
> +++ b/drivers/platform/x86/huawei-wmi.c
> @@ -469,7 +469,7 @@ static DEVICE_ATTR_RW(charge_control_start_threshold);
> static DEVICE_ATTR_RW(charge_control_end_threshold);
> static DEVICE_ATTR_RW(charge_control_thresholds);
>
> -static int huawei_wmi_battery_add(struct power_supply *battery)
> +static int huawei_wmi_battery_add(void *data, struct power_supply *battery)
> {
> int err = 0;
>
> @@ -484,7 +484,7 @@ static int huawei_wmi_battery_add(struct power_supply *battery)
> return err;
> }
>
> -static int huawei_wmi_battery_remove(struct power_supply *battery)
> +static int huawei_wmi_battery_remove(void *data, struct power_supply *battery)
> {
> device_remove_file(&battery->dev, &dev_attr_charge_control_start_threshold);
> device_remove_file(&battery->dev, &dev_attr_charge_control_end_threshold);
> @@ -507,7 +507,7 @@ static void huawei_wmi_battery_setup(struct device *dev)
> return;
> }
>
> - huawei->hook = battery_hook_register("Huawei Battery Extension",
> + huawei->hook = battery_hook_register("Huawei Battery Extension", NULL,
> &huawei_wmi_battery_hook_ops);
> device_create_file(dev, &dev_attr_charge_control_thresholds);
> }
> diff --git a/drivers/platform/x86/lg-laptop.c b/drivers/platform/x86/lg-laptop.c
> index d8a61a07313e..f1abb1924150 100644
> --- a/drivers/platform/x86/lg-laptop.c
> +++ b/drivers/platform/x86/lg-laptop.c
> @@ -547,7 +547,7 @@ static DEVICE_ATTR_RW(fn_lock);
> static DEVICE_ATTR_RW(charge_control_end_threshold);
> static DEVICE_ATTR_RW(battery_care_limit);
>
> -static int lg_battery_add(struct power_supply *battery)
> +static int lg_battery_add(void *data, struct power_supply *battery)
> {
> if (device_create_file(&battery->dev,
> &dev_attr_charge_control_end_threshold))
> @@ -556,7 +556,7 @@ static int lg_battery_add(struct power_supply *battery)
> return 0;
> }
>
> -static int lg_battery_remove(struct power_supply *battery)
> +static int lg_battery_remove(void *data, struct power_supply *battery)
> {
> device_remove_file(&battery->dev,
> &dev_attr_charge_control_end_threshold);
> @@ -750,7 +750,7 @@ static int acpi_add(struct acpi_device *device)
> led_classdev_register(&pf_device->dev, &tpad_led);
>
> wmi_input_setup();
> - hook = battery_hook_register("LG Battery Extension", &battery_hook_ops);
> + hook = battery_hook_register("LG Battery Extension", NULL, &battery_hook_ops);
>
> return 0;
>
> diff --git a/drivers/platform/x86/system76_acpi.c b/drivers/platform/x86/system76_acpi.c
> index 1ec22db32bd0..9414b9491806 100644
> --- a/drivers/platform/x86/system76_acpi.c
> +++ b/drivers/platform/x86/system76_acpi.c
> @@ -255,7 +255,7 @@ static struct attribute *system76_battery_attrs[] = {
>
> ATTRIBUTE_GROUPS(system76_battery);
>
> -static int system76_battery_add(struct power_supply *battery)
> +static int system76_battery_add(void *data, struct power_supply *battery)
> {
> // System76 EC only supports 1 battery
> if (strcmp(battery->desc->name, "BAT0") != 0)
> @@ -267,7 +267,7 @@ static int system76_battery_add(struct power_supply *battery)
> return 0;
> }
>
> -static int system76_battery_remove(struct power_supply *battery)
> +static int system76_battery_remove(void *data, struct power_supply *battery)
> {
> device_remove_groups(&battery->dev, system76_battery_groups);
> return 0;
> @@ -280,7 +280,7 @@ static const struct acpi_battery_hook_ops system76_battery_hook_ops = {
>
> static void system76_battery_init(struct system76_data *data)
> {
> - data->hook = battery_hook_register("System76 Battery Extension",
> + data->hook = battery_hook_register("System76 Battery Extension", NULL,
> &system76_battery_hook_ops);
> }
>
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 8adafc3c31fa..6008d88e0727 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -9898,7 +9898,7 @@ ATTRIBUTE_GROUPS(tpacpi_battery);
>
> /* ACPI battery hooking */
>
> -static int tpacpi_battery_add(struct power_supply *battery)
> +static int tpacpi_battery_add(void *data, struct power_supply *battery)
> {
> int batteryid = tpacpi_battery_get_id(battery->desc->name);
>
> @@ -9909,7 +9909,7 @@ static int tpacpi_battery_add(struct power_supply *battery)
> return 0;
> }
>
> -static int tpacpi_battery_remove(struct power_supply *battery)
> +static int tpacpi_battery_remove(void *data, struct power_supply *battery)
> {
> device_remove_groups(&battery->dev, tpacpi_battery_groups);
> return 0;
> @@ -9943,7 +9943,7 @@ static int __init tpacpi_battery_init(struct ibm_init_struct *ibm)
> battery_quirk_table,
> ARRAY_SIZE(battery_quirk_table));
>
> - battery_info.hook = battery_hook_register("ThinkPad Battery Extension",
> + battery_info.hook = battery_hook_register("ThinkPad Battery Extension", NULL,
> &battery_hook_ops);
>
> return 0;
> diff --git a/include/acpi/battery.h b/include/acpi/battery.h
> index b3c81abada1e..cca401b793b2 100644
> --- a/include/acpi/battery.h
> +++ b/include/acpi/battery.h
> @@ -11,17 +11,18 @@
> #define ACPI_BATTERY_NOTIFY_THRESHOLD 0x82
>
> struct acpi_battery_hook_ops {
> - int (*add_battery)(struct power_supply *battery);
> - int (*remove_battery)(struct power_supply *battery);
> + int (*add_battery)(void *data, struct power_supply *battery);
> + int (*remove_battery)(void *data, struct power_supply *battery);
> };
>
> struct acpi_battery_hook {
> const char *name;
> const struct acpi_battery_hook_ops *ops;
> + void *data;
> struct list_head list;
> };
>
> -struct acpi_battery_hook *battery_hook_register(const char *name,
> +struct acpi_battery_hook *battery_hook_register(const char *name, void *data,
> const struct acpi_battery_hook_ops *hook);
> void battery_hook_unregister(struct acpi_battery_hook *hook);
>
> --
> 2.30.2
>
next prev parent reply other threads:[~2022-09-19 11:08 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-12 12:53 [PATCH 0/5] platform/x86: dell: Add new dell-wmi-ddv driver Armin Wolf
2022-09-12 12:53 ` [PATCH 1/5] ACPI: battery: Do not unload battery hooks on single error Armin Wolf
2022-09-19 10:42 ` Hans de Goede
2022-09-19 16:27 ` Rafael J. Wysocki
2022-09-19 19:12 ` Armin Wolf
2022-09-19 20:35 ` Armin Wolf
2022-09-27 14:29 ` Hans de Goede
2022-09-27 15:44 ` Armin Wolf
2022-09-12 12:53 ` [PATCH 2/5] ACPI: battery: Simplify battery_hook_unregister() Armin Wolf
2022-09-19 10:42 ` Hans de Goede
2022-09-12 12:53 ` [PATCH 3/5] ACPI: battery: Allow battery hooks to be registered multiple times Armin Wolf
2022-09-12 16:42 ` Barnabás Pőcze
2022-09-12 17:29 ` Armin Wolf
2022-09-19 11:18 ` Hans de Goede
2022-09-19 17:42 ` Barnabás Pőcze
2022-09-12 12:53 ` [PATCH 4/5] ACPI: battery: Allow for passing data to battery hooks Armin Wolf
2022-09-19 11:08 ` Hans de Goede [this message]
2022-09-12 12:53 ` [PATCH 5/5] platform/x86: dell: Add new dell-wmi-ddv driver Armin Wolf
2022-09-12 21:56 ` Randy Dunlap
2022-09-13 14:40 ` Armin Wolf
2022-09-13 16:08 ` Limonciello, Mario
2022-09-13 16:45 ` Armin Wolf
2022-09-13 18:27 ` Randy Dunlap
2022-09-13 18:30 ` Limonciello, Mario
2022-09-13 18:37 ` Randy Dunlap
2022-09-19 11:33 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2f76bf4d-4e7a-14fb-2247-5eb55112ad8e@redhat.com \
--to=hdegoede@redhat.com \
--cc=W_Armin@gmx.de \
--cc=corentin.chary@gmail.com \
--cc=hmh@hmh.eng.br \
--cc=jeremy@system76.com \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=markgross@kernel.org \
--cc=matan@svgalib.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=productdev@system76.com \
--cc=rafael@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).