lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<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

Powered by Openwall GNU/*/Linux Powered by OpenVZ