| From foo@baz Fri Aug 8 09:26:33 PDT 2014 |
| From: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net> |
| Date: Sun, 3 Aug 2014 16:01:53 +0200 |
| Subject: sunsab: Fix detection of BREAK on sunsab serial console |
| |
| From: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net> |
| |
| [ Upstream commit fe418231b195c205701c0cc550a03f6c9758fd9e ] |
| |
| Fix detection of BREAK on sunsab serial console: BREAK detection was only |
| performed when there were also serial characters received simultaneously. |
| To handle all BREAKs correctly, the check for BREAK and the corresponding |
| call to uart_handle_break() must also be done if count == 0, therefore |
| duplicate this code fragment and pull it out of the loop over the received |
| characters. |
| |
| Patch applies to 3.16-rc6. |
| |
| Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/tty/serial/sunsab.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/tty/serial/sunsab.c |
| +++ b/drivers/tty/serial/sunsab.c |
| @@ -157,6 +157,15 @@ receive_chars(struct uart_sunsab_port *u |
| (up->port.line == up->port.cons->index)) |
| saw_console_brk = 1; |
| |
| + if (count == 0) { |
| + if (unlikely(stat->sreg.isr1 & SAB82532_ISR1_BRK)) { |
| + stat->sreg.isr0 &= ~(SAB82532_ISR0_PERR | |
| + SAB82532_ISR0_FERR); |
| + up->port.icount.brk++; |
| + uart_handle_break(&up->port); |
| + } |
| + } |
| + |
| for (i = 0; i < count; i++) { |
| unsigned char ch = buf[i], flag; |
| |