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