[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <cover.1726819463.git.u.kleine-koenig@baylibre.com>
Date: Fri, 20 Sep 2024 10:57:56 +0200
From: Uwe Kleine-König <u.kleine-koenig@...libre.com>
To: linux-pwm@...r.kernel.org,
linux-kernel@...r.kernel.org
Cc: Trevor Gamblin <tgamblin@...libre.com>,
David Lechner <dlechner@...libre.com>,
Kent Gibson <warthog618@...il.com>,
Fabrice Gasnier <fabrice.gasnier@...s.st.com>,
Steven Rostedt <rostedt@...dmis.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
linux-trace-kernel@...r.kernel.org,
Michael Hennerich <michael.hennerich@...log.com>,
Nuno Sá <nuno.sa@...log.com>,
Maxime Coquelin <mcoquelin.stm32@...il.com>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org
Subject: [PATCH v5 0/8] pwm: New abstraction and userspace API
Hello,
here comes v5 of the series to add support for duty offset in PWM
waveforms. With that (and using two PWMs of a single chip) the following
waveform pair can be configured:
______ ______ ______ ______
PWM #0 ___/ \_______/ \_______/ \_______/ \_______
__ __ __ __
PWM #1 _____/ \___________/ \___________/ \___________/ \_________
^ ^ ^ ^
This is required for an adc driver by Trevor Gamblin[1]. The last patch
also adds a new userspace API using a character device per pwm_chip (if
the underlaying lowlevel driver support the new waveform callbacks).
Compared to the earlier revisions of this series it was moved to the
last patch because I don't intend to apply it during the next
development cycle. The reason that makes me hesitate is that the return
value convention by the .round_waveform_tohw() callback is unusual: It
returns either 0 or 1 or a negative error value. These return values are
passed to userspace as the return value of the added ioctl() calls and
so are not changable any more once they are considered part of the
userspace API. So for now the pwm internal convention stays unusual as
it was before, but can still be easily adapted if practise showed the
convention to be too bad to keep.
If you want to test this series, the current state is available at
https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git pwm/chardev
.
Changes since v4 which is available at
https://lore.kernel.org/linux-pwm/cover.1725635013.git.u.kleine-koenig@baylibre.com
:
- As described above: New patch to reorder symbols in core.c and the
character device patch is moved to the end.
- PWM_IOCTL_REQUEST is now mandatory before using a pwm device via the
pwmchip character device. Thanks to David for input here.
The libpwm repo[2] is updated accordingly.
- PWM_IOCTL_REQUEST and PWM_IOCTL_FREE calling convention changed.
Before you had to do:
someuint = 3;
ioctl(pwmchipfd, PWM_IOCTL_REQUEST, &someuint);
Now it's just:
ioctl(pwmchipfd, PWM_IOCTL_REQUEST, 3);
- There is a new patch that reorders functions in drivers/pwm/core.c.
The motivation for that was a locking issue in the ioctl code where
pwm_lock was taken twice on PWM_IOCTL_FREE. So a new variant of
pwm_put() was introduced that relies on the caller to have grabbed
the lock already. To not have to declare this new function, it had to
be moved further up in core.c
- Some debugging code removed. (huh, thanks to David for noticing.)
- Additions to comments (also kernel doc) and commit logs for several
patches to (hopefully) make things clearer.
- Refactored how the input is validated for the PWM_IOCTL_SET*WF
ioctls to remove code duplication. (IIRC this was feedback on an
earlier revision. But I only remembered it and couldn't find it in my
mailbox. I think it was Fabrice who wrote that, but I'm not entirely
sure. Thanks to whoever it was.)
Unless something grave pops up, I intend to add this series (without the
last patch) to next after the merge window closes to give it some more
exposure and testing. I'm pretty sure the code still has to be fixed and
improved here and there, but I will do that in-tree then. Once I'm sure
it will go in, I'll create a tag for Jonathan to merge into his iio tree
to allow him to apply Trevor's adc driver.
@Jonathan: What's your desired timing? I'd target for around -rc3 time
to create that tag for you. Is that early enough for you?
Best regards
Uwe
[1] https://lore.kernel.org/linux-iio/20240909-ad7625_r1-v5-0-60a397768b25@baylibre.com
[2] https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/libpwm.git
Uwe Kleine-König (8):
pwm: Add more locking
pwm: New abstraction for PWM waveforms
pwm: Provide new consumer API functions for waveforms
pwm: Add tracing for waveform callbacks
pwm: axi-pwmgen: Implementation of the waveform callbacks
pwm: stm32: Implementation of the waveform callbacks
pwm: Reorder symbols in core.c
pwm: Add support for pwmchip devices for faster and easier userspace access
drivers/pwm/core.c | 1144 +++++++++++++++++++++++++++++-----
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 | 32 +
6 files changed, 1693 insertions(+), 441 deletions(-)
create mode 100644 include/uapi/linux/pwm.h
base-commit: d242feaf81d63b25d8c1fb1a68738dc33966a376
--
2.45.2
Powered by blists - more mailing lists