diff --git a/drivers/power/regulator/gpio-regulator.c b/drivers/power/regulator/gpio-regulator.c index 5bf4563916..c73c2ae12a 100644 --- a/drivers/power/regulator/gpio-regulator.c +++ b/drivers/power/regulator/gpio-regulator.c @@ -29,8 +29,7 @@ static int gpio_regulator_ofdata_to_platdata(struct udevice *dev) struct dm_regulator_uclass_platdata *uc_pdata; struct gpio_regulator_platdata *dev_pdata; struct gpio_desc *gpio; - const void *blob = gd->fdt_blob; - int ret, count, i, j; + int ret, len, i, j; u32 states_array[8]; dev_pdata = dev_get_platdata(dev); @@ -53,15 +52,17 @@ static int gpio_regulator_ofdata_to_platdata(struct udevice *dev) if (ret) debug("regulator gpio - not found! Error: %d", ret); - blob = dev_read_prop(dev, "states", &count); - if (!blob) - return -EINVAL; + len = dev_read_size(dev, "states"); + if (len < 0) + return len; - ret = dev_read_u32_array(dev, "states", states_array, count / 4); + len /= sizeof(fdt32_t); + + ret = dev_read_u32_array(dev, "states", states_array, len); if (ret) return -EINVAL; - for (i = 0, j = 0; i < count / 4; i += 2) { + for (i = 0, j = 0; i < len; i += 2) { dev_pdata->voltages[j] = states_array[i]; dev_pdata->states[j] = states_array[i + 1]; j++;