Commit 5f5c10ec authored by Marek Vasut's avatar Marek Vasut Committed by Sebastian Reichel

power: supply: bq25890: Factor out regulator registration code

Pull the regulator registration code into separate function, so it can
be extended to register more regulators later. Currently this is only
moving ifdeffery into one place and other preparatory changes. The
dev_err_probe() output string is changed to explicitly list vbus
regulator failure, so that once more regulators are registered, it
would be clear which one failed.
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent b63e60eb
...@@ -1110,6 +1110,36 @@ static const struct regulator_desc bq25890_vbus_desc = { ...@@ -1110,6 +1110,36 @@ static const struct regulator_desc bq25890_vbus_desc = {
.fixed_uV = 5000000, .fixed_uV = 5000000,
.n_voltages = 1, .n_voltages = 1,
}; };
static int bq25890_register_regulator(struct bq25890_device *bq)
{
struct bq25890_platform_data *pdata = dev_get_platdata(bq->dev);
struct regulator_config cfg = {
.dev = bq->dev,
.driver_data = bq,
};
struct regulator_dev *reg;
if (!IS_ERR_OR_NULL(bq->usb_phy))
return 0;
if (pdata)
cfg.init_data = pdata->regulator_init_data;
reg = devm_regulator_register(bq->dev, &bq25890_vbus_desc, &cfg);
if (IS_ERR(reg)) {
return dev_err_probe(bq->dev, PTR_ERR(reg),
"registering vbus regulator");
}
return 0;
}
#else
static inline int
bq25890_register_regulator(struct bq25890_device *bq)
{
return 0;
}
#endif #endif
static int bq25890_get_chip_version(struct bq25890_device *bq) static int bq25890_get_chip_version(struct bq25890_device *bq)
...@@ -1305,27 +1335,16 @@ static int bq25890_probe(struct i2c_client *client, ...@@ -1305,27 +1335,16 @@ static int bq25890_probe(struct i2c_client *client,
/* OTG reporting */ /* OTG reporting */
bq->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); bq->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
ret = bq25890_register_regulator(bq);
if (ret)
return ret;
if (!IS_ERR_OR_NULL(bq->usb_phy)) { if (!IS_ERR_OR_NULL(bq->usb_phy)) {
INIT_WORK(&bq->usb_work, bq25890_usb_work); INIT_WORK(&bq->usb_work, bq25890_usb_work);
bq->usb_nb.notifier_call = bq25890_usb_notifier; bq->usb_nb.notifier_call = bq25890_usb_notifier;
usb_register_notifier(bq->usb_phy, &bq->usb_nb); usb_register_notifier(bq->usb_phy, &bq->usb_nb);
} }
#ifdef CONFIG_REGULATOR
else {
struct bq25890_platform_data *pdata = dev_get_platdata(dev);
struct regulator_config cfg = { };
struct regulator_dev *reg;
cfg.dev = dev;
cfg.driver_data = bq;
if (pdata)
cfg.init_data = pdata->regulator_init_data;
reg = devm_regulator_register(dev, &bq25890_vbus_desc, &cfg);
if (IS_ERR(reg))
return dev_err_probe(dev, PTR_ERR(reg), "registering regulator");
}
#endif
ret = bq25890_power_supply_init(bq); ret = bq25890_power_supply_init(bq);
if (ret < 0) { if (ret < 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment