summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/uart.c
diff options
context:
space:
mode:
authorAxel Haslam <ahaslam@baylibre.com>2016-05-31 14:36:08 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2016-05-31 17:18:18 -0700
commite55c25206d5c99b12443eec37b4832d6817170ba (patch)
treeba7883cb7e9c75e45cc002958326a59413db8872 /drivers/staging/greybus/uart.c
parent12823178332216daa76512d256dbdacb5ba76ea7 (diff)
greybus: uart: Handle CRTSCTS flag in termios
Handle the CRTSCTS flag in set_termios, so that auto flow control can be turned off. For this, add a new flag in the line coding request specifically for this purpose. Reviewed-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Axel Haslam <ahaslam@baylibre.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging/greybus/uart.c')
-rw-r--r--drivers/staging/greybus/uart.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
index 5d8f4e8095d9..44d8b9ad183a 100644
--- a/drivers/staging/greybus/uart.c
+++ b/drivers/staging/greybus/uart.c
@@ -39,6 +39,7 @@ struct gb_tty_line_coding {
__u8 format;
__u8 parity;
__u8 data_bits;
+ __u8 flow_control;
};
struct gb_tty {
@@ -375,9 +376,9 @@ static void gb_tty_set_termios(struct tty_struct *tty,
if (C_BAUD(tty) == B0) {
newline.rate = gb_tty->line_coding.rate;
- newctrl &= ~GB_UART_CTRL_DTR;
+ newctrl &= ~(GB_UART_CTRL_DTR | GB_UART_CTRL_RTS);
} else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
- newctrl |= GB_UART_CTRL_DTR;
+ newctrl |= (GB_UART_CTRL_DTR | GB_UART_CTRL_RTS);
}
if (newctrl != gb_tty->ctrlout) {
@@ -385,6 +386,11 @@ static void gb_tty_set_termios(struct tty_struct *tty,
send_control(gb_tty, newctrl);
}
+ if (C_CRTSCTS(tty) && C_BAUD(tty) != B0)
+ newline.flow_control |= GB_SERIAL_AUTO_RTSCTS_EN;
+ else
+ newline.flow_control &= ~GB_SERIAL_AUTO_RTSCTS_EN;
+
if (memcmp(&gb_tty->line_coding, &newline, sizeof(newline))) {
memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
send_line_coding(gb_tty);