diff options
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 87 |
1 files changed, 28 insertions, 59 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 8a3813be1b28..824ea5e7ec8b 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -87,7 +87,6 @@ struct ftdi_sio_quirk { | |||
87 | }; | 87 | }; |
88 | 88 | ||
89 | static int ftdi_jtag_probe(struct usb_serial *serial); | 89 | static int ftdi_jtag_probe(struct usb_serial *serial); |
90 | static int ftdi_mtxorb_hack_setup(struct usb_serial *serial); | ||
91 | static int ftdi_NDI_device_setup(struct usb_serial *serial); | 90 | static int ftdi_NDI_device_setup(struct usb_serial *serial); |
92 | static int ftdi_stmclite_probe(struct usb_serial *serial); | 91 | static int ftdi_stmclite_probe(struct usb_serial *serial); |
93 | static int ftdi_8u2232c_probe(struct usb_serial *serial); | 92 | static int ftdi_8u2232c_probe(struct usb_serial *serial); |
@@ -98,10 +97,6 @@ static struct ftdi_sio_quirk ftdi_jtag_quirk = { | |||
98 | .probe = ftdi_jtag_probe, | 97 | .probe = ftdi_jtag_probe, |
99 | }; | 98 | }; |
100 | 99 | ||
101 | static struct ftdi_sio_quirk ftdi_mtxorb_hack_quirk = { | ||
102 | .probe = ftdi_mtxorb_hack_setup, | ||
103 | }; | ||
104 | |||
105 | static struct ftdi_sio_quirk ftdi_NDI_device_quirk = { | 100 | static struct ftdi_sio_quirk ftdi_NDI_device_quirk = { |
106 | .probe = ftdi_NDI_device_setup, | 101 | .probe = ftdi_NDI_device_setup, |
107 | }; | 102 | }; |
@@ -151,6 +146,7 @@ static const struct usb_device_id id_table_combined[] = { | |||
151 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, | 146 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, |
152 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, | 147 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, |
153 | { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, | 148 | { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, |
149 | { USB_DEVICE(FTDI_VID, FTDI_BM_ATOM_NANO_PID) }, | ||
154 | { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, | 150 | { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) }, |
155 | { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) }, | 151 | { USB_DEVICE(FTDI_VID, FTDI_EV3CON_PID) }, |
156 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, | 152 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, |
@@ -256,14 +252,12 @@ static const struct usb_device_id id_table_combined[] = { | |||
256 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0124_PID) }, | 252 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0124_PID) }, |
257 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0125_PID) }, | 253 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0125_PID) }, |
258 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0126_PID) }, | 254 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0126_PID) }, |
259 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0127_PID), | 255 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0127_PID) }, |
260 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
261 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0128_PID) }, | 256 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0128_PID) }, |
262 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0129_PID) }, | 257 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0129_PID) }, |
263 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012A_PID) }, | 258 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012A_PID) }, |
264 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012B_PID) }, | 259 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012B_PID) }, |
265 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012C_PID), | 260 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012C_PID) }, |
266 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
267 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012D_PID) }, | 261 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012D_PID) }, |
268 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012E_PID) }, | 262 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012E_PID) }, |
269 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012F_PID) }, | 263 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012F_PID) }, |
@@ -302,18 +296,12 @@ static const struct usb_device_id id_table_combined[] = { | |||
302 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0150_PID) }, | 296 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0150_PID) }, |
303 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0151_PID) }, | 297 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0151_PID) }, |
304 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0152_PID) }, | 298 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0152_PID) }, |
305 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0153_PID), | 299 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0153_PID) }, |
306 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | 300 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0154_PID) }, |
307 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0154_PID), | 301 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0155_PID) }, |
308 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | 302 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0156_PID) }, |
309 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0155_PID), | 303 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0157_PID) }, |
310 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | 304 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0158_PID) }, |
311 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0156_PID), | ||
312 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
313 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0157_PID), | ||
314 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
315 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0158_PID), | ||
316 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
317 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0159_PID) }, | 305 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0159_PID) }, |
318 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015A_PID) }, | 306 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015A_PID) }, |
319 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015B_PID) }, | 307 | { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015B_PID) }, |
@@ -673,6 +661,8 @@ static const struct usb_device_id id_table_combined[] = { | |||
673 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) }, | 661 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) }, |
674 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) }, | 662 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) }, |
675 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) }, | 663 | { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) }, |
664 | { USB_DEVICE(XSENS_VID, XSENS_CONVERTER_PID) }, | ||
665 | { USB_DEVICE(XSENS_VID, XSENS_MTW_PID) }, | ||
676 | { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) }, | 666 | { USB_DEVICE(FTDI_VID, FTDI_OMNI1509) }, |
677 | { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) }, | 667 | { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) }, |
678 | { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) }, | 668 | { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) }, |
@@ -945,6 +935,8 @@ static const struct usb_device_id id_table_combined[] = { | |||
945 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) }, | 935 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_2_PID) }, |
946 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) }, | 936 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_3_PID) }, |
947 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) }, | 937 | { USB_DEVICE(BRAINBOXES_VID, BRAINBOXES_US_842_4_PID) }, |
938 | /* ekey Devices */ | ||
939 | { USB_DEVICE(FTDI_VID, FTDI_EKEY_CONV_USB_PID) }, | ||
948 | /* Infineon Devices */ | 940 | /* Infineon Devices */ |
949 | { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, | 941 | { USB_DEVICE_INTERFACE_NUMBER(INFINEON_VID, INFINEON_TRIBOARD_PID, 1) }, |
950 | { } /* Terminating entry */ | 942 | { } /* Terminating entry */ |
@@ -1559,45 +1551,40 @@ static void ftdi_determine_type(struct usb_serial_port *port) | |||
1559 | } | 1551 | } |
1560 | 1552 | ||
1561 | 1553 | ||
1562 | /* Determine the maximum packet size for the device. This depends on the chip | 1554 | /* |
1563 | * type and the USB host capabilities. The value should be obtained from the | 1555 | * Determine the maximum packet size for the device. This depends on the chip |
1564 | * device descriptor as the chip will use the appropriate values for the host.*/ | 1556 | * type and the USB host capabilities. The value should be obtained from the |
1557 | * device descriptor as the chip will use the appropriate values for the host. | ||
1558 | */ | ||
1565 | static void ftdi_set_max_packet_size(struct usb_serial_port *port) | 1559 | static void ftdi_set_max_packet_size(struct usb_serial_port *port) |
1566 | { | 1560 | { |
1567 | struct ftdi_private *priv = usb_get_serial_port_data(port); | 1561 | struct ftdi_private *priv = usb_get_serial_port_data(port); |
1568 | struct usb_serial *serial = port->serial; | 1562 | struct usb_interface *interface = port->serial->interface; |
1569 | struct usb_device *udev = serial->dev; | ||
1570 | |||
1571 | struct usb_interface *interface = serial->interface; | ||
1572 | struct usb_endpoint_descriptor *ep_desc; | 1563 | struct usb_endpoint_descriptor *ep_desc; |
1573 | |||
1574 | unsigned num_endpoints; | 1564 | unsigned num_endpoints; |
1575 | unsigned i; | 1565 | unsigned i; |
1576 | 1566 | ||
1577 | num_endpoints = interface->cur_altsetting->desc.bNumEndpoints; | 1567 | num_endpoints = interface->cur_altsetting->desc.bNumEndpoints; |
1578 | dev_info(&udev->dev, "Number of endpoints %d\n", num_endpoints); | ||
1579 | |||
1580 | if (!num_endpoints) | 1568 | if (!num_endpoints) |
1581 | return; | 1569 | return; |
1582 | 1570 | ||
1583 | /* NOTE: some customers have programmed FT232R/FT245R devices | 1571 | /* |
1584 | * with an endpoint size of 0 - not good. In this case, we | 1572 | * NOTE: Some customers have programmed FT232R/FT245R devices |
1573 | * with an endpoint size of 0 - not good. In this case, we | ||
1585 | * want to override the endpoint descriptor setting and use a | 1574 | * want to override the endpoint descriptor setting and use a |
1586 | * value of 64 for wMaxPacketSize */ | 1575 | * value of 64 for wMaxPacketSize. |
1576 | */ | ||
1587 | for (i = 0; i < num_endpoints; i++) { | 1577 | for (i = 0; i < num_endpoints; i++) { |
1588 | dev_info(&udev->dev, "Endpoint %d MaxPacketSize %d\n", i+1, | ||
1589 | interface->cur_altsetting->endpoint[i].desc.wMaxPacketSize); | ||
1590 | ep_desc = &interface->cur_altsetting->endpoint[i].desc; | 1578 | ep_desc = &interface->cur_altsetting->endpoint[i].desc; |
1591 | if (ep_desc->wMaxPacketSize == 0) { | 1579 | if (!ep_desc->wMaxPacketSize) { |
1592 | ep_desc->wMaxPacketSize = cpu_to_le16(0x40); | 1580 | ep_desc->wMaxPacketSize = cpu_to_le16(0x40); |
1593 | dev_info(&udev->dev, "Overriding wMaxPacketSize on endpoint %d\n", i); | 1581 | dev_warn(&port->dev, "Overriding wMaxPacketSize on endpoint %d\n", |
1582 | usb_endpoint_num(ep_desc)); | ||
1594 | } | 1583 | } |
1595 | } | 1584 | } |
1596 | 1585 | ||
1597 | /* set max packet size based on descriptor */ | 1586 | /* Set max packet size based on last descriptor. */ |
1598 | priv->max_packet_size = usb_endpoint_maxp(ep_desc); | 1587 | priv->max_packet_size = usb_endpoint_maxp(ep_desc); |
1599 | |||
1600 | dev_info(&udev->dev, "Setting MaxPacketSize %d\n", priv->max_packet_size); | ||
1601 | } | 1588 | } |
1602 | 1589 | ||
1603 | 1590 | ||
@@ -1866,24 +1853,6 @@ static int ftdi_stmclite_probe(struct usb_serial *serial) | |||
1866 | return 0; | 1853 | return 0; |
1867 | } | 1854 | } |
1868 | 1855 | ||
1869 | /* | ||
1870 | * The Matrix Orbital VK204-25-USB has an invalid IN endpoint. | ||
1871 | * We have to correct it if we want to read from it. | ||
1872 | */ | ||
1873 | static int ftdi_mtxorb_hack_setup(struct usb_serial *serial) | ||
1874 | { | ||
1875 | struct usb_host_endpoint *ep = serial->dev->ep_in[1]; | ||
1876 | struct usb_endpoint_descriptor *ep_desc = &ep->desc; | ||
1877 | |||
1878 | if (ep->enabled && ep_desc->wMaxPacketSize == 0) { | ||
1879 | ep_desc->wMaxPacketSize = cpu_to_le16(0x40); | ||
1880 | dev_info(&serial->dev->dev, | ||
1881 | "Fixing invalid wMaxPacketSize on read pipe\n"); | ||
1882 | } | ||
1883 | |||
1884 | return 0; | ||
1885 | } | ||
1886 | |||
1887 | static int ftdi_sio_port_remove(struct usb_serial_port *port) | 1856 | static int ftdi_sio_port_remove(struct usb_serial_port *port) |
1888 | { | 1857 | { |
1889 | struct ftdi_private *priv = usb_get_serial_port_data(port); | 1858 | struct ftdi_private *priv = usb_get_serial_port_data(port); |