mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-27 16:01:27 +00:00
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:
parent
07c12525bb
commit
a5d990854f
1 changed files with 17 additions and 4 deletions
|
@ -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),
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue