power: supply: bq24190_charger: Export current regulator

Change-Id: I3958896da66740d503aec5ed93e14a7d743a43ac
This commit is contained in:
Aaron Kling
2022-10-29 23:36:08 -05:00
committed by Thomas Makin
parent 5145442e1e
commit e24dd8dceb

View File

@@ -604,6 +604,81 @@ out:
}
#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 = 500000;
else
in_current_limit = max_uA;
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);
@@ -738,6 +813,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;
@@ -2153,6 +2233,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;