[PATCH v8 2/4] pwm: sun8i: Add H616 PWM support

Uwe Kleine-König ukleinek at kernel.org
Wed Sep 23 03:11:39 PDT 2026


On Wed, Sep 23, 2026 at 09:16:28AM +0200, Richard GENOUD wrote:
> Le 22/09/2026 à 17:46, James Hilliard a écrit :
> > The resolution tradeoff is real, but the waveform API currently specifies
> > the ordering: choose the largest period not exceeding the request, then
> > the largest compatible duty length not exceeding the request, then the
> > offset. That's the ordering implemented in v9.
>
> The ordering stated by pwm_round_waveform_might_sleep() documentation is
> period_length_ns, duty_length_ns and then duty_offset_ns, but what about
> duty steps?
> It's not stated in there because it's not a user input, but still, it's a
> quite important value for a pulse width *modulator*.

From my POV as someone who cares about many PWM lowlevel drivers, it
would be ideal if there would be a generic function that only relies on
conforming and ideally simple lowlevel drivers and work out a good
period that makes the required amount of duty steps available.

When I designed the requirements for the round-to-hw function I had in
mind that it should be possible to find the next higher possible period
for a given lower bound (and that works, only lacks implementation).
Working out a period that has finegrained duty steps is harder but
doable:

But something like that should work:

 - Pick a period P
 - P*, D*, _ = round_to_hw(period=P, duty_cycle=P-1, duty_offset=0)
 - Either take P* - D* as a measure for the finegrainedness, or continue
   to research available steps using round_to_hw(period=P*,
   duty_cycle=P*-1, duty_offset=0)
 - If there are too little steps pick a different P and retry.

Best regards
Uwe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20260923/3a97a04a/attachment.sig>


More information about the linux-arm-kernel mailing list