From nobody Wed Jun 17 06:28:33 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5DAF34C121 for ; Thu, 23 Apr 2026 07:59:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776931149; cv=none; b=iuJmV67o3+iLPh1FJR6ElJ8n4N0L2dNexBLOHSQpBNlNCwUqds3KYWrLJibatt6198PV3WV1nW+whqQ8mbLARvDBUfWmlelhS6XvJbRpc69HUOYN01cjEVDhoVj8E0dOgwNIBktTzZ9Q0Ijc8DIuBEJaTpZwviMxzN25kcly1sc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776931149; c=relaxed/simple; bh=YY9l/JQUT2wrLvX5VjikzOmN4bhDqWw5VYHx5QoY2VE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=J1xA2WADp46HBDz05m6I5Uh5TO2GuJLrGs/uzFm2P+rBeixUNZCXUJHoudHTDp1fnHIIQfyZc2bVqxmLYqQahUOwYOMYG2dxhn6/F8K7U1eOhaRm4yWrUdr9t070EarKt9DPRtFU3sPXDGwUZijWOoBPSJvUNFMDnh//htJS7Xk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=kylinos.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-82cebbdbdccso3911904b3a.1 for ; Thu, 23 Apr 2026 00:59:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776931145; x=1777535945; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/ggpS1cz1nsjmaPoLufsLB6faUlw5IEIPcq0RGxl0GU=; b=p4C0MEPOJJCRMgAzEgXW4gOD7GI+eGo7N60Qa0b3iQ992maP4hM2vmT+OVF+uxNKgj 8d/CBQrtjhHSbePDZEKTpK5VkHShbxW/SAgCpTigFDeIOdTIDaY5NTI9pYTgZwLohswZ Iop/MwLoAbvo1h/djr/ITZd3x4VkQqP/mYhDwbXWtecrfr1D09r6jSdVg4HZVYUJCxZ/ u8U+t/WDqoTNmLqfpOAjwST59AwsezLyghrSvTlJPrz4Ei1W38SgmpE+DQIpUH0t3Qwn Jet8ED31awicp1gh2cbcy+YW+iEjJfJJ6g6gD/MX+n0+9vwiKMcc2LRBlHvLSRSHIRLw 9v7Q== X-Forwarded-Encrypted: i=1; AFNElJ+wTdBP0dW88LLLFzHDljsDTxP+gRcfFJcJ3pwvxLEdQmeP9dat+Z3LF1quvmtkddJUwzn2f48VL03xULo=@vger.kernel.org X-Gm-Message-State: AOJu0YwET2+Gn2niG8tjKAh1ytDKRp9km0/P1KbJRl8m2/tXe+hrzfJj +l2vkaXQ7Z/YxiWNL08f1IDezRkwuQ77eUK02z9dORqYEj6sQlx9Sm10OneuTnQiM0k= X-Gm-Gg: AeBDietuGWHw5GHcyvbYiwIX1nhD4mT78Lyh97PLCzmH27MNxe7y6giYF72hxstbRAz 7BHUQ7SRVmcZJdRtrvlL2HbVrowwpBckqqv4O71fR9aRgw2b3d4IV4CKLYcFYrkNkYi5dkLjy8W PqEsMIXTnSHRbxpz70JEVTON2sUrJyzYbedGiZS0oGC/W5NlbxBeotjZPMgJ6w/GpmFGQ2uQnW2 8f2Hf6iHmGMh7k5WjWV4NQB+/MI3hi+pjOvBjbAmjdsQPAHc3k6av4T9SyFUnmmahXuDvUQOEJG RfyEbx0aw3OHahwsF1eKdOKpGl6+2uy13F4mgoh21j2Ze+xqNwgQDp5lkbChICYk5TrH/ExRkdW xR5Xao5v03bkENiG7YfhFhmGewTBUSrjdYwzQsNTrZ4z4/dyVhMZjTYVvU75gVVyzhdMzg5o9cJ UW4tQvZBddV26UIcdVXUiM0kt7C9gjLW8Lmyq7h6vs0QPc1lzHU+JF50WR X-Received: by 2002:a05:6a00:190c:b0:82f:500a:128 with SMTP id d2e1a72fcca58-82f8b329161mr23111271b3a.5.1776931144703; Thu, 23 Apr 2026 00:59:04 -0700 (PDT) Received: from kylin-XiaoXinPro-16-AHP9.. ([116.128.244.171]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82f8e981c07sm23707842b3a.1.2026.04.23.00.59.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Apr 2026 00:59:04 -0700 (PDT) From: luoxueqin To: lenb@kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Xueqin Luo Subject: [PATCH] ACPI: battery: add state_of_health support to power_supply Date: Thu, 23 Apr 2026 15:58:53 +0800 Message-ID: <20260423075853.151829-1-luoxueqin@kylinos.cn> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Xueqin Luo 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 =3D 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 --- 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_supp= ly *psy, else val->intval =3D 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 =3D battery->full_charge_capacity; + val->intval =3D 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 =3D=3D ACPI_BATTERY_VALUE_UNKNOWN) @@ -323,6 +332,7 @@ static const enum power_supply_property charge_battery_= props[] =3D { 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[] =3D { 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, --=20 2.43.0