All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Rafael J. Wysocki" <rafael@kernel.org>
To: Armin Wolf <W_Armin@gmx.de>
Cc: hdegoede@redhat.com, markgross@kernel.org, rafael@kernel.org,
	lenb@kernel.org, hmh@hmh.eng.br, matan@svgalib.org,
	corentin.chary@gmail.com, jeremy@system76.com,
	productdev@system76.com, mario.limonciello@amd.com,
	pobrn@protonmail.com, coproscefalo@gmail.com,
	platform-driver-x86@vger.kernel.org, linux-acpi@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 1/2] ACPI: battery: Pass battery hook pointer to hook callbacks
Date: Mon, 24 Oct 2022 15:19:13 +0200	[thread overview]
Message-ID: <CAJZ5v0gMow5T3ty8UN9e6zZmQf+GhFWbrP-ab9x5scoAwsZOqA@mail.gmail.com> (raw)
In-Reply-To: <20220927204521.601887-2-W_Armin@gmx.de>

On Tue, Sep 27, 2022 at 10:45 PM Armin Wolf <W_Armin@gmx.de> wrote:
>
> Right now, is impossible for battery hook callbacks
> to access instance-specific data, forcing most drivers
> to provide some sort of global state. This however is
> difficult for drivers which can be instantiated multiple
> times and/or are hotplug-capable.
>
> Pass a pointer to the batetry hook to those callbacks
> for usage with container_of().
>
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>

Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

