1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34#include <linux/kernel.h>
35#include <linux/errno.h>
36#include <linux/init.h>
37#include <linux/slab.h>
38#include <linux/tty.h>
39#include <linux/tty_driver.h>
40#include <linux/tty_flip.h>
41#include <linux/module.h>
42#include <linux/spinlock.h>
43#include <linux/mutex.h>
44#include <linux/uaccess.h>
45#include <linux/usb.h>
46#include <linux/serial.h>
47#include <linux/usb/serial.h>
48#include "ftdi_sio.h"
49#include "ftdi_sio_ids.h"
50
51
52
53
54#define DRIVER_VERSION "v1.6.0"
55#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com>, Bill Ryder <bryder@sgi.com>, Kuba Ober <kuba@mareimbrium.org>, Andreas Mohr, Johan Hovold <jhovold@gmail.com>"
56#define DRIVER_DESC "USB FTDI Serial Converters Driver"
57
58static bool debug;
59static __u16 vendor = FTDI_VID;
60static __u16 product;
61
62struct ftdi_private {
63 struct kref kref;
64 enum ftdi_chip_type chip_type;
65
66 int baud_base;
67 int custom_divisor;
68
69
70 __u16 last_set_data_urb_value ;
71
72
73
74 int flags;
75 unsigned long last_dtr_rts;
76 struct async_icount icount;
77 wait_queue_head_t delta_msr_wait;
78 char prev_status;
79 bool dev_gone;
80 char transmit_empty;
81 struct usb_serial_port *port;
82 __u16 interface;
83
84
85 speed_t force_baud;
86
87 int force_rtscts;
88
89
90 unsigned int latency;
91 unsigned short max_packet_size;
92 struct mutex cfg_lock;
93};
94
95
96struct ftdi_sio_quirk {
97 int (*probe)(struct usb_serial *);
98
99 void (*port_probe)(struct ftdi_private *);
100};
101
102static int ftdi_jtag_probe(struct usb_serial *serial);
103static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
104static int ftdi_NDI_device_setup(struct usb_serial *serial);
105static int ftdi_stmclite_probe(struct usb_serial *serial);
106static int ftdi_8u2232c_probe(struct usb_serial *serial);
107static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
108static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
109
110static struct ftdi_sio_quirk ftdi_jtag_quirk = {
111 .probe = ftdi_jtag_probe,
112};
113
114static struct ftdi_sio_quirk ftdi_mtxorb_hack_quirk = {
115 .probe = ftdi_mtxorb_hack_setup,
116};
117
118static struct ftdi_sio_quirk ftdi_NDI_device_quirk = {
119 .probe = ftdi_NDI_device_setup,
120};
121
122static struct ftdi_sio_quirk ftdi_USB_UIRT_quirk = {
123 .port_probe = ftdi_USB_UIRT_setup,
124};
125
126static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
127 .port_probe = ftdi_HE_TIRA1_setup,
128};
129
130static struct ftdi_sio_quirk ftdi_stmclite_quirk = {
131 .probe = ftdi_stmclite_probe,
132};
133
134static struct ftdi_sio_quirk ftdi_8u2232c_quirk = {
135 .probe = ftdi_8u2232c_probe,
136};
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160static struct usb_device_id id_table_combined [] = {
161 { USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) },
162 { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) },
163 { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) },
164 { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
165 { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
166 { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
167 { USB_DEVICE(FTDI_VID, FTDI_NXTCAM_PID) },
168 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
169 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
170 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
171 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_3_PID) },
172 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_4_PID) },
173 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_5_PID) },
174 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_6_PID) },
175 { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_7_PID) },
176 { USB_DEVICE(FTDI_VID, FTDI_USINT_CAT_PID) },
177 { USB_DEVICE(FTDI_VID, FTDI_USINT_WKEY_PID) },
178 { USB_DEVICE(FTDI_VID, FTDI_USINT_RS232_PID) },
179 { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
180 { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
181 { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
182 { USB_DEVICE(FTDI_VID, FTDI_IPLUS2_PID) },
183 { USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) },
184 { USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
185 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
186 { USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
187 { USB_DEVICE(FTDI_VID, FTDI_232RL_PID) },
188 { USB_DEVICE(FTDI_VID, FTDI_8U2232C_PID) ,
189 .driver_info = (kernel_ulong_t)&ftdi_8u2232c_quirk },
190 { USB_DEVICE(FTDI_VID, FTDI_4232H_PID) },
191 { USB_DEVICE(FTDI_VID, FTDI_232H_PID) },
192 { USB_DEVICE(FTDI_VID, FTDI_FTX_PID) },
193 { USB_DEVICE(FTDI_VID, FTDI_MICRO_CHAMELEON_PID) },
194 { USB_DEVICE(FTDI_VID, FTDI_RELAIS_PID) },
195 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
196 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_SNIFFER_PID) },
197 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_THROTTLE_PID) },
198 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GATEWAY_PID) },
199 { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_GBM_PID) },
200 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
201 { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
202 { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
203 { USB_DEVICE(FTDI_VID, FTDI_LENZ_LIUSB_PID) },
204 { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
205 { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
206 { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },
207 { USB_DEVICE(FTDI_VID, FTDI_XF_633_PID) },
208 { USB_DEVICE(FTDI_VID, FTDI_XF_631_PID) },
209 { USB_DEVICE(FTDI_VID, FTDI_XF_635_PID) },
210 { USB_DEVICE(FTDI_VID, FTDI_XF_640_PID) },
211 { USB_DEVICE(FTDI_VID, FTDI_XF_642_PID) },
212 { USB_DEVICE(FTDI_VID, FTDI_DSS20_PID) },
213 { USB_DEVICE(FTDI_VID, FTDI_URBAN_0_PID) },
214 { USB_DEVICE(FTDI_VID, FTDI_URBAN_1_PID) },
215 { USB_DEVICE(FTDI_NF_RIC_VID, FTDI_NF_RIC_PID) },
216 { USB_DEVICE(FTDI_VID, FTDI_VNHCPCUSB_D_PID) },
217 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_0_PID) },
218 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_1_PID) },
219 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_2_PID) },
220 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_3_PID) },
221 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) },
222 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) },
223 { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) },
224 { USB_DEVICE(FTDI_VID, FTDI_R2000KU_TRUE_RNG) },
225 { USB_DEVICE(FTDI_VID, FTDI_VARDAAN_PID) },
226 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0100_PID) },
227 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0101_PID) },
228 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0102_PID) },
229 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0103_PID) },
230 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0104_PID) },
231 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0105_PID) },
232 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0106_PID) },
233 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0107_PID) },
234 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0108_PID) },
235 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0109_PID) },
236 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010A_PID) },
237 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010B_PID) },
238 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010C_PID) },
239 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010D_PID) },
240 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010E_PID) },
241 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_010F_PID) },
242 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0110_PID) },
243 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0111_PID) },
244 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0112_PID) },
245 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0113_PID) },
246 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0114_PID) },
247 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0115_PID) },
248 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0116_PID) },
249 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0117_PID) },
250 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0118_PID) },
251 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0119_PID) },
252 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011A_PID) },
253 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011B_PID) },
254 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011C_PID) },
255 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011D_PID) },
256 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011E_PID) },
257 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_011F_PID) },
258 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0120_PID) },
259 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0121_PID) },
260 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0122_PID) },
261 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0123_PID) },
262 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0124_PID) },
263 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0125_PID) },
264 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0126_PID) },
265 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0127_PID),
266 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
267 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0128_PID) },
268 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0129_PID) },
269 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012A_PID) },
270 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012B_PID) },
271 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012C_PID),
272 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
273 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012D_PID) },
274 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012E_PID) },
275 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_012F_PID) },
276 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0130_PID) },
277 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0131_PID) },
278 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0132_PID) },
279 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0133_PID) },
280 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0134_PID) },
281 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0135_PID) },
282 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0136_PID) },
283 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0137_PID) },
284 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0138_PID) },
285 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0139_PID) },
286 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013A_PID) },
287 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013B_PID) },
288 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013C_PID) },
289 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013D_PID) },
290 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013E_PID) },
291 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_013F_PID) },
292 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0140_PID) },
293 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0141_PID) },
294 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0142_PID) },
295 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0143_PID) },
296 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0144_PID) },
297 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0145_PID) },
298 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0146_PID) },
299 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0147_PID) },
300 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0148_PID) },
301 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0149_PID) },
302 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014A_PID) },
303 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014B_PID) },
304 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014C_PID) },
305 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014D_PID) },
306 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014E_PID) },
307 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_014F_PID) },
308 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0150_PID) },
309 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0151_PID) },
310 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0152_PID) },
311 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0153_PID),
312 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
313 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0154_PID),
314 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
315 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0155_PID),
316 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
317 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0156_PID),
318 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
319 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0157_PID),
320 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
321 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0158_PID),
322 .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk },
323 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0159_PID) },
324 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015A_PID) },
325 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015B_PID) },
326 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015C_PID) },
327 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015D_PID) },
328 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015E_PID) },
329 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_015F_PID) },
330 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0160_PID) },
331 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0161_PID) },
332 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0162_PID) },
333 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0163_PID) },
334 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0164_PID) },
335 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0165_PID) },
336 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0166_PID) },
337 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0167_PID) },
338 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0168_PID) },
339 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0169_PID) },
340 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016A_PID) },
341 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016B_PID) },
342 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016C_PID) },
343 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016D_PID) },
344 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016E_PID) },
345 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_016F_PID) },
346 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0170_PID) },
347 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0171_PID) },
348 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0172_PID) },
349 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0173_PID) },
350 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0174_PID) },
351 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0175_PID) },
352 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0176_PID) },
353 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0177_PID) },
354 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0178_PID) },
355 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0179_PID) },
356 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017A_PID) },
357 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017B_PID) },
358 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017C_PID) },
359 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017D_PID) },
360 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017E_PID) },
361 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_017F_PID) },
362 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0180_PID) },
363 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0181_PID) },
364 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0182_PID) },
365 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0183_PID) },
366 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0184_PID) },
367 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0185_PID) },
368 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0186_PID) },
369 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0187_PID) },
370 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0188_PID) },
371 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0189_PID) },
372 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018A_PID) },
373 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018B_PID) },
374 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018C_PID) },
375 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018D_PID) },
376 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018E_PID) },
377 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_018F_PID) },
378 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0190_PID) },
379 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0191_PID) },
380 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0192_PID) },
381 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0193_PID) },
382 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0194_PID) },
383 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0195_PID) },
384 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0196_PID) },
385 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0197_PID) },
386 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0198_PID) },
387 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_0199_PID) },
388 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019A_PID) },
389 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019B_PID) },
390 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019C_PID) },
391 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019D_PID) },
392 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019E_PID) },
393 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_019F_PID) },
394 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A0_PID) },
395 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A1_PID) },
396 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A2_PID) },
397 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A3_PID) },
398 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A4_PID) },
399 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A5_PID) },
400 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A6_PID) },
401 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A7_PID) },
402 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A8_PID) },
403 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01A9_PID) },
404 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AA_PID) },
405 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AB_PID) },
406 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AC_PID) },
407 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AD_PID) },
408 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AE_PID) },
409 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01AF_PID) },
410 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B0_PID) },
411 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B1_PID) },
412 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B2_PID) },
413 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B3_PID) },
414 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B4_PID) },
415 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B5_PID) },
416 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B6_PID) },
417 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B7_PID) },
418 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B8_PID) },
419 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01B9_PID) },
420 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BA_PID) },
421 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BB_PID) },
422 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BC_PID) },
423 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BD_PID) },
424 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BE_PID) },
425 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01BF_PID) },
426 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C0_PID) },
427 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C1_PID) },
428 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C2_PID) },
429 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C3_PID) },
430 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C4_PID) },
431 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C5_PID) },
432 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C6_PID) },
433 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C7_PID) },
434 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C8_PID) },
435 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01C9_PID) },
436 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CA_PID) },
437 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CB_PID) },
438 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CC_PID) },
439 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CD_PID) },
440 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CE_PID) },
441 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01CF_PID) },
442 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D0_PID) },
443 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D1_PID) },
444 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D2_PID) },
445 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D3_PID) },
446 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D4_PID) },
447 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D5_PID) },
448 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D6_PID) },
449 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D7_PID) },
450 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D8_PID) },
451 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01D9_PID) },
452 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DA_PID) },
453 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DB_PID) },
454 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DC_PID) },
455 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DD_PID) },
456 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DE_PID) },
457 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01DF_PID) },
458 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E0_PID) },
459 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E1_PID) },
460 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E2_PID) },
461 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E3_PID) },
462 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E4_PID) },
463 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E5_PID) },
464 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E6_PID) },
465 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E7_PID) },
466 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E8_PID) },
467 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01E9_PID) },
468 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EA_PID) },
469 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EB_PID) },
470 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EC_PID) },
471 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01ED_PID) },
472 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EE_PID) },
473 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01EF_PID) },
474 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F0_PID) },
475 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F1_PID) },
476 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F2_PID) },
477 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F3_PID) },
478 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F4_PID) },
479 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F5_PID) },
480 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F6_PID) },
481 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F7_PID) },
482 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F8_PID) },
483 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01F9_PID) },
484 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FA_PID) },
485 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FB_PID) },
486 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FC_PID) },
487 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FD_PID) },
488 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FE_PID) },
489 { USB_DEVICE(MTXORB_VID, MTXORB_FTDI_RANGE_01FF_PID) },
490 { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) },
491 { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) },
492 { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) },
493 { USB_DEVICE(FTDI_VID, FTDI_USBX_707_PID) },
494 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2101_PID) },
495 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2102_PID) },
496 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2103_PID) },
497 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2104_PID) },
498 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2106_PID) },
499 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2201_1_PID) },
500 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2201_2_PID) },
501 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2202_1_PID) },
502 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2202_2_PID) },
503 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2203_1_PID) },
504 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2203_2_PID) },
505 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_1_PID) },
506 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_2_PID) },
507 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_3_PID) },
508 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2401_4_PID) },
509 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_1_PID) },
510 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_2_PID) },
511 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_3_PID) },
512 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2402_4_PID) },
513 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_1_PID) },
514 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_2_PID) },
515 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_3_PID) },
516 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2403_4_PID) },
517 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_1_PID) },
518 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_2_PID) },
519 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_3_PID) },
520 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_4_PID) },
521 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_5_PID) },
522 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_6_PID) },
523 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_7_PID) },
524 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2801_8_PID) },
525 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_1_PID) },
526 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_2_PID) },
527 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_3_PID) },
528 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_4_PID) },
529 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_5_PID) },
530 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_6_PID) },
531 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_7_PID) },
532 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2802_8_PID) },
533 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_1_PID) },
534 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_2_PID) },
535 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_3_PID) },
536 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_4_PID) },
537 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_5_PID) },
538 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_6_PID) },
539 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_7_PID) },
540 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803_8_PID) },
541 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_1_PID) },
542 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_2_PID) },
543 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_3_PID) },
544 { USB_DEVICE(SEALEVEL_VID, SEALEVEL_2803R_4_PID) },
545 { USB_DEVICE(IDTECH_VID, IDTECH_IDT1221U_PID) },
546 { USB_DEVICE(OCT_VID, OCT_US101_PID) },
547 { USB_DEVICE(OCT_VID, OCT_DK201_PID) },
548 { USB_DEVICE(FTDI_VID, FTDI_HE_TIRA1_PID),
549 .driver_info = (kernel_ulong_t)&ftdi_HE_TIRA1_quirk },
550 { USB_DEVICE(FTDI_VID, FTDI_USB_UIRT_PID),
551 .driver_info = (kernel_ulong_t)&ftdi_USB_UIRT_quirk },
552 { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_1) },
553 { USB_DEVICE(FTDI_VID, PROTEGO_R2X0) },
554 { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_3) },
555 { USB_DEVICE(FTDI_VID, PROTEGO_SPECIAL_4) },
556 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E808_PID) },
557 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E809_PID) },
558 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80A_PID) },
559 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80B_PID) },
560 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80C_PID) },
561 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80D_PID) },
562 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80E_PID) },
563 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E80F_PID) },
564 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E888_PID) },
565 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E889_PID) },
566 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88A_PID) },
567 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88B_PID) },
568 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88C_PID) },
569 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88D_PID) },
570 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88E_PID) },
571 { USB_DEVICE(FTDI_VID, FTDI_GUDEADS_E88F_PID) },
572 { USB_DEVICE(FTDI_VID, FTDI_ELV_UO100_PID) },
573 { USB_DEVICE(FTDI_VID, FTDI_ELV_UM100_PID) },
574 { USB_DEVICE(FTDI_VID, FTDI_ELV_UR100_PID) },
575 { USB_DEVICE(FTDI_VID, FTDI_ELV_ALC8500_PID) },
576 { USB_DEVICE(FTDI_VID, FTDI_PYRAMID_PID) },
577 { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1000PC_PID) },
578 { USB_DEVICE(FTDI_VID, FTDI_IBS_US485_PID) },
579 { USB_DEVICE(FTDI_VID, FTDI_IBS_PICPRO_PID) },
580 { USB_DEVICE(FTDI_VID, FTDI_IBS_PCMCIA_PID) },
581 { USB_DEVICE(FTDI_VID, FTDI_IBS_PK1_PID) },
582 { USB_DEVICE(FTDI_VID, FTDI_IBS_RS232MON_PID) },
583 { USB_DEVICE(FTDI_VID, FTDI_IBS_APP70_PID) },
584 { USB_DEVICE(FTDI_VID, FTDI_IBS_PEDO_PID) },
585 { USB_DEVICE(FTDI_VID, FTDI_IBS_PROD_PID) },
586 { USB_DEVICE(FTDI_VID, FTDI_TAVIR_STK500_PID) },
587
588
589
590 { USB_DEVICE(FTDI_VID, FTDI_ELV_USR_PID) },
591 { USB_DEVICE(FTDI_VID, FTDI_ELV_MSM1_PID) },
592 { USB_DEVICE(FTDI_VID, FTDI_ELV_KL100_PID) },
593 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS550_PID) },
594 { USB_DEVICE(FTDI_VID, FTDI_ELV_EC3000_PID) },
595 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS888_PID) },
596 { USB_DEVICE(FTDI_VID, FTDI_ELV_TWS550_PID) },
597 { USB_DEVICE(FTDI_VID, FTDI_ELV_FEM_PID) },
598 { USB_DEVICE(FTDI_VID, FTDI_ELV_CLI7000_PID) },
599 { USB_DEVICE(FTDI_VID, FTDI_ELV_PPS7330_PID) },
600 { USB_DEVICE(FTDI_VID, FTDI_ELV_TFM100_PID) },
601 { USB_DEVICE(FTDI_VID, FTDI_ELV_UDF77_PID) },
602 { USB_DEVICE(FTDI_VID, FTDI_ELV_UIO88_PID) },
603 { USB_DEVICE(FTDI_VID, FTDI_ELV_UAD8_PID) },
604 { USB_DEVICE(FTDI_VID, FTDI_ELV_UDA7_PID) },
605 { USB_DEVICE(FTDI_VID, FTDI_ELV_USI2_PID) },
606 { USB_DEVICE(FTDI_VID, FTDI_ELV_T1100_PID) },
607 { USB_DEVICE(FTDI_VID, FTDI_ELV_PCD200_PID) },
608 { USB_DEVICE(FTDI_VID, FTDI_ELV_ULA200_PID) },
609 { USB_DEVICE(FTDI_VID, FTDI_ELV_CSI8_PID) },
610 { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1000DL_PID) },
611 { USB_DEVICE(FTDI_VID, FTDI_ELV_PCK100_PID) },
612 { USB_DEVICE(FTDI_VID, FTDI_ELV_RFP500_PID) },
613 { USB_DEVICE(FTDI_VID, FTDI_ELV_FS20SIG_PID) },
614 { USB_DEVICE(FTDI_VID, FTDI_ELV_UTP8_PID) },
615 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS300PC_PID) },
616 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS444PC_PID) },
617 { USB_DEVICE(FTDI_VID, FTDI_ELV_FHZ1300PC_PID) },
618 { USB_DEVICE(FTDI_VID, FTDI_ELV_EM1010PC_PID) },
619 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS500_PID) },
620 { USB_DEVICE(FTDI_VID, FTDI_ELV_HS485_PID) },
621 { USB_DEVICE(FTDI_VID, FTDI_ELV_UMS100_PID) },
622 { USB_DEVICE(FTDI_VID, FTDI_ELV_TFD128_PID) },
623 { USB_DEVICE(FTDI_VID, FTDI_ELV_FM3RX_PID) },
624 { USB_DEVICE(FTDI_VID, FTDI_ELV_WS777_PID) },
625 { USB_DEVICE(FTDI_VID, LINX_SDMUSBQSS_PID) },
626 { USB_DEVICE(FTDI_VID, LINX_MASTERDEVEL2_PID) },
627 { USB_DEVICE(FTDI_VID, LINX_FUTURE_0_PID) },
628 { USB_DEVICE(FTDI_VID, LINX_FUTURE_1_PID) },
629 { USB_DEVICE(FTDI_VID, LINX_FUTURE_2_PID) },
630 { USB_DEVICE(FTDI_VID, FTDI_CCSICDU20_0_PID) },
631 { USB_DEVICE(FTDI_VID, FTDI_CCSICDU40_1_PID) },
632 { USB_DEVICE(FTDI_VID, FTDI_CCSMACHX_2_PID) },
633 { USB_DEVICE(FTDI_VID, FTDI_CCSLOAD_N_GO_3_PID) },
634 { USB_DEVICE(FTDI_VID, FTDI_CCSICDU64_4_PID) },
635 { USB_DEVICE(FTDI_VID, FTDI_CCSPRIME8_5_PID) },
636 { USB_DEVICE(FTDI_VID, INSIDE_ACCESSO) },
637 { USB_DEVICE(INTREPID_VID, INTREPID_VALUECAN_PID) },
638 { USB_DEVICE(INTREPID_VID, INTREPID_NEOVI_PID) },
639 { USB_DEVICE(FALCOM_VID, FALCOM_TWIST_PID) },
640 { USB_DEVICE(FALCOM_VID, FALCOM_SAMBA_PID) },
641 { USB_DEVICE(FTDI_VID, FTDI_SUUNTO_SPORTS_PID) },
642 { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },
643 { USB_DEVICE(TTI_VID, TTI_QL355P_PID) },
644 { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
645 { USB_DEVICE(ACTON_VID, ACTON_SPECTRAPRO_PID) },
646 { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },
647 { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
648 { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
649 { USB_DEVICE(BANDB_VID, BANDB_USO9ML2_PID) },
650 { USB_DEVICE(BANDB_VID, BANDB_USOPTL4_PID) },
651 { USB_DEVICE(BANDB_VID, BANDB_USPTL4_PID) },
652 { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_2_PID) },
653 { USB_DEVICE(BANDB_VID, BANDB_USO9ML2DR_PID) },
654 { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR2_PID) },
655 { USB_DEVICE(BANDB_VID, BANDB_USOPTL4DR_PID) },
656 { USB_DEVICE(BANDB_VID, BANDB_485USB9F_2W_PID) },
657 { USB_DEVICE(BANDB_VID, BANDB_485USB9F_4W_PID) },
658 { USB_DEVICE(BANDB_VID, BANDB_232USB9M_PID) },
659 { USB_DEVICE(BANDB_VID, BANDB_485USBTB_2W_PID) },
660 { USB_DEVICE(BANDB_VID, BANDB_485USBTB_4W_PID) },
661 { USB_DEVICE(BANDB_VID, BANDB_TTL5USB9M_PID) },
662 { USB_DEVICE(BANDB_VID, BANDB_TTL3USB9M_PID) },
663 { USB_DEVICE(BANDB_VID, BANDB_ZZ_PROG1_USB_PID) },
664 { USB_DEVICE(FTDI_VID, EVER_ECO_PRO_CDS) },
665 { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_1_PID) },
666 { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_2_PID) },
667 { USB_DEVICE(FTDI_VID, FTDI_4N_GALAXY_DE_3_PID) },
668 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_0_PID) },
669 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_1_PID) },
670 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_2_PID) },
671 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_3_PID) },
672 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_4_PID) },
673 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_5_PID) },
674 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_6_PID) },
675 { USB_DEVICE(FTDI_VID, XSENS_CONVERTER_7_PID) },
676 { USB_DEVICE(MOBILITY_VID, MOBILITY_USB_SERIAL_PID) },
677 { USB_DEVICE(FTDI_VID, FTDI_ACTIVE_ROBOTS_PID) },
678 { USB_DEVICE(FTDI_VID, FTDI_MHAM_KW_PID) },
679 { USB_DEVICE(FTDI_VID, FTDI_MHAM_YS_PID) },
680 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y6_PID) },
681 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y8_PID) },
682 { USB_DEVICE(FTDI_VID, FTDI_MHAM_IC_PID) },
683 { USB_DEVICE(FTDI_VID, FTDI_MHAM_DB9_PID) },
684 { USB_DEVICE(FTDI_VID, FTDI_MHAM_RS232_PID) },
685 { USB_DEVICE(FTDI_VID, FTDI_MHAM_Y9_PID) },
686 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_VCP_PID) },
687 { USB_DEVICE(FTDI_VID, FTDI_TERATRONIK_D2XX_PID) },
688 { USB_DEVICE(EVOLUTION_VID, EVOLUTION_ER1_PID) },
689 { USB_DEVICE(EVOLUTION_VID, EVO_HYBRID_PID) },
690 { USB_DEVICE(EVOLUTION_VID, EVO_RCM4_PID) },
691 { USB_DEVICE(FTDI_VID, FTDI_ARTEMIS_PID) },
692 { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16_PID) },
693 { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16C_PID) },
694 { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HR_PID) },
695 { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16HRC_PID) },
696 { USB_DEVICE(FTDI_VID, FTDI_ATIK_ATK16IC_PID) },
697 { USB_DEVICE(KOBIL_VID, KOBIL_CONV_B1_PID) },
698 { USB_DEVICE(KOBIL_VID, KOBIL_CONV_KAAN_PID) },
699 { USB_DEVICE(POSIFLEX_VID, POSIFLEX_PP7000_PID) },
700 { USB_DEVICE(FTDI_VID, FTDI_TTUSB_PID) },
701 { USB_DEVICE(FTDI_VID, FTDI_ECLO_COM_1WIRE_PID) },
702 { USB_DEVICE(FTDI_VID, FTDI_WESTREX_MODEL_777_PID) },
703 { USB_DEVICE(FTDI_VID, FTDI_WESTREX_MODEL_8900F_PID) },
704 { USB_DEVICE(FTDI_VID, FTDI_PCDJ_DAC2_PID) },
705 { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) },
706 { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) },
707 { USB_DEVICE(FTDI_VID, FTDI_NZR_SEM_USB_PID) },
708 { USB_DEVICE(ICOM_VID, ICOM_ID_1_PID) },
709 { USB_DEVICE(ICOM_VID, ICOM_OPC_U_UC_PID) },
710 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C1_PID) },
711 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C2_PID) },
712 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2D_PID) },
713 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VT_PID) },
714 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VR_PID) },
715 { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVT_PID) },
716 { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVR_PID) },
717 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVT_PID) },
718 { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVR_PID) },
719 { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
720 { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
721 { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
722 { USB_DEVICE(TESTO_VID, TESTO_USB_INTERFACE_PID) },
723 { USB_DEVICE(FTDI_VID, FTDI_GAMMA_SCOUT_PID) },
724 { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13M_PID) },
725 { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13S_PID) },
726 { USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
727 { USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
728 { USB_DEVICE(FTDI_VID, FTDI_NDI_HUC_PID),
729 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
730 { USB_DEVICE(FTDI_VID, FTDI_NDI_SPECTRA_SCU_PID),
731 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
732 { USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_2_PID),
733 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
734 { USB_DEVICE(FTDI_VID, FTDI_NDI_FUTURE_3_PID),
735 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
736 { USB_DEVICE(FTDI_VID, FTDI_NDI_AURORA_SCU_PID),
737 .driver_info = (kernel_ulong_t)&ftdi_NDI_device_quirk },
738 { USB_DEVICE(TELLDUS_VID, TELLDUS_TELLSTICK_PID) },
739 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_SERIAL_VX7_PID) },
740 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_CT29B_PID) },
741 { USB_DEVICE(RTSYSTEMS_VID, RTSYSTEMS_RTS01_PID) },
742 { USB_DEVICE(FTDI_VID, FTDI_MAXSTREAM_PID) },
743 { USB_DEVICE(FTDI_VID, FTDI_PHI_FISCO_PID) },
744 { USB_DEVICE(TML_VID, TML_USB_SERIAL_PID) },
745 { USB_DEVICE(FTDI_VID, FTDI_ELSTER_UNICOM_PID) },
746 { USB_DEVICE(FTDI_VID, FTDI_PROPOX_JTAGCABLEII_PID) },
747 { USB_DEVICE(FTDI_VID, FTDI_PROPOX_ISPCABLEIII_PID) },
748 { USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_PID),
749 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
750 { USB_DEVICE(OLIMEX_VID, OLIMEX_ARM_USB_OCD_H_PID),
751 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
752 { USB_DEVICE(FIC_VID, FIC_NEO1973_DEBUG_PID),
753 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
754 { USB_DEVICE(FTDI_VID, FTDI_OOCDLINK_PID),
755 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
756 { USB_DEVICE(FTDI_VID, LMI_LM3S_DEVEL_BOARD_PID),
757 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
758 { USB_DEVICE(FTDI_VID, LMI_LM3S_EVAL_BOARD_PID),
759 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
760 { USB_DEVICE(FTDI_VID, LMI_LM3S_ICDI_BOARD_PID),
761 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
762 { USB_DEVICE(FTDI_VID, FTDI_TURTELIZER_PID),
763 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
764 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID_USB60F) },
765 { USB_DEVICE(FTDI_VID, FTDI_REU_TINY_PID) },
766
767
768 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_PID) },
769 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_PID) },
770 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_PID) },
771 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485_2_PID) },
772 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AP485_2_PID) },
773 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB422_2_PID) },
774 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485S_PID) },
775 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB485C_PID) },
776 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_LEC_PID) },
777 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SB232_PID) },
778 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_TMU_PID) },
779 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_IRAMP_PID) },
780 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK5_PID) },
781 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO8x8_PID) },
782 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) },
783 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x2_PID) },
784 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO10x1_PID) },
785 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO30x3_PID) },
786 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO60x3_PID) },
787 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO2x16_PID) },
788 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO3x32_PID) },
789 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_DRAK6_PID) },
790 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_UPSUSB_PID) },
791 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_MU_PID) },
792 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_SIMUKEY_PID) },
793 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_AD4USB_PID) },
794 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMUX_PID) },
795 { USB_DEVICE(PAPOUCH_VID, PAPOUCH_GMSR_PID) },
796
797 { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },
798 { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },
799 { USB_DEVICE(ALTI2_VID, ALTI2_N3_PID) },
800 { USB_DEVICE(FTDI_VID, DIEBOLD_BCS_SE923_PID) },
801 { USB_DEVICE(ATMEL_VID, STK541_PID) },
802 { USB_DEVICE(DE_VID, STB_PID) },
803 { USB_DEVICE(DE_VID, WHT_PID) },
804 { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
805 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
806 { USB_DEVICE(ADI_VID, ADI_GNICEPLUS_PID),
807 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
808 { USB_DEVICE_AND_INTERFACE_INFO(MICROCHIP_VID, MICROCHIP_USB_BOARD_PID,
809 USB_CLASS_VENDOR_SPEC,
810 USB_SUBCLASS_VENDOR_SPEC, 0x00) },
811 { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
812 { USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
813 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
814 { USB_DEVICE(LARSENBRUSGAARD_VID, LB_ALTITRACK_PID) },
815 { USB_DEVICE(GN_OTOMETRICS_VID, AURICAL_USB_PID) },
816 { USB_DEVICE(FTDI_VID, PI_C865_PID) },
817 { USB_DEVICE(FTDI_VID, PI_C857_PID) },
818 { USB_DEVICE(PI_VID, PI_C866_PID) },
819 { USB_DEVICE(PI_VID, PI_C663_PID) },
820 { USB_DEVICE(PI_VID, PI_C725_PID) },
821 { USB_DEVICE(PI_VID, PI_E517_PID) },
822 { USB_DEVICE(PI_VID, PI_C863_PID) },
823 { USB_DEVICE(PI_VID, PI_E861_PID) },
824 { USB_DEVICE(PI_VID, PI_C867_PID) },
825 { USB_DEVICE(PI_VID, PI_E609_PID) },
826 { USB_DEVICE(PI_VID, PI_E709_PID) },
827 { USB_DEVICE(PI_VID, PI_100F_PID) },
828 { USB_DEVICE(PI_VID, PI_1011_PID) },
829 { USB_DEVICE(PI_VID, PI_1012_PID) },
830 { USB_DEVICE(PI_VID, PI_1013_PID) },
831 { USB_DEVICE(PI_VID, PI_1014_PID) },
832 { USB_DEVICE(PI_VID, PI_1015_PID) },
833 { USB_DEVICE(PI_VID, PI_1016_PID) },
834 { USB_DEVICE(KONDO_VID, KONDO_USB_SERIAL_PID) },
835 { USB_DEVICE(BAYER_VID, BAYER_CONTOUR_CABLE_PID) },
836 { USB_DEVICE(FTDI_VID, MARVELL_OPENRD_PID),
837 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
838 { USB_DEVICE(FTDI_VID, TI_XDS100V2_PID),
839 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
840 { USB_DEVICE(FTDI_VID, HAMEG_HO820_PID) },
841 { USB_DEVICE(FTDI_VID, HAMEG_HO720_PID) },
842 { USB_DEVICE(FTDI_VID, HAMEG_HO730_PID) },
843 { USB_DEVICE(FTDI_VID, HAMEG_HO870_PID) },
844 { USB_DEVICE(FTDI_VID, MJSG_GENERIC_PID) },
845 { USB_DEVICE(FTDI_VID, MJSG_SR_RADIO_PID) },
846 { USB_DEVICE(FTDI_VID, MJSG_HD_RADIO_PID) },
847 { USB_DEVICE(FTDI_VID, MJSG_XM_RADIO_PID) },
848 { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_ST_PID),
849 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
850 { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SLITE_PID),
851 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
852 { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH2_PID),
853 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
854 { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID),
855 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
856 { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) },
857 { USB_DEVICE(FTDI_VID, ACCESIO_COM4SM_PID) },
858 { USB_DEVICE(IONICS_VID, IONICS_PLUGCOMPUTER_PID),
859 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
860 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_24_MASTER_WING_PID) },
861 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_PC_WING_PID) },
862 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_USB_DMX_PID) },
863 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MIDI_TIMECODE_PID) },
864 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MINI_WING_PID) },
865 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MAXI_WING_PID) },
866 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_MEDIA_WING_PID) },
867 { USB_DEVICE(FTDI_VID, FTDI_CHAMSYS_WING_PID) },
868 { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) },
869 { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) },
870 { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) },
871 { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) },
872 { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
873 { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
874 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
875 { USB_DEVICE(ST_VID, ST_STMCLT1030_PID),
876 .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
877 { USB_DEVICE(FTDI_VID, FTDI_RF_R106) },
878 { USB_DEVICE(FTDI_VID, FTDI_DISTORTEC_JTAG_LOCK_PICK_PID),
879 .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
880 { USB_DEVICE(FTDI_VID, FTDI_LUMEL_PD12_PID) },
881 { },
882 { }
883};
884
885MODULE_DEVICE_TABLE(usb, id_table_combined);
886
887static const char *ftdi_chip_name[] = {
888 [SIO] = "SIO",
889 [FT8U232AM] = "FT8U232AM",
890 [FT232BM] = "FT232BM",
891 [FT2232C] = "FT2232C",
892 [FT232RL] = "FT232RL",
893 [FT2232H] = "FT2232H",
894 [FT4232H] = "FT4232H",
895 [FT232H] = "FT232H",
896 [FTX] = "FT-X"
897};
898
899
900
901#define FTDI_STATUS_B0_MASK (FTDI_RS0_CTS | FTDI_RS0_DSR | FTDI_RS0_RI | FTDI_RS0_RLSD)
902#define FTDI_STATUS_B1_MASK (FTDI_RS_BI)
903
904
905#define FTDI_IMPL_ASYNC_FLAGS = (ASYNC_SPD_HI | ASYNC_SPD_VHI \
906 | ASYNC_SPD_CUST | ASYNC_SPD_SHI | ASYNC_SPD_WARP)
907
908
909static int ftdi_sio_probe(struct usb_serial *serial,
910 const struct usb_device_id *id);
911static int ftdi_sio_port_probe(struct usb_serial_port *port);
912static int ftdi_sio_port_remove(struct usb_serial_port *port);
913static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port);
914static void ftdi_close(struct usb_serial_port *port);
915static void ftdi_dtr_rts(struct usb_serial_port *port, int on);
916static void ftdi_process_read_urb(struct urb *urb);
917static int ftdi_prepare_write_buffer(struct usb_serial_port *port,
918 void *dest, size_t size);
919static void ftdi_set_termios(struct tty_struct *tty,
920 struct usb_serial_port *port, struct ktermios *old);
921static int ftdi_tiocmget(struct tty_struct *tty);
922static int ftdi_tiocmset(struct tty_struct *tty,
923 unsigned int set, unsigned int clear);
924static int ftdi_get_icount(struct tty_struct *tty,
925 struct serial_icounter_struct *icount);
926static int ftdi_ioctl(struct tty_struct *tty,
927 unsigned int cmd, unsigned long arg);
928static void ftdi_break_ctl(struct tty_struct *tty, int break_state);
929
930static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base);
931static unsigned short int ftdi_232am_baud_to_divisor(int baud);
932static __u32 ftdi_232bm_baud_base_to_divisor(int baud, int base);
933static __u32 ftdi_232bm_baud_to_divisor(int baud);
934static __u32 ftdi_2232h_baud_base_to_divisor(int baud, int base);
935static __u32 ftdi_2232h_baud_to_divisor(int baud);
936
937static struct usb_serial_driver ftdi_sio_device = {
938 .driver = {
939 .owner = THIS_MODULE,
940 .name = "ftdi_sio",
941 },
942 .description = "FTDI USB Serial Device",
943 .id_table = id_table_combined,
944 .num_ports = 1,
945 .bulk_in_size = 512,
946 .bulk_out_size = 256,
947 .probe = ftdi_sio_probe,
948 .port_probe = ftdi_sio_port_probe,
949 .port_remove = ftdi_sio_port_remove,
950 .open = ftdi_open,
951 .close = ftdi_close,
952 .dtr_rts = ftdi_dtr_rts,
953 .throttle = usb_serial_generic_throttle,
954 .unthrottle = usb_serial_generic_unthrottle,
955 .process_read_urb = ftdi_process_read_urb,
956 .prepare_write_buffer = ftdi_prepare_write_buffer,
957 .tiocmget = ftdi_tiocmget,
958 .tiocmset = ftdi_tiocmset,
959 .get_icount = ftdi_get_icount,
960 .ioctl = ftdi_ioctl,
961 .set_termios = ftdi_set_termios,
962 .break_ctl = ftdi_break_ctl,
963};
964
965static struct usb_serial_driver * const serial_drivers[] = {
966 &ftdi_sio_device, NULL
967};
968
969
970#define WDR_TIMEOUT 5000
971#define WDR_SHORT_TIMEOUT 1000
972
973
974#define HIGH 1
975#define LOW 0
976
977
978
979
980
981
982
983static unsigned short int ftdi_232am_baud_base_to_divisor(int baud, int base)
984{
985 unsigned short int divisor;
986
987 int divisor3 = base / 2 / baud;
988 if ((divisor3 & 0x7) == 7)
989 divisor3++;
990 divisor = divisor3 >> 3;
991 divisor3 &= 0x7;
992 if (divisor3 == 1)
993 divisor |= 0xc000;
994 else if (divisor3 >= 4)
995 divisor |= 0x4000;
996 else if (divisor3 != 0)
997 divisor |= 0x8000;
998 else if (divisor == 1)
999 divisor = 0;
1000 return divisor;
1001}
1002
1003static unsigned short int ftdi_232am_baud_to_divisor(int baud)
1004{
1005 return ftdi_232am_baud_base_to_divisor(baud, 48000000);
1006}
1007
1008static __u32 ftdi_232bm_baud_base_to_divisor(int baud, int base)
1009{
1010 static const unsigned char divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 };
1011 __u32 divisor;
1012
1013 int divisor3 = base / 2 / baud;
1014 divisor = divisor3 >> 3;
1015 divisor |= (__u32)divfrac[divisor3 & 0x7] << 14;
1016
1017 if (divisor == 1)
1018 divisor = 0;
1019 else if (divisor == 0x4001)
1020 divisor = 1;
1021 return divisor;
1022}
1023
1024static __u32 ftdi_232bm_baud_to_divisor(int baud)
1025{
1026 return ftdi_232bm_baud_base_to_divisor(baud, 48000000);
1027}
1028
1029static __u32 ftdi_2232h_baud_base_to_divisor(int baud, int base)
1030{
1031 static const unsigned char divfrac[8] = { 0, 3, 2, 4, 1, 5, 6, 7 };
1032 __u32 divisor;
1033 int divisor3;
1034
1035
1036 divisor3 = base * 8 / (baud * 10);
1037
1038 divisor = divisor3 >> 3;
1039 divisor |= (__u32)divfrac[divisor3 & 0x7] << 14;
1040
1041 if (divisor == 1)
1042 divisor = 0;
1043 else if (divisor == 0x4001)
1044 divisor = 1;
1045
1046
1047
1048
1049
1050 divisor |= 0x00020000;
1051 return divisor;
1052}
1053
1054static __u32 ftdi_2232h_baud_to_divisor(int baud)
1055{
1056 return ftdi_2232h_baud_base_to_divisor(baud, 120000000);
1057}
1058
1059#define set_mctrl(port, set) update_mctrl((port), (set), 0)
1060#define clear_mctrl(port, clear) update_mctrl((port), 0, (clear))
1061
1062static int update_mctrl(struct usb_serial_port *port, unsigned int set,
1063 unsigned int clear)
1064{
1065 struct ftdi_private *priv = usb_get_serial_port_data(port);
1066 unsigned urb_value;
1067 int rv;
1068
1069 if (((set | clear) & (TIOCM_DTR | TIOCM_RTS)) == 0) {
1070 dbg("%s - DTR|RTS not being set|cleared", __func__);
1071 return 0;
1072 }
1073
1074 clear &= ~set;
1075 urb_value = 0;
1076 if (clear & TIOCM_DTR)
1077 urb_value |= FTDI_SIO_SET_DTR_LOW;
1078 if (clear & TIOCM_RTS)
1079 urb_value |= FTDI_SIO_SET_RTS_LOW;
1080 if (set & TIOCM_DTR)
1081 urb_value |= FTDI_SIO_SET_DTR_HIGH;
1082 if (set & TIOCM_RTS)
1083 urb_value |= FTDI_SIO_SET_RTS_HIGH;
1084 rv = usb_control_msg(port->serial->dev,
1085 usb_sndctrlpipe(port->serial->dev, 0),
1086 FTDI_SIO_SET_MODEM_CTRL_REQUEST,
1087 FTDI_SIO_SET_MODEM_CTRL_REQUEST_TYPE,
1088 urb_value, priv->interface,
1089 NULL, 0, WDR_TIMEOUT);
1090 if (rv < 0) {
1091 dbg("%s Error from MODEM_CTRL urb: DTR %s, RTS %s",
1092 __func__,
1093 (set & TIOCM_DTR) ? "HIGH" :
1094 (clear & TIOCM_DTR) ? "LOW" : "unchanged",
1095 (set & TIOCM_RTS) ? "HIGH" :
1096 (clear & TIOCM_RTS) ? "LOW" : "unchanged");
1097 } else {
1098 dbg("%s - DTR %s, RTS %s", __func__,
1099 (set & TIOCM_DTR) ? "HIGH" :
1100 (clear & TIOCM_DTR) ? "LOW" : "unchanged",
1101 (set & TIOCM_RTS) ? "HIGH" :
1102 (clear & TIOCM_RTS) ? "LOW" : "unchanged");
1103
1104 priv->last_dtr_rts = (priv->last_dtr_rts & ~clear) | set;
1105 }
1106 return rv;
1107}
1108
1109
1110static __u32 get_ftdi_divisor(struct tty_struct *tty,
1111 struct usb_serial_port *port)
1112{
1113 struct ftdi_private *priv = usb_get_serial_port_data(port);
1114 __u32 div_value = 0;
1115 int div_okay = 1;
1116 int baud;
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148 baud = tty_get_baud_rate(tty);
1149 dbg("%s - tty_get_baud_rate reports speed %d", __func__, baud);
1150
1151
1152
1153
1154 if (baud == 38400 &&
1155 ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) &&
1156 (priv->custom_divisor)) {
1157 baud = priv->baud_base / priv->custom_divisor;
1158 dbg("%s - custom divisor %d sets baud rate to %d",
1159 __func__, priv->custom_divisor, baud);
1160 }
1161
1162
1163
1164 if (!baud)
1165 baud = 9600;
1166 switch (priv->chip_type) {
1167 case SIO:
1168 switch (baud) {
1169 case 300: div_value = ftdi_sio_b300; break;
1170 case 600: div_value = ftdi_sio_b600; break;
1171 case 1200: div_value = ftdi_sio_b1200; break;
1172 case 2400: div_value = ftdi_sio_b2400; break;
1173 case 4800: div_value = ftdi_sio_b4800; break;
1174 case 9600: div_value = ftdi_sio_b9600; break;
1175 case 19200: div_value = ftdi_sio_b19200; break;
1176 case 38400: div_value = ftdi_sio_b38400; break;
1177 case 57600: div_value = ftdi_sio_b57600; break;
1178 case 115200: div_value = ftdi_sio_b115200; break;
1179 }
1180 if (div_value == 0) {
1181 dbg("%s - Baudrate (%d) requested is not supported",
1182 __func__, baud);
1183 div_value = ftdi_sio_b9600;
1184 baud = 9600;
1185 div_okay = 0;
1186 }
1187 break;
1188 case FT8U232AM:
1189 if (baud <= 3000000) {
1190 div_value = ftdi_232am_baud_to_divisor(baud);
1191 } else {
1192 dbg("%s - Baud rate too high!", __func__);
1193 baud = 9600;
1194 div_value = ftdi_232am_baud_to_divisor(9600);
1195 div_okay = 0;
1196 }
1197 break;
1198 case FT232BM:
1199 case FT2232C:
1200 case FT232RL:
1201 case FTX:
1202 if (baud <= 3000000) {
1203 __u16 product_id = le16_to_cpu(
1204 port->serial->dev->descriptor.idProduct);
1205 if (((FTDI_NDI_HUC_PID == product_id) ||
1206 (FTDI_NDI_SPECTRA_SCU_PID == product_id) ||
1207 (FTDI_NDI_FUTURE_2_PID == product_id) ||
1208 (FTDI_NDI_FUTURE_3_PID == product_id) ||
1209 (FTDI_NDI_AURORA_SCU_PID == product_id)) &&
1210 (baud == 19200)) {
1211 baud = 1200000;
1212 }
1213 div_value = ftdi_232bm_baud_to_divisor(baud);
1214 } else {
1215 dbg("%s - Baud rate too high!", __func__);
1216 div_value = ftdi_232bm_baud_to_divisor(9600);
1217 div_okay = 0;
1218 baud = 9600;
1219 }
1220 break;
1221 case FT2232H:
1222 case FT4232H:
1223 case FT232H:
1224 if ((baud <= 12000000) && (baud >= 1200)) {
1225 div_value = ftdi_2232h_baud_to_divisor(baud);
1226 } else if (baud < 1200) {
1227 div_value = ftdi_232bm_baud_to_divisor(baud);
1228 } else {
1229 dbg("%s - Baud rate too high!", __func__);
1230 div_value = ftdi_232bm_baud_to_divisor(9600);
1231 div_okay = 0;
1232 baud = 9600;
1233 }
1234 break;
1235 }
1236
1237 if (div_okay) {
1238 dbg("%s - Baud rate set to %d (divisor 0x%lX) on chip %s",
1239 __func__, baud, (unsigned long)div_value,
1240 ftdi_chip_name[priv->chip_type]);
1241 }
1242
1243 tty_encode_baud_rate(tty, baud, baud);
1244 return div_value;
1245}
1246
1247static int change_speed(struct tty_struct *tty, struct usb_serial_port *port)
1248{
1249 struct ftdi_private *priv = usb_get_serial_port_data(port);
1250 __u16 urb_value;
1251 __u16 urb_index;
1252 __u32 urb_index_value;
1253 int rv;
1254
1255 urb_index_value = get_ftdi_divisor(tty, port);
1256 urb_value = (__u16)urb_index_value;
1257 urb_index = (__u16)(urb_index_value >> 16);
1258 if ((priv->chip_type == FT2232C) || (priv->chip_type == FT2232H) ||
1259 (priv->chip_type == FT4232H) || (priv->chip_type == FT232H)) {
1260
1261
1262 urb_index = (__u16)((urb_index << 8) | priv->interface);
1263 }
1264
1265 rv = usb_control_msg(port->serial->dev,
1266 usb_sndctrlpipe(port->serial->dev, 0),
1267 FTDI_SIO_SET_BAUDRATE_REQUEST,
1268 FTDI_SIO_SET_BAUDRATE_REQUEST_TYPE,
1269 urb_value, urb_index,
1270 NULL, 0, WDR_SHORT_TIMEOUT);
1271 return rv;
1272}
1273
1274static int write_latency_timer(struct usb_serial_port *port)
1275{
1276 struct ftdi_private *priv = usb_get_serial_port_data(port);
1277 struct usb_device *udev = port->serial->dev;
1278 int rv;
1279 int l = priv->latency;
1280
1281 if (priv->flags & ASYNC_LOW_LATENCY)
1282 l = 1;
1283
1284 dbg("%s: setting latency timer = %i", __func__, l);
1285
1286 rv = usb_control_msg(udev,
1287 usb_sndctrlpipe(udev, 0),
1288 FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
1289 FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
1290 l, priv->interface,
1291 NULL, 0, WDR_TIMEOUT);
1292 if (rv < 0)
1293 dev_err(&port->dev, "Unable to write latency timer: %i\n", rv);
1294 return rv;
1295}
1296
1297static int read_latency_timer(struct usb_serial_port *port)
1298{
1299 struct ftdi_private *priv = usb_get_serial_port_data(port);
1300 struct usb_device *udev = port->serial->dev;
1301 unsigned char *buf;
1302 int rv;
1303
1304 buf = kmalloc(1, GFP_KERNEL);
1305 if (!buf)
1306 return -ENOMEM;
1307
1308 rv = usb_control_msg(udev,
1309 usb_rcvctrlpipe(udev, 0),
1310 FTDI_SIO_GET_LATENCY_TIMER_REQUEST,
1311 FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE,
1312 0, priv->interface,
1313 buf, 1, WDR_TIMEOUT);
1314 if (rv < 0)
1315 dev_err(&port->dev, "Unable to read latency timer: %i\n", rv);
1316 else
1317 priv->latency = buf[0];
1318
1319 kfree(buf);
1320
1321 return rv;
1322}
1323
1324static int get_serial_info(struct usb_serial_port *port,
1325 struct serial_struct __user *retinfo)
1326{
1327 struct ftdi_private *priv = usb_get_serial_port_data(port);
1328 struct serial_struct tmp;
1329
1330 if (!retinfo)
1331 return -EFAULT;
1332 memset(&tmp, 0, sizeof(tmp));
1333 tmp.flags = priv->flags;
1334 tmp.baud_base = priv->baud_base;
1335 tmp.custom_divisor = priv->custom_divisor;
1336 if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
1337 return -EFAULT;
1338 return 0;
1339}
1340
1341static int set_serial_info(struct tty_struct *tty,
1342 struct usb_serial_port *port, struct serial_struct __user *newinfo)
1343{
1344 struct ftdi_private *priv = usb_get_serial_port_data(port);
1345 struct serial_struct new_serial;
1346 struct ftdi_private old_priv;
1347
1348 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
1349 return -EFAULT;
1350
1351 mutex_lock(&priv->cfg_lock);
1352 old_priv = *priv;
1353
1354
1355
1356 if (!capable(CAP_SYS_ADMIN)) {
1357 if (((new_serial.flags & ~ASYNC_USR_MASK) !=
1358 (priv->flags & ~ASYNC_USR_MASK))) {
1359 mutex_unlock(&priv->cfg_lock);
1360 return -EPERM;
1361 }
1362 priv->flags = ((priv->flags & ~ASYNC_USR_MASK) |
1363 (new_serial.flags & ASYNC_USR_MASK));
1364 priv->custom_divisor = new_serial.custom_divisor;
1365 goto check_and_exit;
1366 }
1367
1368 if (new_serial.baud_base != priv->baud_base) {
1369 mutex_unlock(&priv->cfg_lock);
1370 return -EINVAL;
1371 }
1372
1373
1374
1375 priv->flags = ((priv->flags & ~ASYNC_FLAGS) |
1376 (new_serial.flags & ASYNC_FLAGS));
1377 priv->custom_divisor = new_serial.custom_divisor;
1378
1379 write_latency_timer(port);
1380
1381check_and_exit:
1382 if ((old_priv.flags & ASYNC_SPD_MASK) !=
1383 (priv->flags & ASYNC_SPD_MASK)) {
1384 if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
1385 tty->alt_speed = 57600;
1386 else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
1387 tty->alt_speed = 115200;
1388 else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_SHI)
1389 tty->alt_speed = 230400;
1390 else if ((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_WARP)
1391 tty->alt_speed = 460800;
1392 else
1393 tty->alt_speed = 0;
1394 }
1395 if (((old_priv.flags & ASYNC_SPD_MASK) !=
1396 (priv->flags & ASYNC_SPD_MASK)) ||
1397 (((priv->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) &&
1398 (old_priv.custom_divisor != priv->custom_divisor))) {
1399 change_speed(tty, port);
1400 mutex_unlock(&priv->cfg_lock);
1401 }
1402 else
1403 mutex_unlock(&priv->cfg_lock);
1404 return 0;
1405}
1406
1407static int get_lsr_info(struct usb_serial_port *port,
1408 struct serial_struct __user *retinfo)
1409{
1410 struct ftdi_private *priv = usb_get_serial_port_data(port);
1411 unsigned int result = 0;
1412
1413 if (!retinfo)
1414 return -EFAULT;
1415
1416 if (priv->transmit_empty)
1417 result = TIOCSER_TEMT;
1418
1419 if (copy_to_user(retinfo, &result, sizeof(unsigned int)))
1420 return -EFAULT;
1421 return 0;
1422}
1423
1424
1425
1426static void ftdi_determine_type(struct usb_serial_port *port)
1427{
1428 struct ftdi_private *priv = usb_get_serial_port_data(port);
1429 struct usb_serial *serial = port->serial;
1430 struct usb_device *udev = serial->dev;
1431 unsigned version;
1432 unsigned interfaces;
1433
1434
1435 priv->baud_base = 48000000 / 2;
1436
1437 version = le16_to_cpu(udev->descriptor.bcdDevice);
1438 interfaces = udev->actconfig->desc.bNumInterfaces;
1439 dbg("%s: bcdDevice = 0x%x, bNumInterfaces = %u", __func__,
1440 version, interfaces);
1441 if (interfaces > 1) {
1442 int inter;
1443
1444
1445 if (version == 0x0800) {
1446 priv->chip_type = FT4232H;
1447
1448 priv->baud_base = 120000000 / 2;
1449 } else if (version == 0x0700) {
1450 priv->chip_type = FT2232H;
1451
1452 priv->baud_base = 120000000 / 2;
1453 } else
1454 priv->chip_type = FT2232C;
1455
1456
1457 inter = serial->interface->altsetting->desc.bInterfaceNumber;
1458 if (inter == 0) {
1459 priv->interface = INTERFACE_A;
1460 } else if (inter == 1) {
1461 priv->interface = INTERFACE_B;
1462 } else if (inter == 2) {
1463 priv->interface = INTERFACE_C;
1464 } else if (inter == 3) {
1465 priv->interface = INTERFACE_D;
1466 }
1467
1468
1469 if (version < 0x500) {
1470 dbg("%s: something fishy - bcdDevice too low for multi-interface device",
1471 __func__);
1472 }
1473 } else if (version < 0x200) {
1474
1475 priv->chip_type = SIO;
1476 priv->baud_base = 12000000 / 16;
1477 } else if (version < 0x400) {
1478
1479
1480
1481 priv->chip_type = FT8U232AM;
1482 } else if (version < 0x600) {
1483
1484 priv->chip_type = FT232BM;
1485 } else if (version < 0x900) {
1486
1487 priv->chip_type = FT232RL;
1488 } else if (version < 0x1000) {
1489
1490 priv->chip_type = FT232H;
1491 } else {
1492
1493 priv->chip_type = FTX;
1494 }
1495
1496 dev_info(&udev->dev, "Detected %s\n", ftdi_chip_name[priv->chip_type]);
1497}
1498
1499
1500
1501
1502
1503static void ftdi_set_max_packet_size(struct usb_serial_port *port)
1504{
1505 struct ftdi_private *priv = usb_get_serial_port_data(port);
1506 struct usb_serial *serial = port->serial;
1507 struct usb_device *udev = serial->dev;
1508
1509 struct usb_interface *interface = serial->interface;
1510 struct usb_endpoint_descriptor *ep_desc = &interface->cur_altsetting->endpoint[1].desc;
1511
1512 unsigned num_endpoints;
1513 int i;
1514
1515 num_endpoints = interface->cur_altsetting->desc.bNumEndpoints;
1516 dev_info(&udev->dev, "Number of endpoints %d\n", num_endpoints);
1517
1518
1519
1520
1521
1522 for (i = 0; i < num_endpoints; i++) {
1523 dev_info(&udev->dev, "Endpoint %d MaxPacketSize %d\n", i+1,
1524 interface->cur_altsetting->endpoint[i].desc.wMaxPacketSize);
1525 ep_desc = &interface->cur_altsetting->endpoint[i].desc;
1526 if (ep_desc->wMaxPacketSize == 0) {
1527 ep_desc->wMaxPacketSize = cpu_to_le16(0x40);
1528 dev_info(&udev->dev, "Overriding wMaxPacketSize on endpoint %d\n", i);
1529 }
1530 }
1531
1532
1533 priv->max_packet_size = usb_endpoint_maxp(ep_desc);
1534
1535 dev_info(&udev->dev, "Setting MaxPacketSize %d\n", priv->max_packet_size);
1536}
1537
1538
1539
1540
1541
1542
1543
1544
1545static ssize_t show_latency_timer(struct device *dev,
1546 struct device_attribute *attr, char *buf)
1547{
1548 struct usb_serial_port *port = to_usb_serial_port(dev);
1549 struct ftdi_private *priv = usb_get_serial_port_data(port);
1550 if (priv->flags & ASYNC_LOW_LATENCY)
1551 return sprintf(buf, "1\n");
1552 else
1553 return sprintf(buf, "%i\n", priv->latency);
1554}
1555
1556
1557
1558static ssize_t store_latency_timer(struct device *dev,
1559 struct device_attribute *attr, const char *valbuf,
1560 size_t count)
1561{
1562 struct usb_serial_port *port = to_usb_serial_port(dev);
1563 struct ftdi_private *priv = usb_get_serial_port_data(port);
1564 int v = simple_strtoul(valbuf, NULL, 10);
1565 int rv;
1566
1567 priv->latency = v;
1568 rv = write_latency_timer(port);
1569 if (rv < 0)
1570 return -EIO;
1571 return count;
1572}
1573
1574
1575
1576static ssize_t store_event_char(struct device *dev,
1577 struct device_attribute *attr, const char *valbuf, size_t count)
1578{
1579 struct usb_serial_port *port = to_usb_serial_port(dev);
1580 struct ftdi_private *priv = usb_get_serial_port_data(port);
1581 struct usb_device *udev = port->serial->dev;
1582 int v = simple_strtoul(valbuf, NULL, 10);
1583 int rv;
1584
1585 dbg("%s: setting event char = %i", __func__, v);
1586
1587 rv = usb_control_msg(udev,
1588 usb_sndctrlpipe(udev, 0),
1589 FTDI_SIO_SET_EVENT_CHAR_REQUEST,
1590 FTDI_SIO_SET_EVENT_CHAR_REQUEST_TYPE,
1591 v, priv->interface,
1592 NULL, 0, WDR_TIMEOUT);
1593 if (rv < 0) {
1594 dbg("Unable to write event character: %i", rv);
1595 return -EIO;
1596 }
1597
1598 return count;
1599}
1600
1601static DEVICE_ATTR(latency_timer, S_IWUSR | S_IRUGO, show_latency_timer,
1602 store_latency_timer);
1603static DEVICE_ATTR(event_char, S_IWUSR, NULL, store_event_char);
1604
1605static int create_sysfs_attrs(struct usb_serial_port *port)
1606{
1607 struct ftdi_private *priv = usb_get_serial_port_data(port);
1608 int retval = 0;
1609
1610
1611
1612 if (priv->chip_type != SIO) {
1613 dbg("sysfs attributes for %s", ftdi_chip_name[priv->chip_type]);
1614 retval = device_create_file(&port->dev, &dev_attr_event_char);
1615 if ((!retval) &&
1616 (priv->chip_type == FT232BM ||
1617 priv->chip_type == FT2232C ||
1618 priv->chip_type == FT232RL ||
1619 priv->chip_type == FT2232H ||
1620 priv->chip_type == FT4232H ||
1621 priv->chip_type == FT232H ||
1622 priv->chip_type == FTX)) {
1623 retval = device_create_file(&port->dev,
1624 &dev_attr_latency_timer);
1625 }
1626 }
1627 return retval;
1628}
1629
1630static void remove_sysfs_attrs(struct usb_serial_port *port)
1631{
1632 struct ftdi_private *priv = usb_get_serial_port_data(port);
1633
1634
1635 if (priv->chip_type != SIO) {
1636 device_remove_file(&port->dev, &dev_attr_event_char);
1637 if (priv->chip_type == FT232BM ||
1638 priv->chip_type == FT2232C ||
1639 priv->chip_type == FT232RL ||
1640 priv->chip_type == FT2232H ||
1641 priv->chip_type == FT4232H ||
1642 priv->chip_type == FT232H ||
1643 priv->chip_type == FTX) {
1644 device_remove_file(&port->dev, &dev_attr_latency_timer);
1645 }
1646 }
1647
1648}
1649
1650
1651
1652
1653
1654
1655
1656
1657static int ftdi_sio_probe(struct usb_serial *serial,
1658 const struct usb_device_id *id)
1659{
1660 struct ftdi_sio_quirk *quirk =
1661 (struct ftdi_sio_quirk *)id->driver_info;
1662
1663 if (quirk && quirk->probe) {
1664 int ret = quirk->probe(serial);
1665 if (ret != 0)
1666 return ret;
1667 }
1668
1669 usb_set_serial_data(serial, (void *)id->driver_info);
1670
1671 return 0;
1672}
1673
1674static int ftdi_sio_port_probe(struct usb_serial_port *port)
1675{
1676 struct ftdi_private *priv;
1677 struct ftdi_sio_quirk *quirk = usb_get_serial_data(port->serial);
1678
1679
1680 priv = kzalloc(sizeof(struct ftdi_private), GFP_KERNEL);
1681 if (!priv) {
1682 dev_err(&port->dev, "%s- kmalloc(%Zd) failed.\n", __func__,
1683 sizeof(struct ftdi_private));
1684 return -ENOMEM;
1685 }
1686
1687 kref_init(&priv->kref);
1688 mutex_init(&priv->cfg_lock);
1689 memset(&priv->icount, 0x00, sizeof(priv->icount));
1690 init_waitqueue_head(&priv->delta_msr_wait);
1691
1692 priv->flags = ASYNC_LOW_LATENCY;
1693 priv->dev_gone = false;
1694
1695 if (quirk && quirk->port_probe)
1696 quirk->port_probe(priv);
1697
1698 priv->port = port;
1699 usb_set_serial_port_data(port, priv);
1700
1701 ftdi_determine_type(port);
1702 ftdi_set_max_packet_size(port);
1703 if (read_latency_timer(port) < 0)
1704 priv->latency = 16;
1705 write_latency_timer(port);
1706 create_sysfs_attrs(port);
1707 return 0;
1708}
1709
1710
1711
1712
1713static void ftdi_USB_UIRT_setup(struct ftdi_private *priv)
1714{
1715 priv->flags |= ASYNC_SPD_CUST;
1716 priv->custom_divisor = 77;
1717 priv->force_baud = 38400;
1718}
1719
1720
1721
1722
1723static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv)
1724{
1725 priv->flags |= ASYNC_SPD_CUST;
1726 priv->custom_divisor = 240;
1727 priv->force_baud = 38400;
1728 priv->force_rtscts = 1;
1729}
1730
1731
1732
1733
1734
1735
1736static int ndi_latency_timer = 1;
1737
1738
1739
1740
1741
1742
1743static int ftdi_NDI_device_setup(struct usb_serial *serial)
1744{
1745 struct usb_device *udev = serial->dev;
1746 int latency = ndi_latency_timer;
1747
1748 if (latency == 0)
1749 latency = 1;
1750 if (latency > 99)
1751 latency = 99;
1752
1753 dbg("%s setting NDI device latency to %d", __func__, latency);
1754 dev_info(&udev->dev, "NDI device with a latency value of %d", latency);
1755
1756
1757 usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
1758 FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
1759 FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
1760 latency, 0, NULL, 0, WDR_TIMEOUT);
1761 return 0;
1762}
1763
1764
1765
1766
1767
1768
1769static int ftdi_jtag_probe(struct usb_serial *serial)
1770{
1771 struct usb_device *udev = serial->dev;
1772 struct usb_interface *interface = serial->interface;
1773
1774 if (interface == udev->actconfig->interface[0]) {
1775 dev_info(&udev->dev,
1776 "Ignoring serial port reserved for JTAG\n");
1777 return -ENODEV;
1778 }
1779
1780 return 0;
1781}
1782
1783static int ftdi_8u2232c_probe(struct usb_serial *serial)
1784{
1785 struct usb_device *udev = serial->dev;
1786
1787 if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) ||
1788 (udev->product && !strcmp(udev->product, "BeagleBone/XDS100")))
1789 return ftdi_jtag_probe(serial);
1790
1791 return 0;
1792}
1793
1794
1795
1796
1797
1798static int ftdi_stmclite_probe(struct usb_serial *serial)
1799{
1800 struct usb_device *udev = serial->dev;
1801 struct usb_interface *interface = serial->interface;
1802
1803 if (interface == udev->actconfig->interface[2])
1804 return 0;
1805
1806 dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n");
1807
1808 return -ENODEV;
1809}
1810
1811
1812
1813
1814
1815static int ftdi_mtxorb_hack_setup(struct usb_serial *serial)
1816{
1817 struct usb_host_endpoint *ep = serial->dev->ep_in[1];
1818 struct usb_endpoint_descriptor *ep_desc = &ep->desc;
1819
1820 if (ep->enabled && ep_desc->wMaxPacketSize == 0) {
1821 ep_desc->wMaxPacketSize = cpu_to_le16(0x40);
1822 dev_info(&serial->dev->dev,
1823 "Fixing invalid wMaxPacketSize on read pipe\n");
1824 }
1825
1826 return 0;
1827}
1828
1829static void ftdi_sio_priv_release(struct kref *k)
1830{
1831 struct ftdi_private *priv = container_of(k, struct ftdi_private, kref);
1832
1833 kfree(priv);
1834}
1835
1836static int ftdi_sio_port_remove(struct usb_serial_port *port)
1837{
1838 struct ftdi_private *priv = usb_get_serial_port_data(port);
1839
1840 priv->dev_gone = true;
1841 wake_up_interruptible_all(&priv->delta_msr_wait);
1842
1843 remove_sysfs_attrs(port);
1844
1845 kref_put(&priv->kref, ftdi_sio_priv_release);
1846
1847 return 0;
1848}
1849
1850static int ftdi_open(struct tty_struct *tty, struct usb_serial_port *port)
1851{
1852 struct ktermios dummy;
1853 struct usb_device *dev = port->serial->dev;
1854 struct ftdi_private *priv = usb_get_serial_port_data(port);
1855 int result;
1856
1857
1858
1859 usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1860 FTDI_SIO_RESET_REQUEST, FTDI_SIO_RESET_REQUEST_TYPE,
1861 FTDI_SIO_RESET_SIO,
1862 priv->interface, NULL, 0, WDR_TIMEOUT);
1863
1864
1865
1866
1867
1868
1869 if (tty) {
1870 memset(&dummy, 0, sizeof(dummy));
1871 ftdi_set_termios(tty, port, &dummy);
1872 }
1873
1874
1875 result = usb_serial_generic_open(tty, port);
1876 if (!result)
1877 kref_get(&priv->kref);
1878
1879 return result;
1880}
1881
1882static void ftdi_dtr_rts(struct usb_serial_port *port, int on)
1883{
1884 struct ftdi_private *priv = usb_get_serial_port_data(port);
1885
1886 mutex_lock(&port->serial->disc_mutex);
1887 if (!port->serial->disconnected) {
1888
1889 if (!on && usb_control_msg(port->serial->dev,
1890 usb_sndctrlpipe(port->serial->dev, 0),
1891 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
1892 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
1893 0, priv->interface, NULL, 0,
1894 WDR_TIMEOUT) < 0) {
1895 dev_err(&port->dev, "error from flowcontrol urb\n");
1896 }
1897
1898 if (on)
1899 set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1900 else
1901 clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1902 }
1903 mutex_unlock(&port->serial->disc_mutex);
1904}
1905
1906
1907
1908
1909
1910
1911static void ftdi_close(struct usb_serial_port *port)
1912{
1913 struct ftdi_private *priv = usb_get_serial_port_data(port);
1914
1915 usb_serial_generic_close(port);
1916 kref_put(&priv->kref, ftdi_sio_priv_release);
1917}
1918
1919
1920
1921
1922
1923
1924
1925
1926static int ftdi_prepare_write_buffer(struct usb_serial_port *port,
1927 void *dest, size_t size)
1928{
1929 struct ftdi_private *priv;
1930 int count;
1931 unsigned long flags;
1932
1933 priv = usb_get_serial_port_data(port);
1934
1935 if (priv->chip_type == SIO) {
1936 unsigned char *buffer = dest;
1937 int i, len, c;
1938
1939 count = 0;
1940 spin_lock_irqsave(&port->lock, flags);
1941 for (i = 0; i < size - 1; i += priv->max_packet_size) {
1942 len = min_t(int, size - i, priv->max_packet_size) - 1;
1943 c = kfifo_out(&port->write_fifo, &buffer[i + 1], len);
1944 if (!c)
1945 break;
1946 priv->icount.tx += c;
1947 buffer[i] = (c << 2) + 1;
1948 count += c + 1;
1949 }
1950 spin_unlock_irqrestore(&port->lock, flags);
1951 } else {
1952 count = kfifo_out_locked(&port->write_fifo, dest, size,
1953 &port->lock);
1954 priv->icount.tx += count;
1955 }
1956
1957 return count;
1958}
1959
1960#define FTDI_RS_ERR_MASK (FTDI_RS_BI | FTDI_RS_PE | FTDI_RS_FE | FTDI_RS_OE)
1961
1962static int ftdi_process_packet(struct tty_struct *tty,
1963 struct usb_serial_port *port, struct ftdi_private *priv,
1964 char *packet, int len)
1965{
1966 int i;
1967 char status;
1968 char flag;
1969 char *ch;
1970
1971 if (len < 2) {
1972 dbg("malformed packet");
1973 return 0;
1974 }
1975
1976
1977
1978
1979 status = packet[0] & FTDI_STATUS_B0_MASK;
1980 if (status != priv->prev_status) {
1981 char diff_status = status ^ priv->prev_status;
1982
1983 if (diff_status & FTDI_RS0_CTS)
1984 priv->icount.cts++;
1985 if (diff_status & FTDI_RS0_DSR)
1986 priv->icount.dsr++;
1987 if (diff_status & FTDI_RS0_RI)
1988 priv->icount.rng++;
1989 if (diff_status & FTDI_RS0_RLSD)
1990 priv->icount.dcd++;
1991
1992 wake_up_interruptible_all(&priv->delta_msr_wait);
1993 priv->prev_status = status;
1994 }
1995
1996 flag = TTY_NORMAL;
1997 if (packet[1] & FTDI_RS_ERR_MASK) {
1998
1999
2000 if (packet[1] & FTDI_RS_BI) {
2001 flag = TTY_BREAK;
2002 priv->icount.brk++;
2003 usb_serial_handle_break(port);
2004 } else if (packet[1] & FTDI_RS_PE) {
2005 flag = TTY_PARITY;
2006 priv->icount.parity++;
2007 } else if (packet[1] & FTDI_RS_FE) {
2008 flag = TTY_FRAME;
2009 priv->icount.frame++;
2010 }
2011
2012 if (packet[1] & FTDI_RS_OE) {
2013 priv->icount.overrun++;
2014 tty_insert_flip_char(tty, 0, TTY_OVERRUN);
2015 }
2016 }
2017
2018
2019 if (packet[1] & FTDI_RS_TEMT)
2020 priv->transmit_empty = 1;
2021 else
2022 priv->transmit_empty = 0;
2023
2024 len -= 2;
2025 if (!len)
2026 return 0;
2027 priv->icount.rx += len;
2028 ch = packet + 2;
2029
2030 if (port->port.console && port->sysrq) {
2031 for (i = 0; i < len; i++, ch++) {
2032 if (!usb_serial_handle_sysrq_char(port, *ch))
2033 tty_insert_flip_char(tty, *ch, flag);
2034 }
2035 } else {
2036 tty_insert_flip_string_fixed_flag(tty, ch, flag, len);
2037 }
2038
2039 return len;
2040}
2041
2042static void ftdi_process_read_urb(struct urb *urb)
2043{
2044 struct usb_serial_port *port = urb->context;
2045 struct tty_struct *tty;
2046 struct ftdi_private *priv = usb_get_serial_port_data(port);
2047 char *data = (char *)urb->transfer_buffer;
2048 int i;
2049 int len;
2050 int count = 0;
2051
2052 tty = tty_port_tty_get(&port->port);
2053 if (!tty)
2054 return;
2055
2056 for (i = 0; i < urb->actual_length; i += priv->max_packet_size) {
2057 len = min_t(int, urb->actual_length - i, priv->max_packet_size);
2058 count += ftdi_process_packet(tty, port, priv, &data[i], len);
2059 }
2060
2061 if (count)
2062 tty_flip_buffer_push(tty);
2063 tty_kref_put(tty);
2064}
2065
2066static void ftdi_break_ctl(struct tty_struct *tty, int break_state)
2067{
2068 struct usb_serial_port *port = tty->driver_data;
2069 struct ftdi_private *priv = usb_get_serial_port_data(port);
2070 __u16 urb_value;
2071
2072
2073
2074
2075
2076 if (break_state)
2077 urb_value = priv->last_set_data_urb_value | FTDI_SIO_SET_BREAK;
2078 else
2079 urb_value = priv->last_set_data_urb_value;
2080
2081 if (usb_control_msg(port->serial->dev,
2082 usb_sndctrlpipe(port->serial->dev, 0),
2083 FTDI_SIO_SET_DATA_REQUEST,
2084 FTDI_SIO_SET_DATA_REQUEST_TYPE,
2085 urb_value , priv->interface,
2086 NULL, 0, WDR_TIMEOUT) < 0) {
2087 dev_err(&port->dev, "%s FAILED to enable/disable break state "
2088 "(state was %d)\n", __func__, break_state);
2089 }
2090
2091 dbg("%s break state is %d - urb is %d", __func__,
2092 break_state, urb_value);
2093
2094}
2095
2096
2097
2098
2099
2100static void ftdi_set_termios(struct tty_struct *tty,
2101 struct usb_serial_port *port, struct ktermios *old_termios)
2102{
2103 struct usb_device *dev = port->serial->dev;
2104 struct ftdi_private *priv = usb_get_serial_port_data(port);
2105 struct ktermios *termios = tty->termios;
2106 unsigned int cflag = termios->c_cflag;
2107 __u16 urb_value;
2108
2109
2110 unsigned int iflag = termios->c_iflag;
2111 unsigned char vstop;
2112 unsigned char vstart;
2113
2114
2115
2116 if (priv->force_baud && ((termios->c_cflag & CBAUD) != B0)) {
2117 dbg("%s: forcing baud rate for this device", __func__);
2118 tty_encode_baud_rate(tty, priv->force_baud,
2119 priv->force_baud);
2120 }
2121
2122
2123 if (priv->force_rtscts) {
2124 dbg("%s: forcing rtscts for this device", __func__);
2125 termios->c_cflag |= CRTSCTS;
2126 }
2127
2128 cflag = termios->c_cflag;
2129
2130 if (old_termios == 0)
2131 goto no_skip;
2132
2133 if (old_termios->c_cflag == termios->c_cflag
2134 && old_termios->c_ispeed == termios->c_ispeed
2135 && old_termios->c_ospeed == termios->c_ospeed)
2136 goto no_c_cflag_changes;
2137
2138
2139
2140
2141
2142 if ((old_termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)) ==
2143 (termios->c_cflag & (CSIZE|PARODD|PARENB|CMSPAR|CSTOPB)))
2144 goto no_data_parity_stop_changes;
2145
2146no_skip:
2147
2148
2149 urb_value = 0;
2150 urb_value |= (cflag & CSTOPB ? FTDI_SIO_SET_DATA_STOP_BITS_2 :
2151 FTDI_SIO_SET_DATA_STOP_BITS_1);
2152 if (cflag & PARENB) {
2153 if (cflag & CMSPAR)
2154 urb_value |= cflag & PARODD ?
2155 FTDI_SIO_SET_DATA_PARITY_MARK :
2156 FTDI_SIO_SET_DATA_PARITY_SPACE;
2157 else
2158 urb_value |= cflag & PARODD ?
2159 FTDI_SIO_SET_DATA_PARITY_ODD :
2160 FTDI_SIO_SET_DATA_PARITY_EVEN;
2161 } else {
2162 urb_value |= FTDI_SIO_SET_DATA_PARITY_NONE;
2163 }
2164 if (cflag & CSIZE) {
2165 switch (cflag & CSIZE) {
2166 case CS7: urb_value |= 7; dbg("Setting CS7"); break;
2167 case CS8: urb_value |= 8; dbg("Setting CS8"); break;
2168 default:
2169 dev_err(&port->dev, "CSIZE was set but not CS7-CS8\n");
2170 }
2171 }
2172
2173
2174
2175 priv->last_set_data_urb_value = urb_value;
2176
2177 if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2178 FTDI_SIO_SET_DATA_REQUEST,
2179 FTDI_SIO_SET_DATA_REQUEST_TYPE,
2180 urb_value , priv->interface,
2181 NULL, 0, WDR_SHORT_TIMEOUT) < 0) {
2182 dev_err(&port->dev, "%s FAILED to set "
2183 "databits/stopbits/parity\n", __func__);
2184 }
2185
2186
2187no_data_parity_stop_changes:
2188 if ((cflag & CBAUD) == B0) {
2189
2190 if (usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
2191 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2192 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2193 0, priv->interface,
2194 NULL, 0, WDR_TIMEOUT) < 0) {
2195 dev_err(&port->dev,
2196 "%s error from disable flowcontrol urb\n",
2197 __func__);
2198 }
2199
2200 clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2201 } else {
2202
2203 mutex_lock(&priv->cfg_lock);
2204 if (change_speed(tty, port))
2205 dev_err(&port->dev, "%s urb failed to set baudrate\n",
2206 __func__);
2207 mutex_unlock(&priv->cfg_lock);
2208
2209 if (!old_termios || (old_termios->c_cflag & CBAUD) == B0)
2210 set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
2211 }
2212
2213
2214
2215no_c_cflag_changes:
2216 if (cflag & CRTSCTS) {
2217 dbg("%s Setting to CRTSCTS flow control", __func__);
2218 if (usb_control_msg(dev,
2219 usb_sndctrlpipe(dev, 0),
2220 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2221 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2222 0 , (FTDI_SIO_RTS_CTS_HS | priv->interface),
2223 NULL, 0, WDR_TIMEOUT) < 0) {
2224 dev_err(&port->dev,
2225 "urb failed to set to rts/cts flow control\n");
2226 }
2227
2228 } else {
2229
2230
2231
2232
2233
2234
2235
2236 if (iflag & IXOFF) {
2237 dbg("%s request to enable xonxoff iflag=%04x",
2238 __func__, iflag);
2239
2240
2241
2242
2243
2244
2245 vstart = termios->c_cc[VSTART];
2246 vstop = termios->c_cc[VSTOP];
2247 urb_value = (vstop << 8) | (vstart);
2248
2249 if (usb_control_msg(dev,
2250 usb_sndctrlpipe(dev, 0),
2251 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2252 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2253 urb_value , (FTDI_SIO_XON_XOFF_HS
2254 | priv->interface),
2255 NULL, 0, WDR_TIMEOUT) < 0) {
2256 dev_err(&port->dev, "urb failed to set to "
2257 "xon/xoff flow control\n");
2258 }
2259 } else {
2260
2261
2262
2263 dbg("%s Turning off hardware flow control", __func__);
2264 if (usb_control_msg(dev,
2265 usb_sndctrlpipe(dev, 0),
2266 FTDI_SIO_SET_FLOW_CTRL_REQUEST,
2267 FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
2268 0, priv->interface,
2269 NULL, 0, WDR_TIMEOUT) < 0) {
2270 dev_err(&port->dev,
2271 "urb failed to clear flow control\n");
2272 }
2273 }
2274
2275 }
2276}
2277
2278static int ftdi_tiocmget(struct tty_struct *tty)
2279{
2280 struct usb_serial_port *port = tty->driver_data;
2281 struct ftdi_private *priv = usb_get_serial_port_data(port);
2282 unsigned char *buf;
2283 int len;
2284 int ret;
2285
2286 buf = kmalloc(2, GFP_KERNEL);
2287 if (!buf)
2288 return -ENOMEM;
2289
2290
2291
2292
2293 switch (priv->chip_type) {
2294 case SIO:
2295 len = 1;
2296 break;
2297 case FT8U232AM:
2298 case FT232BM:
2299 case FT2232C:
2300 case FT232RL:
2301 case FT2232H:
2302 case FT4232H:
2303 case FT232H:
2304 case FTX:
2305 len = 2;
2306 break;
2307 default:
2308 ret = -EFAULT;
2309 goto out;
2310 }
2311
2312 ret = usb_control_msg(port->serial->dev,
2313 usb_rcvctrlpipe(port->serial->dev, 0),
2314 FTDI_SIO_GET_MODEM_STATUS_REQUEST,
2315 FTDI_SIO_GET_MODEM_STATUS_REQUEST_TYPE,
2316 0, priv->interface,
2317 buf, len, WDR_TIMEOUT);
2318 if (ret < 0)
2319 goto out;
2320
2321 ret = (buf[0] & FTDI_SIO_DSR_MASK ? TIOCM_DSR : 0) |
2322 (buf[0] & FTDI_SIO_CTS_MASK ? TIOCM_CTS : 0) |
2323 (buf[0] & FTDI_SIO_RI_MASK ? TIOCM_RI : 0) |
2324 (buf[0] & FTDI_SIO_RLSD_MASK ? TIOCM_CD : 0) |
2325 priv->last_dtr_rts;
2326out:
2327 kfree(buf);
2328 return ret;
2329}
2330
2331static int ftdi_tiocmset(struct tty_struct *tty,
2332 unsigned int set, unsigned int clear)
2333{
2334 struct usb_serial_port *port = tty->driver_data;
2335
2336 return update_mctrl(port, set, clear);
2337}
2338
2339static int ftdi_get_icount(struct tty_struct *tty,
2340 struct serial_icounter_struct *icount)
2341{
2342 struct usb_serial_port *port = tty->driver_data;
2343 struct ftdi_private *priv = usb_get_serial_port_data(port);
2344 struct async_icount *ic = &priv->icount;
2345
2346 icount->cts = ic->cts;
2347 icount->dsr = ic->dsr;
2348 icount->rng = ic->rng;
2349 icount->dcd = ic->dcd;
2350 icount->tx = ic->tx;
2351 icount->rx = ic->rx;
2352 icount->frame = ic->frame;
2353 icount->parity = ic->parity;
2354 icount->overrun = ic->overrun;
2355 icount->brk = ic->brk;
2356 icount->buf_overrun = ic->buf_overrun;
2357 return 0;
2358}
2359
2360static int ftdi_ioctl(struct tty_struct *tty,
2361 unsigned int cmd, unsigned long arg)
2362{
2363 struct usb_serial_port *port = tty->driver_data;
2364 struct ftdi_private *priv = usb_get_serial_port_data(port);
2365 struct async_icount cnow;
2366 struct async_icount cprev;
2367
2368 dbg("%s cmd 0x%04x", __func__, cmd);
2369
2370
2371 switch (cmd) {
2372
2373 case TIOCGSERIAL:
2374 return get_serial_info(port,
2375 (struct serial_struct __user *) arg);
2376
2377 case TIOCSSERIAL:
2378 return set_serial_info(tty, port,
2379 (struct serial_struct __user *) arg);
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389 case TIOCMIWAIT:
2390 cprev = priv->icount;
2391 while (!priv->dev_gone) {
2392 interruptible_sleep_on(&priv->delta_msr_wait);
2393
2394 if (signal_pending(current))
2395 return -ERESTARTSYS;
2396 cnow = priv->icount;
2397 if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
2398 ((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
2399 ((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
2400 ((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
2401 return 0;
2402 }
2403 cprev = cnow;
2404 }
2405 return -EIO;
2406 break;
2407 case TIOCSERGETLSR:
2408 return get_lsr_info(port, (struct serial_struct __user *)arg);
2409 break;
2410 default:
2411 break;
2412 }
2413
2414
2415
2416 dbg("%s arg not supported - it was 0x%04x - check /usr/include/asm/ioctls.h", __func__, cmd);
2417 return -ENOIOCTLCMD;
2418}
2419
2420static int __init ftdi_init(void)
2421{
2422 int retval;
2423
2424 if (vendor > 0 && product > 0) {
2425
2426 int i;
2427 for (i = 0; id_table_combined[i].idVendor; i++)
2428 ;
2429 id_table_combined[i].match_flags = USB_DEVICE_ID_MATCH_DEVICE;
2430 id_table_combined[i].idVendor = vendor;
2431 id_table_combined[i].idProduct = product;
2432 }
2433 retval = usb_serial_register_drivers(serial_drivers, KBUILD_MODNAME, id_table_combined);
2434 if (retval == 0)
2435 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
2436 DRIVER_DESC "\n");
2437 return retval;
2438}
2439
2440static void __exit ftdi_exit(void)
2441{
2442 usb_serial_deregister_drivers(serial_drivers);
2443}
2444
2445
2446module_init(ftdi_init);
2447module_exit(ftdi_exit);
2448
2449MODULE_AUTHOR(DRIVER_AUTHOR);
2450MODULE_DESCRIPTION(DRIVER_DESC);
2451MODULE_LICENSE("GPL");
2452
2453module_param(debug, bool, S_IRUGO | S_IWUSR);
2454MODULE_PARM_DESC(debug, "Debug enabled or not");
2455module_param(vendor, ushort, 0);
2456MODULE_PARM_DESC(vendor, "User specified vendor ID (default="
2457 __MODULE_STRING(FTDI_VID)")");
2458module_param(product, ushort, 0);
2459MODULE_PARM_DESC(product, "User specified product ID");
2460
2461module_param(ndi_latency_timer, int, S_IRUGO | S_IWUSR);
2462MODULE_PARM_DESC(ndi_latency_timer, "NDI device latency timer override");
2463