diff options
Diffstat (limited to 'drivers/usb/serial/spcp8x5.c')
-rw-r--r-- | drivers/usb/serial/spcp8x5.c | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/usb/serial/spcp8x5.c b/drivers/usb/serial/spcp8x5.c index 1e58220403d1..5d39191e7244 100644 --- a/drivers/usb/serial/spcp8x5.c +++ b/drivers/usb/serial/spcp8x5.c | |||
@@ -45,7 +45,7 @@ static int debug; | |||
45 | #define SPCP8x5_835_VID 0x04fc | 45 | #define SPCP8x5_835_VID 0x04fc |
46 | #define SPCP8x5_835_PID 0x0231 | 46 | #define SPCP8x5_835_PID 0x0231 |
47 | 47 | ||
48 | static struct usb_device_id id_table [] = { | 48 | static const struct usb_device_id id_table[] = { |
49 | { USB_DEVICE(SPCP8x5_PHILIPS_VID , SPCP8x5_PHILIPS_PID)}, | 49 | { USB_DEVICE(SPCP8x5_PHILIPS_VID , SPCP8x5_PHILIPS_PID)}, |
50 | { USB_DEVICE(SPCP8x5_INTERMATIC_VID, SPCP8x5_INTERMATIC_PID)}, | 50 | { USB_DEVICE(SPCP8x5_INTERMATIC_VID, SPCP8x5_INTERMATIC_PID)}, |
51 | { USB_DEVICE(SPCP8x5_835_VID, SPCP8x5_835_PID)}, | 51 | { USB_DEVICE(SPCP8x5_835_VID, SPCP8x5_835_PID)}, |
@@ -609,7 +609,7 @@ static void spcp8x5_set_termios(struct tty_struct *tty, | |||
609 | if (i < 0) | 609 | if (i < 0) |
610 | dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", | 610 | dev_err(&port->dev, "Set UART format %#x failed (error = %d)\n", |
611 | uartdata, i); | 611 | uartdata, i); |
612 | dbg("0x21:0x40:0:0 %d\n", i); | 612 | dbg("0x21:0x40:0:0 %d", i); |
613 | 613 | ||
614 | if (cflag & CRTSCTS) { | 614 | if (cflag & CRTSCTS) { |
615 | /* enable hardware flow control */ | 615 | /* enable hardware flow control */ |
@@ -677,7 +677,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) | |||
677 | struct tty_struct *tty; | 677 | struct tty_struct *tty; |
678 | unsigned char *data = urb->transfer_buffer; | 678 | unsigned char *data = urb->transfer_buffer; |
679 | unsigned long flags; | 679 | unsigned long flags; |
680 | int i; | ||
681 | int result = urb->status; | 680 | int result = urb->status; |
682 | u8 status; | 681 | u8 status; |
683 | char tty_flag; | 682 | char tty_flag; |
@@ -687,8 +686,6 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) | |||
687 | 686 | ||
688 | /* check the urb status */ | 687 | /* check the urb status */ |
689 | if (result) { | 688 | if (result) { |
690 | if (!port->port.count) | ||
691 | return; | ||
692 | if (result == -EPROTO) { | 689 | if (result == -EPROTO) { |
693 | /* spcp8x5 mysteriously fails with -EPROTO */ | 690 | /* spcp8x5 mysteriously fails with -EPROTO */ |
694 | /* reschedule the read */ | 691 | /* reschedule the read */ |
@@ -726,26 +723,20 @@ static void spcp8x5_read_bulk_callback(struct urb *urb) | |||
726 | 723 | ||
727 | tty = tty_port_tty_get(&port->port); | 724 | tty = tty_port_tty_get(&port->port); |
728 | if (tty && urb->actual_length) { | 725 | if (tty && urb->actual_length) { |
729 | tty_buffer_request_room(tty, urb->actual_length + 1); | ||
730 | /* overrun is special, not associated with a char */ | 726 | /* overrun is special, not associated with a char */ |
731 | if (status & UART_OVERRUN_ERROR) | 727 | if (status & UART_OVERRUN_ERROR) |
732 | tty_insert_flip_char(tty, 0, TTY_OVERRUN); | 728 | tty_insert_flip_char(tty, 0, TTY_OVERRUN); |
733 | for (i = 0; i < urb->actual_length; ++i) | 729 | tty_insert_flip_string_fixed_flag(tty, data, |
734 | tty_insert_flip_char(tty, data[i], tty_flag); | 730 | urb->actual_length, tty_flag); |
735 | tty_flip_buffer_push(tty); | 731 | tty_flip_buffer_push(tty); |
736 | } | 732 | } |
737 | tty_kref_put(tty); | 733 | tty_kref_put(tty); |
738 | 734 | ||
739 | /* Schedule the next read _if_ we are still open */ | 735 | /* Schedule the next read */ |
740 | if (port->port.count) { | 736 | urb->dev = port->serial->dev; |
741 | urb->dev = port->serial->dev; | 737 | result = usb_submit_urb(urb , GFP_ATOMIC); |
742 | result = usb_submit_urb(urb , GFP_ATOMIC); | 738 | if (result) |
743 | if (result) | 739 | dev_dbg(&port->dev, "failed submitting read urb %d\n", result); |
744 | dev_dbg(&port->dev, "failed submitting read urb %d\n", | ||
745 | result); | ||
746 | } | ||
747 | |||
748 | return; | ||
749 | } | 740 | } |
750 | 741 | ||
751 | /* get data from ring buffer and then write to usb bus */ | 742 | /* get data from ring buffer and then write to usb bus */ |