12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- From 4d3c17975c7814884a721fe693b3adf5c426d759 Mon Sep 17 00:00:00 2001
- From: Hauke Mehrtens <hauke@hauke-m.de>
- Date: Tue, 10 Nov 2015 22:18:39 +0100
- Subject: [RFC] serial: core: add support for boot console with arbitrary
- baud rates
- The Arduino Yun uses a baud rate of 250000 by default. The serial is
- going over the Atmel ATmega and is used to connect to this chip.
- Without this patch Linux wants to switch the console to 230400 Baud.
- With this patch Linux will use the configured baud rate and not some
- standard one which is near by.
- Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
- ---
- drivers/tty/serial/serial_core.c | 13 ++++++++++---
- include/linux/console.h | 1 +
- 2 files changed, 11 insertions(+), 3 deletions(-)
- --- a/drivers/tty/serial/serial_core.c
- +++ b/drivers/tty/serial/serial_core.c
- @@ -164,6 +164,8 @@ static int uart_port_startup(struct tty_
- if (retval == 0) {
- if (uart_console(uport) && uport->cons->cflag) {
- tty->termios.c_cflag = uport->cons->cflag;
- + tty->termios.c_ospeed = uport->cons->baud;
- + tty->termios.c_ispeed = uport->cons->baud;
- uport->cons->cflag = 0;
- }
- /*
- @@ -1909,7 +1911,7 @@ static const struct baud_rates baud_rate
- { 4800, B4800 },
- { 2400, B2400 },
- { 1200, B1200 },
- - { 0, B38400 }
- + { 0, BOTHER }
- };
-
- /**
- @@ -1948,10 +1950,13 @@ uart_set_options(struct uart_port *port,
- * Construct a cflag setting.
- */
- for (i = 0; baud_rates[i].rate; i++)
- - if (baud_rates[i].rate <= baud)
- + if (baud_rates[i].rate == baud)
- break;
-
- termios.c_cflag |= baud_rates[i].cflag;
- + if (!baud_rates[i].rate) {
- + termios.c_ospeed = baud;
- + }
-
- if (bits == 7)
- termios.c_cflag |= CS7;
- @@ -1981,8 +1986,10 @@ uart_set_options(struct uart_port *port,
- * Allow the setting of the UART parameters with a NULL console
- * too:
- */
- - if (co)
- + if (co) {
- co->cflag = termios.c_cflag;
- + co->baud = baud;
- + }
-
- return 0;
- }
- --- a/include/linux/console.h
- +++ b/include/linux/console.h
- @@ -128,6 +128,7 @@ struct console {
- short flags;
- short index;
- int cflag;
- + int baud;
- void *data;
- struct console *next;
- };
|