allow coexistance of N build and AC build.
[tomato.git] / release / src-rt-6.x / linux / linux-2.6 / drivers / usb / serial / option.c
blobeff49294ea33b350541072e4404bedff4ae85056
1 /*
2 USB Driver for GSM modems
4 Copyright (C) 2005 Matthias Urlichs <smurf@smurf.noris.de>
6 This driver is free software; you can redistribute it and/or modify
7 it under the terms of Version 2 of the GNU General Public License as
8 published by the Free Software Foundation.
10 Portions copied from the Keyspan driver by Hugh Blemings <hugh@blemings.org>
12 History: see the git log.
14 Work sponsored by: Sigos GmbH, Germany <info@sigos.de>
16 This driver exists because the "normal" serial driver doesn't work too well
17 with GSM modems. Issues:
18 - data loss -- one single Receive URB is not nearly enough
19 - nonstandard flow (Option devices) control
20 - controlling the baud rate doesn't make sense
22 This driver is named "option" because the most common device it's
23 used for is a PC-Card (with an internal OHCI-USB interface, behind
24 which the GSM interface sits), made by Option Inc.
26 Some of the "one port" devices actually exhibit multiple USB instances
27 on the USB bus. This is not a bug, these ports are used for different
28 device features.
31 #define DRIVER_VERSION "v0.7.2"
32 #define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>"
33 #define DRIVER_DESC "USB Driver for GSM modems"
35 #include <linux/kernel.h>
36 #include <linux/jiffies.h>
37 #include <linux/errno.h>
38 #include <linux/tty.h>
39 #include <linux/tty_flip.h>
40 #include <linux/module.h>
41 #include <linux/bitops.h>
42 #include <linux/usb.h>
43 #include <linux/usb/serial.h>
45 /* Function prototypes */
46 static int option_probe(struct usb_serial *serial,
47 const struct usb_device_id *id);
48 static int option_open(struct usb_serial_port *port, struct file *filp);
49 static void option_close(struct usb_serial_port *port, struct file *filp);
50 static int option_startup(struct usb_serial *serial);
51 static void option_shutdown(struct usb_serial *serial);
52 static void option_rx_throttle(struct usb_serial_port *port);
53 static void option_rx_unthrottle(struct usb_serial_port *port);
54 static int option_write_room(struct usb_serial_port *port);
56 static void option_instat_callback(struct urb *urb);
58 static int option_write(struct usb_serial_port *port,
59 const unsigned char *buf, int count);
61 static int option_chars_in_buffer(struct usb_serial_port *port);
62 static int option_ioctl(struct usb_serial_port *port, struct file *file,
63 unsigned int cmd, unsigned long arg);
64 static void option_set_termios(struct usb_serial_port *port,
65 struct ktermios *old);
66 static void option_break_ctl(struct usb_serial_port *port, int break_state);
67 static int option_tiocmget(struct usb_serial_port *port, struct file *file);
68 static int option_tiocmset(struct usb_serial_port *port, struct file *file,
69 unsigned int set, unsigned int clear);
70 static int option_send_setup(struct usb_serial_port *port);
72 /* Vendor and product IDs */
73 #define OPTION_VENDOR_ID 0x0AF0
74 #define OPTION_PRODUCT_COLT 0x5000
75 #define OPTION_PRODUCT_RICOLA 0x6000
76 #define OPTION_PRODUCT_RICOLA_LIGHT 0x6100
77 #define OPTION_PRODUCT_RICOLA_QUAD 0x6200
78 #define OPTION_PRODUCT_RICOLA_QUAD_LIGHT 0x6300
79 #define OPTION_PRODUCT_RICOLA_NDIS 0x6050
80 #define OPTION_PRODUCT_RICOLA_NDIS_LIGHT 0x6150
81 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD 0x6250
82 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT 0x6350
83 #define OPTION_PRODUCT_COBRA 0x6500
84 #define OPTION_PRODUCT_COBRA_BUS 0x6501
85 #define OPTION_PRODUCT_VIPER 0x6600
86 #define OPTION_PRODUCT_VIPER_BUS 0x6601
87 #define OPTION_PRODUCT_GT_MAX_READY 0x6701
88 #define OPTION_PRODUCT_GT_MAX 0x6711
89 #define OPTION_PRODUCT_FUJI_MODEM_LIGHT 0x6721
90 #define OPTION_PRODUCT_FUJI_MODEM_GT 0x6741
91 #define OPTION_PRODUCT_FUJI_MODEM_EX 0x6761
92 #define OPTION_PRODUCT_FUJI_NETWORK_LIGHT 0x6731
93 #define OPTION_PRODUCT_FUJI_NETWORK_GT 0x6751
94 #define OPTION_PRODUCT_FUJI_NETWORK_EX 0x6771
95 #define OPTION_PRODUCT_KOI_MODEM 0x6800
96 #define OPTION_PRODUCT_KOI_NETWORK 0x6811
97 #define OPTION_PRODUCT_SCORPION_MODEM 0x6901
98 #define OPTION_PRODUCT_SCORPION_NETWORK 0x6911
99 #define OPTION_PRODUCT_ETNA_MODEM 0x7001
100 #define OPTION_PRODUCT_ETNA_NETWORK 0x7011
101 #define OPTION_PRODUCT_ETNA_MODEM_LITE 0x7021
102 #define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041
103 #define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061
104 #define OPTION_PRODUCT_ETNA_NETWORK_LITE 0x7031
105 #define OPTION_PRODUCT_ETNA_NETWORK_GT 0x7051
106 #define OPTION_PRODUCT_ETNA_NETWORK_EX 0x7071
107 #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
108 #define OPTION_PRODUCT_ETNA_KOI_NETWORK 0x7111
109 #define OPTION_PRODUCT_GTM380_MODEM 0x7201
111 #define HUAWEI_VENDOR_ID 0x12D1
112 #define HUAWEI_PRODUCT_E600 0x1001
113 #define HUAWEI_PRODUCT_E220 0x1003
114 #define HUAWEI_PRODUCT_E220BIS 0x1004
115 #define HUAWEI_PRODUCT_E1401 0x1401
116 #define HUAWEI_PRODUCT_E1402 0x1402
117 #define HUAWEI_PRODUCT_E1403 0x1403
118 #define HUAWEI_PRODUCT_E1404 0x1404
119 #define HUAWEI_PRODUCT_E1405 0x1405
120 #define HUAWEI_PRODUCT_E1406 0x1406
121 #define HUAWEI_PRODUCT_E1407 0x1407
122 #define HUAWEI_PRODUCT_E1408 0x1408
123 #define HUAWEI_PRODUCT_E1409 0x1409
124 #define HUAWEI_PRODUCT_E140A 0x140A
125 #define HUAWEI_PRODUCT_E140B 0x140B
126 #define HUAWEI_PRODUCT_E140C 0x140C
127 #define HUAWEI_PRODUCT_E140D 0x140D
128 #define HUAWEI_PRODUCT_E140E 0x140E
129 #define HUAWEI_PRODUCT_E140F 0x140F
130 #define HUAWEI_PRODUCT_E1410 0x1410
131 #define HUAWEI_PRODUCT_E1411 0x1411
132 #define HUAWEI_PRODUCT_E1412 0x1412
133 #define HUAWEI_PRODUCT_E1413 0x1413
134 #define HUAWEI_PRODUCT_E1414 0x1414
135 #define HUAWEI_PRODUCT_E1415 0x1415
136 #define HUAWEI_PRODUCT_E1416 0x1416
137 #define HUAWEI_PRODUCT_E1417 0x1417
138 #define HUAWEI_PRODUCT_E1418 0x1418
139 #define HUAWEI_PRODUCT_E1419 0x1419
140 #define HUAWEI_PRODUCT_E141A 0x141A
141 #define HUAWEI_PRODUCT_E141B 0x141B
142 #define HUAWEI_PRODUCT_E141C 0x141C
143 #define HUAWEI_PRODUCT_E141D 0x141D
144 #define HUAWEI_PRODUCT_E141E 0x141E
145 #define HUAWEI_PRODUCT_E141F 0x141F
146 #define HUAWEI_PRODUCT_E1420 0x1420
147 #define HUAWEI_PRODUCT_E1421 0x1421
148 #define HUAWEI_PRODUCT_E1422 0x1422
149 #define HUAWEI_PRODUCT_E1423 0x1423
150 #define HUAWEI_PRODUCT_E1424 0x1424
151 #define HUAWEI_PRODUCT_E1425 0x1425
152 #define HUAWEI_PRODUCT_E1426 0x1426
153 #define HUAWEI_PRODUCT_E1427 0x1427
154 #define HUAWEI_PRODUCT_E1428 0x1428
155 #define HUAWEI_PRODUCT_E1429 0x1429
156 #define HUAWEI_PRODUCT_E142A 0x142A
157 #define HUAWEI_PRODUCT_E142B 0x142B
158 #define HUAWEI_PRODUCT_E142C 0x142C
159 #define HUAWEI_PRODUCT_E142D 0x142D
160 #define HUAWEI_PRODUCT_E142E 0x142E
161 #define HUAWEI_PRODUCT_E142F 0x142F
162 #define HUAWEI_PRODUCT_E1430 0x1430
163 #define HUAWEI_PRODUCT_E1431 0x1431
164 #define HUAWEI_PRODUCT_E1432 0x1432
165 #define HUAWEI_PRODUCT_E1433 0x1433
166 #define HUAWEI_PRODUCT_E1434 0x1434
167 #define HUAWEI_PRODUCT_E1435 0x1435
168 #define HUAWEI_PRODUCT_E1436 0x1436
169 #define HUAWEI_PRODUCT_E1437 0x1437
170 #define HUAWEI_PRODUCT_E1438 0x1438
171 #define HUAWEI_PRODUCT_E1439 0x1439
172 #define HUAWEI_PRODUCT_E143A 0x143A
173 #define HUAWEI_PRODUCT_E143B 0x143B
174 #define HUAWEI_PRODUCT_E143C 0x143C
175 #define HUAWEI_PRODUCT_E143D 0x143D
176 #define HUAWEI_PRODUCT_E143E 0x143E
177 #define HUAWEI_PRODUCT_E143F 0x143F
178 #define HUAWEI_PRODUCT_K4505 0x1464
179 #define HUAWEI_PRODUCT_K3765 0x1465
180 #define HUAWEI_PRODUCT_E14AC 0x14AC
181 #define HUAWEI_PRODUCT_ETS1220 0x1803
183 #define QUANTA_VENDOR_ID 0x0408
184 #define QUANTA_PRODUCT_Q101 0xEA02
185 #define QUANTA_PRODUCT_Q111 0xEA03
186 #define QUANTA_PRODUCT_GLX 0xEA04
187 #define QUANTA_PRODUCT_GKE 0xEA05
188 #define QUANTA_PRODUCT_GLE 0xEA06
190 #define NOVATELWIRELESS_VENDOR_ID 0x1410
192 /* YISO PRODUCTS */
194 #define YISO_VENDOR_ID 0x0EAB
195 #define YISO_PRODUCT_U893 0xC893
198 * NOVATEL WIRELESS PRODUCTS
200 * Note from Novatel Wireless:
201 * If your Novatel modem does not work on linux, don't
202 * change the option module, but check our website. If
203 * that does not help, contact ddeschepper@nvtl.com
205 /* MERLIN EVDO PRODUCTS */
206 #define NOVATELWIRELESS_PRODUCT_V640 0x1100
207 #define NOVATELWIRELESS_PRODUCT_V620 0x1110
208 #define NOVATELWIRELESS_PRODUCT_V740 0x1120
209 #define NOVATELWIRELESS_PRODUCT_V720 0x1130
211 /* MERLIN HSDPA/HSPA PRODUCTS */
212 #define NOVATELWIRELESS_PRODUCT_U730 0x1400
213 #define NOVATELWIRELESS_PRODUCT_U740 0x1410
214 #define NOVATELWIRELESS_PRODUCT_U870 0x1420
215 #define NOVATELWIRELESS_PRODUCT_XU870 0x1430
216 #define NOVATELWIRELESS_PRODUCT_X950D 0x1450
218 /* EXPEDITE PRODUCTS */
219 #define NOVATELWIRELESS_PRODUCT_EV620 0x2100
220 #define NOVATELWIRELESS_PRODUCT_ES720 0x2110
221 #define NOVATELWIRELESS_PRODUCT_E725 0x2120
222 #define NOVATELWIRELESS_PRODUCT_ES620 0x2130
223 #define NOVATELWIRELESS_PRODUCT_EU730 0x2400
224 #define NOVATELWIRELESS_PRODUCT_EU740 0x2410
225 #define NOVATELWIRELESS_PRODUCT_EU870D 0x2420
226 /* OVATION PRODUCTS */
227 #define NOVATELWIRELESS_PRODUCT_MC727 0x4100
228 #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
230 * Note from Novatel Wireless:
231 * All PID in the 5xxx range are currently reserved for
232 * auto-install CDROMs, and should not be added to this
233 * module.
235 * #define NOVATELWIRELESS_PRODUCT_U727 0x5010
236 * #define NOVATELWIRELESS_PRODUCT_MC727_NEW 0x5100
238 #define NOVATELWIRELESS_PRODUCT_OVMC760 0x6002
239 #define NOVATELWIRELESS_PRODUCT_MC780 0x6010
240 #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0x6000
241 #define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED 0x6001
242 #define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED 0x7000
243 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED 0x7001
244 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3 0x7003
245 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4 0x7004
246 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5 0x7005
247 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED6 0x7006
248 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED7 0x7007
249 #define NOVATELWIRELESS_PRODUCT_MC996D 0x7030
250 #define NOVATELWIRELESS_PRODUCT_MF3470 0x7041
251 #define NOVATELWIRELESS_PRODUCT_MC547 0x7042
252 #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0x8000
253 #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0x8001
254 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0x9000
255 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0x9001
256 #define NOVATELWIRELESS_PRODUCT_G1 0xA001
257 #define NOVATELWIRELESS_PRODUCT_G1_M 0xA002
258 #define NOVATELWIRELESS_PRODUCT_G2 0xA010
260 /* AMOI PRODUCTS */
261 #define AMOI_VENDOR_ID 0x1614
262 #define AMOI_PRODUCT_H01 0x0800
263 #define AMOI_PRODUCT_H01A 0x7002
264 #define AMOI_PRODUCT_H02 0x0802
265 #define AMOI_PRODUCT_SKYPEPHONE_S2 0x0407
267 #define DELL_VENDOR_ID 0x413C
269 /* Dell modems */
270 #define DELL_PRODUCT_5700_MINICARD 0x8114
271 #define DELL_PRODUCT_5500_MINICARD 0x8115
272 #define DELL_PRODUCT_5505_MINICARD 0x8116
273 #define DELL_PRODUCT_5700_EXPRESSCARD 0x8117
274 #define DELL_PRODUCT_5510_EXPRESSCARD 0x8118
276 #define DELL_PRODUCT_5700_MINICARD_SPRINT 0x8128
277 #define DELL_PRODUCT_5700_MINICARD_TELUS 0x8129
279 #define DELL_PRODUCT_5720_MINICARD_VZW 0x8133
280 #define DELL_PRODUCT_5720_MINICARD_SPRINT 0x8134
281 #define DELL_PRODUCT_5720_MINICARD_TELUS 0x8135
282 #define DELL_PRODUCT_5520_MINICARD_CINGULAR 0x8136
283 #define DELL_PRODUCT_5520_MINICARD_GENERIC_L 0x8137
284 #define DELL_PRODUCT_5520_MINICARD_GENERIC_I 0x8138
286 #define DELL_PRODUCT_5730_MINICARD_SPRINT 0x8180
287 #define DELL_PRODUCT_5730_MINICARD_TELUS 0x8181
288 #define DELL_PRODUCT_5730_MINICARD_VZW 0x8182
290 #define KYOCERA_VENDOR_ID 0x0c88
291 #define KYOCERA_PRODUCT_KPC650 0x17da
292 #define KYOCERA_PRODUCT_KPC680 0x180a
294 #define ANYDATA_VENDOR_ID 0x16d5
295 #define ANYDATA_PRODUCT_ADU_620UW 0x6202
296 #define ANYDATA_PRODUCT_ADU_E100A 0x6501
297 #define ANYDATA_PRODUCT_ADU_500A 0x6502
299 #define AXESSTEL_VENDOR_ID 0x1726
300 #define AXESSTEL_PRODUCT_MV110H 0x1000
302 #define BANDRICH_VENDOR_ID 0x1A8D
303 #define BANDRICH_PRODUCT_C100_1 0x1002
304 #define BANDRICH_PRODUCT_C100_2 0x1003
305 #define BANDRICH_PRODUCT_1004 0x1004
306 #define BANDRICH_PRODUCT_1005 0x1005
307 #define BANDRICH_PRODUCT_1006 0x1006
308 #define BANDRICH_PRODUCT_1007 0x1007
309 #define BANDRICH_PRODUCT_1008 0x1008
310 #define BANDRICH_PRODUCT_1009 0x1009
311 #define BANDRICH_PRODUCT_100A 0x100a
313 #define BANDRICH_PRODUCT_100B 0x100b
314 #define BANDRICH_PRODUCT_100C 0x100c
315 #define BANDRICH_PRODUCT_100D 0x100d
316 #define BANDRICH_PRODUCT_100E 0x100e
318 #define BANDRICH_PRODUCT_100F 0x100f
319 #define BANDRICH_PRODUCT_1010 0x1010
320 #define BANDRICH_PRODUCT_1011 0x1011
321 #define BANDRICH_PRODUCT_1012 0x1012
323 #define QUALCOMM_VENDOR_ID 0x05C6
325 #define CMOTECH_VENDOR_ID 0x16d8
326 #define CMOTECH_PRODUCT_6008 0x6008
327 #define CMOTECH_PRODUCT_6280 0x6280
329 #define TELIT_VENDOR_ID 0x1bc7
330 #define TELIT_PRODUCT_UC864E 0x1003
331 #define TELIT_PRODUCT_UC864G 0x1004
333 /* ZTE PRODUCTS */
334 #define ZTE_VENDOR_ID 0x19d2
335 #define ZTE_PRODUCT_MF622 0x0001
336 #define ZTE_PRODUCT_MF628 0x0015
337 #define ZTE_PRODUCT_MF626 0x0031
338 #define ZTE_PRODUCT_CDMA_TECH 0xfffe
339 #define ZTE_PRODUCT_AC8710 0xfff1
340 #define ZTE_PRODUCT_AC2726 0xfff5
341 #define ZTE_PRODUCT_AC8710T 0xffff
343 /* ZTE PRODUCTS -- alternate vendor ID */
344 #define ZTE_VENDOR_ID2 0x1d6b
345 #define ZTE_PRODUCT_MF_330 0x0002
347 #define BENQ_VENDOR_ID 0x04a5
348 #define BENQ_PRODUCT_H10 0x4068
350 #define DLINK_VENDOR_ID 0x1186
351 #define DLINK_PRODUCT_DWM_652 0x3e04
352 #define DLINK_PRODUCT_DWM_652_U5 0xce16
353 #define DLINK_PRODUCT_DWM_652_U5A 0xce1e
355 #define QISDA_VENDOR_ID 0x1da5
356 #define QISDA_PRODUCT_H21_4512 0x4512
357 #define QISDA_PRODUCT_H21_4523 0x4523
358 #define QISDA_PRODUCT_H20_4515 0x4515
359 #define QISDA_PRODUCT_H20_4518 0x4518
360 #define QISDA_PRODUCT_H20_4519 0x4519
362 /* TLAYTECH PRODUCTS */
363 #define TLAYTECH_VENDOR_ID 0x20B9
364 #define TLAYTECH_PRODUCT_TEU800 0x1682
366 /* TOSHIBA PRODUCTS */
367 #define TOSHIBA_VENDOR_ID 0x0930
368 #define TOSHIBA_PRODUCT_HSDPA_MINICARD 0x1302
369 #define TOSHIBA_PRODUCT_G450 0x0d45
371 #define ALINK_VENDOR_ID 0x1e0e
372 #define ALINK_PRODUCT_3GU 0x9200
374 /* ALCATEL PRODUCTS */
375 #define ALCATEL_VENDOR_ID 0x1bbb
376 #define ALCATEL_PRODUCT_X060S 0x0000
378 #define PIRELLI_VENDOR_ID 0x1266
379 #define PIRELLI_PRODUCT_C100_1 0x1002
380 #define PIRELLI_PRODUCT_C100_2 0x1003
381 #define PIRELLI_PRODUCT_1004 0x1004
382 #define PIRELLI_PRODUCT_1005 0x1005
383 #define PIRELLI_PRODUCT_1006 0x1006
384 #define PIRELLI_PRODUCT_1007 0x1007
385 #define PIRELLI_PRODUCT_1008 0x1008
386 #define PIRELLI_PRODUCT_1009 0x1009
387 #define PIRELLI_PRODUCT_100A 0x100a
388 #define PIRELLI_PRODUCT_100B 0x100b
389 #define PIRELLI_PRODUCT_100C 0x100c
390 #define PIRELLI_PRODUCT_100D 0x100d
391 #define PIRELLI_PRODUCT_100E 0x100e
392 #define PIRELLI_PRODUCT_100F 0x100f
393 #define PIRELLI_PRODUCT_1011 0x1011
394 #define PIRELLI_PRODUCT_1012 0x1012
396 /* Airplus products */
397 #define AIRPLUS_VENDOR_ID 0x1011
398 #define AIRPLUS_PRODUCT_MCD650 0x3198
400 /* 4G Systems products */
401 #define FOUR_G_SYSTEMS_VENDOR_ID 0x1c9e
402 #define FOUR_G_SYSTEMS_PRODUCT_W14 0x9603
404 /* Haier products */
405 #define HAIER_VENDOR_ID 0x201e
406 #define HAIER_PRODUCT_CE100 0x2009
408 /* Cinterion (formerly Siemens) products */
409 #define SIEMENS_VENDOR_ID 0x0681
410 #define CINTERION_VENDOR_ID 0x1e2d
411 #define CINTERION_PRODUCT_HC25_MDM 0x0047
412 #define CINTERION_PRODUCT_HC25_MDMNET 0x0040
413 #define CINTERION_PRODUCT_HC28_MDM 0x004C
414 #define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
415 #define CINTERION_PRODUCT_EU3_E 0x0051
416 #define CINTERION_PRODUCT_EU3_P 0x0052
417 #define CINTERION_PRODUCT_PH8 0x0053
419 /* Olivetti products */
420 #define OLIVETTI_VENDOR_ID 0x0b3c
421 #define OLIVETTI_PRODUCT_OLICARD100 0xc000
423 /* Celot products */
424 #define CELOT_VENDOR_ID 0x211f
425 #define CELOT_PRODUCT_CT680M 0x6801
427 /* ONDA Communication vendor id */
428 #define ONDA_VENDOR_ID 0x1ee8
430 /* ONDA MT825UP HSDPA 14.2 modem */
431 #define ONDA_MT825UP 0x000b
433 /* Ericsson products */
434 #define ERICSSON_VENDOR_ID 0x0bdb
435 #define ERICSSON_PRODUCT_F3507G_1 0x1900
436 #define ERICSSON_PRODUCT_F3507G_2 0x1902
438 static struct usb_device_id option_ids[] = {
439 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
440 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
441 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
442 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
443 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },
444 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS) },
445 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_LIGHT) },
446 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD) },
447 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT) },
448 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
449 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA_BUS) },
450 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER) },
451 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER_BUS) },
452 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX_READY) },
453 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_LIGHT) },
454 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_GT) },
455 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_EX) },
456 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_MODEM) },
457 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_MODEM) },
458 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM) },
459 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_LITE) },
460 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
461 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
462 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
463 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
464 { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q101) },
465 { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_Q111) },
466 { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLX) },
467 { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GKE) },
468 { USB_DEVICE(QUANTA_VENDOR_ID, QUANTA_PRODUCT_GLE) },
469 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
470 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
471 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
472 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
473 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
474 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
475 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) },
476 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) },
477 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) },
478 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) },
479 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) },
480 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) },
481 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) },
482 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) },
483 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) },
484 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) },
485 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) },
486 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) },
487 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) },
488 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) },
489 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) },
490 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) },
491 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) },
492 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) },
493 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) },
494 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) },
495 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) },
496 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) },
497 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) },
498 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) },
499 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) },
500 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) },
501 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) },
502 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) },
503 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) },
504 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) },
505 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) },
506 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) },
507 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) },
508 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) },
509 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) },
510 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) },
511 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) },
512 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) },
513 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) },
514 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) },
515 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) },
516 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) },
517 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) },
518 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) },
519 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) },
520 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) },
521 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) },
522 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) },
523 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) },
524 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) },
525 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) },
526 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) },
527 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) },
528 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) },
529 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) },
530 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) },
531 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) },
532 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
533 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
534 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
535 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff) },
536 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
537 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
538 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
539 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
540 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
541 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) },
542 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) },
543 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) },
544 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) },
545 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) },
546 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) },
547 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) },
548 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) },
549 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) },
550 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) },
551 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) },
552 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) },
553 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) },
554 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) },
555 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) },
556 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) },
557 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_OVMC760) },
558 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC780) },
559 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) },
560 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) },
561 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) },
562 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) },
563 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) },
564 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED3) },
565 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED4) },
566 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED5) },
567 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED6) },
568 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED7) },
569 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC996D) },
570 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MF3470) },
571 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC547) },
572 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) },
573 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) },
574 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1) },
575 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G1_M) },
576 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_G2) },
578 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
579 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
580 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
581 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_SKYPEPHONE_S2) },
583 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
584 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
585 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
586 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
587 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
588 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_SPRINT) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
589 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD_TELUS) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */
590 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
591 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
592 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
593 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
594 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */
595 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
596 { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
597 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
598 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
599 { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
600 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, /* ADU-E100, ADU-310 */
601 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
602 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
603 { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
604 { USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) },
605 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
606 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
607 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1004) },
608 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1005) },
609 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1006) },
610 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1007) },
611 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1008) },
612 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1009) },
613 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100A) },
614 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100B) },
615 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100C) },
616 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100D) },
617 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100E) },
618 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100F) },
619 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1010) },
620 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1011) },
621 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012) },
622 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
623 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
624 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
625 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
626 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6280) }, /* BP3-USB & BP3-EXT HSDPA */
627 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6008) },
628 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
629 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) },
630 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
631 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff) },
632 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) },
633 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0004, 0xff, 0xff, 0xff) },
634 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0005, 0xff, 0xff, 0xff) },
635 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0006, 0xff, 0xff, 0xff) },
636 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0007, 0xff, 0xff, 0xff) },
637 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0008, 0xff, 0xff, 0xff) },
638 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0009, 0xff, 0xff, 0xff) },
639 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000a, 0xff, 0xff, 0xff) },
640 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000b, 0xff, 0xff, 0xff) },
641 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000c, 0xff, 0xff, 0xff) },
642 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000d, 0xff, 0xff, 0xff) },
643 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000e, 0xff, 0xff, 0xff) },
644 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x000f, 0xff, 0xff, 0xff) },
645 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0010, 0xff, 0xff, 0xff) },
646 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0011, 0xff, 0xff, 0xff) },
647 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0012, 0xff, 0xff, 0xff) },
648 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0013, 0xff, 0xff, 0xff) },
649 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) },
650 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628, 0xff, 0xff, 0xff) },
651 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0016, 0xff, 0xff, 0xff) },
652 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0017, 0xff, 0xff, 0xff) },
653 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0018, 0xff, 0xff, 0xff) },
654 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0019, 0xff, 0xff, 0xff) },
655 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0020, 0xff, 0xff, 0xff) },
656 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0021, 0xff, 0xff, 0xff) },
657 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0022, 0xff, 0xff, 0xff) },
658 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0023, 0xff, 0xff, 0xff) },
659 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0024, 0xff, 0xff, 0xff) },
660 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0025, 0xff, 0xff, 0xff) },
661 /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0026, 0xff, 0xff, 0xff) }, */
662 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0028, 0xff, 0xff, 0xff) },
663 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0029, 0xff, 0xff, 0xff) },
664 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0030, 0xff, 0xff, 0xff) },
665 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626, 0xff, 0xff, 0xff) },
666 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0032, 0xff, 0xff, 0xff) },
667 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0033, 0xff, 0xff, 0xff) },
668 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0034, 0xff, 0xff, 0xff) },
669 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0037, 0xff, 0xff, 0xff) },
670 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0038, 0xff, 0xff, 0xff) },
671 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0039, 0xff, 0xff, 0xff) },
672 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0040, 0xff, 0xff, 0xff) },
673 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0042, 0xff, 0xff, 0xff) },
674 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0043, 0xff, 0xff, 0xff) },
675 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0044, 0xff, 0xff, 0xff) },
676 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0048, 0xff, 0xff, 0xff) },
677 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0049, 0xff, 0xff, 0xff) },
678 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0050, 0xff, 0xff, 0xff) },
679 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0051, 0xff, 0xff, 0xff) },
680 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0052, 0xff, 0xff, 0xff) },
681 /* { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0053, 0xff, 0xff, 0xff) }, */
682 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0054, 0xff, 0xff, 0xff) },
683 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0055, 0xff, 0xff, 0xff) },
684 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0056, 0xff, 0xff, 0xff) },
685 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0057, 0xff, 0xff, 0xff) },
686 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0058, 0xff, 0xff, 0xff) },
687 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) },
688 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0061, 0xff, 0xff, 0xff) },
689 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0062, 0xff, 0xff, 0xff) },
690 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0063, 0xff, 0xff, 0xff) },
691 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0064, 0xff, 0xff, 0xff) },
692 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0065, 0xff, 0xff, 0xff) },
693 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0066, 0xff, 0xff, 0xff) },
694 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0067, 0xff, 0xff, 0xff) },
695 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0069, 0xff, 0xff, 0xff) },
696 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) },
697 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0076, 0xff, 0xff, 0xff) },
698 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0077, 0xff, 0xff, 0xff) },
699 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0078, 0xff, 0xff, 0xff) },
700 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0079, 0xff, 0xff, 0xff) },
701 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0082, 0xff, 0xff, 0xff) },
702 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) },
703 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) },
704 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) },
705 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff) },
706 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) },
707 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0106, 0xff, 0xff, 0xff) },
708 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0108, 0xff, 0xff, 0xff) },
709 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0113, 0xff, 0xff, 0xff) },
710 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0117, 0xff, 0xff, 0xff) },
711 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0118, 0xff, 0xff, 0xff) },
712 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0121, 0xff, 0xff, 0xff) },
713 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0122, 0xff, 0xff, 0xff) },
714 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0123, 0xff, 0xff, 0xff) },
715 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0124, 0xff, 0xff, 0xff) },
716 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0125, 0xff, 0xff, 0xff) },
717 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0126, 0xff, 0xff, 0xff) },
718 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0128, 0xff, 0xff, 0xff) },
719 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0142, 0xff, 0xff, 0xff) },
720 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0143, 0xff, 0xff, 0xff) },
721 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0144, 0xff, 0xff, 0xff) },
722 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0145, 0xff, 0xff, 0xff) },
723 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0146, 0xff, 0xff, 0xff) },
724 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0147, 0xff, 0xff, 0xff) },
725 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0148, 0xff, 0xff, 0xff) },
726 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0149, 0xff, 0xff, 0xff) },
727 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0150, 0xff, 0xff, 0xff) },
728 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) },
729 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) },
730 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) },
731 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) },
732 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) },
733 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) },
734 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) },
735 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0158, 0xff, 0xff, 0xff) },
736 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0159, 0xff, 0xff, 0xff) },
737 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) },
738 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) },
739 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) },
740 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) },
741 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) },
742 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) },
743 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1057, 0xff, 0xff, 0xff) },
744 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1058, 0xff, 0xff, 0xff) },
745 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1059, 0xff, 0xff, 0xff) },
746 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1060, 0xff, 0xff, 0xff) },
747 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1061, 0xff, 0xff, 0xff) },
748 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1062, 0xff, 0xff, 0xff) },
749 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1063, 0xff, 0xff, 0xff) },
750 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1064, 0xff, 0xff, 0xff) },
751 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1065, 0xff, 0xff, 0xff) },
752 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1066, 0xff, 0xff, 0xff) },
753 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1067, 0xff, 0xff, 0xff) },
754 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1068, 0xff, 0xff, 0xff) },
755 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1069, 0xff, 0xff, 0xff) },
756 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1070, 0xff, 0xff, 0xff) },
757 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1071, 0xff, 0xff, 0xff) },
758 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1072, 0xff, 0xff, 0xff) },
759 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1073, 0xff, 0xff, 0xff) },
760 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1074, 0xff, 0xff, 0xff) },
761 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1075, 0xff, 0xff, 0xff) },
762 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1076, 0xff, 0xff, 0xff) },
763 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1077, 0xff, 0xff, 0xff) },
764 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1078, 0xff, 0xff, 0xff) },
765 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1079, 0xff, 0xff, 0xff) },
766 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1080, 0xff, 0xff, 0xff) },
767 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1081, 0xff, 0xff, 0xff) },
768 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1082, 0xff, 0xff, 0xff) },
769 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1083, 0xff, 0xff, 0xff) },
770 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1084, 0xff, 0xff, 0xff) },
771 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1085, 0xff, 0xff, 0xff) },
772 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1086, 0xff, 0xff, 0xff) },
773 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1087, 0xff, 0xff, 0xff) },
774 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1088, 0xff, 0xff, 0xff) },
775 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1089, 0xff, 0xff, 0xff) },
776 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1090, 0xff, 0xff, 0xff) },
777 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1091, 0xff, 0xff, 0xff) },
778 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1092, 0xff, 0xff, 0xff) },
779 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1093, 0xff, 0xff, 0xff) },
780 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1094, 0xff, 0xff, 0xff) },
781 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1095, 0xff, 0xff, 0xff) },
782 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1096, 0xff, 0xff, 0xff) },
783 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1097, 0xff, 0xff, 0xff) },
784 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1098, 0xff, 0xff, 0xff) },
785 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1099, 0xff, 0xff, 0xff) },
786 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1100, 0xff, 0xff, 0xff) },
787 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1101, 0xff, 0xff, 0xff) },
788 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1102, 0xff, 0xff, 0xff) },
789 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1103, 0xff, 0xff, 0xff) },
790 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1104, 0xff, 0xff, 0xff) },
791 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1105, 0xff, 0xff, 0xff) },
792 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1106, 0xff, 0xff, 0xff) },
793 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1107, 0xff, 0xff, 0xff) },
794 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1108, 0xff, 0xff, 0xff) },
795 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1109, 0xff, 0xff, 0xff) },
796 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1110, 0xff, 0xff, 0xff) },
797 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1111, 0xff, 0xff, 0xff) },
798 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1112, 0xff, 0xff, 0xff) },
799 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1113, 0xff, 0xff, 0xff) },
800 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1114, 0xff, 0xff, 0xff) },
801 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1115, 0xff, 0xff, 0xff) },
802 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1116, 0xff, 0xff, 0xff) },
803 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1117, 0xff, 0xff, 0xff) },
804 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1118, 0xff, 0xff, 0xff) },
805 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1119, 0xff, 0xff, 0xff) },
806 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1120, 0xff, 0xff, 0xff) },
807 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1121, 0xff, 0xff, 0xff) },
808 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1122, 0xff, 0xff, 0xff) },
809 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1123, 0xff, 0xff, 0xff) },
810 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1124, 0xff, 0xff, 0xff) },
811 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1125, 0xff, 0xff, 0xff) },
812 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1126, 0xff, 0xff, 0xff) },
813 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1127, 0xff, 0xff, 0xff) },
814 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1128, 0xff, 0xff, 0xff) },
815 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1129, 0xff, 0xff, 0xff) },
816 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1130, 0xff, 0xff, 0xff) },
817 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1131, 0xff, 0xff, 0xff) },
818 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1132, 0xff, 0xff, 0xff) },
819 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1133, 0xff, 0xff, 0xff) },
820 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1134, 0xff, 0xff, 0xff) },
821 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1135, 0xff, 0xff, 0xff) },
822 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1136, 0xff, 0xff, 0xff) },
823 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1137, 0xff, 0xff, 0xff) },
824 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1138, 0xff, 0xff, 0xff) },
825 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1139, 0xff, 0xff, 0xff) },
826 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1140, 0xff, 0xff, 0xff) },
827 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1141, 0xff, 0xff, 0xff) },
828 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1142, 0xff, 0xff, 0xff) },
829 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1143, 0xff, 0xff, 0xff) },
830 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1144, 0xff, 0xff, 0xff) },
831 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1145, 0xff, 0xff, 0xff) },
832 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1146, 0xff, 0xff, 0xff) },
833 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1147, 0xff, 0xff, 0xff) },
834 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1148, 0xff, 0xff, 0xff) },
835 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1149, 0xff, 0xff, 0xff) },
836 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1150, 0xff, 0xff, 0xff) },
837 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1151, 0xff, 0xff, 0xff) },
838 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1152, 0xff, 0xff, 0xff) },
839 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1153, 0xff, 0xff, 0xff) },
840 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1154, 0xff, 0xff, 0xff) },
841 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1155, 0xff, 0xff, 0xff) },
842 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1156, 0xff, 0xff, 0xff) },
843 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1157, 0xff, 0xff, 0xff) },
844 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1158, 0xff, 0xff, 0xff) },
845 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1159, 0xff, 0xff, 0xff) },
846 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1160, 0xff, 0xff, 0xff) },
847 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1161, 0xff, 0xff, 0xff) },
848 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1162, 0xff, 0xff, 0xff) },
849 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1163, 0xff, 0xff, 0xff) },
850 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1164, 0xff, 0xff, 0xff) },
851 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1165, 0xff, 0xff, 0xff) },
852 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1166, 0xff, 0xff, 0xff) },
853 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1167, 0xff, 0xff, 0xff) },
854 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1168, 0xff, 0xff, 0xff) },
855 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1169, 0xff, 0xff, 0xff) },
856 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1170, 0xff, 0xff, 0xff) },
857 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1244, 0xff, 0xff, 0xff) },
858 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1245, 0xff, 0xff, 0xff) },
859 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1246, 0xff, 0xff, 0xff) },
860 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1247, 0xff, 0xff, 0xff) },
861 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1248, 0xff, 0xff, 0xff) },
862 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1249, 0xff, 0xff, 0xff) },
863 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1250, 0xff, 0xff, 0xff) },
864 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1251, 0xff, 0xff, 0xff) },
865 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1252, 0xff, 0xff, 0xff) },
866 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1253, 0xff, 0xff, 0xff) },
867 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1254, 0xff, 0xff, 0xff) },
868 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1255, 0xff, 0xff, 0xff) },
869 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1256, 0xff, 0xff, 0xff) },
870 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1257, 0xff, 0xff, 0xff) },
871 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1258, 0xff, 0xff, 0xff) },
872 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1259, 0xff, 0xff, 0xff) },
873 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1260, 0xff, 0xff, 0xff) },
874 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1261, 0xff, 0xff, 0xff) },
875 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1262, 0xff, 0xff, 0xff) },
876 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1263, 0xff, 0xff, 0xff) },
877 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1264, 0xff, 0xff, 0xff) },
878 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1265, 0xff, 0xff, 0xff) },
879 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1266, 0xff, 0xff, 0xff) },
880 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1267, 0xff, 0xff, 0xff) },
881 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1268, 0xff, 0xff, 0xff) },
882 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1269, 0xff, 0xff, 0xff) },
883 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1270, 0xff, 0xff, 0xff) },
884 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1271, 0xff, 0xff, 0xff) },
885 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1272, 0xff, 0xff, 0xff) },
886 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1273, 0xff, 0xff, 0xff) },
887 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1274, 0xff, 0xff, 0xff) },
888 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1275, 0xff, 0xff, 0xff) },
889 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1276, 0xff, 0xff, 0xff) },
890 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1277, 0xff, 0xff, 0xff) },
891 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1278, 0xff, 0xff, 0xff) },
892 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1279, 0xff, 0xff, 0xff) },
893 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1280, 0xff, 0xff, 0xff) },
894 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1281, 0xff, 0xff, 0xff) },
895 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1282, 0xff, 0xff, 0xff) },
896 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1283, 0xff, 0xff, 0xff) },
897 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1284, 0xff, 0xff, 0xff) },
898 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1285, 0xff, 0xff, 0xff) },
899 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1286, 0xff, 0xff, 0xff) },
900 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1287, 0xff, 0xff, 0xff) },
901 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1288, 0xff, 0xff, 0xff) },
902 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1289, 0xff, 0xff, 0xff) },
903 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1290, 0xff, 0xff, 0xff) },
904 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1291, 0xff, 0xff, 0xff) },
905 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1292, 0xff, 0xff, 0xff) },
906 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1293, 0xff, 0xff, 0xff) },
907 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1294, 0xff, 0xff, 0xff) },
908 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1295, 0xff, 0xff, 0xff) },
909 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1296, 0xff, 0xff, 0xff) },
910 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1297, 0xff, 0xff, 0xff) },
911 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) },
912 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) },
913 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) },
914 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */
915 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) },
916 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) },
917 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0060, 0xff, 0xff, 0xff) },
918 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0070, 0xff, 0xff, 0xff) },
919 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0073, 0xff, 0xff, 0xff) },
920 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0130, 0xff, 0xff, 0xff) },
921 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0141, 0xff, 0xff, 0xff) },
922 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) },
923 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
924 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
925 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
926 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
927 { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710T, 0xff, 0xff, 0xff) },
928 { USB_DEVICE(ZTE_VENDOR_ID2, ZTE_PRODUCT_MF_330) },
929 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
930 { USB_DEVICE(DLINK_VENDOR_ID, DLINK_PRODUCT_DWM_652) },
931 { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5) }, /* Yes, ALINK_VENDOR_ID */
932 { USB_DEVICE(ALINK_VENDOR_ID, DLINK_PRODUCT_DWM_652_U5A) },
933 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4512) },
934 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H21_4523) },
935 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4515) },
936 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4518) },
937 { USB_DEVICE(QISDA_VENDOR_ID, QISDA_PRODUCT_H20_4519) },
938 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_G450) },
939 { USB_DEVICE(TOSHIBA_VENDOR_ID, TOSHIBA_PRODUCT_HSDPA_MINICARD ) }, /* Toshiba 3G HSDPA == Novatel Expedite EU870D MiniCard */
940 { USB_DEVICE(ALINK_VENDOR_ID, 0x9000) },
941 { USB_DEVICE_AND_INTERFACE_INFO(ALINK_VENDOR_ID, ALINK_PRODUCT_3GU, 0xff, 0xff, 0xff) },
942 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_X060S) },
943 { USB_DEVICE(AIRPLUS_VENDOR_ID, AIRPLUS_PRODUCT_MCD650) },
944 { USB_DEVICE(TLAYTECH_VENDOR_ID, TLAYTECH_PRODUCT_TEU800) },
945 { USB_DEVICE(FOUR_G_SYSTEMS_VENDOR_ID, FOUR_G_SYSTEMS_PRODUCT_W14) },
946 { USB_DEVICE(HAIER_VENDOR_ID, HAIER_PRODUCT_CE100) },
947 { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_1) },
948 { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G_2) },
949 /* Pirelli */
950 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_1)},
951 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_C100_2)},
952 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1004)},
953 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1005)},
954 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1006)},
955 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1007)},
956 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1008)},
957 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1009)},
958 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100A)},
959 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100B) },
960 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100C) },
961 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100D) },
962 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100E) },
963 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) },
964 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)},
965 { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)},
966 /* Cinterion */
967 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) },
968 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) },
969 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) },
970 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
971 { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
972 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
973 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
974 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, /* HC28 enumerates with Siemens or Cinterion VID depending on FW revision */
975 { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
977 { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
978 { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
979 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
980 { } /* Terminating entry */
982 MODULE_DEVICE_TABLE(usb, option_ids);
984 static struct usb_driver option_driver = {
985 .name = "option",
986 .probe = usb_serial_probe,
987 .disconnect = usb_serial_disconnect,
988 .id_table = option_ids,
989 .no_dynamic_id = 1,
992 /* The card has three separate interfaces, which the serial driver
993 * recognizes separately, thus num_port=1.
996 static struct usb_serial_driver option_1port_device = {
997 .driver = {
998 .owner = THIS_MODULE,
999 .name = "option1",
1001 .description = "GSM modem (1-port)",
1002 .usb_driver = &option_driver,
1003 .id_table = option_ids,
1004 .num_interrupt_in = NUM_DONT_CARE,
1005 .num_bulk_in = NUM_DONT_CARE,
1006 .num_bulk_out = NUM_DONT_CARE,
1007 .num_ports = 1,
1008 .probe = option_probe,
1009 .open = option_open,
1010 .close = option_close,
1011 .write = option_write,
1012 .write_room = option_write_room,
1013 .chars_in_buffer = option_chars_in_buffer,
1014 .throttle = option_rx_throttle,
1015 .unthrottle = option_rx_unthrottle,
1016 .ioctl = option_ioctl,
1017 .set_termios = option_set_termios,
1018 .break_ctl = option_break_ctl,
1019 .tiocmget = option_tiocmget,
1020 .tiocmset = option_tiocmset,
1021 .attach = option_startup,
1022 .shutdown = option_shutdown,
1023 .read_int_callback = option_instat_callback,
1026 static int debug;
1028 /* per port private data */
1030 #define N_IN_URB 4
1031 #define N_OUT_URB 4
1032 #define IN_BUFLEN 4096
1033 #define OUT_BUFLEN 4096
1035 struct option_port_private {
1036 /* Input endpoints and buffer for this port */
1037 struct urb *in_urbs[N_IN_URB];
1038 u8 *in_buffer[N_IN_URB];
1039 /* Output endpoints and buffer for this port */
1040 struct urb *out_urbs[N_OUT_URB];
1041 u8 *out_buffer[N_OUT_URB];
1042 unsigned long out_busy; /* Bit vector of URBs in use */
1044 /* Settings for the port */
1045 int rts_state; /* Handshaking pins (outputs) */
1046 int dtr_state;
1047 int cts_state; /* Handshaking pins (inputs) */
1048 int dsr_state;
1049 int dcd_state;
1050 int ri_state;
1052 unsigned long tx_start_time[N_OUT_URB];
1055 /* Functions used by new usb-serial code. */
1056 static int __init option_init(void)
1058 int retval;
1059 retval = usb_serial_register(&option_1port_device);
1060 if (retval)
1061 goto failed_1port_device_register;
1062 retval = usb_register(&option_driver);
1063 if (retval)
1064 goto failed_driver_register;
1066 info(DRIVER_DESC ": " DRIVER_VERSION);
1068 return 0;
1070 failed_driver_register:
1071 usb_serial_deregister (&option_1port_device);
1072 failed_1port_device_register:
1073 return retval;
1076 static void __exit option_exit(void)
1078 usb_deregister (&option_driver);
1079 usb_serial_deregister (&option_1port_device);
1082 module_init(option_init);
1083 module_exit(option_exit);
1085 static int option_probe(struct usb_serial *serial,
1086 const struct usb_device_id *id)
1088 /* D-Link DWM 652 still exposes CD-Rom emulation interface in modem mode */
1089 if (serial->dev->descriptor.idVendor == DLINK_VENDOR_ID &&
1090 serial->dev->descriptor.idProduct == DLINK_PRODUCT_DWM_652 &&
1091 serial->interface->cur_altsetting->desc.bInterfaceClass == 0x8)
1092 return -ENODEV;
1094 /* Bandrich modem and AT command interface is 0xff */
1095 if ((serial->dev->descriptor.idVendor == BANDRICH_VENDOR_ID ||
1096 serial->dev->descriptor.idVendor == PIRELLI_VENDOR_ID) &&
1097 serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff)
1098 return -ENODEV;
1100 /* Don't bind network interfaces on Huawei K3765 & K4505 */
1101 if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID &&
1102 (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 ||
1103 serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) &&
1104 serial->interface->cur_altsetting->desc.bInterfaceNumber == 1)
1105 return -ENODEV;
1107 return 0;
1110 static void option_rx_throttle(struct usb_serial_port *port)
1112 dbg("%s", __FUNCTION__);
1115 static void option_rx_unthrottle(struct usb_serial_port *port)
1117 dbg("%s", __FUNCTION__);
1120 static void option_break_ctl(struct usb_serial_port *port, int break_state)
1122 /* Unfortunately, I don't know how to send a break */
1123 dbg("%s", __FUNCTION__);
1126 static void option_set_termios(struct usb_serial_port *port,
1127 struct ktermios *old_termios)
1129 dbg("%s", __FUNCTION__);
1130 /* Doesn't support option setting */
1131 tty_termios_copy_hw(port->tty->termios, old_termios);
1132 option_send_setup(port);
1135 static int option_tiocmget(struct usb_serial_port *port, struct file *file)
1137 unsigned int value;
1138 struct option_port_private *portdata;
1140 portdata = usb_get_serial_port_data(port);
1142 value = ((portdata->rts_state) ? TIOCM_RTS : 0) |
1143 ((portdata->dtr_state) ? TIOCM_DTR : 0) |
1144 ((portdata->cts_state) ? TIOCM_CTS : 0) |
1145 ((portdata->dsr_state) ? TIOCM_DSR : 0) |
1146 ((portdata->dcd_state) ? TIOCM_CAR : 0) |
1147 ((portdata->ri_state) ? TIOCM_RNG : 0);
1149 return value;
1152 static int option_tiocmset(struct usb_serial_port *port, struct file *file,
1153 unsigned int set, unsigned int clear)
1155 struct option_port_private *portdata;
1157 portdata = usb_get_serial_port_data(port);
1159 /* FIXME: what locks portdata fields ? */
1160 if (set & TIOCM_RTS)
1161 portdata->rts_state = 1;
1162 if (set & TIOCM_DTR)
1163 portdata->dtr_state = 1;
1165 if (clear & TIOCM_RTS)
1166 portdata->rts_state = 0;
1167 if (clear & TIOCM_DTR)
1168 portdata->dtr_state = 0;
1169 return option_send_setup(port);
1172 static int option_ioctl(struct usb_serial_port *port, struct file *file,
1173 unsigned int cmd, unsigned long arg)
1175 return -ENOIOCTLCMD;
1178 /* Write */
1179 static int option_write(struct usb_serial_port *port,
1180 const unsigned char *buf, int count)
1182 struct option_port_private *portdata;
1183 int i;
1184 int left, todo;
1185 struct urb *this_urb = NULL; /* spurious */
1186 int err;
1188 portdata = usb_get_serial_port_data(port);
1190 dbg("%s: write (%d chars)", __FUNCTION__, count);
1192 i = 0;
1193 left = count;
1194 for (i=0; left > 0 && i < N_OUT_URB; i++) {
1195 todo = left;
1196 if (todo > OUT_BUFLEN)
1197 todo = OUT_BUFLEN;
1199 this_urb = portdata->out_urbs[i];
1200 if (test_and_set_bit(i, &portdata->out_busy)) {
1201 if (time_before(jiffies,
1202 portdata->tx_start_time[i] + 10 * HZ))
1203 continue;
1204 usb_unlink_urb(this_urb);
1205 continue;
1207 dbg("%s: endpoint %d buf %d", __FUNCTION__,
1208 usb_pipeendpoint(this_urb->pipe), i);
1210 /* send the data */
1211 memcpy (this_urb->transfer_buffer, buf, todo);
1212 this_urb->transfer_buffer_length = todo;
1214 err = usb_submit_urb(this_urb, GFP_ATOMIC);
1215 if (err) {
1216 dbg("usb_submit_urb %p (write bulk) failed "
1217 "(%d)", this_urb, err);
1218 clear_bit(i, &portdata->out_busy);
1219 continue;
1221 portdata->tx_start_time[i] = jiffies;
1222 buf += todo;
1223 left -= todo;
1226 count -= left;
1227 dbg("%s: wrote (did %d)", __FUNCTION__, count);
1228 return count;
1231 static void option_indat_callback(struct urb *urb)
1233 int err;
1234 int endpoint;
1235 struct usb_serial_port *port;
1236 struct tty_struct *tty;
1237 unsigned char *data = urb->transfer_buffer;
1238 int status = urb->status;
1240 dbg("%s: %p", __FUNCTION__, urb);
1242 endpoint = usb_pipeendpoint(urb->pipe);
1243 port = urb->context;
1245 if (status) {
1246 dbg("%s: nonzero status: %d on endpoint %02x.",
1247 __FUNCTION__, status, endpoint);
1248 } else {
1249 tty = port->tty;
1250 if (urb->actual_length) {
1251 tty_buffer_request_room(tty, urb->actual_length);
1252 tty_insert_flip_string(tty, data, urb->actual_length);
1253 tty_flip_buffer_push(tty);
1254 } else {
1255 dbg("%s: empty read urb received", __FUNCTION__);
1258 /* Resubmit urb so we continue receiving */
1259 if (port->open_count && status != -ESHUTDOWN) {
1260 err = usb_submit_urb(urb, GFP_ATOMIC);
1261 if (err)
1262 printk(KERN_ERR "%s: resubmit read urb failed. "
1263 "(%d)", __FUNCTION__, err);
1266 return;
1269 static void option_outdat_callback(struct urb *urb)
1271 struct usb_serial_port *port;
1272 struct option_port_private *portdata;
1273 int i;
1275 dbg("%s", __FUNCTION__);
1277 port = urb->context;
1279 usb_serial_port_softint(port);
1281 portdata = usb_get_serial_port_data(port);
1282 for (i = 0; i < N_OUT_URB; ++i) {
1283 if (portdata->out_urbs[i] == urb) {
1284 smp_mb__before_clear_bit();
1285 clear_bit(i, &portdata->out_busy);
1286 break;
1291 static void option_instat_callback(struct urb *urb)
1293 int err;
1294 int status = urb->status;
1295 struct usb_serial_port *port = urb->context;
1296 struct option_port_private *portdata = usb_get_serial_port_data(port);
1298 dbg("%s", __FUNCTION__);
1299 dbg("%s: urb %p port %p has data %p", __FUNCTION__,urb,port,portdata);
1301 if (status == 0) {
1302 struct usb_ctrlrequest *req_pkt =
1303 (struct usb_ctrlrequest *)urb->transfer_buffer;
1305 if (!req_pkt) {
1306 dbg("%s: NULL req_pkt\n", __FUNCTION__);
1307 return;
1309 if ((req_pkt->bRequestType == 0xA1) &&
1310 (req_pkt->bRequest == 0x20)) {
1311 int old_dcd_state;
1312 unsigned char signals = *((unsigned char *)
1313 urb->transfer_buffer +
1314 sizeof(struct usb_ctrlrequest));
1316 dbg("%s: signal x%x", __FUNCTION__, signals);
1318 old_dcd_state = portdata->dcd_state;
1319 portdata->cts_state = 1;
1320 portdata->dcd_state = ((signals & 0x01) ? 1 : 0);
1321 portdata->dsr_state = ((signals & 0x02) ? 1 : 0);
1322 portdata->ri_state = ((signals & 0x08) ? 1 : 0);
1324 if (port->tty && !C_CLOCAL(port->tty) &&
1325 old_dcd_state && !portdata->dcd_state)
1326 tty_hangup(port->tty);
1327 } else {
1328 dbg("%s: type %x req %x", __FUNCTION__,
1329 req_pkt->bRequestType,req_pkt->bRequest);
1331 } else
1332 dbg("%s: error %d", __FUNCTION__, status);
1334 /* Resubmit urb so we continue receiving IRQ data */
1335 if (status != -ESHUTDOWN && status != -ENOENT) {
1336 err = usb_submit_urb(urb, GFP_ATOMIC);
1337 if (err)
1338 dbg("%s: resubmit intr urb failed. (%d)",
1339 __FUNCTION__, err);
1343 static int option_write_room(struct usb_serial_port *port)
1345 struct option_port_private *portdata;
1346 int i;
1347 int data_len = 0;
1348 struct urb *this_urb;
1350 portdata = usb_get_serial_port_data(port);
1352 for (i=0; i < N_OUT_URB; i++) {
1353 this_urb = portdata->out_urbs[i];
1354 if (this_urb && !test_bit(i, &portdata->out_busy))
1355 data_len += OUT_BUFLEN;
1358 dbg("%s: %d", __FUNCTION__, data_len);
1359 return data_len;
1362 static int option_chars_in_buffer(struct usb_serial_port *port)
1364 struct option_port_private *portdata;
1365 int i;
1366 int data_len = 0;
1367 struct urb *this_urb;
1369 portdata = usb_get_serial_port_data(port);
1372 for (i=0; i < N_OUT_URB; i++) {
1373 this_urb = portdata->out_urbs[i];
1374 /* FIXME: This locking is insufficient as this_urb may
1375 go unused during the test */
1376 if (this_urb && test_bit(i, &portdata->out_busy))
1377 data_len += this_urb->transfer_buffer_length;
1379 dbg("%s: %d", __FUNCTION__, data_len);
1380 return data_len;
1383 static int option_open(struct usb_serial_port *port, struct file *filp)
1385 struct option_port_private *portdata;
1386 //struct usb_serial *serial = port->serial;
1387 int i, err;
1388 struct urb *urb;
1390 portdata = usb_get_serial_port_data(port);
1392 dbg("%s", __FUNCTION__);
1394 /* Set some sane defaults */
1395 portdata->rts_state = 1;
1396 portdata->dtr_state = 1;
1398 /* Start reading from the IN endpoint */
1399 for (i = 0; i < N_IN_URB; i++) {
1400 urb = portdata->in_urbs[i];
1401 if (! urb)
1402 continue;
1403 err = usb_submit_urb(urb, GFP_KERNEL);
1404 if (err) {
1405 dbg("%s: submit urb %d failed (%d) %d",
1406 __FUNCTION__, i, err,
1407 urb->transfer_buffer_length);
1411 option_send_setup(port);
1413 return (0);
1416 static void option_close(struct usb_serial_port *port, struct file *filp)
1418 int i;
1419 struct usb_serial *serial = port->serial;
1420 struct option_port_private *portdata;
1422 dbg("%s", __FUNCTION__);
1423 portdata = usb_get_serial_port_data(port);
1425 portdata->rts_state = 0;
1426 portdata->dtr_state = 0;
1428 if (serial->dev) {
1429 mutex_lock(&serial->disc_mutex);
1430 if (!serial->disconnected)
1431 option_send_setup(port);
1432 mutex_unlock(&serial->disc_mutex);
1434 /* Stop reading/writing urbs */
1435 for (i = 0; i < N_IN_URB; i++)
1436 usb_kill_urb(portdata->in_urbs[i]);
1437 for (i = 0; i < N_OUT_URB; i++)
1438 usb_kill_urb(portdata->out_urbs[i]);
1440 port->tty = NULL;
1443 /* Helper functions used by option_setup_urbs */
1444 static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint,
1445 int dir, void *ctx, char *buf, int len,
1446 void (*callback)(struct urb *))
1448 struct urb *urb;
1450 if (endpoint == -1)
1451 return NULL; /* endpoint not needed */
1453 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
1454 if (urb == NULL) {
1455 dbg("%s: alloc for endpoint %d failed.", __FUNCTION__, endpoint);
1456 return NULL;
1459 /* Fill URB using supplied data. */
1460 usb_fill_bulk_urb(urb, serial->dev,
1461 usb_sndbulkpipe(serial->dev, endpoint) | dir,
1462 buf, len, callback, ctx);
1464 return urb;
1467 /* Setup urbs */
1468 static void option_setup_urbs(struct usb_serial *serial)
1470 int i,j;
1471 struct usb_serial_port *port;
1472 struct option_port_private *portdata;
1474 dbg("%s", __FUNCTION__);
1476 for (i = 0; i < serial->num_ports; i++) {
1477 port = serial->port[i];
1478 portdata = usb_get_serial_port_data(port);
1480 /* Do indat endpoints first */
1481 for (j = 0; j < N_IN_URB; ++j) {
1482 portdata->in_urbs[j] = option_setup_urb (serial,
1483 port->bulk_in_endpointAddress, USB_DIR_IN, port,
1484 portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
1487 /* outdat endpoints */
1488 for (j = 0; j < N_OUT_URB; ++j) {
1489 portdata->out_urbs[j] = option_setup_urb (serial,
1490 port->bulk_out_endpointAddress, USB_DIR_OUT, port,
1491 portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
1497 /** send RTS/DTR state to the port.
1499 * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN
1500 * CDC.
1502 static int option_send_setup(struct usb_serial_port *port)
1504 struct usb_serial *serial = port->serial;
1505 struct option_port_private *portdata;
1506 int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
1507 dbg("%s", __FUNCTION__);
1509 portdata = usb_get_serial_port_data(port);
1511 if (port->tty) {
1512 int val = 0;
1513 if (portdata->dtr_state)
1514 val |= 0x01;
1515 if (portdata->rts_state)
1516 val |= 0x02;
1518 return usb_control_msg(serial->dev,
1519 usb_rcvctrlpipe(serial->dev, 0),
1520 0x22,0x21,val,ifNum,NULL,0,USB_CTRL_SET_TIMEOUT);
1523 return 0;
1526 static int option_startup(struct usb_serial *serial)
1528 int i, j, err;
1529 struct usb_serial_port *port;
1530 struct option_port_private *portdata;
1531 u8 *buffer;
1533 dbg("%s", __FUNCTION__);
1535 /* Now setup per port private data */
1536 for (i = 0; i < serial->num_ports; i++) {
1537 port = serial->port[i];
1538 portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
1539 if (!portdata) {
1540 dbg("%s: kmalloc for option_port_private (%d) failed!.",
1541 __FUNCTION__, i);
1542 return (1);
1545 for (j = 0; j < N_IN_URB; j++) {
1546 buffer = (u8 *)__get_free_page(GFP_KERNEL);
1547 if (!buffer)
1548 goto bail_out_error;
1549 portdata->in_buffer[j] = buffer;
1552 for (j = 0; j < N_OUT_URB; j++) {
1553 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
1554 if (!buffer)
1555 goto bail_out_error2;
1556 portdata->out_buffer[j] = buffer;
1559 usb_set_serial_port_data(port, portdata);
1561 if (! port->interrupt_in_urb)
1562 continue;
1563 err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
1564 if (err)
1565 dbg("%s: submit irq_in urb failed %d",
1566 __FUNCTION__, err);
1569 option_setup_urbs(serial);
1571 return (0);
1573 bail_out_error2:
1574 for (j = 0; j < N_OUT_URB; j++)
1575 kfree(portdata->out_buffer[j]);
1576 bail_out_error:
1577 for (j = 0; j < N_IN_URB; j++)
1578 if (portdata->in_buffer[j])
1579 free_page((unsigned long)portdata->in_buffer[j]);
1580 kfree(portdata);
1581 return 1;
1584 static void option_shutdown(struct usb_serial *serial)
1586 int i, j;
1587 struct usb_serial_port *port;
1588 struct option_port_private *portdata;
1590 dbg("%s", __FUNCTION__);
1592 /* Stop reading/writing urbs */
1593 for (i = 0; i < serial->num_ports; ++i) {
1594 port = serial->port[i];
1595 portdata = usb_get_serial_port_data(port);
1596 for (j = 0; j < N_IN_URB; j++)
1597 usb_kill_urb(portdata->in_urbs[j]);
1598 for (j = 0; j < N_OUT_URB; j++)
1599 usb_kill_urb(portdata->out_urbs[j]);
1602 /* Now free them */
1603 for (i = 0; i < serial->num_ports; ++i) {
1604 port = serial->port[i];
1605 portdata = usb_get_serial_port_data(port);
1607 for (j = 0; j < N_IN_URB; j++) {
1608 if (portdata->in_urbs[j]) {
1609 usb_free_urb(portdata->in_urbs[j]);
1610 free_page((unsigned long)portdata->in_buffer[j]);
1611 portdata->in_urbs[j] = NULL;
1614 for (j = 0; j < N_OUT_URB; j++) {
1615 if (portdata->out_urbs[j]) {
1616 usb_free_urb(portdata->out_urbs[j]);
1617 kfree(portdata->out_buffer[j]);
1618 portdata->out_urbs[j] = NULL;
1623 /* Now free per port private data */
1624 for (i = 0; i < serial->num_ports; i++) {
1625 port = serial->port[i];
1626 kfree(usb_get_serial_port_data(port));
1630 MODULE_AUTHOR(DRIVER_AUTHOR);
1631 MODULE_DESCRIPTION(DRIVER_DESC);
1632 MODULE_VERSION(DRIVER_VERSION);
1633 MODULE_LICENSE("GPL");
1635 module_param(debug, bool, S_IRUGO | S_IWUSR);
1636 MODULE_PARM_DESC(debug, "Debug messages");