Message ID | 20221010210310.165461-7-marex@denx.de (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | [1/7] power: supply: bq25890: Document POWER_SUPPLY_PROP_CURRENT_NOW | expand |
Hi, On 10/10/22 23:03, Marek Vasut wrote: > 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. > > Signed-off-by: Marek Vasut <marex@denx.de> > --- > Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> > Cc: Hans de Goede <hdegoede@redhat.com> > Cc: Michał Mirosław <mirq-linux@rere.qmqm.pl> > Cc: Sebastian Reichel <sebastian.reichel@collabora.com> > To: linux-pm@vger.kernel.org Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > --- > drivers/power/supply/bq25890_charger.c | 32 ++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/power/supply/bq25890_charger.c b/drivers/power/supply/bq25890_charger.c > index 2be5861cfcb66..d8c39a0d6c965 100644 > --- a/drivers/power/supply/bq25890_charger.c > +++ b/drivers/power/supply/bq25890_charger.c > @@ -1106,6 +1106,20 @@ static int bq25890_vbus_get_voltage(struct regulator_dev *rdev) > 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 = { > .get_voltage = bq25890_vbus_get_voltage, > }; > @@ -1133,6 +1147,18 @@ static const struct regulator_desc bq25890_vbus_boost_desc = { > .ops = &bq25890_vbus_boost_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) > { > struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev); > @@ -1155,6 +1181,12 @@ static int bq25890_register_regulator(struct bq25890_device *bq) > "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; > } > #else
diff --git a/drivers/power/supply/bq25890_charger.c b/drivers/power/supply/bq25890_charger.c index 2be5861cfcb66..d8c39a0d6c965 100644 --- a/drivers/power/supply/bq25890_charger.c +++ b/drivers/power/supply/bq25890_charger.c @@ -1106,6 +1106,20 @@ static int bq25890_vbus_get_voltage(struct regulator_dev *rdev) 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 = { .get_voltage = bq25890_vbus_get_voltage, }; @@ -1133,6 +1147,18 @@ static const struct regulator_desc bq25890_vbus_boost_desc = { .ops = &bq25890_vbus_boost_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) { struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev); @@ -1155,6 +1181,12 @@ static int bq25890_register_regulator(struct bq25890_device *bq) "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; } #else
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. Signed-off-by: Marek Vasut <marex@denx.de> --- Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: Hans de Goede <hdegoede@redhat.com> Cc: Michał Mirosław <mirq-linux@rere.qmqm.pl> Cc: Sebastian Reichel <sebastian.reichel@collabora.com> To: linux-pm@vger.kernel.org --- drivers/power/supply/bq25890_charger.c | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)