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!