1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| static int regulator_pre_probe(struct udevice *dev) { struct dm_regulator_uclass_plat *uc_pdata; ofnode node;
uc_pdata = dev_get_uclass_plat(dev); if (!uc_pdata) return -ENXIO;
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->init_uV = dev_read_u32_default(dev, "regulator-init-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->ramp_delay = dev_read_u32_default(dev, "regulator-ramp-delay", 0); uc_pdata->force_off = dev_read_bool(dev, "regulator-force-boot-off");
node = dev_read_subnode(dev, "regulator-state-mem"); if (ofnode_valid(node)) { uc_pdata->suspend_on = !ofnode_read_bool(node, "regulator-off-in-suspend"); if (ofnode_read_u32(node, "regulator-suspend-microvolt", &uc_pdata->suspend_uV)) uc_pdata->suspend_uV = uc_pdata->max_uV; } else { uc_pdata->suspend_on = true; uc_pdata->suspend_uV = uc_pdata->max_uV; }
if ((uc_pdata->min_uV != -ENODATA) && (uc_pdata->max_uV != -ENODATA) && (uc_pdata->min_uV == uc_pdata->max_uV)) uc_pdata->flags |= REGULATOR_FLAG_AUTOSET_UV;
if ((uc_pdata->min_uA != -ENODATA) && (uc_pdata->max_uA != -ENODATA) && (uc_pdata->min_uA == uc_pdata->max_uA)) uc_pdata->flags |= REGULATOR_FLAG_AUTOSET_UA;
return 0; }
|