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