aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/serial/pl2303.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 3022d65bb697..4348c1feab4e 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -961,11 +961,12 @@ static void pl2303_read_int_callback(struct urb *urb)
961 struct usb_serial_port *port = (struct usb_serial_port *) urb->context; 961 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
962 unsigned char *data = urb->transfer_buffer; 962 unsigned char *data = urb->transfer_buffer;
963 unsigned int actual_length = urb->actual_length; 963 unsigned int actual_length = urb->actual_length;
964 int status; 964 int status = urb->status;
965 int retval;
965 966
966 dbg("%s (%d)", __FUNCTION__, port->number); 967 dbg("%s (%d)", __FUNCTION__, port->number);
967 968
968 switch (urb->status) { 969 switch (status) {
969 case 0: 970 case 0:
970 /* success */ 971 /* success */
971 break; 972 break;
@@ -974,11 +975,11 @@ static void pl2303_read_int_callback(struct urb *urb)
974 case -ESHUTDOWN: 975 case -ESHUTDOWN:
975 /* this urb is terminated, clean up */ 976 /* this urb is terminated, clean up */
976 dbg("%s - urb shutting down with status: %d", __FUNCTION__, 977 dbg("%s - urb shutting down with status: %d", __FUNCTION__,
977 urb->status); 978 status);
978 return; 979 return;
979 default: 980 default:
980 dbg("%s - nonzero urb status received: %d", __FUNCTION__, 981 dbg("%s - nonzero urb status received: %d", __FUNCTION__,
981 urb->status); 982 status);
982 goto exit; 983 goto exit;
983 } 984 }
984 985
@@ -988,11 +989,11 @@ static void pl2303_read_int_callback(struct urb *urb)
988 pl2303_update_line_status(port, data, actual_length); 989 pl2303_update_line_status(port, data, actual_length);
989 990
990exit: 991exit:
991 status = usb_submit_urb(urb, GFP_ATOMIC); 992 retval = usb_submit_urb(urb, GFP_ATOMIC);
992 if (status) 993 if (retval)
993 dev_err(&urb->dev->dev, 994 dev_err(&urb->dev->dev,
994 "%s - usb_submit_urb failed with result %d\n", 995 "%s - usb_submit_urb failed with result %d\n",
995 __FUNCTION__, status); 996 __FUNCTION__, retval);
996} 997}
997 998
998static void pl2303_read_bulk_callback(struct urb *urb) 999static void pl2303_read_bulk_callback(struct urb *urb)
@@ -1004,23 +1005,23 @@ static void pl2303_read_bulk_callback(struct urb *urb)
1004 unsigned long flags; 1005 unsigned long flags;
1005 int i; 1006 int i;
1006 int result; 1007 int result;
1007 u8 status; 1008 int status = urb->status;
1009 u8 line_status;
1008 char tty_flag; 1010 char tty_flag;
1009 1011
1010 dbg("%s - port %d", __FUNCTION__, port->number); 1012 dbg("%s - port %d", __FUNCTION__, port->number);
1011 1013
1012 if (urb->status) { 1014 if (status) {
1013 dbg("%s - urb->status = %d", __FUNCTION__, urb->status); 1015 dbg("%s - urb status = %d", __FUNCTION__, status);
1014 if (!port->open_count) { 1016 if (!port->open_count) {
1015 dbg("%s - port is closed, exiting.", __FUNCTION__); 1017 dbg("%s - port is closed, exiting.", __FUNCTION__);
1016 return; 1018 return;
1017 } 1019 }
1018 if (urb->status == -EPROTO) { 1020 if (status == -EPROTO) {
1019 /* PL2303 mysteriously fails with -EPROTO reschedule 1021 /* PL2303 mysteriously fails with -EPROTO reschedule
1020 * the read */ 1022 * the read */
1021 dbg("%s - caught -EPROTO, resubmitting the urb", 1023 dbg("%s - caught -EPROTO, resubmitting the urb",
1022 __FUNCTION__); 1024 __FUNCTION__);
1023 urb->status = 0;
1024 urb->dev = port->serial->dev; 1025 urb->dev = port->serial->dev;
1025 result = usb_submit_urb(urb, GFP_ATOMIC); 1026 result = usb_submit_urb(urb, GFP_ATOMIC);
1026 if (result) 1027 if (result)
@@ -1040,18 +1041,18 @@ static void pl2303_read_bulk_callback(struct urb *urb)
1040 tty_flag = TTY_NORMAL; 1041 tty_flag = TTY_NORMAL;
1041 1042
1042 spin_lock_irqsave(&priv->lock, flags); 1043 spin_lock_irqsave(&priv->lock, flags);
1043 status = priv->line_status; 1044 line_status = priv->line_status;
1044 priv->line_status &= ~UART_STATE_TRANSIENT_MASK; 1045 priv->line_status &= ~UART_STATE_TRANSIENT_MASK;
1045 spin_unlock_irqrestore(&priv->lock, flags); 1046 spin_unlock_irqrestore(&priv->lock, flags);
1046 wake_up_interruptible(&priv->delta_msr_wait); 1047 wake_up_interruptible(&priv->delta_msr_wait);
1047 1048
1048 /* break takes precedence over parity, */ 1049 /* break takes precedence over parity, */
1049 /* which takes precedence over framing errors */ 1050 /* which takes precedence over framing errors */
1050 if (status & UART_BREAK_ERROR ) 1051 if (line_status & UART_BREAK_ERROR )
1051 tty_flag = TTY_BREAK; 1052 tty_flag = TTY_BREAK;
1052 else if (status & UART_PARITY_ERROR) 1053 else if (line_status & UART_PARITY_ERROR)
1053 tty_flag = TTY_PARITY; 1054 tty_flag = TTY_PARITY;
1054 else if (status & UART_FRAME_ERROR) 1055 else if (line_status & UART_FRAME_ERROR)
1055 tty_flag = TTY_FRAME; 1056 tty_flag = TTY_FRAME;
1056 dbg("%s - tty_flag = %d", __FUNCTION__, tty_flag); 1057 dbg("%s - tty_flag = %d", __FUNCTION__, tty_flag);
1057 1058
@@ -1059,7 +1060,7 @@ static void pl2303_read_bulk_callback(struct urb *urb)
1059 if (tty && urb->actual_length) { 1060 if (tty && urb->actual_length) {
1060 tty_buffer_request_room(tty, urb->actual_length + 1); 1061 tty_buffer_request_room(tty, urb->actual_length + 1);
1061 /* overrun is special, not associated with a char */ 1062 /* overrun is special, not associated with a char */
1062 if (status & UART_OVERRUN_ERROR) 1063 if (line_status & UART_OVERRUN_ERROR)
1063 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 1064 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
1064 for (i = 0; i < urb->actual_length; ++i) 1065 for (i = 0; i < urb->actual_length; ++i)
1065 tty_insert_flip_char(tty, data[i], tty_flag); 1066 tty_insert_flip_char(tty, data[i], tty_flag);
@@ -1083,10 +1084,11 @@ static void pl2303_write_bulk_callback(struct urb *urb)
1083 struct usb_serial_port *port = (struct usb_serial_port *) urb->context; 1084 struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
1084 struct pl2303_private *priv = usb_get_serial_port_data(port); 1085 struct pl2303_private *priv = usb_get_serial_port_data(port);
1085 int result; 1086 int result;
1087 int status = urb->status;
1086 1088
1087 dbg("%s - port %d", __FUNCTION__, port->number); 1089 dbg("%s - port %d", __FUNCTION__, port->number);
1088 1090
1089 switch (urb->status) { 1091 switch (status) {
1090 case 0: 1092 case 0:
1091 /* success */ 1093 /* success */
1092 break; 1094 break;
@@ -1095,14 +1097,14 @@ static void pl2303_write_bulk_callback(struct urb *urb)
1095 case -ESHUTDOWN: 1097 case -ESHUTDOWN:
1096 /* this urb is terminated, clean up */ 1098 /* this urb is terminated, clean up */
1097 dbg("%s - urb shutting down with status: %d", __FUNCTION__, 1099 dbg("%s - urb shutting down with status: %d", __FUNCTION__,
1098 urb->status); 1100 status);
1099 priv->write_urb_in_use = 0; 1101 priv->write_urb_in_use = 0;
1100 return; 1102 return;
1101 default: 1103 default:
1102 /* error in the urb, so we have to resubmit it */ 1104 /* error in the urb, so we have to resubmit it */
1103 dbg("%s - Overflow in write", __FUNCTION__); 1105 dbg("%s - Overflow in write", __FUNCTION__);
1104 dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, 1106 dbg("%s - nonzero write bulk status received: %d", __FUNCTION__,
1105 urb->status); 1107 status);
1106 port->write_urb->transfer_buffer_length = 1; 1108 port->write_urb->transfer_buffer_length = 1;
1107 port->write_urb->dev = port->serial->dev; 1109 port->write_urb->dev = port->serial->dev;
1108 result = usb_submit_urb(port->write_urb, GFP_ATOMIC); 1110 result = usb_submit_urb(port->write_urb, GFP_ATOMIC);