dm: power: Add a function to set up all regulators

The device tree provides information about which regulators should be
on at boot, or always on. Use this to set them up automatically.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Przemyslaw Marczak <p.marczak@samsung.com>
Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
master
Simon Glass 9 years ago
parent 3b55d30f6f
commit 083fc83a4e
  1. 22
      drivers/power/regulator/regulator-uclass.c
  2. 11
      include/power/regulator.h

@ -306,6 +306,28 @@ static int regulator_pre_probe(struct udevice *dev)
return 0;
}
int regulators_enable_boot_on(bool verbose)
{
struct udevice *dev;
struct uclass *uc;
int ret;
ret = uclass_get(UCLASS_REGULATOR, &uc);
if (ret)
return ret;
for (uclass_first_device(UCLASS_REGULATOR, &dev);
dev && !ret;
uclass_next_device(&dev)) {
ret = regulator_autoset(dev);
if (ret == -EMEDIUMTYPE)
continue;
if (verbose)
regulator_show(dev, ret);
}
return ret;
}
UCLASS_DRIVER(regulator) = {
.id = UCLASS_REGULATOR,
.name = "regulator",

@ -316,6 +316,17 @@ int regulator_get_mode(struct udevice *dev);
int regulator_set_mode(struct udevice *dev, int mode_id);
/**
* regulators_enable_boot_on() - enable regulators needed for boot
*
* This enables all regulators which are marked to be on at boot time. This
* only works for regulators which don't have a range for voltage/current,
* since in that case it is not possible to know which value to use.
*
* This effectively calls regulator_autoset() for every regulator.
*/
int regulators_enable_boot_on(bool verbose);
/**
* regulator_autoset: setup the voltage/current on a regulator
*
* The setup depends on constraints found in device's uclass's platform data

Loading…
Cancel
Save