Commit 855515a6 authored by Johan Hovold's avatar Johan Hovold

USB: keyspan: fix overrun-error reporting

Fix reporting of overrun errors, which are not associated with a
character. Instead insert a null character and report only once.

Fixes: 1da177e4 ("Linux-2.6.12-rc2")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
parent 5d1678a3
...@@ -311,12 +311,13 @@ static void usa26_indat_callback(struct urb *urb) ...@@ -311,12 +311,13 @@ static void usa26_indat_callback(struct urb *urb)
if ((data[0] & 0x80) == 0) { if ((data[0] & 0x80) == 0) {
/* no errors on individual bytes, only /* no errors on individual bytes, only
possible overrun err */ possible overrun err */
if (data[0] & RXERROR_OVERRUN) if (data[0] & RXERROR_OVERRUN) {
err = TTY_OVERRUN; tty_insert_flip_char(&port->port, 0,
else TTY_OVERRUN);
err = 0; }
for (i = 1; i < urb->actual_length ; ++i) 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 { } else {
/* some bytes had errors, every byte has status */ /* some bytes had errors, every byte has status */
dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
...@@ -787,13 +788,13 @@ static void usa90_indat_callback(struct urb *urb) ...@@ -787,13 +788,13 @@ static void usa90_indat_callback(struct urb *urb)
if ((data[0] & 0x80) == 0) { if ((data[0] & 0x80) == 0) {
/* no errors on individual bytes, only /* no errors on individual bytes, only
possible overrun err*/ possible overrun err*/
if (data[0] & RXERROR_OVERRUN) if (data[0] & RXERROR_OVERRUN) {
err = TTY_OVERRUN; tty_insert_flip_char(&port->port, 0,
else TTY_OVERRUN);
err = 0; }
for (i = 1; i < urb->actual_length ; ++i) for (i = 1; i < urb->actual_length ; ++i)
tty_insert_flip_char(&port->port, tty_insert_flip_char(&port->port,
data[i], err); data[i], TTY_NORMAL);
} else { } else {
/* some bytes had errors, every byte has status */ /* some bytes had errors, every byte has status */
dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__); dev_dbg(&port->dev, "%s - RX error!!!!\n", __func__);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment