mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* 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®