regulator: fixed: fix regulator-fixed-clock

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: f3b5100aff ("regulator: fixed: add possibility to enable by clock")
Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
John Keeping 2024-07-09 10:24:54 +01:00 committed by Tom Rini
parent 07c12525bb
commit a5d990854f

View file

@ -17,7 +17,7 @@
#include "regulator_common.h" #include "regulator_common.h"
struct fixed_clock_regulator_plat { struct fixed_clock_regulator_priv {
struct clk *enable_clock; struct clk *enable_clock;
unsigned int clk_enable_counter; 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) 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; return priv->clk_enable_counter > 0;
} }
static int fixed_clock_regulator_set_enable(struct udevice *dev, bool enable) 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); struct regulator_common_plat *plat = dev_get_plat(dev);
int ret = 0; int ret = 0;
@ -113,6 +113,17 @@ static int fixed_clock_regulator_set_enable(struct udevice *dev, bool enable)
return ret; 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 = { static const struct dm_regulator_ops fixed_regulator_ops = {
.get_value = fixed_regulator_get_value, .get_value = fixed_regulator_get_value,
.get_current = fixed_regulator_get_current, .get_current = fixed_regulator_get_current,
@ -149,6 +160,8 @@ U_BOOT_DRIVER(regulator_fixed_clock) = {
.id = UCLASS_REGULATOR, .id = UCLASS_REGULATOR,
.ops = &fixed_clock_regulator_ops, .ops = &fixed_clock_regulator_ops,
.of_match = fixed_clock_regulator_ids, .of_match = fixed_clock_regulator_ids,
.probe = fixed_clock_regulator_probe,
.of_to_plat = fixed_regulator_of_to_plat, .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),
}; };