* Re: [PATCH] serial: fsl_lpuart: add support for GPIO-controlled modem lines
[not found] <20260819144458.253967-1-joaofl@gmail.com>
@ 2026-09-23 12:53 ` Greg Kroah-Hartman
2026-09-23 20:41 ` João Loureiro
0 siblings, 1 reply; 2+ messages in thread
From: Greg Kroah-Hartman @ 2026-09-23 12:53 UTC (permalink / raw)
To: João Loureiro
Cc: Jiri Slaby, Sherry Sun, Frank Li, Alexander Dahl, linux-serial,
imx, linux-kernel
On Wed, Aug 19, 2026 at 04:44:53PM +0200, João Loureiro wrote:
> LPUART has no register bit to drive RTS to a chosen level: UARTMODIR only
> offers receiver-driven auto-RTS (RXRTSE) and RTS-during-transmit (TXRTSE).
> Consequently lpuart_set_mctrl() and lpuart32_set_mctrl() ignore TIOCM_RTS,
> and their get_mctrl() counterparts report a hardcoded
> TIOCM_CAR | TIOCM_DSR | TIOCM_CTS.
>
> That makes it impossible to talk to a peripheral which is driven by a
> software controlled RTS strobe and answers on CTS. TIOCMBIS/TIOCMBIC
> silently do nothing, and because CTS always reads back as asserted, a
> userspace handshake that waits for CTS to follow RTS can never complete:
> de-asserting RTS and waiting for CTS to drop times out every time. Boards
> that route the two pins to plain GPIOs cannot work around it either, since
> the driver never looks at rts-gpios/cts-gpios.
>
> Wire the driver up to the serial_mctrl_gpio helpers, as imx.c and
> atmel_serial.c already do. set_mctrl() forwards the state to
> mctrl_gpio_set(), and get_mctrl() runs the flags through mctrl_gpio_get()
> so that a described cts-gpios overrides the assumed-asserted default.
> Boards without such a description keep the previous behaviour. Modem
> status interrupts are enabled from startup() and disabled from shutdown(),
> with a .enable_ms callback for the serial core.
>
> The same limitation was reported for an i.MX 8XLite board that needs RS-485
> with a GPIO RTS [1]. This change was developed and tested on an i.MX95
> board whose barcode scanner is driven over LPUART with a manual RTS strobe;
> with it, RTS toggles as requested and CTS is reported from the real pin.
>
> [1] https://lore.kernel.org/all/20260210-rearview-hungrily-536a95fc3385@thorsis.com/
>
> Signed-off-by: João Loureiro <joaofl@gmail.com>
> ---
> drivers/tty/serial/Kconfig | 1 +
> drivers/tty/serial/fsl_lpuart.c | 35 +++++++++++++++++++++++++++++++--
> 2 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> index 4f57833e3ec7..a173eaf769ff 100644
> --- a/drivers/tty/serial/Kconfig
> +++ b/drivers/tty/serial/Kconfig
> @@ -1301,6 +1301,7 @@ config SERIAL_FSL_LPUART
> tristate "Freescale lpuart serial port support"
> depends on HAS_DMA
> select SERIAL_CORE
> + select SERIAL_MCTRL_GPIO if GPIOLIB
Why not depends?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] serial: fsl_lpuart: add support for GPIO-controlled modem lines
2026-09-23 12:53 ` [PATCH] serial: fsl_lpuart: add support for GPIO-controlled modem lines Greg Kroah-Hartman
@ 2026-09-23 20:41 ` João Loureiro
0 siblings, 0 replies; 2+ messages in thread
From: João Loureiro @ 2026-09-23 20:41 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Jiri Slaby, Sherry Sun, Frank Li, Alexander Dahl, linux-serial,
imx, linux-kernel
On Wed, Sep 23, 2026 at 02:53PM +0200, Greg Kroah-Hartman wrote:
> On Wed, Aug 19, 2026 at 04:44:53PM +0200, João Loureiro wrote:
> > --- a/drivers/tty/serial/Kconfig
> > +++ b/drivers/tty/serial/Kconfig
> > @@ -1301,6 +1301,7 @@ config SERIAL_FSL_LPUART
> > tristate "Freescale lpuart serial port support"
> > depends on HAS_DMA
> > select SERIAL_CORE
> > + select SERIAL_MCTRL_GPIO if GPIOLIB
>
> Why not depends?
Because SERIAL_MCTRL_GPIO is a hidden symbol. It is declared as a bare
"tristate" with no prompt at the end of the same Kconfig file, so it can
only ever be enabled by a select. With "depends on SERIAL_MCTRL_GPIO"
nothing could ever satisfy the dependency and SERIAL_FSL_LPUART would
become unselectable.
The dependency is also not a hard one. serial_mctrl_gpio.h provides
no-op static inlines for the !CONFIG_GPIOLIB case, so fsl_lpuart still
builds and behaves exactly as before when GPIOLIB is off; the GPIO modem
lines are an optional extra rather than a requirement. A depends would
silently drop LPUART from those configurations.
Finally, this is what every other user of the helpers does:
SERIAL_ATMEL, SERIAL_IMX, SERIAL_SH_SCI, SERIAL_STM32, SERIAL_MXS_AUART,
SERIAL_SA1100, SERIAL_CLPS711X and SERIAL_AR933X all spell it as
"select SERIAL_MCTRL_GPIO if GPIOLIB" in the same file, so this keeps
fsl_lpuart consistent with them.
Thanks,
João
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-23 20:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <20260819144458.253967-1-joaofl@gmail.com>
2026-09-23 12:53 ` [PATCH] serial: fsl_lpuart: add support for GPIO-controlled modem lines Greg Kroah-Hartman
2026-09-23 20:41 ` João Loureiro
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®