[PATCH] regulator: fixed: fix regulator-fixed-clock

John Keeping jkeeping at inmusicbrands.com
Tue Jul 9 11:24:54 CEST 2024


For regulator-fixed-clock, the device's private data is never set so in
fixed_clock_regulator_set_enable() is null and the function cannot
complete successfully.

Rename the _plat structure to _priv to better represent its role and set
this as the private data.  As shown by the set_enable() function and by
using the same .of_to_plat hook as regulator-fixed, the platform data is
regulator_common_plat so also set .plat_auto correctly.

Finally, set up the private data by adding a .probe function to look up
the clock and set the member variable.

Fixes: f3b5100aff3 ("regulator: fixed: add possibility to enable by clock")
Signed-off-by: John Keeping <jkeeping at inmusicbrands.com>
---
 drivers/power/regulator/fixed.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/drivers/power/regulator/fixed.c b/drivers/power/regulator/fixed.c
index 98c89bf2aff..996da41546a 100644
--- a/drivers/power/regulator/fixed.c
+++ b/drivers/power/regulator/fixed.c
@@ -17,7 +17,7 @@
 
 #include "regulator_common.h"
 
-struct fixed_clock_regulator_plat {
+struct fixed_clock_regulator_priv {
 	struct clk *enable_clock;
 	unsigned int clk_enable_counter;
 };
@@ -83,14 +83,14 @@ static int fixed_regulator_set_enable(struct udevice *dev, bool enable)
 
 static int fixed_clock_regulator_get_enable(struct udevice *dev)
 {
-	struct fixed_clock_regulator_plat *priv = dev_get_priv(dev);
+	struct fixed_clock_regulator_priv *priv = dev_get_priv(dev);
 
 	return priv->clk_enable_counter > 0;
 }
 
 static int fixed_clock_regulator_set_enable(struct udevice *dev, bool enable)
 {
-	struct fixed_clock_regulator_plat *priv = dev_get_priv(dev);
+	struct fixed_clock_regulator_priv *priv = dev_get_priv(dev);
 	struct regulator_common_plat *plat = dev_get_plat(dev);
 	int ret = 0;
 
@@ -113,6 +113,17 @@ static int fixed_clock_regulator_set_enable(struct udevice *dev, bool enable)
 	return ret;
 }
 
+static int fixed_clock_regulator_probe(struct udevice *dev)
+{
+	struct fixed_clock_regulator_priv *priv = dev_get_priv(dev);
+
+	priv->enable_clock = devm_clk_get(dev, NULL);
+	if (IS_ERR(priv->enable_clock))
+		return PTR_ERR(priv->enable_clock);
+
+	return 0;
+}
+
 static const struct dm_regulator_ops fixed_regulator_ops = {
 	.get_value	= fixed_regulator_get_value,
 	.get_current	= fixed_regulator_get_current,
@@ -149,6 +160,8 @@ U_BOOT_DRIVER(regulator_fixed_clock) = {
 	.id = UCLASS_REGULATOR,
 	.ops = &fixed_clock_regulator_ops,
 	.of_match = fixed_clock_regulator_ids,
+	.probe = fixed_clock_regulator_probe,
 	.of_to_plat = fixed_regulator_of_to_plat,
-	.plat_auto = sizeof(struct fixed_clock_regulator_plat),
+	.plat_auto = sizeof(struct regulator_common_plat),
+	.priv_auto = sizeof(struct fixed_clock_regulator_priv),
 };
-- 
2.45.2



More information about the U-Boot mailing list