From: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
drivers/power/supply/bq24190_charger.c | 84 ++++++++++++++++++++++++++
1 file changed, 84 insertions(+)
diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
index a56122b39687..8c026e86aeb3 100644
--- a/drivers/power/supply/bq24190_charger.c
+++ b/drivers/power/supply/bq24190_charger.c
@@ -530,6 +530,81 @@ static int bq24190_set_otg_vbus(struct bq24190_dev_info *bdi, bool enable)
}
#ifdef CONFIG_REGULATOR
+static int bq24190_set_charging_current(struct regulator_dev *dev,
+ int min_uA, int max_uA)
+{
+ struct bq24190_dev_info *bdi = rdev_get_drvdata(dev);
+ u8 ss_reg;
+ int in_current_limit;
+ int ret = 0;
+
+ dev_info(bdi->dev, "Setting charging current %d mA\n", max_uA/1000);
+
+ ret = bq24190_read(bdi, BQ24190_REG_SS, &ss_reg);
+ if (ret < 0)
+ goto error;
+
+ if (max_uA == 0 && ss_reg != 0)
+ return ret;
+
+ if (!(ss_reg & BQ24190_REG_SS_VBUS_STAT_MASK))
+ in_current_limit = 500;
+ else
+ in_current_limit = max_uA / 1000;
+
+ return bq24190_set_field_val(bdi, BQ24190_REG_ISC,
+ BQ24190_REG_ISC_IINLIM_MASK,
+ BQ24190_REG_ISC_IINLIM_SHIFT,
+ bq24190_isc_iinlim_values,
+ ARRAY_SIZE(bq24190_isc_iinlim_values),
+ in_current_limit);
+error:
+ dev_err(bdi->dev, "Charger enable failed, err = %d\n", ret);
+ return ret;
+}
+
+static const struct regulator_ops bq24190_chrg_ops = {
+ .set_current_limit = bq24190_set_charging_current,
+};
+
+static const struct regulator_desc bq24190_chrg_desc = {
+ .name = "charger",
+ .of_match = "charger",
+ .type = REGULATOR_CURRENT,
+ .owner = THIS_MODULE,
+ .ops = &bq24190_chrg_ops,
+};
+
+static const struct regulator_init_data bq24190_chrg_init_data = {
+ .constraints = {
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_CURRENT,
+ .min_uA = 0,
+ .max_uA = 3000000,
+ },
+};
+
+static int bq24190_register_chrg_regulator(struct bq24190_dev_info *bdi)
+{
+ struct bq24190_platform_data *pdata = bdi->dev->platform_data;
+ struct regulator_config cfg = { };
+ struct regulator_dev *reg;
+ int ret = 0;
+
+ cfg.dev = bdi->dev;
+ if (pdata && pdata->regulator_init_data)
+ cfg.init_data = pdata->regulator_init_data;
+ else
+ cfg.init_data = &bq24190_chrg_init_data;
+ cfg.driver_data = bdi;
+ reg = devm_regulator_register(bdi->dev, &bq24190_chrg_desc, &cfg);
+ if (IS_ERR(reg)) {
+ ret = PTR_ERR(reg);
+ dev_err(bdi->dev, "Can't register regulator: %d\n", ret);
+ }
+
+ return ret;
+}
+
static int bq24190_vbus_enable(struct regulator_dev *dev)
{
return bq24190_set_otg_vbus(rdev_get_drvdata(dev), true);
@@ -611,6 +686,11 @@ static int bq24190_register_vbus_regulator(struct bq24190_dev_info *bdi)
return ret;
}
#else
+static int bq24190_register_chrg_regulator(struct bq24190_dev_info *bdi)
+{
+ return 0;
+}
+
static int bq24190_register_vbus_regulator(struct bq24190_dev_info *bdi)
{
return 0;
@@ -1879,6 +1959,10 @@ static int bq24190_probe(struct i2c_client *client)
goto out_charger;
}
+ ret = bq24190_register_chrg_regulator(bdi);
+ if (ret < 0)
+ goto out_charger;
+
ret = bq24190_register_vbus_regulator(bdi);
if (ret < 0)
goto out_charger;
--
2.42.0
On 24/08/2023 13:27, Emmanuel Gil Peyrot wrote:
> From: Alexandre Courbot <acourbot@nvidia.com>
Empty commit msg. Sorry, we cannot take such commits.
>
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Missing SoB.
> ---
> drivers/power/supply/bq24190_charger.c | 84 ++++++++++++++++++++++++++
> 1 file changed, 84 insertions(+)
>
> diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
> index a56122b39687..8c026e86aeb3 100644
> --- a/drivers/power/supply/bq24190_charger.c
> +++ b/drivers/power/supply/bq24190_charger.c
> @@ -530,6 +530,81 @@ static int bq24190_set_otg_vbus(struct bq24190_dev_info *bdi, bool enable)
> }
>
> #ifdef CONFIG_REGULATOR
> +static int bq24190_set_charging_current(struct regulator_dev *dev,
> + int min_uA, int max_uA)
> +{
> + struct bq24190_dev_info *bdi = rdev_get_drvdata(dev);
> + u8 ss_reg;
> + int in_current_limit;
> + int ret = 0;
> +
> + dev_info(bdi->dev, "Setting charging current %d mA\n", max_uA/1000);
This is not info. It would pollute log and it is not really necessary,
because regulator framework gives such information. You can make it
debug if you need for debug purposes.
Best regards,
Krzysztof
On Thu, Aug 24, 2023 at 02:41:41PM +0200, Krzysztof Kozlowski wrote: […] > > > > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> > > Missing SoB. Do I need to add myself even if I didn’t change anything over what the original author wrote? […] > > Best regards, > Krzysztof > Thanks, -- Link Mauve
On 24/08/2023 15:02, Emmanuel Gil Peyrot wrote: > On Thu, Aug 24, 2023 at 02:41:41PM +0200, Krzysztof Kozlowski wrote: > […] >>> >>> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com> >> >> Missing SoB. > > Do I need to add myself even if I didn’t change anything over what the > original author wrote? Yes. Best regards, Krzysztof
© 2016 - 2025 Red Hat, Inc.