| From 855515a6d3731242d85850a206f2ec084c917338 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Tue, 18 Nov 2014 11:25:20 +0100 |
| Subject: USB: keyspan: fix overrun-error reporting |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 855515a6d3731242d85850a206f2ec084c917338 upstream. |
| |
| Fix reporting of overrun errors, which are not associated with a |
| character. Instead insert a null character and report only once. |
| |
| Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/serial/keyspan.c | 21 +++++++++++---------- |
| 1 file changed, 11 insertions(+), 10 deletions(-) |
| |
| --- a/drivers/usb/serial/keyspan.c |
| +++ b/drivers/usb/serial/keyspan.c |
| @@ -311,12 +311,13 @@ static void usa26_indat_callback(struct |
| if ((data[0] & 0x80) == 0) { |
| /* no errors on individual bytes, only |
| possible overrun err */ |
| - if (data[0] & RXERROR_OVERRUN) |
| - err = TTY_OVERRUN; |
| - else |
| - err = 0; |
| + if (data[0] & RXERROR_OVERRUN) { |
| + tty_insert_flip_char(&port->port, 0, |
| + TTY_OVERRUN); |
| + } |
| for (i = 1; i < urb->actual_length ; ++i) |
| - tty_insert_flip_char(&port->port, data[i], err); |
| + tty_insert_flip_char(&port->port, data[i], |
| + TTY_NORMAL); |
| } else { |
| /* some bytes had errors, every byte has status */ |
| dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); |
| @@ -790,13 +791,13 @@ static void usa90_indat_callback(struct |
| if ((data[0] & 0x80) == 0) { |
| /* no errors on individual bytes, only |
| possible overrun err*/ |
| - if (data[0] & RXERROR_OVERRUN) |
| - err = TTY_OVERRUN; |
| - else |
| - err = 0; |
| + if (data[0] & RXERROR_OVERRUN) { |
| + tty_insert_flip_char(&port->port, 0, |
| + TTY_OVERRUN); |
| + } |
| for (i = 1; i < urb->actual_length ; ++i) |
| tty_insert_flip_char(&port->port, |
| - data[i], err); |
| + data[i], TTY_NORMAL); |
| } else { |
| /* some bytes had errors, every byte has status */ |
| dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); |