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>
This commit is contained in:
parent
1282317833
commit
e55c25206d
@ -1304,6 +1304,9 @@ struct gb_uart_set_line_coding_request {
|
|||||||
#define GB_SERIAL_SPACE_PARITY 4
|
#define GB_SERIAL_SPACE_PARITY 4
|
||||||
|
|
||||||
__u8 data_bits;
|
__u8 data_bits;
|
||||||
|
|
||||||
|
__u8 flow_control;
|
||||||
|
#define GB_SERIAL_AUTO_RTSCTS_EN 0x1
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
/* output control lines */
|
/* output control lines */
|
||||||
|
@ -39,6 +39,7 @@ struct gb_tty_line_coding {
|
|||||||
__u8 format;
|
__u8 format;
|
||||||
__u8 parity;
|
__u8 parity;
|
||||||
__u8 data_bits;
|
__u8 data_bits;
|
||||||
|
__u8 flow_control;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct gb_tty {
|
struct gb_tty {
|
||||||
@ -375,9 +376,9 @@ static void gb_tty_set_termios(struct tty_struct *tty,
|
|||||||
|
|
||||||
if (C_BAUD(tty) == B0) {
|
if (C_BAUD(tty) == B0) {
|
||||||
newline.rate = gb_tty->line_coding.rate;
|
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) {
|
} 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) {
|
if (newctrl != gb_tty->ctrlout) {
|
||||||
@ -385,6 +386,11 @@ static void gb_tty_set_termios(struct tty_struct *tty,
|
|||||||
send_control(gb_tty, newctrl);
|
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))) {
|
if (memcmp(&gb_tty->line_coding, &newline, sizeof(newline))) {
|
||||||
memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
|
memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
|
||||||
send_line_coding(gb_tty);
|
send_line_coding(gb_tty);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user