mirror of https://gitee.com/openkylin/linux.git
serial: stm32: Add RS485 RTS GPIO control
While the STM32 does support RS485 drive-enable control within the UART IP itself, some systems have the drive-enable line connected to a pin which cannot be pinmuxed as RTS. Add support for toggling the RTS GPIO line using the modem control GPIOs to provide at least some sort of emulation. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Alexandre Torgue <alexandre.torgue@st.com> Cc: Andy Shevchenko <andy.shevchenko@gmail.com> Cc: Manivannan Sadhasivam <mani@kernel.org> Cc: Fabrice Gasnier <fabrice.gasnier@st.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: linux-stm32@st-md-mailman.stormreply.com Link: https://lore.kernel.org/r/20200725144947.537007-1-marex@denx.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cc816969d7
commit
7df5081cbf
|
@ -129,9 +129,13 @@ static int stm32_config_rs485(struct uart_port *port,
|
||||||
if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
|
if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
|
||||||
cr3 &= ~USART_CR3_DEP;
|
cr3 &= ~USART_CR3_DEP;
|
||||||
rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;
|
rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;
|
||||||
|
mctrl_gpio_set(stm32_port->gpios,
|
||||||
|
stm32_port->port.mctrl & ~TIOCM_RTS);
|
||||||
} else {
|
} else {
|
||||||
cr3 |= USART_CR3_DEP;
|
cr3 |= USART_CR3_DEP;
|
||||||
rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
|
rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
mctrl_gpio_set(stm32_port->gpios,
|
||||||
|
stm32_port->port.mctrl | TIOCM_RTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
writel_relaxed(cr3, port->membase + ofs->cr3);
|
writel_relaxed(cr3, port->membase + ofs->cr3);
|
||||||
|
@ -847,9 +851,13 @@ static void stm32_set_termios(struct uart_port *port, struct ktermios *termios,
|
||||||
if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
|
if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
|
||||||
cr3 &= ~USART_CR3_DEP;
|
cr3 &= ~USART_CR3_DEP;
|
||||||
rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;
|
rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;
|
||||||
|
mctrl_gpio_set(stm32_port->gpios,
|
||||||
|
stm32_port->port.mctrl & ~TIOCM_RTS);
|
||||||
} else {
|
} else {
|
||||||
cr3 |= USART_CR3_DEP;
|
cr3 |= USART_CR3_DEP;
|
||||||
rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
|
rs485conf->flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
mctrl_gpio_set(stm32_port->gpios,
|
||||||
|
stm32_port->port.mctrl | TIOCM_RTS);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue