diff options
Diffstat (limited to 'drivers/usb/serial/pl2303.c')
-rw-r--r-- | drivers/usb/serial/pl2303.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 9ec1a49e2362..c28b1607eacc 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
@@ -50,7 +50,7 @@ struct pl2303_buf { | |||
50 | char *buf_put; | 50 | char *buf_put; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | static struct usb_device_id id_table [] = { | 53 | static const struct usb_device_id id_table[] = { |
54 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) }, | 54 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) }, |
55 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, | 55 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, |
56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) }, | 56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) }, |
@@ -59,6 +59,7 @@ static struct usb_device_id id_table [] = { | |||
59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, | 59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, |
60 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, | 60 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, |
61 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, | 61 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, |
62 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) }, | ||
62 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, | 63 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, |
63 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, | 64 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, |
64 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, | 65 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, |
@@ -97,6 +98,7 @@ static struct usb_device_id id_table [] = { | |||
97 | { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, | 98 | { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, |
98 | { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, | 99 | { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, |
99 | { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, | 100 | { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, |
101 | { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, | ||
100 | { } /* Terminating entry */ | 102 | { } /* Terminating entry */ |
101 | }; | 103 | }; |
102 | 104 | ||
@@ -451,7 +453,6 @@ static void pl2303_send(struct usb_serial_port *port) | |||
451 | port->write_urb->transfer_buffer); | 453 | port->write_urb->transfer_buffer); |
452 | 454 | ||
453 | port->write_urb->transfer_buffer_length = count; | 455 | port->write_urb->transfer_buffer_length = count; |
454 | port->write_urb->dev = port->serial->dev; | ||
455 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); | 456 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); |
456 | if (result) { | 457 | if (result) { |
457 | dev_err(&port->dev, "%s - failed submitting write urb," | 458 | dev_err(&port->dev, "%s - failed submitting write urb," |
@@ -769,7 +770,6 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
769 | pl2303_set_termios(tty, port, &tmp_termios); | 770 | pl2303_set_termios(tty, port, &tmp_termios); |
770 | 771 | ||
771 | dbg("%s - submitting read urb", __func__); | 772 | dbg("%s - submitting read urb", __func__); |
772 | port->read_urb->dev = serial->dev; | ||
773 | result = usb_submit_urb(port->read_urb, GFP_KERNEL); | 773 | result = usb_submit_urb(port->read_urb, GFP_KERNEL); |
774 | if (result) { | 774 | if (result) { |
775 | dev_err(&port->dev, "%s - failed submitting read urb," | 775 | dev_err(&port->dev, "%s - failed submitting read urb," |
@@ -779,7 +779,6 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) | |||
779 | } | 779 | } |
780 | 780 | ||
781 | dbg("%s - submitting interrupt urb", __func__); | 781 | dbg("%s - submitting interrupt urb", __func__); |
782 | port->interrupt_in_urb->dev = serial->dev; | ||
783 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); | 782 | result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); |
784 | if (result) { | 783 | if (result) { |
785 | dev_err(&port->dev, "%s - failed submitting interrupt urb," | 784 | dev_err(&port->dev, "%s - failed submitting interrupt urb," |
@@ -895,10 +894,23 @@ static int wait_modem_info(struct usb_serial_port *port, unsigned int arg) | |||
895 | static int pl2303_ioctl(struct tty_struct *tty, struct file *file, | 894 | static int pl2303_ioctl(struct tty_struct *tty, struct file *file, |
896 | unsigned int cmd, unsigned long arg) | 895 | unsigned int cmd, unsigned long arg) |
897 | { | 896 | { |
897 | struct serial_struct ser; | ||
898 | struct usb_serial_port *port = tty->driver_data; | 898 | struct usb_serial_port *port = tty->driver_data; |
899 | dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); | 899 | dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); |
900 | 900 | ||
901 | switch (cmd) { | 901 | switch (cmd) { |
902 | case TIOCGSERIAL: | ||
903 | memset(&ser, 0, sizeof ser); | ||
904 | ser.type = PORT_16654; | ||
905 | ser.line = port->serial->minor; | ||
906 | ser.port = port->number; | ||
907 | ser.baud_base = 460800; | ||
908 | |||
909 | if (copy_to_user((void __user *)arg, &ser, sizeof ser)) | ||
910 | return -EFAULT; | ||
911 | |||
912 | return 0; | ||
913 | |||
902 | case TIOCMIWAIT: | 914 | case TIOCMIWAIT: |
903 | dbg("%s (%d) TIOCMIWAIT", __func__, port->number); | 915 | dbg("%s (%d) TIOCMIWAIT", __func__, port->number); |
904 | return wait_modem_info(port, arg); | 916 | return wait_modem_info(port, arg); |
@@ -1042,7 +1054,6 @@ static void pl2303_push_data(struct tty_struct *tty, | |||
1042 | tty_flag = TTY_FRAME; | 1054 | tty_flag = TTY_FRAME; |
1043 | dbg("%s - tty_flag = %d", __func__, tty_flag); | 1055 | dbg("%s - tty_flag = %d", __func__, tty_flag); |
1044 | 1056 | ||
1045 | tty_buffer_request_room(tty, urb->actual_length + 1); | ||
1046 | /* overrun is special, not associated with a char */ | 1057 | /* overrun is special, not associated with a char */ |
1047 | if (line_status & UART_OVERRUN_ERROR) | 1058 | if (line_status & UART_OVERRUN_ERROR) |
1048 | tty_insert_flip_char(tty, 0, TTY_OVERRUN); | 1059 | tty_insert_flip_char(tty, 0, TTY_OVERRUN); |
@@ -1072,16 +1083,11 @@ static void pl2303_read_bulk_callback(struct urb *urb) | |||
1072 | 1083 | ||
1073 | if (status) { | 1084 | if (status) { |
1074 | dbg("%s - urb status = %d", __func__, status); | 1085 | dbg("%s - urb status = %d", __func__, status); |
1075 | if (!port->port.count) { | ||
1076 | dbg("%s - port is closed, exiting.", __func__); | ||
1077 | return; | ||
1078 | } | ||
1079 | if (status == -EPROTO) { | 1086 | if (status == -EPROTO) { |
1080 | /* PL2303 mysteriously fails with -EPROTO reschedule | 1087 | /* PL2303 mysteriously fails with -EPROTO reschedule |
1081 | * the read */ | 1088 | * the read */ |
1082 | dbg("%s - caught -EPROTO, resubmitting the urb", | 1089 | dbg("%s - caught -EPROTO, resubmitting the urb", |
1083 | __func__); | 1090 | __func__); |
1084 | urb->dev = port->serial->dev; | ||
1085 | result = usb_submit_urb(urb, GFP_ATOMIC); | 1091 | result = usb_submit_urb(urb, GFP_ATOMIC); |
1086 | if (result) | 1092 | if (result) |
1087 | dev_err(&urb->dev->dev, "%s - failed" | 1093 | dev_err(&urb->dev->dev, "%s - failed" |
@@ -1108,15 +1114,10 @@ static void pl2303_read_bulk_callback(struct urb *urb) | |||
1108 | } | 1114 | } |
1109 | tty_kref_put(tty); | 1115 | tty_kref_put(tty); |
1110 | /* Schedule the next read _if_ we are still open */ | 1116 | /* Schedule the next read _if_ we are still open */ |
1111 | if (port->port.count) { | 1117 | result = usb_submit_urb(urb, GFP_ATOMIC); |
1112 | urb->dev = port->serial->dev; | 1118 | if (result && result != -EPERM) |
1113 | result = usb_submit_urb(urb, GFP_ATOMIC); | 1119 | dev_err(&urb->dev->dev, "%s - failed resubmitting" |
1114 | if (result) | 1120 | " read urb, error %d\n", __func__, result); |
1115 | dev_err(&urb->dev->dev, "%s - failed resubmitting" | ||
1116 | " read urb, error %d\n", __func__, result); | ||
1117 | } | ||
1118 | |||
1119 | return; | ||
1120 | } | 1121 | } |
1121 | 1122 | ||
1122 | static void pl2303_write_bulk_callback(struct urb *urb) | 1123 | static void pl2303_write_bulk_callback(struct urb *urb) |
@@ -1146,7 +1147,6 @@ static void pl2303_write_bulk_callback(struct urb *urb) | |||
1146 | dbg("%s - nonzero write bulk status received: %d", __func__, | 1147 | dbg("%s - nonzero write bulk status received: %d", __func__, |
1147 | status); | 1148 | status); |
1148 | port->write_urb->transfer_buffer_length = 1; | 1149 | port->write_urb->transfer_buffer_length = 1; |
1149 | port->write_urb->dev = port->serial->dev; | ||
1150 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); | 1150 | result = usb_submit_urb(port->write_urb, GFP_ATOMIC); |
1151 | if (result) | 1151 | if (result) |
1152 | dev_err(&urb->dev->dev, "%s - failed resubmitting write" | 1152 | dev_err(&urb->dev->dev, "%s - failed resubmitting write" |