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"
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),
};