]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
power: supply: bq24190: Fix BQ24296 Vbus regulator support
authorHans de Goede <hdegoede@redhat.com>
Sat, 16 Nov 2024 20:36:47 +0000 (21:36 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Wed, 18 Dec 2024 23:35:30 +0000 (00:35 +0100)
There are 2 issues with bq24296_set_otg_vbus():

1. When writing the OTG_CONFIG bit it uses POC_CHG_CONFIG_SHIFT which
   should be POC_OTG_CONFIG_SHIFT.

2. When turning the regulator off it never turns charging back on. Note
   this must be done through bq24190_charger_set_charge_type(), to ensure
   that the charge_type property value of none/trickle/fast is honored.

Resolve both issues to fix BQ24296 Vbus regulator support not working.

Fixes: b150a703b56f ("power: supply: bq24190_charger: Add support for BQ24296")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20241116203648.169100-2-hdegoede@redhat.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/bq24190_charger.c

index 2b393eb5c2820e18d6244fad53efc6ef689613de..c47f32f152e602d06e62a5222607a48f8582f78d 100644 (file)
@@ -567,6 +567,7 @@ static int bq24190_set_otg_vbus(struct bq24190_dev_info *bdi, bool enable)
 
 static int bq24296_set_otg_vbus(struct bq24190_dev_info *bdi, bool enable)
 {
+       union power_supply_propval val = { .intval = bdi->charge_type };
        int ret;
 
        ret = pm_runtime_resume_and_get(bdi->dev);
@@ -587,13 +588,18 @@ static int bq24296_set_otg_vbus(struct bq24190_dev_info *bdi, bool enable)
 
                ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
                                         BQ24296_REG_POC_OTG_CONFIG_MASK,
-                                        BQ24296_REG_POC_CHG_CONFIG_SHIFT,
+                                        BQ24296_REG_POC_OTG_CONFIG_SHIFT,
                                         BQ24296_REG_POC_OTG_CONFIG_OTG);
-       } else
+       } else {
                ret = bq24190_write_mask(bdi, BQ24190_REG_POC,
                                         BQ24296_REG_POC_OTG_CONFIG_MASK,
-                                        BQ24296_REG_POC_CHG_CONFIG_SHIFT,
+                                        BQ24296_REG_POC_OTG_CONFIG_SHIFT,
                                         BQ24296_REG_POC_OTG_CONFIG_DISABLE);
+               if (ret < 0)
+                       goto out;
+
+               ret = bq24190_charger_set_charge_type(bdi, &val);
+       }
 
 out:
        pm_runtime_mark_last_busy(bdi->dev);