> ---
>  drivers/acpi/battery.c               | 8 ++++----
>  drivers/platform/x86/asus-wmi.c      | 4 ++--
>  drivers/platform/x86/huawei-wmi.c    | 4 ++--
>  drivers/platform/x86/lg-laptop.c     | 4 ++--
>  drivers/platform/x86/system76_acpi.c | 4 ++--
>  drivers/platform/x86/thinkpad_acpi.c | 4 ++--
>  drivers/platform/x86/toshiba_acpi.c  | 4 ++--
>  include/acpi/battery.h               | 4 ++--
>  8 files changed, 18 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
> index 306513fec1e1..9482b0b6eadc 100644
> --- a/drivers/acpi/battery.c
> +++ b/drivers/acpi/battery.c
> @@ -696,7 +696,7 @@ static void __battery_hook_unregister(struct acpi_battery_hook *hook, int lock)
>         if (lock)
>                 mutex_lock(&hook_mutex);
>         list_for_each_entry(battery, &acpi_battery_list, list) {
> -               hook->remove_battery(battery->bat);
> +               hook->remove_battery(battery->bat, hook);
>         }
>         list_del(&hook->list);
>         if (lock)
> @@ -724,7 +724,7 @@ void battery_hook_register(struct acpi_battery_hook *hook)
>          * its attributes.
>          */
>         list_for_each_entry(battery, &acpi_battery_list, list) {
> -               if (hook->add_battery(battery->bat)) {
> +               if (hook->add_battery(battery->bat, hook)) {
>                         /*
>                          * If a add-battery returns non-zero,
>                          * the registration of the extension has failed,
> @@ -762,7 +762,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) {
> -               if (hook_node->add_battery(battery->bat)) {
> +               if (hook_node->add_battery(battery->bat, hook_node)) {
>                         /*
>                          * The notification of the extensions has failed, to
>                          * prevent further errors we will unload the extension.
> @@ -785,7 +785,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->remove_battery(battery->bat);
> +               hook->remove_battery(battery->bat, hook);
>         }
>         /* 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 ae46af731de9..446669d11095 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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         /* 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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_file(&battery->dev,
>                            &dev_attr_charge_control_end_threshold);
> diff --git a/drivers/platform/x86/huawei-wmi.c b/drivers/platform/x86/huawei-wmi.c
> index eac3e6b4ea11..1dec4427053a 100644
> --- a/drivers/platform/x86/huawei-wmi.c
> +++ b/drivers/platform/x86/huawei-wmi.c
> @@ -468,7 +468,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         int err = 0;
>
> @@ -483,7 +483,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_file(&battery->dev, &dev_attr_charge_control_start_threshold);
>         device_remove_file(&battery->dev, &dev_attr_charge_control_end_threshold);
> diff --git a/drivers/platform/x86/lg-laptop.c b/drivers/platform/x86/lg-laptop.c
> index 332868b140ed..d662b64b0ba9 100644
> --- a/drivers/platform/x86/lg-laptop.c
> +++ b/drivers/platform/x86/lg-laptop.c
> @@ -546,7 +546,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         if (device_create_file(&battery->dev,
>                                &dev_attr_charge_control_end_threshold))
> @@ -555,7 +555,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_file(&battery->dev,
>                            &dev_attr_charge_control_end_threshold);
> diff --git a/drivers/platform/x86/system76_acpi.c b/drivers/platform/x86/system76_acpi.c
> index 958df41ad509..9031bd53253f 100644
> --- a/drivers/platform/x86/system76_acpi.c
> +++ b/drivers/platform/x86/system76_acpi.c
> @@ -254,7 +254,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         // System76 EC only supports 1 battery
>         if (strcmp(battery->desc->name, "BAT0") != 0)
> @@ -266,7 +266,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_groups(&battery->dev, system76_battery_groups);
>         return 0;
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index 8fbe21ebcc52..75ba9e61264e 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -9897,7 +9897,7 @@ ATTRIBUTE_GROUPS(tpacpi_battery);
>
>  /* ACPI battery hooking */
>
> -static int tpacpi_battery_add(struct power_supply *battery)
> +static int tpacpi_battery_add(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         int batteryid = tpacpi_battery_get_id(battery->desc->name);
>
> @@ -9908,7 +9908,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(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_groups(&battery->dev, tpacpi_battery_groups);
>         return 0;
> diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
> index 43cc25351aea..c8f01f8f435d 100644
> --- a/drivers/platform/x86/toshiba_acpi.c
> +++ b/drivers/platform/x86/toshiba_acpi.c
> @@ -3113,7 +3113,7 @@ static struct attribute *toshiba_acpi_battery_attrs[] = {
>
>  ATTRIBUTE_GROUPS(toshiba_acpi_battery);
>
> -static int toshiba_acpi_battery_add(struct power_supply *battery)
> +static int toshiba_acpi_battery_add(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         if (toshiba_acpi == NULL) {
>                 pr_err("Init order issue\n");
> @@ -3126,7 +3126,7 @@ static int toshiba_acpi_battery_add(struct power_supply *battery)
>         return 0;
>  }
>
> -static int toshiba_acpi_battery_remove(struct power_supply *battery)
> +static int toshiba_acpi_battery_remove(struct power_supply *battery, struct acpi_battery_hook *hook)
>  {
>         device_remove_groups(&battery->dev, toshiba_acpi_battery_groups);
>         return 0;
> diff --git a/include/acpi/battery.h b/include/acpi/battery.h
> index b8d56b702c7a..611a2561a014 100644
> --- a/include/acpi/battery.h
> +++ b/include/acpi/battery.h
> @@ -12,8 +12,8 @@
>
>  struct acpi_battery_hook {
>         const char *name;
> -       int (*add_battery)(struct power_supply *battery);
> -       int (*remove_battery)(struct power_supply *battery);
> +       int (*add_battery)(struct power_supply *battery, struct acpi_battery_hook *hook);
> +       int (*remove_battery)(struct power_supply *battery, struct acpi_battery_hook *hook);
>         struct list_head list;
>  };
>
> --
> 2.30.2
>

  reply	other threads:[~2022-10-24 14:56 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-27 20:45 [PATCH v2 0/2] platform/x86: dell: Add new dell-wmi-ddv driver Armin Wolf
2022-09-27 20:45 ` [PATCH v2 1/2] ACPI: battery: Pass battery hook pointer to hook callbacks Armin Wolf
2022-10-24 13:19   ` Rafael J. Wysocki [this message]
2022-10-24 13:47   ` Hans de Goede
2022-09-27 20:45 ` [PATCH v2 2/2] platform/x86: dell: Add new dell-wmi-ddv driver Armin Wolf
2022-09-28 10:47   ` Andy Shevchenko
2022-09-28 11:33     ` Hans de Goede
2022-09-28 14:16       ` Andy Shevchenko
2022-09-28 20:57     ` Armin Wolf
2022-09-29  9:50       ` Andy Shevchenko
2022-09-29 13:12         ` Hans de Goede
2022-10-21  9:34           ` Armin Wolf
2022-10-21  9:58             ` Hans de Goede
2022-09-29  9:51       ` Andy Shevchenko
2022-09-28  9:52 ` [PATCH v2 0/2] " Hans de Goede
2022-09-28 10:48   ` Andy Shevchenko
2022-09-28 11:37     ` 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=CAJZ5v0gMow5T3ty8UN9e6zZmQf+GhFWbrP-ab9x5scoAwsZOqA@mail.gmail.com \
    --to=rafael@kernel.org \
    --cc=W_Armin@gmx.de \
    --cc=coproscefalo@gmail.com \
    --cc=corentin.chary@gmail.com \
    --cc=hdegoede@redhat.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=mario.limonciello@amd.com \
    --cc=markgross@kernel.org \
    --cc=matan@svgalib.org \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=pobrn@protonmail.com \
    --cc=productdev@system76.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.