Skip to content

Commit

Permalink
regulator: core: Allow specifying an initial load w/ the bulk API
Browse files Browse the repository at this point in the history
There are a number of drivers that follow a pattern that looks like
this:
1. Use the regulator bulk API to get a bunch of regulators.
2. Set the load on each of the regulators to use whenever the
   regulators are enabled.

Let's make this easier by just allowing the drivers to pass the load
in.

As part of this change we need to move the error printing in
regulator_bulk_get() around; let's switch to the new dev_err_probe()
to simplify it.

Signed-off-by: Douglas Anderson <[email protected]>
Link: https://lore.kernel.org/r/20220726103631.v2.4.Ie85f68215ada39f502a96dcb8a1f3ad977e3f68a@changeid
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
dianders authored and broonie committed Jul 27, 2022
1 parent f2906aa commit 6eabfc0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
20 changes: 12 additions & 8 deletions drivers/regulator/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -4783,22 +4783,26 @@ int regulator_bulk_get(struct device *dev, int num_consumers,
consumers[i].consumer = regulator_get(dev,
consumers[i].supply);
if (IS_ERR(consumers[i].consumer)) {
ret = PTR_ERR(consumers[i].consumer);
consumers[i].consumer = NULL;
ret = dev_err_probe(dev, PTR_ERR(consumers[i].consumer),
"Failed to get supply '%s'",
consumers[i].supply);
goto err;
}

if (consumers[i].init_load_uA > 0) {
ret = regulator_set_load(consumers[i].consumer,
consumers[i].init_load_uA);
if (ret) {
i++;
goto err;
}
}
}

return 0;

err:
if (ret != -EPROBE_DEFER)
dev_err(dev, "Failed to get supply '%s': %pe\n",
consumers[i].supply, ERR_PTR(ret));
else
dev_dbg(dev, "Failed to get supply '%s', deferring\n",
consumers[i].supply);

while (--i >= 0)
regulator_put(consumers[i].consumer);

Expand Down
12 changes: 8 additions & 4 deletions include/linux/regulator/consumer.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,17 +171,21 @@ struct regulator;
/**
* struct regulator_bulk_data - Data used for bulk regulator operations.
*
* @supply: The name of the supply. Initialised by the user before
* using the bulk regulator APIs.
* @consumer: The regulator consumer for the supply. This will be managed
* by the bulk API.
* @supply: The name of the supply. Initialised by the user before
* using the bulk regulator APIs.
* @init_load_uA: After getting the regulator, regulator_set_load() will be
* called with this load. Initialised by the user before
* using the bulk regulator APIs.
* @consumer: The regulator consumer for the supply. This will be managed
* by the bulk API.
*
* The regulator APIs provide a series of regulator_bulk_() API calls as
* a convenience to consumers which require multiple supplies. This
* structure is used to manage data for these calls.
*/
struct regulator_bulk_data {
const char *supply;
int init_load_uA;
struct regulator *consumer;

/* private: Internal use */
Expand Down

0 comments on commit 6eabfc0

Please sign in to comment.