On Wed, Sep 7, 2022 at 1:34 PM Tim Hardisty <t...@jti.uk.com.invalid> wrote:

>     On Wed, Sep 7, 2022 at 1:03 PM Tim Hardisty <t...@jti.uk.com.invalid>
> wrote:
>     >>
>     >>
>     >>     >>> Please correct me if I'm still missing something, as there
> are zero
>     >>     >>> clues I can find as to what each ops function (for example)
> is
>     >>     >>> actually supposed to do.
>     >>     >>
>     >>     >>
>     >>     >>
>     >>     >>Here is two examples:
>     >>     >>https://github.com/apache/incubator-
>     >>     >>nuttx/blob/master/drivers/power/supply/regulator_gpio.c
>     >>     >>https://github.com/apache/incubator-
>     >>     >>nuttx/blob/master/drivers/power/supply/regulator_rpmsg.c
>     >>
>     >>     >thank you for these, I will take a look and hopefully they
> will point me
>     >>     >in the right direction.
>     >>
>     > Please: what are the purpose of:
>     >>
>     >> set_voltage_sel
>     >> get_voltage_sel
>
>
>     >This really should be documented in the definition of struct
>     >regulator_ops_s in include/nuttx/power/regulator.h, particularly what
>     >is the difference between set_voltage and set_voltage_sel.
>
> I agree - this should be there as comments. I will eventually submit a PR
> for my driver and, if it's not done by then, I will add these in the same
> PR



Thank you! That will be much appreciated!


    >That said, based on reading the code at _regulator_do_set_voltage() in
>     >drivers/power/supply/regulator.c, it appears that:
>
>     >1) set_voltage() is given a minimum and maximum desired voltage in
>     >microvolts and sets (if possible) the regulator's voltage selector to
>     >generate something between those bounds. It is up to the lower-half
>     >driver to look at the desired min and max voltage and figure out what
>     >the selector should be, whereas:
>
>     >2) set_voltage_sel() is given the selector value itself and sets that.
>     >The lower-half driver doesn't make decisions in this case; the
>     >upper-half driver iterates through all available voltages to decide
>     >which one is the "best" and then calls the lower-half driver with that
>     >selector value.
>
>     >The logic in _regulator_do_set_voltage() is such that if the
>     >lower-half driver provides set_voltage(), it prefers to call that; if
>     >not, then I assume it's a more "primitive" driver and therefore the
>     >upper-half decides the selector value.
>
> This is a great help, Nathan: thank you. The ACT8945A only allows discrete
> voltages to be set (64 values) so the set_voltage_sel may one way to sort
> this, although I already have code to select the right register value by
> some mathematical shenigans so could put that in the lower half and make
> use of the min and max values.



I suppose you could do both, though I don't know whether that would just be
a waste of code space. Perhaps internally one would call the other.


It is all making sense now: lack of comments, and no examples in 10.3, are
> what done me in.



Glad to be of help! Comments--or rather GOOD comments--are invaluable!

Cheers
Nathan

Reply via email to