mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
power: regulator: Trigger probe of regulators which are always-on or boot-on
In case a regulator DT node contains regulator-always-on or regulator-boot-on property, make sure the regulator gets correctly configured by U-Boot on start up. Unconditionally probe such regulator drivers. This is a preparatory patch for introduction of .regulator_post_probe() which would trigger the regulator configuration. Parsing of regulator-always-on and regulator-boot-on DT property has been moved to regulator_post_bind() as the information is required early, the rest of the DT parsing has been kept in regulator_pre_probe() to avoid slowing down the boot process. Signed-off-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
3a0b829efc
commit
51c4679d2f
3 changed files with 18 additions and 10 deletions
|
@ -439,6 +439,8 @@ static int regulator_post_bind(struct udevice *dev)
|
|||
const char *property = "regulator-name";
|
||||
|
||||
uc_pdata = dev_get_uclass_plat(dev);
|
||||
uc_pdata->always_on = dev_read_bool(dev, "regulator-always-on");
|
||||
uc_pdata->boot_on = dev_read_bool(dev, "regulator-boot-on");
|
||||
|
||||
/* Regulator's mandatory constraint */
|
||||
uc_pdata->name = dev_read_string(dev, property);
|
||||
|
@ -450,13 +452,21 @@ static int regulator_post_bind(struct udevice *dev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (regulator_name_is_unique(dev, uc_pdata->name))
|
||||
return 0;
|
||||
if (!regulator_name_is_unique(dev, uc_pdata->name)) {
|
||||
debug("'%s' of dev: '%s', has nonunique value: '%s\n",
|
||||
property, dev->name, uc_pdata->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
debug("'%s' of dev: '%s', has nonunique value: '%s\n",
|
||||
property, dev->name, uc_pdata->name);
|
||||
/*
|
||||
* In case the regulator has regulator-always-on or
|
||||
* regulator-boot-on DT property, trigger probe() to
|
||||
* configure its default state during startup.
|
||||
*/
|
||||
if (uc_pdata->always_on || uc_pdata->boot_on)
|
||||
dev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND);
|
||||
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int regulator_pre_probe(struct udevice *dev)
|
||||
|
@ -479,8 +489,6 @@ static int regulator_pre_probe(struct udevice *dev)
|
|||
-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");
|
||||
uc_pdata->ramp_delay = dev_read_u32_default(dev, "regulator-ramp-delay",
|
||||
0);
|
||||
uc_pdata->force_off = dev_read_bool(dev, "regulator-force-boot-off");
|
||||
|
|
|
@ -33,7 +33,7 @@ static int dm_test_panel(struct unit_test_state *uts)
|
|||
ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
|
||||
&enable, &polarity));
|
||||
ut_asserteq(false, enable);
|
||||
ut_asserteq(false, regulator_get_enable(reg));
|
||||
ut_asserteq(true, regulator_get_enable(reg));
|
||||
|
||||
ut_assertok(panel_enable_backlight(dev));
|
||||
ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
|
||||
|
|
|
@ -186,7 +186,7 @@ int dm_test_power_regulator_set_enable_if_allowed(struct unit_test_state *uts)
|
|||
|
||||
/* Get BUCK1 - always on regulator */
|
||||
platname = regulator_names[BUCK1][PLATNAME];
|
||||
ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
|
||||
ut_asserteq(-EALREADY, regulator_autoset_by_name(platname, &dev_autoset));
|
||||
ut_assertok(regulator_get_by_platname(platname, &dev));
|
||||
|
||||
/* Try disabling always-on regulator */
|
||||
|
@ -288,7 +288,7 @@ static int dm_test_power_regulator_autoset(struct unit_test_state *uts)
|
|||
* Expected output state: uV=1200000; uA=200000; output enabled
|
||||
*/
|
||||
platname = regulator_names[BUCK1][PLATNAME];
|
||||
ut_assertok(regulator_autoset_by_name(platname, &dev_autoset));
|
||||
ut_asserteq(-EALREADY, regulator_autoset_by_name(platname, &dev_autoset));
|
||||
|
||||
/* Check, that the returned device is proper */
|
||||
ut_assertok(regulator_get_by_platname(platname, &dev));
|
||||
|
|
Loading…
Add table
Reference in a new issue