drivers/acpi/battery.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
From: Xueqin Luo <luoxueqin@kylinos.cn>
Add support for POWER_SUPPLY_PROP_STATE_OF_HEALTH in ACPI battery
driver.
State of Health is calculated as the ratio between full charge capacity
and design capacity, expressed as a percentage.
The value is computed as:
SOH = full_charge_capacity * 100 / design_capacity
Only valid ACPI battery capacity values are used for the calculation.
If either full charge capacity or design capacity is not available,
the property returns -ENODEV.
Signed-off-by: Xueqin Luo <luoxueqin@kylinos.cn>
---
drivers/acpi/battery.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index b4c25474f42f..6e6396aad2c8 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -267,6 +267,15 @@ static int acpi_battery_get_property(struct power_supply *psy,
else
val->intval = battery->full_charge_capacity * 1000;
break;
+ case POWER_SUPPLY_PROP_STATE_OF_HEALTH:
+ if (!ACPI_BATTERY_CAPACITY_VALID(battery->full_charge_capacity) ||
+ !ACPI_BATTERY_CAPACITY_VALID(battery->design_capacity))
+ return -ENODEV;
+
+ full_capacity = battery->full_charge_capacity;
+ val->intval = DIV_ROUND_CLOSEST_ULL(full_capacity * 100ULL,
+ battery->design_capacity);
+ break;
case POWER_SUPPLY_PROP_CHARGE_NOW:
case POWER_SUPPLY_PROP_ENERGY_NOW:
if (battery->capacity_now == ACPI_BATTERY_VALUE_UNKNOWN)
@@ -323,6 +332,7 @@ static const enum power_supply_property charge_battery_props[] = {
POWER_SUPPLY_PROP_CURRENT_NOW,
POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
POWER_SUPPLY_PROP_CHARGE_FULL,
+ POWER_SUPPLY_PROP_STATE_OF_HEALTH,
POWER_SUPPLY_PROP_CHARGE_NOW,
POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
@@ -355,6 +365,7 @@ static const enum power_supply_property energy_battery_props[] = {
POWER_SUPPLY_PROP_POWER_NOW,
POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
POWER_SUPPLY_PROP_ENERGY_FULL,
+ POWER_SUPPLY_PROP_STATE_OF_HEALTH,
POWER_SUPPLY_PROP_ENERGY_NOW,
POWER_SUPPLY_PROP_CAPACITY,
POWER_SUPPLY_PROP_CAPACITY_LEVEL,
--
2.43.0
Hi, On Thu, Apr 23, 2026 at 03:58:53PM +0800, luoxueqin wrote: > From: Xueqin Luo <luoxueqin@kylinos.cn> > > Add support for POWER_SUPPLY_PROP_STATE_OF_HEALTH in ACPI battery > driver. > > State of Health is calculated as the ratio between full charge capacity > and design capacity, expressed as a percentage. > > The value is computed as: > SOH = full_charge_capacity * 100 / design_capacity $ grep -A15 state_of_health Documentation/ABI/testing/sysfs-class-power What: /sys/class/power_supply/<supply_name>/state_of_health Date: August 2025 Contact: linux-arm-msm@vger.kernel.org Description: The state_of_health parameter quantifies the overall condition of a battery as a percentage, reflecting its ability to deliver rated performance relative to its original specifications. It is dynamically computed using a combination of learned capacity and impedance-based degradation indicators, both of which evolve over the battery's lifecycle. Note that the exact algorithms are kept secret by most battery vendors and the value from different battery vendors cannot be compared with each other as there is no vendor-agnostic definition of "performance". Also this usually cannot be used for any calculations (i.e. this is not the factor between charge_full and charge_full_design). Access: Read Valid values: 0 - 100 (percent) Greetings, -- Sebastian
© 2016 - 2026 Red Hat, Inc.