Commit ce054039 authored by Johan Hovold's avatar Johan Hovold

USB: serial: ftdi_sio: clean up receive processing

Clean up receive processing by dropping the character pointer and
keeping the length argument unchanged throughout the function.

Also make it more apparent that sysrq processing can consume a
characters by adding an explicit continue.
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
parent ab4cc4ef
...@@ -2483,7 +2483,6 @@ static int ftdi_process_packet(struct usb_serial_port *port, ...@@ -2483,7 +2483,6 @@ static int ftdi_process_packet(struct usb_serial_port *port,
struct ftdi_private *priv, unsigned char *buf, int len) struct ftdi_private *priv, unsigned char *buf, int len)
{ {
unsigned char status; unsigned char status;
unsigned char *ch;
int i; int i;
char flag; char flag;
...@@ -2526,8 +2525,7 @@ static int ftdi_process_packet(struct usb_serial_port *port, ...@@ -2526,8 +2525,7 @@ static int ftdi_process_packet(struct usb_serial_port *port,
else else
priv->transmit_empty = 0; priv->transmit_empty = 0;
len -= 2; if (len == 2)
if (!len)
return 0; /* status only */ return 0; /* status only */
/* /*
...@@ -2556,19 +2554,20 @@ static int ftdi_process_packet(struct usb_serial_port *port, ...@@ -2556,19 +2554,20 @@ static int ftdi_process_packet(struct usb_serial_port *port,
} }
} }
port->icount.rx += len; port->icount.rx += len - 2;
ch = buf + 2;
if (port->port.console && port->sysrq) { if (port->port.console && port->sysrq) {
for (i = 0; i < len; i++, ch++) { for (i = 2; i < len; i++) {
if (!usb_serial_handle_sysrq_char(port, *ch)) if (usb_serial_handle_sysrq_char(port, buf[i]))
tty_insert_flip_char(&port->port, *ch, flag); continue;
tty_insert_flip_char(&port->port, buf[i], flag);
} }
} else { } else {
tty_insert_flip_string_fixed_flag(&port->port, ch, flag, len); tty_insert_flip_string_fixed_flag(&port->port, buf + 2, flag,
len - 2);
} }
return len; return len - 2;
} }
static void ftdi_process_read_urb(struct urb *urb) static void ftdi_process_read_urb(struct urb *urb)
......
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