[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAJZ5v0iG4fAp1NL1Xf3JAY1XcYRuCttaZyR1S6AYD=FZpmzRWw@mail.gmail.com>
Date: Mon, 1 Jul 2024 19:34:17 +0200
From: "Rafael J. Wysocki" <rafael@...nel.org>
To: Armin Wolf <W_Armin@....de>
Cc: rafael@...nel.org, lenb@...nel.org, linux-acpi@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] ACPI: battery: Add support for charge limiting state
On Thu, Jun 20, 2024 at 9:14 PM Armin Wolf <W_Armin@....de> wrote:
>
> The ACPI specification says that bit 3 inside the battery state
> signals that the battery is in charge limiting state. In this state,
> the platform limits the battery from reaching its full capacity, the
> exact limit is platform-specific.
>
> This might explain why a number of batteries reported a "Unknown"
> battery state in the past when using platform-specific interfaces to
> stop battery charging at a user defined level.
>
> Unfortunately not all platforms set this bit in such cases, so
> "non-charging" is still the default state when the battery is neither
> charging, discharging or full.
>
> Tested on a Lenovo Ideapad S145-14IWL.
>
> Signed-off-by: Armin Wolf <W_Armin@....de>
> ---
> drivers/acpi/battery.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
> index d289b98a2cca..9ba2191a96d6 100644
> --- a/drivers/acpi/battery.c
> +++ b/drivers/acpi/battery.c
> @@ -38,9 +38,10 @@
> /* Battery power unit: 0 means mW, 1 means mA */
> #define ACPI_BATTERY_POWER_UNIT_MA 1
>
> -#define ACPI_BATTERY_STATE_DISCHARGING 0x1
> -#define ACPI_BATTERY_STATE_CHARGING 0x2
> -#define ACPI_BATTERY_STATE_CRITICAL 0x4
> +#define ACPI_BATTERY_STATE_DISCHARGING 0x1
> +#define ACPI_BATTERY_STATE_CHARGING 0x2
> +#define ACPI_BATTERY_STATE_CRITICAL 0x4
> +#define ACPI_BATTERY_STATE_CHARGE_LIMITING 0x8
>
> #define MAX_STRING_LENGTH 64
>
> @@ -155,7 +156,7 @@ static int acpi_battery_get_state(struct acpi_battery *battery);
>
> static int acpi_battery_is_charged(struct acpi_battery *battery)
> {
> - /* charging, discharging or critical low */
> + /* charging, discharging, critical low or charge limited */
> if (battery->state != 0)
> return 0;
>
> @@ -215,6 +216,8 @@ static int acpi_battery_get_property(struct power_supply *psy,
> val->intval = acpi_battery_handle_discharging(battery);
> else if (battery->state & ACPI_BATTERY_STATE_CHARGING)
> val->intval = POWER_SUPPLY_STATUS_CHARGING;
> + else if (battery->state & ACPI_BATTERY_STATE_CHARGE_LIMITING)
> + val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
> else if (acpi_battery_is_charged(battery))
> val->intval = POWER_SUPPLY_STATUS_FULL;
> else
> --
Applied as 6.11 material along with the [2/2], thanks!
Powered by blists - more mailing lists