summaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
authorFabio Estevam <fabio.estevam@nxp.com>2017-01-30 09:12:12 -0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-01-31 10:54:58 +0100
commitbc2be239feef9ac9fc8ad17adf7c03b353f6546f (patch)
tree1c4e2caac30b566fa6498500909cb2ea148717ba /drivers/tty
parent1a613626d2895f4f6b95a3b0a6413e52e00b5f95 (diff)
downloadlinux-rpi-bc2be239feef9ac9fc8ad17adf7c03b353f6546f.tar.gz
linux-rpi-bc2be239feef9ac9fc8ad17adf7c03b353f6546f.tar.bz2
linux-rpi-bc2be239feef9ac9fc8ad17adf7c03b353f6546f.zip
serial: imx: Fix the CTS_B polarity in RS485 mode
When userspace passes the SER_RS485_RTS_ON_SEND flag it means that the CTS_B pin should go to logic level high before the transmission begins. CTS_B goes to logic level high when both CTSC and CTS bits are cleared. When userspace passes the SER_RS485_RTS_AFTER_SEND flag it means that the CTS_B pin should go to logic level low after the transmission finishes. CTS_B goes to logic level low when CTSC bit is cleared and CTS bit is set. So fix the CTS_B polarity logic. Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/imx.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 29dd57c51706..e3e152cbc75e 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -336,15 +336,15 @@ static void imx_port_ucrs_restore(struct uart_port *port,
static void imx_port_rts_active(struct imx_port *sport, unsigned long *ucr2)
{
- *ucr2 &= ~UCR2_CTSC;
- *ucr2 |= UCR2_CTS;
+ *ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
mctrl_gpio_set(sport->gpios, sport->port.mctrl | TIOCM_RTS);
}
static void imx_port_rts_inactive(struct imx_port *sport, unsigned long *ucr2)
{
- *ucr2 &= ~(UCR2_CTSC | UCR2_CTS);
+ *ucr2 &= ~UCR2_CTSC;
+ *ucr2 |= UCR2_CTS;
mctrl_gpio_set(sport->gpios, sport->port.mctrl & ~TIOCM_RTS);
}