Message ID | 20240304-rk3588-saradc-v3-4-7424e2ed5d3b@theobroma-systems.com |
---|---|
State | Accepted |
Delegated to: | Kever Yang |
Headers | show |
Series | rockchip: add support for SARADCv2 and RK806 PMIC and regulators | expand |
On 2024/3/4 19:29, Quentin Schulz wrote: > From: Quentin Schulz <quentin.schulz@theobroma-systems.com> > > By passing a rk8xx_reg_info directly to the internal get_value, it'd be > possible to call this same function with a logic for getting the > rk8xx_reg_info different from the current get_ldo_reg, e.g. for NLDO and > PLDO support for RK806. > > No logic change is expected. > > Cc: Quentin Schulz <foss+uboot@0leil.net> > Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> Thanks, - Kever > --- > drivers/power/regulator/rk8xx.c | 48 ++++++++++++++++++++++++++++++----------- > 1 file changed, 36 insertions(+), 12 deletions(-) > > diff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c > index e905df3a800..212bb752a76 100644 > --- a/drivers/power/regulator/rk8xx.c > +++ b/drivers/power/regulator/rk8xx.c > @@ -780,10 +780,8 @@ static int buck_get_enable(struct udevice *dev) > return _buck_get_enable(dev->parent, buck); > } > > -static int ldo_get_value(struct udevice *dev) > +static int _ldo_get_value(struct udevice *dev, const struct rk8xx_reg_info *info) > { > - int ldo = dev->driver_data - 1; > - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); > int mask = info->vsel_mask; > int ret, val; > > @@ -797,10 +795,16 @@ static int ldo_get_value(struct udevice *dev) > return info->min_uv + val * info->step_uv; > } > > -static int ldo_set_value(struct udevice *dev, int uvolt) > +static int ldo_get_value(struct udevice *dev) > { > int ldo = dev->driver_data - 1; > - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); > + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); > + > + return _ldo_get_value(dev, info); > +} > + > +static int _ldo_set_value(struct udevice *dev, const struct rk8xx_reg_info *info, int uvolt) > +{ > int mask = info->vsel_mask; > int val; > > @@ -812,16 +816,22 @@ static int ldo_set_value(struct udevice *dev, int uvolt) > else > val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; > > - debug("%s: volt=%d, ldo=%d, reg=0x%x, mask=0x%x, val=0x%x\n", > - __func__, uvolt, ldo + 1, info->vsel_reg, mask, val); > + debug("%s: volt=%d, reg=0x%x, mask=0x%x, val=0x%x\n", > + __func__, uvolt, info->vsel_reg, mask, val); > > return pmic_clrsetbits(dev->parent, info->vsel_reg, mask, val); > } > > -static int ldo_set_suspend_value(struct udevice *dev, int uvolt) > +static int ldo_set_value(struct udevice *dev, int uvolt) > { > int ldo = dev->driver_data - 1; > const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); > + > + return _ldo_set_value(dev, info, uvolt); > +} > + > +static int _ldo_set_suspend_value(struct udevice *dev, const struct rk8xx_reg_info *info, int uvolt) > +{ > int mask = info->vsel_mask; > int val; > > @@ -833,16 +843,22 @@ static int ldo_set_suspend_value(struct udevice *dev, int uvolt) > else > val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; > > - debug("%s: volt=%d, ldo=%d, reg=0x%x, mask=0x%x, val=0x%x\n", > - __func__, uvolt, ldo + 1, info->vsel_sleep_reg, mask, val); > + debug("%s: volt=%d, reg=0x%x, mask=0x%x, val=0x%x\n", > + __func__, uvolt, info->vsel_sleep_reg, mask, val); > > return pmic_clrsetbits(dev->parent, info->vsel_sleep_reg, mask, val); > } > > -static int ldo_get_suspend_value(struct udevice *dev) > +static int ldo_set_suspend_value(struct udevice *dev, int uvolt) > { > int ldo = dev->driver_data - 1; > - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); > + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); > + > + return _ldo_set_suspend_value(dev->parent, info, uvolt); > +} > + > +static int _ldo_get_suspend_value(struct udevice *dev, const struct rk8xx_reg_info *info) > +{ > int mask = info->vsel_mask; > int val, ret; > > @@ -858,6 +874,14 @@ static int ldo_get_suspend_value(struct udevice *dev) > return info->min_uv + val * info->step_uv; > } > > +static int ldo_get_suspend_value(struct udevice *dev) > +{ > + int ldo = dev->driver_data - 1; > + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); > + > + return _ldo_get_suspend_value(dev->parent, info); > +} > + > static int ldo_set_enable(struct udevice *dev, bool enable) > { > int ldo = dev->driver_data - 1; >
diff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c index e905df3a800..212bb752a76 100644 --- a/drivers/power/regulator/rk8xx.c +++ b/drivers/power/regulator/rk8xx.c @@ -780,10 +780,8 @@ static int buck_get_enable(struct udevice *dev) return _buck_get_enable(dev->parent, buck); } -static int ldo_get_value(struct udevice *dev) +static int _ldo_get_value(struct udevice *dev, const struct rk8xx_reg_info *info) { - int ldo = dev->driver_data - 1; - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); int mask = info->vsel_mask; int ret, val; @@ -797,10 +795,16 @@ static int ldo_get_value(struct udevice *dev) return info->min_uv + val * info->step_uv; } -static int ldo_set_value(struct udevice *dev, int uvolt) +static int ldo_get_value(struct udevice *dev) { int ldo = dev->driver_data - 1; - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); + + return _ldo_get_value(dev, info); +} + +static int _ldo_set_value(struct udevice *dev, const struct rk8xx_reg_info *info, int uvolt) +{ int mask = info->vsel_mask; int val; @@ -812,16 +816,22 @@ static int ldo_set_value(struct udevice *dev, int uvolt) else val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; - debug("%s: volt=%d, ldo=%d, reg=0x%x, mask=0x%x, val=0x%x\n", - __func__, uvolt, ldo + 1, info->vsel_reg, mask, val); + debug("%s: volt=%d, reg=0x%x, mask=0x%x, val=0x%x\n", + __func__, uvolt, info->vsel_reg, mask, val); return pmic_clrsetbits(dev->parent, info->vsel_reg, mask, val); } -static int ldo_set_suspend_value(struct udevice *dev, int uvolt) +static int ldo_set_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1; const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); + + return _ldo_set_value(dev, info, uvolt); +} + +static int _ldo_set_suspend_value(struct udevice *dev, const struct rk8xx_reg_info *info, int uvolt) +{ int mask = info->vsel_mask; int val; @@ -833,16 +843,22 @@ static int ldo_set_suspend_value(struct udevice *dev, int uvolt) else val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; - debug("%s: volt=%d, ldo=%d, reg=0x%x, mask=0x%x, val=0x%x\n", - __func__, uvolt, ldo + 1, info->vsel_sleep_reg, mask, val); + debug("%s: volt=%d, reg=0x%x, mask=0x%x, val=0x%x\n", + __func__, uvolt, info->vsel_sleep_reg, mask, val); return pmic_clrsetbits(dev->parent, info->vsel_sleep_reg, mask, val); } -static int ldo_get_suspend_value(struct udevice *dev) +static int ldo_set_suspend_value(struct udevice *dev, int uvolt) { int ldo = dev->driver_data - 1; - const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); + + return _ldo_set_suspend_value(dev->parent, info, uvolt); +} + +static int _ldo_get_suspend_value(struct udevice *dev, const struct rk8xx_reg_info *info) +{ int mask = info->vsel_mask; int val, ret; @@ -858,6 +874,14 @@ static int ldo_get_suspend_value(struct udevice *dev) return info->min_uv + val * info->step_uv; } +static int ldo_get_suspend_value(struct udevice *dev) +{ + int ldo = dev->driver_data - 1; + const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); + + return _ldo_get_suspend_value(dev->parent, info); +} + static int ldo_set_enable(struct udevice *dev, bool enable) { int ldo = dev->driver_data - 1;