power: supply: bq25890: Add Vsys regulator
The chip is capable of reporting Vsys voltage supplied to the system. Add regulator which represents the Vsys supply. This can be used e.g. as a supply for system PMIC input. Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Marek Vasut <marex@denx.de> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
committed by
Sebastian Reichel
parent
85052e9000
commit
14a3d159ab
@ -1102,6 +1102,20 @@ static int bq25890_vbus_get_voltage(struct regulator_dev *rdev)
|
|||||||
return bq25890_get_vbus_voltage(bq);
|
return bq25890_get_vbus_voltage(bq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int bq25890_vsys_get_voltage(struct regulator_dev *rdev)
|
||||||
|
{
|
||||||
|
struct bq25890_device *bq = rdev_get_drvdata(rdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Should be some output voltage ? */
|
||||||
|
ret = bq25890_field_read(bq, F_SYSV); /* read measured value */
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* converted_val = 2.304V + ADC_val * 20mV (table 10.3.15) */
|
||||||
|
return 2304000 + ret * 20000;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct regulator_ops bq25890_vbus_ops = {
|
static const struct regulator_ops bq25890_vbus_ops = {
|
||||||
.enable = bq25890_vbus_enable,
|
.enable = bq25890_vbus_enable,
|
||||||
.disable = bq25890_vbus_disable,
|
.disable = bq25890_vbus_disable,
|
||||||
@ -1117,6 +1131,18 @@ static const struct regulator_desc bq25890_vbus_desc = {
|
|||||||
.ops = &bq25890_vbus_ops,
|
.ops = &bq25890_vbus_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct regulator_ops bq25890_vsys_ops = {
|
||||||
|
.get_voltage = bq25890_vsys_get_voltage,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct regulator_desc bq25890_vsys_desc = {
|
||||||
|
.name = "vsys",
|
||||||
|
.of_match = "vsys",
|
||||||
|
.type = REGULATOR_VOLTAGE,
|
||||||
|
.owner = THIS_MODULE,
|
||||||
|
.ops = &bq25890_vsys_ops,
|
||||||
|
};
|
||||||
|
|
||||||
static int bq25890_register_regulator(struct bq25890_device *bq)
|
static int bq25890_register_regulator(struct bq25890_device *bq)
|
||||||
{
|
{
|
||||||
struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev);
|
struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev);
|
||||||
@ -1135,6 +1161,12 @@ static int bq25890_register_regulator(struct bq25890_device *bq)
|
|||||||
"registering vbus regulator");
|
"registering vbus regulator");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reg = devm_regulator_register(bq->dev, &bq25890_vsys_desc, &cfg);
|
||||||
|
if (IS_ERR(reg)) {
|
||||||
|
return dev_err_probe(bq->dev, PTR_ERR(reg),
|
||||||
|
"registering vsys regulator");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user