[Linux-stm32] [PATCH v4 0/7] pwm: New abstraction and userspace API

Trevor Gamblin tgamblin at baylibre.com
Fri Sep 6 18:08:11 UTC 2024


On 2024-09-06 11:42, Uwe Kleine-König wrote:
> Hello,
>
> here comes v4 of the series to add support for duty offset in PWM
> waveforms. For a single PWM output there is no gain, but if you have a
> chip with two (or more) outputs and both operate with the same period,
> you can generate an output like:
>
>                 ______         ______         ______         ______
>     PWM #0  ___/      \_______/      \_______/      \_______/      \_______
>                   __             __             __             __
>     PWM #1  _____/  \___________/  \___________/  \___________/  \_________
>                ^              ^              ^              ^
>
> The opportunity for a new abstraction is/should be used to also improve
> precision of the API functions, which implies that the rules for
> lowlevel drivers are more strict for the new callbacks.
>
> Changes since v3, which is available from
> https://lore.kernel.org/linux-pwm/cover.1722261050.git.u.kleine-koenig@baylibre.com/
> include:
>
>   - Drop PWM_IOCTL_GET_NUM_PWMS ioctl (patch #4), suggestion by David
>     Lechner
>
>   - Define members of userspace API struct using __u32 instead of
>     unsigned int; thanks to Kent Gibson for the suggestion (patch #4)
>
>   - Ensure that pwm_apply_state_{atomic,might_sleep}() don't return 1
>     Noticed by Fabrice Gasnier
>
>   - Rebased to current pwm/for-next.
>     (fixing a missing +1 noticed by Fabrice)
>
>   - Dropped Tested-by: from Trevor
>     While the axi-pwmgen driver didn't change, there were considerable
>     changes in the core. So I dropped it.
>
>   - add some missing EXPORT_SYMBOL_GPL for the new API functions
>
>   - Add kernel doc comments for the new API functions
>
>   - debug message in stm32_pwm_round_waveform_fromhw (another suggestion
>     by Fabrice)
>
> I also updated the branch pwm/chardev in
> https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git to
> match this v4.
>
> I'm aware of two issues in this series:
>
>   - Triggers a lockdep warning in the pwm-meson driver. This affects the
>     new pwm locking vs the clk framework's prepare lock. I think this is
>     a false positive and to fix it, only changes in the clk framework are
>     necessary.
>
>   - The functions pwm_set_waveform_might_sleep() and
>     pwm_round_waveform_might_sleep() have an unusual return value
>     convention: They return 0 on success, 1 if the requested waveform
>     cannot be implemented without breaking the rounding rules, or a
>     negative errno if an error occurs.
>     Fabrice rightfully pointed out this to be surprised by this and
>     suggested to use at least a define for it.
>
>     I couldn't find a decision that I'm entirely happy with here. My
>     conflicts are:
>
>      - I want a constant that now and in the future only means "cannot be
>        done due to the rounding rules in the pwm framework". So the
>        options are:
>          * Introduce a new ESOMETHING and return -ESOMETHING
>            I think that's hard to motivate and also myself doubt this
>            would be sensible. As below, the question for a good name is
>            unresolved.
>          * return 1
>            This is what was done in the earlier revisions and also here.
>
>      - When keeping the return 1 semantics (and also for a new
>        ESOMETHING):
>        I agree that a name instead of a plain 1 would be nice, but I
>        couldn't come up with a name I liked. Given that this can be
>        introduced later without breaking anything, I don't consider that
>        very urgent.
>        My candidates were PWM_REQUIRES_BROKEN_ROUNDING,
>        PWM_REQUIRES_FORBIDDEN_ROUNDING and PWM_ERR_ROUNDING.
>        These are too long or/and imprecise.
>        If you have a good idea, please tell.

PWM_ERR_ROUNDING doesn't seem too bad.

What about something like PWM_REQ_INVALID, PWM_WF_INVALID, or 
PWM_WF_REQ_INVALID?

>
> Still I'd like to get that forward and (unless a new and relevant issue
> pops up until then) intend to put it into next after the next merge
> window. Nevertheless I'm open for suggestions to further improve this
> series.
>
> Best regards
> Uwe
>
> Uwe Kleine-König (7):
>    pwm: Add more locking
>    pwm: New abstraction for PWM waveforms
>    pwm: Provide new consumer API functions for waveforms
>    pwm: Add support for pwmchip devices for faster and easier userspace
>      access
>    pwm: Add tracing for waveform callbacks
>    pwm: axi-pwmgen: Implementation of the waveform callbacks
>    pwm: stm32: Implementation of the waveform callbacks
>
>   drivers/pwm/core.c           | 867 +++++++++++++++++++++++++++++++++--
>   drivers/pwm/pwm-axi-pwmgen.c | 154 +++++--
>   drivers/pwm/pwm-stm32.c      | 612 ++++++++++++++++---------
>   include/linux/pwm.h          |  58 ++-
>   include/trace/events/pwm.h   | 134 +++++-
>   include/uapi/linux/pwm.h     |  24 +
>   6 files changed, 1545 insertions(+), 304 deletions(-)
>   create mode 100644 include/uapi/linux/pwm.h
>
> base-commit: cf6631b07b907d4c644ca42f7cc234e7149290a2



More information about the Linux-stm32 mailing list