dm: regulator: Convert regulator uclass to support livetree

Update the regulator uclass to support a live device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
master
Simon Glass 8 years ago
parent 0402d003e7
commit f15cd4f131
  1. 39
      drivers/power/regulator/regulator-uclass.c

@ -4,8 +4,8 @@
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <fdtdec.h>
#include <errno.h>
#include <dm.h>
#include <dm/uclass-internal.h>
@ -278,20 +278,16 @@ static bool regulator_name_is_unique(struct udevice *check_dev,
static int regulator_post_bind(struct udevice *dev)
{
struct dm_regulator_uclass_platdata *uc_pdata;
int offset = dev_of_offset(dev);
const void *blob = gd->fdt_blob;
const char *property = "regulator-name";
uc_pdata = dev_get_uclass_platdata(dev);
if (!uc_pdata)
return -ENXIO;
/* Regulator's mandatory constraint */
uc_pdata->name = fdt_getprop(blob, offset, property, NULL);
uc_pdata->name = dev_read_string(dev, property);
if (!uc_pdata->name) {
debug("%s: dev: %s has no property 'regulator-name'\n",
__func__, dev->name);
uc_pdata->name = fdt_get_name(blob, offset, NULL);
debug("%s: dev '%s' has no property '%s'\n",
__func__, dev->name, property);
uc_pdata->name = dev_read_name(dev);
if (!uc_pdata->name)
return -EINVAL;
}
@ -299,7 +295,7 @@ static int regulator_post_bind(struct udevice *dev)
if (regulator_name_is_unique(dev, uc_pdata->name))
return 0;
debug("\"%s\" of dev: \"%s\", has nonunique value: \"%s\"",
debug("'%s' of dev: '%s', has nonunique value: '%s\n",
property, dev->name, uc_pdata->name);
return -EINVAL;
@ -308,25 +304,22 @@ static int regulator_post_bind(struct udevice *dev)
static int regulator_pre_probe(struct udevice *dev)
{
struct dm_regulator_uclass_platdata *uc_pdata;
int offset = dev_of_offset(dev);
uc_pdata = dev_get_uclass_platdata(dev);
if (!uc_pdata)
return -ENXIO;
/* Regulator's optional constraints */
uc_pdata->min_uV = fdtdec_get_int(gd->fdt_blob, offset,
"regulator-min-microvolt", -ENODATA);
uc_pdata->max_uV = fdtdec_get_int(gd->fdt_blob, offset,
"regulator-max-microvolt", -ENODATA);
uc_pdata->min_uA = fdtdec_get_int(gd->fdt_blob, offset,
"regulator-min-microamp", -ENODATA);
uc_pdata->max_uA = fdtdec_get_int(gd->fdt_blob, offset,
"regulator-max-microamp", -ENODATA);
uc_pdata->always_on = fdtdec_get_bool(gd->fdt_blob, offset,
"regulator-always-on");
uc_pdata->boot_on = fdtdec_get_bool(gd->fdt_blob, offset,
"regulator-boot-on");
uc_pdata->min_uV = dev_read_u32_default(dev, "regulator-min-microvolt",
-ENODATA);
uc_pdata->max_uV = dev_read_u32_default(dev, "regulator-max-microvolt",
-ENODATA);
uc_pdata->min_uA = dev_read_u32_default(dev, "regulator-min-microamp",
-ENODATA);
uc_pdata->max_uA = dev_read_u32_default(dev, "regulator-max-microamp",
-ENODATA);
uc_pdata->always_on = dev_read_bool(dev, "regulator-always-on");
uc_pdata->boot_on = dev_read_bool(dev, "regulator-boot-on");
/* Those values are optional (-ENODATA if unset) */
if ((uc_pdata->min_uV != -ENODATA) &&

Loading…
Cancel
Save