[PATCH] power: supply: qcom_smbx: allow disabling charging

From: David Heidelberg via B4 Relay

Date: Sun Mar 15 2026 - 15:40:29 EST


From: Casey Connolly <casey.connolly@xxxxxxxxxx>

Hook up USBIN_CMD_IL so that writing "0" to the status register will
disable charging, this is useful to let users limit charging
automatically.

Signed-off-by: Casey Connolly <casey.connolly@xxxxxxxxxx>
Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
Signed-off-by: David Heidelberg <david@xxxxxxx>
---
[David]
- adapted from:
https://lore.kernel.org/all/20250619-smb2-smb5-support-v1-5-ac5dec51b6e1@xxxxxxxxxx/
- moved USBIN defines into the right place inside this patch
---
drivers/power/supply/qcom_smbx.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/power/supply/qcom_smbx.c b/drivers/power/supply/qcom_smbx.c
index b1cb925581ec6..bf2e2ccc454a6 100644
--- a/drivers/power/supply/qcom_smbx.c
+++ b/drivers/power/supply/qcom_smbx.c
@@ -134,6 +134,9 @@
#define OCP_CHARGER_BIT BIT(1)
#define SDP_CHARGER_BIT BIT(0)

+#define USBIN_CMD_IL 0x340
+#define USBIN_SUSPEND_BIT BIT(0)
+
#define TYPE_C_STATUS_1 0x30B
#define UFP_TYPEC_MASK GENMASK(7, 5)
#define UFP_TYPEC_RDSTD_BIT BIT(7)
@@ -693,6 +696,9 @@ static int smb_set_property(struct power_supply *psy,
struct smb_chip *chip = power_supply_get_drvdata(psy);

switch (psp) {
+ case POWER_SUPPLY_PROP_STATUS:
+ return regmap_update_bits(chip->regmap, chip->base + USBIN_CMD_IL,
+ USBIN_SUSPEND_BIT, !val->intval);
case POWER_SUPPLY_PROP_CURRENT_MAX:
return smb_set_current_limit(chip, val->intval);
default:
@@ -705,6 +711,7 @@ static int smb_property_is_writable(struct power_supply *psy,
enum power_supply_property psp)
{
switch (psp) {
+ case POWER_SUPPLY_PROP_STATUS:
case POWER_SUPPLY_PROP_CURRENT_MAX:
return 1;
default:

---
base-commit: b84a0ebe421ca56995ff78b66307667b62b3a900
change-id: 20260315-smb2-cherry-pick-4bce2dd2fdbe

Best regards,
--
David Heidelberg <david@xxxxxxx>