Re: [PATCH 1/2] regulator: Add support for power budget

From: Kory Maincent
Date: Mon Jan 13 2025 - 10:27:19 EST


On Mon, 13 Jan 2025 14:51:53 +0000
Mark Brown <broonie@xxxxxxxxxx> wrote:

> On Mon, Jan 13, 2025 at 03:45:51PM +0100, Kory Maincent wrote:
> > Mark Brown <broonie@xxxxxxxxxx> wrote:
>
> > > joining it up with the power limiting. It's fortunately not used
> > > dynamically by anything at the minute so we could just remove that API
> > > and replace it by a power one, given that nobody uses it and there do
> > > appear to be users for the power based API. We do have some things that
> > > set current limits in constraints IIRC.
>
> > There is few users for the regulator_set_current_limit function.
> > https://elixir.bootlin.com/linux/v6.12.6/A/ident/regulator_set_current_limit
> >
>
> > Not sure we could replace it to power limit that easily.
>
> Huh, I wonder what tree I grepped in. The DRM usage is yet more broken
> usage of the regulator API, I'm not sure why it attracts this so much,
> but the others are legit. Still, we should be able to map between the
> two.

We could have something like that in regulator_request_power_budget()?

if (rdev->desc->ops->get_voltage && rdev->desc->ops->set_current_limit) {
ret = regulator_get_voltage(rdev);
if (ret < 0)
return ret;

tmp_64 = pw_req;
tmp_64 *= 1000000000ull;
/* uA = mW * 1000000000 / uV */
uA = DIV_ROUND_CLOSEST_ULL(tmp_64, uV);
ret = regulator_set_current_limit(rdev, uA);
if (ret)
return ret;
}


> > > We probably also need something explicit about how we handle baseline
> > > load from things like passive components, the assumption probably needs
> > > to be that it's negligable.
>
> > We could add a devicetree property on the consumer node, but lets keep it
> > for later.
>
> One problem is that there might not be a consumer node - things like
> random passives don't tend to get represented.

Mmh true, so indeed if they are not represented lets assume they are
negligible. ;)

--
Köry Maincent, Bootlin
Embedded Linux and kernel engineering
https://bootlin.com