[PATCH v2 2/2] power: pmic: fix regulators behaviour

Svyatoslav Ryhel clamor95 at gmail.com
Sat Jul 15 20:34:31 CEST 2023


Currently device tree entries of regulators are completely
ignored and regulators are probed only if they are called
by the device which uses it. This results into two issues:
regulators which must run under boot-on or always-on mode
are ignored and not enabled; dts props like voltage are
not applied to the regulator so the regulator may be enabled
with random actual voltage, which may have unexpected
consequences.

This patch changes this behavior. Post-probe function is
introduced which performs probing of each pmics child and if
it is a regulator, regulator_autoset function is called, which
handles always-on and boot-on regulators, but if none of those
props are set, the regulator is disabled.

Later disabled regulators can be re-enabled by devices which
use them without issues.

Signed-off-by: Svyatoslav Ryhel <clamor95 at gmail.com>
---
 drivers/power/pmic/pmic-uclass.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c
index 0e2f5e1f41..8a26b519c9 100644
--- a/drivers/power/pmic/pmic-uclass.c
+++ b/drivers/power/pmic/pmic-uclass.c
@@ -16,6 +16,7 @@
 #include <dm/device-internal.h>
 #include <dm/uclass-internal.h>
 #include <power/pmic.h>
+#include <power/regulator.h>
 #include <linux/ctype.h>
 
 #if CONFIG_IS_ENABLED(PMIC_CHILDREN)
@@ -198,9 +199,26 @@ static int pmic_pre_probe(struct udevice *dev)
 	return 0;
 }
 
+static int pmic_post_probe(struct udevice *dev)
+{
+	struct udevice *child;
+	int ret;
+
+	device_foreach_child_probe(child, dev) {
+		if (device_get_uclass_id(child) == UCLASS_REGULATOR) {
+			ret = regulator_autoset(child);
+			if (ret == -EMEDIUMTYPE)
+				regulator_set_enable(child, false);
+		};
+	};
+
+	return 0;
+}
+
 UCLASS_DRIVER(pmic) = {
 	.id		= UCLASS_PMIC,
 	.name		= "pmic",
 	.pre_probe	= pmic_pre_probe,
+	.post_probe	= pmic_post_probe,
 	.per_device_auto	= sizeof(struct uc_pmic_priv),
 };
-- 
2.39.2



More information about the U-Boot mailing list