Re: [PATCH] platform/x86: asus-wmi: do not enforce a battery charge threshold

From: Ilpo Järvinen

Date: Wed Mar 04 2026 - 08:32:22 EST


On Wed, 4 Mar 2026, Denis Benato wrote:

> Users are complaining for the battery limit being reset at 100% during
> the boot process while the general consensus appears to not apply
> unsolecited hardware changes, therefore stop resetting the battery

unsolicited

I'll deal with this while merging. If nothing else comes up, no need to
send v2 just because of it (I'm just sending this to remind myself).

--
i.

> charge limit at boot and return -ENODATA on charge_end_threshold to
> signal for an unknown limit.
>
> Suggested-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
> Suggested-by: Derek J. Clark <derekjohn.clark@xxxxxxxxx>
> Signed-off-by: Denis Benato <denis.benato@xxxxxxxxx>
> ---
> drivers/platform/x86/asus-wmi.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 6ba49bd375df..dc330a8ee2f2 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -1557,7 +1557,10 @@ static ssize_t charge_control_end_threshold_show(struct device *device,
> struct device_attribute *attr,
> char *buf)
> {
> - return sysfs_emit(buf, "%d\n", charge_end_threshold);
> + if ((charge_end_threshold >= 0) && (charge_end_threshold <= 100))
> + return sysfs_emit(buf, "%d\n", charge_end_threshold);
> +
> + return -ENODATA;
> }
>
> static DEVICE_ATTR_RW(charge_control_end_threshold);
> @@ -1580,11 +1583,11 @@ static int asus_wmi_battery_add(struct power_supply *battery, struct acpi_batter
> return -ENODEV;
>
> /* The charge threshold is only reset when the system is power cycled,
> - * and we can't get the current threshold so let set it to 100% when
> - * a battery is added.
> + * and we can't read the current threshold, however the majority of
> + * platforms retains it, therefore signal the threshold as unknown
> + * until user explicitly sets it to a new value.
> */
> - asus_wmi_set_devstate(ASUS_WMI_DEVID_RSOC, 100, NULL);
> - charge_end_threshold = 100;
> + charge_end_threshold = -1;
>
> return 0;
> }
>