power: supply: bq24190: Considers FORCE_20PCT when getting IPRECHG
authorRicardo Rivera-Matos <rriveram@opensource.cirrus.com>
Fri, 14 Jul 2023 17:45:29 +0000 (12:45 -0500)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Wed, 19 Jul 2023 20:55:59 +0000 (22:55 +0200)
Adds a check of the FORCE_20PCT bit when getting the precharge
current value.

According to the bit description for the FORCE_20PCT bit, when
FORCE_20PCT is true, the precharge current target is 50% of
what is configured in the IPRECHG bit field.

Signed-off-by: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
Reviewed-by: David Rhodes <drhodes@opensource.cirrus.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/bq24190_charger.c

index ef8235848f569255dc99627a382cf59dab67d4a7..3f99cb9590ba2bef0105551eb661755647e4e5aa 100644 (file)
@@ -965,7 +965,7 @@ static int bq24190_charger_get_precharge(struct bq24190_dev_info *bdi,
                union power_supply_propval *val)
 {
        u8 v;
-       int ret;
+       int curr, ret;
 
        ret = bq24190_read_mask(bdi, BQ24190_REG_PCTCC,
                        BQ24190_REG_PCTCC_IPRECHG_MASK,
@@ -973,7 +973,20 @@ static int bq24190_charger_get_precharge(struct bq24190_dev_info *bdi,
        if (ret < 0)
                return ret;
 
-       val->intval = ++v * 128 * 1000;
+       curr = ++v * 128 * 1000;
+
+       ret = bq24190_read_mask(bdi, BQ24190_REG_CCC,
+                       BQ24190_REG_CCC_FORCE_20PCT_MASK,
+                       BQ24190_REG_CCC_FORCE_20PCT_SHIFT, &v);
+       if (ret < 0)
+               return ret;
+
+       /* If FORCE_20PCT is enabled, then current is 50% of IPRECHG value */
+       if (v)
+               curr /= 2;
+
+       val->intval = curr;
+
        return 0;
 }