On Thu, May 8, 2025 at 4:42 AM Peter Marheine <pmarheine@xxxxxxxxxxxx> wrote: > > The ACPI specification requires that battery rate is always positive, > but the kernel ABI for POWER_SUPPLY_PROP_CURRENT_NOW > (Documentation/ABI/testing/sysfs-class-power) specifies that it should > be negative when a battery is discharging. When reporting CURRENT_NOW, > massage the value to match the documented ABI. > > This only changes the sign of `current_now` and not `power_now` because > documentation doesn't describe any particular meaning for `power_now` so > leaving `power_now` unchanged is less likely to confuse userspace > unnecessarily, whereas becoming consistent with the documented ABI is > worth potentially confusing clients that read `current_now`. > > Signed-off-by: Peter Marheine <pmarheine@xxxxxxxxxxxx> > --- > drivers/acpi/battery.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c > index 6760330a8a..93bb1f7d90 100644 > --- a/drivers/acpi/battery.c > +++ b/drivers/acpi/battery.c > @@ -243,10 +243,23 @@ static int acpi_battery_get_property(struct power_supply *psy, > break; > case POWER_SUPPLY_PROP_CURRENT_NOW: > case POWER_SUPPLY_PROP_POWER_NOW: > - if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) > + if (battery->rate_now == ACPI_BATTERY_VALUE_UNKNOWN) { > ret = -ENODEV; > - else > - val->intval = battery->rate_now * 1000; > + break; > + } > + > + val->intval = battery->rate_now * 1000; > + /* > + * When discharging, the current should be reported as a > + * negative number as per the power supply class interface > + * definition. > + */ > + if (psp == POWER_SUPPLY_PROP_CURRENT_NOW && > + (battery->state & ACPI_BATTERY_STATE_DISCHARGING) && > + acpi_battery_handle_discharging(battery) > + == POWER_SUPPLY_STATUS_DISCHARGING) > + val->intval = -val->intval; > + > break; > case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: > case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: > -- Applied as 6.16 material, thanks!