Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 508b3c67 authored by Bjørn Mork's avatar Bjørn Mork Committed by Rafael J. Wysocki
Browse files

Revert "ACPI / battery: fix wrong value of capacity_now reported when fully charged"



This reverts commit 232de514 ("ACPI / battery: fix wrong value of
capacity_now reported when fully charged")

There is nothing wrong or unexpected about 'capacity_now' increasing above
the last 'full_charge_capacity' value. Different charging cycles will cause
'full_charge_capacity' to vary, both up and down.  Good battery firmwares
will update 'full_charge_capacity' when the current charging cycle is
complete, increasing it if necessary. It might even go above
'design_capacity' on a fresh and healthy battery.

Capping 'capacity_now' to 'full_charge_capacity' is plain wrong, and
printing a warning if this doesn't happen to match the 'design_capacity'
is both annoying and terribly wrong.

This results in bogus warnings on perfectly working systems/firmwares:

 [Firmware Bug]: battery: reported current charge level (39800) is higher than reported maximum charge level (39800).

and wrong values being reported for 'capacity_now' and
'full_charge_capacity' after the warning has been triggered.

Fixes: 232de514 ("ACPI / battery: fix wrong value of capacity_now reported when fully charged")
Cc: 3.16+ <stable@vger.kernel.org> # 3.16+
Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 583ee394
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -534,20 +534,6 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
			" invalid.\n");
	}

	/*
	 * When fully charged, some batteries wrongly report
	 * capacity_now = design_capacity instead of = full_charge_capacity
	 */
	if (battery->capacity_now > battery->full_charge_capacity
	    && battery->full_charge_capacity != ACPI_BATTERY_VALUE_UNKNOWN) {
		battery->capacity_now = battery->full_charge_capacity;
		if (battery->capacity_now != battery->design_capacity)
			printk_once(KERN_WARNING FW_BUG
				"battery: reported current charge level (%d) "
				"is higher than reported maximum charge level (%d).\n",
				battery->capacity_now, battery->full_charge_capacity);
	}

	if (test_bit(ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY, &battery->flags)
	    && battery->capacity_now >= 0 && battery->capacity_now <= 100)
		battery->capacity_now = (battery->capacity_now *