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

Commit 232de514 authored by Josef Gajdusek's avatar Josef Gajdusek Committed by Rafael J. Wysocki
Browse files

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



It seems that some batteries (noticed on DELL JYPJ136) assume
capacity_now = design_capacity when fully charged. This causes
reported capacity to suddenly jump to >full_charge_capacity (and that
means capacity reported to userspace is >100% and incorrect)
values after 99%. This patch detects capacity_now > full_charge_capacity,
notifies userspace (unless it is the known bug where capacity_now ==
design_capacity) and trims the value to full_charge_capacity.

Signed-off-by: default avatarJosef Gajdusek <atx@atx.name>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 75646e75
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -535,6 +535,20 @@ 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 *