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>
This commit is contained in:
parent
0402d003e7
commit
f15cd4f131
@ -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…
Reference in New Issue
Block a user