From de5fd3607292f41f8bbb6198e79587f781de1211 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Mon, 28 Apr 2008 02:14:07 -0700 Subject: [PATCH] --- yaml --- r: 94089 b: refs/heads/master c: eb424fd21c0931e998156225f2a0910167c3e16c h: refs/heads/master i: 94087: d0ed07aea4deba22abd95aabcd3d76e20af4d9a3 v: v3 --- [refs] | 2 +- trunk/drivers/serial/serial_core.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index c93e6ed96117..a1c30899072a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e991a2bd4fa0b2f475b67dfe8f33e8ecbdcbb40b +refs/heads/master: eb424fd21c0931e998156225f2a0910167c3e16c diff --git a/trunk/drivers/serial/serial_core.c b/trunk/drivers/serial/serial_core.c index a9ca03ead3e5..977ce820ce30 100644 --- a/trunk/drivers/serial/serial_core.c +++ b/trunk/drivers/serial/serial_core.c @@ -329,13 +329,15 @@ EXPORT_SYMBOL(uart_update_timeout); * If it's still invalid, we try 9600 baud. * * Update the @termios structure to reflect the baud rate - * we're actually going to be using. + * we're actually going to be using. Don't do this for the case + * where B0 is requested ("hang up"). */ unsigned int uart_get_baud_rate(struct uart_port *port, struct ktermios *termios, struct ktermios *old, unsigned int min, unsigned int max) { unsigned int try, baud, altbaud = 38400; + int hung_up = 0; upf_t flags = port->flags & UPF_SPD_MASK; if (flags == UPF_SPD_HI) @@ -360,8 +362,10 @@ uart_get_baud_rate(struct uart_port *port, struct ktermios *termios, /* * Special case: B0 rate. */ - if (baud == 0) + if (baud == 0) { + hung_up = 1; baud = 9600; + } if (baud >= min && baud <= max) return baud; @@ -373,7 +377,9 @@ uart_get_baud_rate(struct uart_port *port, struct ktermios *termios, termios->c_cflag &= ~CBAUD; if (old) { baud = tty_termios_baud_rate(old); - tty_termios_encode_baud_rate(termios, baud, baud); + if (!hung_up) + tty_termios_encode_baud_rate(termios, + baud, baud); old = NULL; continue; } @@ -382,7 +388,8 @@ uart_get_baud_rate(struct uart_port *port, struct ktermios *termios, * As a last resort, if the quotient is zero, * default to 9600 bps */ - tty_termios_encode_baud_rate(termios, 9600, 9600); + if (!hung_up) + tty_termios_encode_baud_rate(termios, 9600, 9600); } return 0;