From: David Lechner <dlechner@baylibre.com>
To: David Jander <david@protonic.nl>, linux-kernel@vger.kernel.org
Cc: linux-iio@vger.kernel.org, Jonathan Corbet <corbet@lwn.net>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree@vger.kernel.org, linux-doc@vger.kernel.org,
Nuno Sa <nuno.sa@analog.com>, Jonathan Cameron <jic23@kernel.org>,
Oleksij Rempel <o.rempel@pengutronix.de>
Subject: Re: [RFC PATCH 0/7] Add Linux Motion Control subsystem
Date: Fri, 28 Feb 2025 16:36:31 -0600 [thread overview]
Message-ID: <09afc3cc-a307-4662-bd70-0cf83f8f38e0@baylibre.com> (raw)
In-Reply-To: <20250227162823.3585810-1-david@protonic.nl>
On 2/27/25 10:28 AM, David Jander wrote:
> Request for comments on: adding the Linux Motion Control subsystem to the
> kernel.
>
> The Linux Motion Control subsystem (LMC) is a new kernel subsystem and
> associated device drivers for hardware devices that control mechanical
> motion. Most often these are different types of motors, but can also be
> linear actuators for example.
This is something that I played around with when I first got into Linux
kernel hacking as a hobbyist. It's something I've always wanted to see get
upstreamed, so feel free to cc me on any future revisions of this series.
I'm very interested. :-)
We made drivers for basic DC motors driven by an H-bridge both with and without
position feedback and also a driver for hobby-type servo motors. For those
interested, there is code [1] and docs [2]. One thing we would do different
if doing it over again is use a character device instead of sysfs attributes
as the interface for starting/stopping/adjusting actuation.
[1]: https://github.com/ev3dev/lego-linux-drivers/tree/ev3dev-stretch/motors
[2]: http://docs.ev3dev.org/projects/lego-linux-drivers/en/ev3dev-stretch/motors.html
>
> This subsystem defines a new UAPI for motion devices on the user-space
> side, as well as common functionality for hardware device drivers on the
> driver side.
>
> The UAPI is based on a ioctl() interface on character devices representing
> a specific hardware device. The hardware device can control one or more
> actuators (motors), which are identified as channels in the UAPI. It is
> possible to execute motions on individual channels, or combined
> affecting several selected (or all) channels simutaneously. Examples of
> coordinated movements of several channels could be the individual axes
> of a 3D printer or CNC machine for example.
>
> On the hardware side, this initial set of patches also includes two drivers
> for two different kinds of motors. One is a stepper motor controller
> device that containes a ramp generator capable of autonomously executing
> controlled motions following a multi-point acceleration profile
> (TMC5240), as well as a simple DC motor controller driver that can control
> DC motors via a half-bridge or full H-bridge driver such as the TI DRV8873
> for example.
>
> Towards the IIO subsystem, LMC supports generating iio trigger events that
> fire at certain motion events, such as passing a pre-programmed position or
> when reaching the motion target position, depending on the capabilities of
> the hardware device. This enables for example triggering an ADC measurement
> at a certain position during a movement.
I would expect to be using the counter subsystem for position, at least in
cases where there is something like a quadrature encoder involved.
>
> In the future, making use of PREEMPT_RT, even dumb STEP/DIR type stepper
> motor controller drivers may be implemented entirely in the kernel,
> depending on some characteristics of the hardware (latency jittter,
> interrupt latency and CPU speed mainly).
>
> The existence of this subsystem may affect other projects, such as
> Linux-CNC and Klipper for example.
>
> This code is already in use controlling machines with up to 16 stepper
> motors and up to 4 DC motors simutaneously. Up to this point the UAPI
> has shown to be adequate and sufficient. Careful thought has gone into
> the UAPI design to make sure it coveres as many use-cases as possible,
> while being versioned and extensible in the future, with backwards
> compatibility in mind.
>
> David Jander (7):
> drivers: Add motion control subsystem
Would it be too broad to call this an actuation subsystem instead where motion
is just one kind of actuation?
> motion: Add ADI/Trinamic TMC5240 stepper motor controller
> motion: Add simple-pwm.c PWM based DC motor controller driver
> Documentation: Add Linux Motion Control documentation
> dt-bindings: motion: Add common motion device properties
> dt-bindings: motion: Add adi,tmc5240 bindings
> dt-bindings: motion: Add motion-simple-pwm bindings
>
next prev parent reply other threads:[~2025-02-28 22:36 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-27 16:28 David Jander
2025-02-27 16:28 ` [RFC PATCH 1/7] drivers: Add motion control subsystem David Jander
2025-02-28 16:44 ` Uwe Kleine-König
2025-03-05 15:40 ` David Jander
2025-03-05 23:21 ` Uwe Kleine-König
2025-03-06 7:18 ` Greg Kroah-Hartman
2025-03-06 8:20 ` David Jander
2025-03-06 9:03 ` Greg Kroah-Hartman
2025-03-06 9:34 ` David Jander
2025-03-06 13:39 ` Greg Kroah-Hartman
2025-03-06 14:25 ` David Jander
2025-03-06 14:54 ` Greg Kroah-Hartman
2025-03-06 9:25 ` David Jander
2025-03-09 17:32 ` Jonathan Cameron
2025-03-10 8:45 ` David Jander
2025-02-28 22:36 ` David Lechner
2025-03-03 8:36 ` David Jander
2025-03-03 11:01 ` Pavel Pisa
2025-03-03 16:04 ` David Jander
2025-02-27 16:28 ` [RFC PATCH 2/7] motion: Add ADI/Trinamic TMC5240 stepper motor controller David Jander
2025-02-27 16:28 ` [RFC PATCH 3/7] motion: Add simple-pwm.c PWM based DC motor controller driver David Jander
2025-02-27 16:28 ` [RFC PATCH 4/7] Documentation: Add Linux Motion Control documentation David Jander
2025-02-27 16:37 ` Jonathan Corbet
2025-02-28 13:02 ` David Jander
2025-02-28 14:42 ` Jonathan Corbet
2025-02-28 15:06 ` David Jander
2025-02-27 16:28 ` [RFC PATCH 5/7] dt-bindings: motion: Add common motion device properties David Jander
2025-02-28 7:06 ` Krzysztof Kozlowski
2025-02-28 7:13 ` Krzysztof Kozlowski
2025-02-27 16:28 ` [RFC PATCH 6/7] dt-bindings: motion: Add adi,tmc5240 bindings David Jander
2025-02-28 7:11 ` Krzysztof Kozlowski
2025-02-28 8:48 ` David Jander
2025-02-28 9:35 ` Krzysztof Kozlowski
2025-02-28 9:51 ` David Jander
2025-02-28 14:01 ` Krzysztof Kozlowski
2025-02-28 22:38 ` David Lechner
2025-03-03 11:22 ` David Jander
2025-03-03 12:28 ` David Lechner
2025-03-03 13:18 ` David Jander
2025-02-27 16:28 ` [RFC PATCH 7/7] dt-bindings: motion: Add motion-simple-pwm bindings David Jander
2025-02-27 17:38 ` Rob Herring (Arm)
2025-02-28 7:12 ` Krzysztof Kozlowski
2025-02-28 9:22 ` David Jander
2025-02-28 9:37 ` Krzysztof Kozlowski
2025-02-28 10:09 ` David Jander
2025-02-28 15:18 ` Uwe Kleine-König
2025-03-03 10:53 ` Maud Spierings
2025-03-03 11:40 ` David Jander
2025-03-03 14:18 ` Krzysztof Kozlowski
2025-03-03 16:09 ` David Jander
2025-02-28 22:41 ` David Lechner
2025-03-03 12:54 ` David Jander
2025-02-28 9:34 ` [RFC PATCH 0/7] Add Linux Motion Control subsystem Pavel Pisa
2025-02-28 9:35 ` Pavel Pisa
2025-02-28 11:57 ` David Jander
2025-02-28 15:23 ` Pavel Pisa
2025-03-03 10:45 ` David Jander
2025-02-28 22:36 ` David Lechner [this message]
2025-03-03 8:28 ` David Jander
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=09afc3cc-a307-4662-bd70-0cf83f8f38e0@baylibre.com \
--to=dlechner@baylibre.com \
--cc=conor+dt@kernel.org \
--cc=corbet@lwn.net \
--cc=david@protonic.nl \
--cc=devicetree@vger.kernel.org \
--cc=jic23@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nuno.sa@analog.com \
--cc=o.rempel@pengutronix.de \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®