From nobody Tue Sep 29 05:35:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60FB942FCBE; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; cv=none; b=HZMeyKgN6JJ/jTaFXFiBeEsYT1MWp+xCbH23e5RCigfWij94kj/6oAx2/ISun8hJMmaBfVB6a0iNaoEvz8YuVvAva+if5M/x96qJt0Fw3HXVm8lU1nVrtsYfdckPH0r7RkWMZqOTO2K3+PQjmgzgk06OF+4ZTXfFJY5LjFqawaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; c=relaxed/simple; bh=uZnKZPiVXeue8Uu4WPapV7YwNyoxKtW2ADUWeKCeC8Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=urSe7DVGF9C+EWowSsw6/mz6Yau5AfOwD5w7mIkjPfRlgiaJIdpYumXkoOzm228l2bnpXJscrFM+OO6nw9OhYMWAiaAE8J8bEsO7L00b4wNm31Z87N4KN8usKQdiRt69NRPnWpEpi5DwENZLeWDAGMXUim9vXUIQ9OFZ6X348qA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gzcbl6l3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gzcbl6l3" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0DCA3C2BCF7; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1786491013; bh=uZnKZPiVXeue8Uu4WPapV7YwNyoxKtW2ADUWeKCeC8Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=gzcbl6l3QZOkUZXSKFspErSMzPz6hv/6FUwme2/Y/oedtj+1FSFrcKHFtNE5O4P28 GPwiN4y8qkhJk2k0iEeLn84zF8PjhrhsRNkJVFS5IFoJMK2auuIClVHg85Jp7nsKE3 gn8AaTE2FXbxH5X7iQnsxX6gjySLrV312lKjn4Hc8XrOFh/zV/OmKwwhYHJ3IWnd1A urmDOYlYHxQXebhTVthb3ydH40Rd2kPHhZRiXF1zHH6z996aWlLfsxGaSSIkNKus/I QdkKX/uOb2/0a4kIN0ZV0jiKuC+O+dye2MRl/xG7xUw3057dO5I6GRXP2C/+Ekvf0C L8GDhdNlf9MIg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1C24C5CFC1; Tue, 11 Aug 2026 23:30:12 +0000 (UTC) From: Robin Snyders via B4 Relay Date: Wed, 12 Aug 2026 01:29:58 +0200 Subject: [PATCH 1/5] power: supply: qcom_smbx: include base when petting watchdog Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260812-qcom-smbx-fixes-v1-1-eb48246be599@snyders.xyz> References: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> In-Reply-To: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> To: Casey Connolly , Sebastian Reichel Cc: Robin Snyders , linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786491008; l=1126; i=robin@snyders.xyz; s=default; h=from:subject:message-id; bh=5e8CybsOw3LrBX999BFZbrVFBttifaKFh6Gt0NuubDo=; b=oy6lqXOFMCMsSLOoU2y5/zWcOFG7Eqq0F/839bPpaDZeEeHdu0Mh8siyH2921BWi2qQZhYRPd 0rzXWQ08o0XASpYThe57fLhE/5UNhM7qjytNiybyiWizOmCjyqIOV5I X-Developer-Key: i=robin@snyders.xyz; a=ed25519; pk=Mdk5dNn+Tkcy7BWexDxBLR/s1BNz8WdqDPnr3qtYBIU= X-Endpoint-Received: by B4 Relay for robin@snyders.xyz/default with auth_id=938 X-Original-From: Robin Snyders Reply-To: robin@snyders.xyz From: Robin Snyders BARK_BITE_WDOG_PET is an offset from the charger peripheral base, but the watchdog bark handler writes it as an absolute SPMI address. This can write another PMIC peripheral and leave the charger watchdog unserviced. Add the charger base, as all other qcom_smbx register accesses do. Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driv= er") Cc: stable@vger.kernel.org Signed-off-by: Robin Snyders Reviewed-by: Konrad Dybcio --- drivers/power/supply/qcom_smbx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_s= mbx.c index 67fdb43353388..e6f2328f295c7 100644 --- a/drivers/power/supply/qcom_smbx.c +++ b/drivers/power/supply/qcom_smbx.c @@ -764,7 +764,7 @@ static irqreturn_t smb_handle_wdog_bark(int irq, void *= data) =20 power_supply_changed(chip->chg_psy); =20 - rc =3D regmap_write(chip->regmap, BARK_BITE_WDOG_PET, + rc =3D regmap_write(chip->regmap, chip->base + BARK_BITE_WDOG_PET, BARK_BITE_WDOG_PET_BIT); if (rc < 0) dev_err(chip->dev, "Couldn't pet the dog rc=3D%d\n", rc); --=20 2.54.0 From nobody Tue Sep 29 05:35:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 611C8434E28; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; cv=none; b=n+l+WiHu37IIpCARxl80XR53Me16LE1TYCMy5PdCedWD7ZAuH55NfkoADJh5Zf4Q8Zho54trEz1ZR4SyEo7G44xrgFpzBxX5P8qz63AlEfNMuBM2dasjU/mD/1abvBw4ytCQpZFmlgYZru6lblRZGQZQ+w35zZvZFbvlM0qyEho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; c=relaxed/simple; bh=nDCQMrqqLhcGA5ze3CZMmKpJQMapDcbbk4gIUPfJxKM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DwAM3vU1J7TD+VTLxCnlmFIQqDEeITtPjyJVj56tlwG2NjYFQcyvL3u0Ne28guIbSis2RysTb1dkiVBinciXUD88flv4hPLlNIn8jHyZfE/Do0RHUt92NMoeutEDyasxmvGz/e9HWVbTtbF1UCz7rnFlDnhJ40AbRx3Y/ImENCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=rUDOqmqu; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="rUDOqmqu" Received: by smtp.kernel.org (Postfix) with ESMTPS id 1AB90C2BCF4; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1786491013; bh=nDCQMrqqLhcGA5ze3CZMmKpJQMapDcbbk4gIUPfJxKM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=rUDOqmquAS037bEakwCTDU8lGDMnYaalHTc3QgHhnAiYMg8qwKRndGL0VSg3k4351 7yOIOicA9dEk1ni9Ll/ZtBvnPATaEtsYeLdk5DqEse9ymqlAT9QZF90dca5/KAAcg1 HKY7Gl3+ayZ1P4/3kbebOWAqeqo0WrDsfD2BpQhjrqB5tltKdHqzJWCZ31NiZFHEz2 zvP7TYYTGj8L2aIB6wOMJUuuJ/vs7qyvnY0YgdyNpliG74Mz516BBJMg2H6Uoi1Dmj kXgdkwHmqY0UZPTk/MXLte1amgCeadgOKr+9gfBQvoz/y98BGzvSK5eiUKZf6Lcp8r KTdnFbWQb4LZQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B1C8C5AC67; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) From: Robin Snyders via B4 Relay Date: Wed, 12 Aug 2026 01:29:59 +0200 Subject: [PATCH 2/5] power: supply: qcom_smbx: test battery health status bits Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260812-qcom-smbx-fixes-v1-2-eb48246be599@snyders.xyz> References: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> In-Reply-To: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> To: Casey Connolly , Sebastian Reichel Cc: Robin Snyders , linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786491008; l=1862; i=robin@snyders.xyz; s=default; h=from:subject:message-id; bh=pib+eZmrfk0+6cRSQ4e+JEOtgsEfLbNvhWGtFGr9m90=; b=w/5tI2HuuIkwX3Q6/U4R7y/mIW6GutHQBKyGhxnzi4Tfe6EaJuJoXxpbFLvQec1QcQsPCAqEG g8z1kmplFtpAmAxvgRKv4b5ZXUMH90WQp/O3vDA3qvyiuHtoST8zalH X-Developer-Key: i=robin@snyders.xyz; a=ed25519; pk=Mdk5dNn+Tkcy7BWexDxBLR/s1BNz8WdqDPnr3qtYBIU= X-Endpoint-Received: by B4 Relay for robin@snyders.xyz/default with auth_id=938 X-Original-From: Robin Snyders Reply-To: robin@snyders.xyz From: Robin Snyders BATTERY_CHARGER_STATUS_2 contains independent status and fault bits. Switching on the complete register only recognizes a fault when it is the sole asserted bit, and can report a healthy battery when another status bit is set at the same time. Test the relevant fault bits in priority order, matching the Qualcomm downstream driver handling. Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driv= er") Cc: stable@vger.kernel.org Signed-off-by: Robin Snyders Reviewed-by: Konrad Dybcio --- drivers/power/supply/qcom_smbx.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_s= mbx.c index e6f2328f295c7..0e50d81aefc2a 100644 --- a/drivers/power/supply/qcom_smbx.c +++ b/drivers/power/supply/qcom_smbx.c @@ -632,26 +632,20 @@ static int smb_get_prop_health(struct smb_chip *chip,= int *val) return rc; } =20 - switch (stat) { - case CHARGER_ERROR_STATUS_BAT_OV_BIT: + if (stat & CHARGER_ERROR_STATUS_BAT_OV_BIT) *val =3D POWER_SUPPLY_HEALTH_OVERVOLTAGE; - return 0; - case BAT_TEMP_STATUS_TOO_COLD_BIT: + else if (stat & BAT_TEMP_STATUS_TOO_COLD_BIT) *val =3D POWER_SUPPLY_HEALTH_COLD; - return 0; - case BAT_TEMP_STATUS_TOO_HOT_BIT: + else if (stat & BAT_TEMP_STATUS_TOO_HOT_BIT) *val =3D POWER_SUPPLY_HEALTH_OVERHEAT; - return 0; - case BAT_TEMP_STATUS_COLD_SOFT_LIMIT_BIT: + else if (stat & BAT_TEMP_STATUS_COLD_SOFT_LIMIT_BIT) *val =3D POWER_SUPPLY_HEALTH_COOL; - return 0; - case BAT_TEMP_STATUS_HOT_SOFT_LIMIT_BIT: + else if (stat & BAT_TEMP_STATUS_HOT_SOFT_LIMIT_BIT) *val =3D POWER_SUPPLY_HEALTH_WARM; - return 0; - default: + else *val =3D POWER_SUPPLY_HEALTH_GOOD; - return 0; - } + + return 0; } =20 static int smb_get_property(struct power_supply *psy, --=20 2.54.0 From nobody Tue Sep 29 05:35:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61121434404; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; cv=none; b=MNdeOqyq1ZFjxkTjMrYMWVYsTqmj9SXIZRzfDbv0PfiQ+X7btrh4DnSZyilbdUxE5Eqo/SW5UQs43s0Ri9DARWwOTKBBPsa9VmIYOSbnAd1ESpr60HqOM3Da/55QQPC/O26l06u8L68OhECgXF4FXtXNKmxiSUqcRy89C0WQ5IQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; c=relaxed/simple; bh=ANh+hAN+mJ2qTvzYOi2dLKnglttlmygNN/T5MmXnEmg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=h79g8c6ZbySwbJC00J8legbmIkVk+b2wSLF/niEW5E8EeFqSaFgea9buC3VDHO8/CrM8yNh6aEFRBwN2ERtuHTdW/Zs0xHfIx+a3y7fQmt9lb2u29fe2BpqOSW4WdSyx4J0MvSGGBZRVwAhcTz8Lzre8COF4xafsORp9gf7bxvg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F/1XdPqY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="F/1XdPqY" Received: by smtp.kernel.org (Postfix) with ESMTPS id 266B3C2BCFA; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1786491013; bh=ANh+hAN+mJ2qTvzYOi2dLKnglttlmygNN/T5MmXnEmg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=F/1XdPqYRD5ACV/pCeRqXWvsT67KQW5DV2B6zSWN43r1j1ATRP7bVASBco5aRibNj ApKohOVX+LhnNHS9DkY0MQOWGpfVMy7D6Feg3jlNQ6qWkQ8TVKqALOka49HBETCxCs 5es/ygr3hXqYKPEGwfZqNPaTXmdjnIpXOZvHzBtgseXsrmMuMf0FP79ev1gz9JzCJP FrloXz7ykS7fd6HFy1PGueK/EtDlsgoA3wKezV4OZuf3+rnNS8BvQ4mO8MZ4YFCHx0 1LTiShYBbEibPW3qjlqkLriz4cH7e76IOh8G98zVsgEdxZjLz9REETMUrPi2AsdF4i 69TmMQSVPtTEg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 17F5AC5CFE7; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) From: Robin Snyders via B4 Relay Date: Wed, 12 Aug 2026 01:30:00 +0200 Subject: [PATCH 3/5] power: supply: qcom_smbx: fix float voltage selector Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260812-qcom-smbx-fixes-v1-3-eb48246be599@snyders.xyz> References: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> In-Reply-To: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> To: Casey Connolly , Sebastian Reichel Cc: Robin Snyders , linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786491008; l=1518; i=robin@snyders.xyz; s=default; h=from:subject:message-id; bh=6UyH258rSK3oQF7Z0c6NQwggo0QjJynT2bHO0YhRjAg=; b=lJ18uawkS2hZQVHV+VPTSVZbIOHjQW9p0C5FG1X18Rfu6Kz4vlvguWFi21xzWprrhT+KbtskK DF4MeGyozd9DEztOOMAr0M+DswB+K/ZBNk4ZS7EeGu6uZ6AltY7ecIO X-Developer-Key: i=robin@snyders.xyz; a=ed25519; pk=Mdk5dNn+Tkcy7BWexDxBLR/s1BNz8WdqDPnr3qtYBIU= X-Endpoint-Received: by B4 Relay for robin@snyders.xyz/default with auth_id=938 X-Original-From: Robin Snyders Reply-To: robin@snyders.xyz From: Robin Snyders FLOAT_VOLTAGE_CFG encodes 3,487,500 uV as selector zero and advances in 7,500 uV steps. The current calculation adds one to that selector, so it programs the requested float voltage one step too high. Remove the extra offset and name the hardware encoding constants. Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driv= er") Cc: stable@vger.kernel.org Signed-off-by: Robin Snyders Reviewed-by: Konrad Dybcio --- drivers/power/supply/qcom_smbx.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_s= mbx.c index 0e50d81aefc2a..e236b95c0ebf3 100644 --- a/drivers/power/supply/qcom_smbx.c +++ b/drivers/power/supply/qcom_smbx.c @@ -352,6 +352,8 @@ =20 /* pmi8998 registers represent current in increments of 1/40th of an amp */ #define CURRENT_SCALE_FACTOR 25000 +#define SMB2_FLOAT_VOLTAGE_MIN_UV 3487500 +#define SMB2_FLOAT_VOLTAGE_STEP_UV 7500 /* clang-format on */ =20 enum charger_status { @@ -993,7 +995,8 @@ static int smb_probe(struct platform_device *pdev) return dev_err_probe(chip->dev, rc, "Failed to init status change work\n"); =20 - rc =3D (chip->batt_info->voltage_max_design_uv - 3487500) / 7500 + 1; + rc =3D (chip->batt_info->voltage_max_design_uv - + SMB2_FLOAT_VOLTAGE_MIN_UV) / SMB2_FLOAT_VOLTAGE_STEP_UV; rc =3D regmap_update_bits(chip->regmap, chip->base + FLOAT_VOLTAGE_CFG, FLOAT_VOLTAGE_SETTING_MASK, rc); if (rc < 0) --=20 2.54.0 From nobody Tue Sep 29 05:35:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 666EE434E40; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; cv=none; b=iP3MeKyLg0pNBYtL9HnMH+mmH6yE/5sNfyvQoazAHP+avtpGixwF2Up7QFNAh76xuAFRwHZmWkAT6hz4f29g5giQ1icOfS7UebL2sZzwAyHc1cMFceeN6+V7x2FVYGmOTgQrs7ZzJ/sk7RMkPOE5BTDOPQ01lg4HqZq2PUk0NOs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; c=relaxed/simple; bh=KEUxM4u9mL2sqsdQtdngh6AEzOIeJhjeAAa1iyA6wok=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t2vAlA2vMyhTqAUQ6Uqf32qOKTSzzNffZzVwVWbbSz1CrzTUcyGyL6Px4jVYn7Rfniw6xSuhTSG57sDewj3QFlGiQhIaZadJsR+ILLOiIWVA9kXP99ewbRuOVRhEhslGrZhdi9wbMOSEpx5kbMOOsWQ9yLKP7IRvQf7Z8kY1mG8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pqBocubv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pqBocubv" Received: by smtp.kernel.org (Postfix) with ESMTPS id 35D85C2BCFD; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1786491013; bh=KEUxM4u9mL2sqsdQtdngh6AEzOIeJhjeAAa1iyA6wok=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=pqBocubveInBfxLXubPL0gYP9ZhepzPY+wSEdSzXMrk02HYW8OX/WAiVXiwujucpl iGYBYW0C6l2ok+LhBOOMtu/0avaloqRStGpvpg7eNuY6uKmbC9Xc8nkmhHfZOKYYC+ iJGe0Axe5EJIzL0GuwI//aABhjQnm8ZUOcf2VudPMDXBWPxwO8J37ouNcUjjNnoI7g MxU7QiTpoArJ3ozY14kkKn9ej/E/LfLxmuzJdvJ5OHuQTdwoiZXTdBdaU+WcLSprV0 7tiojVIfmHTORV/5eyPo1q17h6KxCaSJ3YMmxA9PeCezp6Lx59AyTdQMhvdQ7nZbml ZP68ayqem6cfA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25C18C5CFDB; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) From: Robin Snyders via B4 Relay Date: Wed, 12 Aug 2026 01:30:01 +0200 Subject: [PATCH 4/5] power: supply: qcom_smbx: validate battery float voltage Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260812-qcom-smbx-fixes-v1-4-eb48246be599@snyders.xyz> References: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> In-Reply-To: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> To: Casey Connolly , Sebastian Reichel Cc: Robin Snyders , linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786491008; l=5766; i=robin@snyders.xyz; s=default; h=from:subject:message-id; bh=GzUPMoVhsoygcgB/E6QggNyBQTzq9stOZL0prTQsNcM=; b=VPERR54hNV31IgFZsn84X9Hv9aKk1yFHlVBw2hbGyFRc1I7gYcahhELe4ZOEIZH1yn3DPVP5S cM64N1FgZ+oBqs0nxsnXHfcyWEF/dQVIdU+44eF1fE4yBhQ/NUzxrO0 X-Developer-Key: i=robin@snyders.xyz; a=ed25519; pk=Mdk5dNn+Tkcy7BWexDxBLR/s1BNz8WdqDPnr3qtYBIU= X-Endpoint-Received: by B4 Relay for robin@snyders.xyz/default with auth_id=938 X-Original-From: Robin Snyders Reply-To: robin@snyders.xyz From: Robin Snyders power_supply_get_battery_info() leaves absent optional properties at -EINVAL. The driver uses voltage_max_design_uv without checking it, so a missing or out-of-range value can become an invalid float-voltage selector. Prefer the constant-charge voltage because it describes the charger's CV target, then fall back to the battery design voltage. Both properties are optional in the simple-battery binding, so preserve the hardware setting when neither is present. Reject a supplied target outside the SMB2 range. smb_init_hw() enables charging before battery data is parsed and before the remaining fallible probe steps. Save the initial charging-enable bit and install a managed rollback before initialization. Keep the rollback active across battery-info, voltage, IRQ and wake-IRQ setup, then remove it only after probe can no longer fail. Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driv= er") Cc: stable@vger.kernel.org Signed-off-by: Robin Snyders --- drivers/power/supply/qcom_smbx.c | 61 ++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_s= mbx.c index e236b95c0ebf3..55ffe9857e494 100644 --- a/drivers/power/supply/qcom_smbx.c +++ b/drivers/power/supply/qcom_smbx.c @@ -353,6 +353,7 @@ /* pmi8998 registers represent current in increments of 1/40th of an amp */ #define CURRENT_SCALE_FACTOR 25000 #define SMB2_FLOAT_VOLTAGE_MIN_UV 3487500 +#define SMB2_FLOAT_VOLTAGE_MAX_UV 4920000 #define SMB2_FLOAT_VOLTAGE_STEP_UV 7500 /* clang-format on */ =20 @@ -380,6 +381,7 @@ struct smb_init_register { * @base: Base address for smb registers * @regmap: Register map * @batt_info: Battery data from DT + * @initial_charge_enable: Charging enable state before hardware setup * @status_change_work: Worker to handle plug/unplug events * @cable_irq: USB plugin IRQ * @wakeup_enabled: If the cable IRQ will cause a wakeup @@ -393,6 +395,7 @@ struct smb_chip { unsigned int base; struct regmap *regmap; struct power_supply_battery_info *batt_info; + u8 initial_charge_enable; =20 struct delayed_work status_change_work; int cable_irq; @@ -905,6 +908,19 @@ static int smb_init_hw(struct smb_chip *chip) return 0; } =20 +static void smb_restore_charge_enable(void *data) +{ + struct smb_chip *chip =3D data; + int rc; + + rc =3D regmap_update_bits(chip->regmap, + chip->base + CHARGING_ENABLE_CMD, + CHARGING_ENABLE_CMD_BIT, + chip->initial_charge_enable); + if (rc < 0) + dev_err(chip->dev, "Couldn't restore charging state: %d\n", rc); +} + static int smb_init_irq(struct smb_chip *chip, int *irq, const char *name, irqreturn_t (*handler)(int irq, void *data)) { @@ -931,6 +947,9 @@ static int smb_probe(struct platform_device *pdev) struct power_supply_config supply_config =3D {}; struct power_supply_desc *desc; struct smb_chip *chip; + unsigned int charge_enable; + unsigned int float_voltage_sel; + int float_voltage_uv; int rc, irq; =20 chip =3D devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); @@ -961,6 +980,18 @@ static int smb_probe(struct platform_device *pdev) "Couldn't get usbin_i IIO channel\n"); } =20 + rc =3D regmap_read(chip->regmap, chip->base + CHARGING_ENABLE_CMD, + &charge_enable); + if (rc < 0) + return dev_err_probe(chip->dev, rc, + "Couldn't read charging state\n"); + + chip->initial_charge_enable =3D charge_enable & CHARGING_ENABLE_CMD_BIT; + rc =3D devm_add_action_or_reset(chip->dev, smb_restore_charge_enable, chi= p); + if (rc) + return dev_err_probe(chip->dev, rc, + "Couldn't register charging state rollback\n"); + rc =3D smb_init_hw(chip); if (rc < 0) return rc; @@ -995,13 +1026,35 @@ static int smb_probe(struct platform_device *pdev) return dev_err_probe(chip->dev, rc, "Failed to init status change work\n"); =20 - rc =3D (chip->batt_info->voltage_max_design_uv - - SMB2_FLOAT_VOLTAGE_MIN_UV) / SMB2_FLOAT_VOLTAGE_STEP_UV; + if (power_supply_battery_info_has_prop(chip->batt_info, + POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX)) { + float_voltage_uv =3D + chip->batt_info->constant_charge_voltage_max_uv; + } else if (power_supply_battery_info_has_prop(chip->batt_info, + POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN)) { + float_voltage_uv =3D chip->batt_info->voltage_max_design_uv; + } else { + dev_warn(chip->dev, "No battery float voltage; preserving hardware setti= ng\n"); + goto skip_float_voltage; + } + + if (float_voltage_uv < SMB2_FLOAT_VOLTAGE_MIN_UV || + float_voltage_uv > SMB2_FLOAT_VOLTAGE_MAX_UV) + return dev_err_probe(chip->dev, -EINVAL, + "float voltage %d uV outside %d-%d uV\n", + float_voltage_uv, + SMB2_FLOAT_VOLTAGE_MIN_UV, + SMB2_FLOAT_VOLTAGE_MAX_UV); + + float_voltage_sel =3D + (float_voltage_uv - SMB2_FLOAT_VOLTAGE_MIN_UV) / + SMB2_FLOAT_VOLTAGE_STEP_UV; rc =3D regmap_update_bits(chip->regmap, chip->base + FLOAT_VOLTAGE_CFG, - FLOAT_VOLTAGE_SETTING_MASK, rc); + FLOAT_VOLTAGE_SETTING_MASK, float_voltage_sel); if (rc < 0) return dev_err_probe(chip->dev, rc, "Couldn't set vbat max\n"); =20 +skip_float_voltage: rc =3D smb_init_irq(chip, &irq, "bat-ov", smb_handle_batt_overvoltage); if (rc < 0) return rc; @@ -1025,6 +1078,8 @@ static int smb_probe(struct platform_device *pdev) if (rc < 0) return dev_err_probe(chip->dev, rc, "Couldn't set wake irq\n"); =20 + devm_remove_action(chip->dev, smb_restore_charge_enable, chip); + platform_set_drvdata(pdev, chip); =20 /* Initialise charger state */ --=20 2.54.0 From nobody Tue Sep 29 05:35:48 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 997A0439F60; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; cv=none; b=WqQlZ1EqtTY+QeOz/C1xBqoUHcxY01mBmc7DLFBWHFR2ZWbRHJwJnG0zwAyHA5ulOYMQYrIc2BBSIpK/ZA/T8AK5E1a6T8fh0BiATUlX7B5fKjZWgXKBwNh/RP7XnKCsk07n02zADeUc1B1p0TVbE6ifsPaO1ue68IlwyfeSvDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786491013; c=relaxed/simple; bh=4YHjAlEOEgbG+Gqd1X4ikqkRekgCBCEWcpaJ66iXyEI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KgdhdHqYNvy68b9hD1g21nh/IoInWmMSIUpSKi5UFf7RzCHz8pgPooytkp3xd86zNvEiCMoDAugQNN6ZKCOZ1mWstuqC1d4Q8gBas+/O0qptp0FmkswgYQzDhxw0IjdfbS1u+zDjjEif2T8CGiCnZNbkjc5B+WQfaVGH+OYxn+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eUA0CTwE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eUA0CTwE" Received: by smtp.kernel.org (Postfix) with ESMTPS id 42FA6C2BCFB; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1786491013; bh=4YHjAlEOEgbG+Gqd1X4ikqkRekgCBCEWcpaJ66iXyEI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=eUA0CTwEoMy0N++9yZ3pzgmHfIKfxHnZCIVgUHm9AuEUx2dGcQ6ATwF8VvbdytxLY YraDNMU3hO+IZdpUh+HsuBMPy4axcGRLwtSL07grT49+YKxH8kLzxq00pRC9Q4ExsR SZC5voNVEQMRMTWp9NdPyx1IxH/NRyHULP1mPAlwWTtdzQlghTrXqugbv3w+CAqXM9 efUBs35xmLei7ab4o8rFbXX5D57yhNV4464OuSwmuIBtx1HvpWbb0FrX4wRTpdpc/M KN4bCj++hBJF0o6WRJI9bZwosHbgIQH0gh5WiUAFa8Uaa80aLr5eTXbVF7KjPU/WDy EU2zVQctql2KQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 32972C5CFEB; Tue, 11 Aug 2026 23:30:13 +0000 (UTC) From: Robin Snyders via B4 Relay Date: Wed, 12 Aug 2026 01:30:02 +0200 Subject: [PATCH 5/5] power: supply: qcom_smbx: notify battery overvoltage recovery Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260812-qcom-smbx-fixes-v1-5-eb48246be599@snyders.xyz> References: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> In-Reply-To: <20260812-qcom-smbx-fixes-v1-0-eb48246be599@snyders.xyz> To: Casey Connolly , Sebastian Reichel Cc: Robin Snyders , linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Sebastian Reichel , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1786491008; l=1644; i=robin@snyders.xyz; s=default; h=from:subject:message-id; bh=U5NNbxKVGqkekK9ViQGXFAmK/qusgcI2nUh+9IqA1SU=; b=jtO6+0+lZixYfh8+WaM38GISaisUrZaUD5Z+Re84+d+Gs8/4CMMAjTQGDS84TFFC4Z7Mhw1qe jBEMqh+Oyy8B9Lk6G1oXfEjJJd4kgNC9UH4dEXykmrZXevoo6jU/tyO X-Developer-Key: i=robin@snyders.xyz; a=ed25519; pk=Mdk5dNn+Tkcy7BWexDxBLR/s1BNz8WdqDPnr3qtYBIU= X-Endpoint-Received: by B4 Relay for robin@snyders.xyz/default with auth_id=938 X-Original-From: Robin Snyders Reply-To: robin@snyders.xyz From: Robin Snyders The battery-overvoltage IRQ is configured for both edges, but its handler only notifies the power-supply core while the fault bit is asserted. The falling edge therefore does not publish the recovered health and status. The handler also ignores register-read failures before testing status. Handle read errors, log only an asserted fault, and notify the power-supply core after every successful edge read. Fixes: 8648aeb5d7b7 ("power: supply: add Qualcomm PMI8998 SMB2 Charger driv= er") Cc: stable@vger.kernel.org Signed-off-by: Robin Snyders --- drivers/power/supply/qcom_smbx.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_s= mbx.c index 55ffe9857e494..f5557b8cc92ae 100644 --- a/drivers/power/supply/qcom_smbx.c +++ b/drivers/power/supply/qcom_smbx.c @@ -722,16 +722,22 @@ static irqreturn_t smb_handle_batt_overvoltage(int ir= q, void *data) { struct smb_chip *chip =3D data; unsigned int status; + int rc; =20 - regmap_read(chip->regmap, chip->base + BATTERY_CHARGER_STATUS_2, - &status); + rc =3D regmap_read(chip->regmap, + chip->base + BATTERY_CHARGER_STATUS_2, &status); + if (rc < 0) { + dev_err(chip->dev, "Couldn't read charger status: %d\n", rc); + return IRQ_HANDLED; + } =20 if (status & CHARGER_ERROR_STATUS_BAT_OV_BIT) { /* The hardware stops charging automatically */ dev_err(chip->dev, "battery overvoltage detected\n"); - power_supply_changed(chip->chg_psy); } =20 + power_supply_changed(chip->chg_psy); + return IRQ_HANDLED; } =20 --=20 2.54.0