Re: [PATCH 1/2] ACPI: battery: Add support for charge limiting state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 20, 2024 at 9:14 PM Armin Wolf <W_Armin@xxxxxx> 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@xxxxxx>
> ---
>  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!





[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]
  Powered by Linux