Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e55c2520 authored by Axel Haslam's avatar Axel Haslam Committed by Greg Kroah-Hartman
Browse files

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: default avatarJohan Hovold <johan@hovoldconsulting.com>
Signed-off-by: default avatarAxel Haslam <ahaslam@baylibre.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@google.com>
parent 12823178
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1304,6 +1304,9 @@ struct gb_uart_set_line_coding_request {
#define GB_SERIAL_SPACE_PARITY			4

	__u8	data_bits;

	__u8	flow_control;
#define GB_SERIAL_AUTO_RTSCTS_EN		0x1
} __packed;

/* output control lines */
+8 −2
Original line number Diff line number Diff line
@@ -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);