disable usbip; patch to 2.6.28.10
[kernel-power] / usbhost / usb / serial / option.c
1 /*
2   USB Driver for GSM modems
3
4   Copyright (C) 2005  Matthias Urlichs <smurf@smurf.noris.de>
5
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.
9
10   Portions copied from the Keyspan driver by Hugh Blemings <hugh@blemings.org>
11
12   History: see the git log.
13
14   Work sponsored by: Sigos GmbH, Germany <info@sigos.de>
15
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
21
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.
25
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.
29 */
30
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"
34
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>
44
45 /* Function prototypes */
46 static int  option_open(struct tty_struct *tty, struct usb_serial_port *port,
47                                                         struct file *filp);
48 static void option_close(struct tty_struct *tty, struct usb_serial_port *port,
49                                                         struct file *filp);
50 static int  option_startup(struct usb_serial *serial);
51 static void option_shutdown(struct usb_serial *serial);
52 static int  option_write_room(struct tty_struct *tty);
53
54 static void option_instat_callback(struct urb *urb);
55
56 static int option_write(struct tty_struct *tty, struct usb_serial_port *port,
57                         const unsigned char *buf, int count);
58 static int  option_chars_in_buffer(struct tty_struct *tty);
59 static void option_set_termios(struct tty_struct *tty,
60                         struct usb_serial_port *port, struct ktermios *old);
61 static int  option_tiocmget(struct tty_struct *tty, struct file *file);
62 static int  option_tiocmset(struct tty_struct *tty, struct file *file,
63                                 unsigned int set, unsigned int clear);
64 static int  option_send_setup(struct tty_struct *tty, struct usb_serial_port *port);
65
66 /* Vendor and product IDs */
67 #define OPTION_VENDOR_ID                        0x0AF0
68 #define OPTION_PRODUCT_COLT                     0x5000
69 #define OPTION_PRODUCT_RICOLA                   0x6000
70 #define OPTION_PRODUCT_RICOLA_LIGHT             0x6100
71 #define OPTION_PRODUCT_RICOLA_QUAD              0x6200
72 #define OPTION_PRODUCT_RICOLA_QUAD_LIGHT        0x6300
73 #define OPTION_PRODUCT_RICOLA_NDIS              0x6050
74 #define OPTION_PRODUCT_RICOLA_NDIS_LIGHT        0x6150
75 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD         0x6250
76 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT   0x6350
77 #define OPTION_PRODUCT_COBRA                    0x6500
78 #define OPTION_PRODUCT_COBRA_BUS                0x6501
79 #define OPTION_PRODUCT_VIPER                    0x6600
80 #define OPTION_PRODUCT_VIPER_BUS                0x6601
81 #define OPTION_PRODUCT_GT_MAX_READY             0x6701
82 #define OPTION_PRODUCT_FUJI_MODEM_LIGHT         0x6721
83 #define OPTION_PRODUCT_FUJI_MODEM_GT            0x6741
84 #define OPTION_PRODUCT_FUJI_MODEM_EX            0x6761
85 #define OPTION_PRODUCT_KOI_MODEM                0x6800
86 #define OPTION_PRODUCT_SCORPION_MODEM           0x6901
87 #define OPTION_PRODUCT_ETNA_MODEM               0x7001
88 #define OPTION_PRODUCT_ETNA_MODEM_LITE          0x7021
89 #define OPTION_PRODUCT_ETNA_MODEM_GT            0x7041
90 #define OPTION_PRODUCT_ETNA_MODEM_EX            0x7061
91 #define OPTION_PRODUCT_ETNA_KOI_MODEM           0x7100
92 #define OPTION_PRODUCT_GTM380_MODEM             0x7201
93
94 #define HUAWEI_VENDOR_ID                        0x12D1
95 #define HUAWEI_PRODUCT_E600                     0x1001
96 #define HUAWEI_PRODUCT_E220                     0x1003
97 #define HUAWEI_PRODUCT_E220BIS                  0x1004
98 #define HUAWEI_PRODUCT_E1401                    0x1401
99 #define HUAWEI_PRODUCT_E1402                    0x1402
100 #define HUAWEI_PRODUCT_E1403                    0x1403
101 #define HUAWEI_PRODUCT_E1404                    0x1404
102 #define HUAWEI_PRODUCT_E1405                    0x1405
103 #define HUAWEI_PRODUCT_E1406                    0x1406
104 #define HUAWEI_PRODUCT_E1407                    0x1407
105 #define HUAWEI_PRODUCT_E1408                    0x1408
106 #define HUAWEI_PRODUCT_E1409                    0x1409
107 #define HUAWEI_PRODUCT_E140A                    0x140A
108 #define HUAWEI_PRODUCT_E140B                    0x140B
109 #define HUAWEI_PRODUCT_E140C                    0x140C
110 #define HUAWEI_PRODUCT_E140D                    0x140D
111 #define HUAWEI_PRODUCT_E140E                    0x140E
112 #define HUAWEI_PRODUCT_E140F                    0x140F
113 #define HUAWEI_PRODUCT_E1410                    0x1410
114 #define HUAWEI_PRODUCT_E1411                    0x1411
115 #define HUAWEI_PRODUCT_E1412                    0x1412
116 #define HUAWEI_PRODUCT_E1413                    0x1413
117 #define HUAWEI_PRODUCT_E1414                    0x1414
118 #define HUAWEI_PRODUCT_E1415                    0x1415
119 #define HUAWEI_PRODUCT_E1416                    0x1416
120 #define HUAWEI_PRODUCT_E1417                    0x1417
121 #define HUAWEI_PRODUCT_E1418                    0x1418
122 #define HUAWEI_PRODUCT_E1419                    0x1419
123 #define HUAWEI_PRODUCT_E141A                    0x141A
124 #define HUAWEI_PRODUCT_E141B                    0x141B
125 #define HUAWEI_PRODUCT_E141C                    0x141C
126 #define HUAWEI_PRODUCT_E141D                    0x141D
127 #define HUAWEI_PRODUCT_E141E                    0x141E
128 #define HUAWEI_PRODUCT_E141F                    0x141F
129 #define HUAWEI_PRODUCT_E1420                    0x1420
130 #define HUAWEI_PRODUCT_E1421                    0x1421
131 #define HUAWEI_PRODUCT_E1422                    0x1422
132 #define HUAWEI_PRODUCT_E1423                    0x1423
133 #define HUAWEI_PRODUCT_E1424                    0x1424
134 #define HUAWEI_PRODUCT_E1425                    0x1425
135 #define HUAWEI_PRODUCT_E1426                    0x1426
136 #define HUAWEI_PRODUCT_E1427                    0x1427
137 #define HUAWEI_PRODUCT_E1428                    0x1428
138 #define HUAWEI_PRODUCT_E1429                    0x1429
139 #define HUAWEI_PRODUCT_E142A                    0x142A
140 #define HUAWEI_PRODUCT_E142B                    0x142B
141 #define HUAWEI_PRODUCT_E142C                    0x142C
142 #define HUAWEI_PRODUCT_E142D                    0x142D
143 #define HUAWEI_PRODUCT_E142E                    0x142E
144 #define HUAWEI_PRODUCT_E142F                    0x142F
145 #define HUAWEI_PRODUCT_E1430                    0x1430
146 #define HUAWEI_PRODUCT_E1431                    0x1431
147 #define HUAWEI_PRODUCT_E1432                    0x1432
148 #define HUAWEI_PRODUCT_E1433                    0x1433
149 #define HUAWEI_PRODUCT_E1434                    0x1434
150 #define HUAWEI_PRODUCT_E1435                    0x1435
151 #define HUAWEI_PRODUCT_E1436                    0x1436
152 #define HUAWEI_PRODUCT_E1437                    0x1437
153 #define HUAWEI_PRODUCT_E1438                    0x1438
154 #define HUAWEI_PRODUCT_E1439                    0x1439
155 #define HUAWEI_PRODUCT_E143A                    0x143A
156 #define HUAWEI_PRODUCT_E143B                    0x143B
157 #define HUAWEI_PRODUCT_E143C                    0x143C
158 #define HUAWEI_PRODUCT_E143D                    0x143D
159 #define HUAWEI_PRODUCT_E143E                    0x143E
160 #define HUAWEI_PRODUCT_E143F                    0x143F
161
162 #define NOVATELWIRELESS_VENDOR_ID               0x1410
163
164 /* YISO PRODUCTS */
165
166 #define YISO_VENDOR_ID                          0x0EAB
167 #define YISO_PRODUCT_U893                       0xC893
168
169 /* MERLIN EVDO PRODUCTS */
170 #define NOVATELWIRELESS_PRODUCT_V640            0x1100
171 #define NOVATELWIRELESS_PRODUCT_V620            0x1110
172 #define NOVATELWIRELESS_PRODUCT_V740            0x1120
173 #define NOVATELWIRELESS_PRODUCT_V720            0x1130
174
175 /* MERLIN HSDPA/HSPA PRODUCTS */
176 #define NOVATELWIRELESS_PRODUCT_U730            0x1400
177 #define NOVATELWIRELESS_PRODUCT_U740            0x1410
178 #define NOVATELWIRELESS_PRODUCT_U870            0x1420
179 #define NOVATELWIRELESS_PRODUCT_XU870           0x1430
180 #define NOVATELWIRELESS_PRODUCT_X950D           0x1450
181
182 /* EXPEDITE PRODUCTS */
183 #define NOVATELWIRELESS_PRODUCT_EV620           0x2100
184 #define NOVATELWIRELESS_PRODUCT_ES720           0x2110
185 #define NOVATELWIRELESS_PRODUCT_E725            0x2120
186 #define NOVATELWIRELESS_PRODUCT_ES620           0x2130
187 #define NOVATELWIRELESS_PRODUCT_EU730           0x2400
188 #define NOVATELWIRELESS_PRODUCT_EU740           0x2410
189 #define NOVATELWIRELESS_PRODUCT_EU870D          0x2420
190
191 /* OVATION PRODUCTS */
192 #define NOVATELWIRELESS_PRODUCT_MC727           0x4100
193 #define NOVATELWIRELESS_PRODUCT_MC950D          0x4400
194 #define NOVATELWIRELESS_PRODUCT_U727            0x5010
195
196 /* FUTURE NOVATEL PRODUCTS */
197 #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED  0X6000
198 #define NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED  0X6001
199 #define NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED  0X7000
200 #define NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED  0X7001
201 #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED 0X8000
202 #define NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED 0X8001
203 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED 0X9000
204 #define NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED 0X9001
205 #define NOVATELWIRELESS_PRODUCT_GLOBAL          0XA001
206
207 /* AMOI PRODUCTS */
208 #define AMOI_VENDOR_ID                          0x1614
209 #define AMOI_PRODUCT_H01                        0x0800
210 #define AMOI_PRODUCT_H01A                       0x7002
211 #define AMOI_PRODUCT_H02                        0x0802
212
213 #define DELL_VENDOR_ID                          0x413C
214
215 /* Dell modems */
216 #define DELL_PRODUCT_5700_MINICARD              0x8114
217 #define DELL_PRODUCT_5500_MINICARD              0x8115
218 #define DELL_PRODUCT_5505_MINICARD              0x8116
219 #define DELL_PRODUCT_5700_EXPRESSCARD           0x8117
220 #define DELL_PRODUCT_5510_EXPRESSCARD           0x8118
221
222 #define DELL_PRODUCT_5700_MINICARD_SPRINT       0x8128
223 #define DELL_PRODUCT_5700_MINICARD_TELUS        0x8129
224
225 #define DELL_PRODUCT_5720_MINICARD_VZW          0x8133
226 #define DELL_PRODUCT_5720_MINICARD_SPRINT       0x8134
227 #define DELL_PRODUCT_5720_MINICARD_TELUS        0x8135
228 #define DELL_PRODUCT_5520_MINICARD_CINGULAR     0x8136
229 #define DELL_PRODUCT_5520_MINICARD_GENERIC_L    0x8137
230 #define DELL_PRODUCT_5520_MINICARD_GENERIC_I    0x8138
231
232 #define DELL_PRODUCT_5730_MINICARD_SPRINT       0x8180
233 #define DELL_PRODUCT_5730_MINICARD_TELUS        0x8181
234 #define DELL_PRODUCT_5730_MINICARD_VZW          0x8182
235
236 #define KYOCERA_VENDOR_ID                       0x0c88
237 #define KYOCERA_PRODUCT_KPC650                  0x17da
238 #define KYOCERA_PRODUCT_KPC680                  0x180a
239
240 #define ANYDATA_VENDOR_ID                       0x16d5
241 #define ANYDATA_PRODUCT_ADU_620UW               0x6202
242 #define ANYDATA_PRODUCT_ADU_E100A               0x6501
243 #define ANYDATA_PRODUCT_ADU_500A                0x6502
244
245 #define AXESSTEL_VENDOR_ID                      0x1726
246 #define AXESSTEL_PRODUCT_MV110H                 0x1000
247
248 #define ONDA_VENDOR_ID                          0x19d2
249 #define ONDA_PRODUCT_MSA501HS                   0x0001
250 #define ONDA_PRODUCT_ET502HS                    0x0002
251 #define ONDA_PRODUCT_MT503HS                    0x0200
252
253 #define BANDRICH_VENDOR_ID                      0x1A8D
254 #define BANDRICH_PRODUCT_C100_1                 0x1002
255 #define BANDRICH_PRODUCT_C100_2                 0x1003
256 #define BANDRICH_PRODUCT_1004                   0x1004
257 #define BANDRICH_PRODUCT_1005                   0x1005
258 #define BANDRICH_PRODUCT_1006                   0x1006
259 #define BANDRICH_PRODUCT_1007                   0x1007
260 #define BANDRICH_PRODUCT_1008                   0x1008
261 #define BANDRICH_PRODUCT_1009                   0x1009
262 #define BANDRICH_PRODUCT_100A                   0x100a
263
264 #define BANDRICH_PRODUCT_100B                   0x100b
265 #define BANDRICH_PRODUCT_100C                   0x100c
266 #define BANDRICH_PRODUCT_100D                   0x100d
267 #define BANDRICH_PRODUCT_100E                   0x100e
268
269 #define BANDRICH_PRODUCT_100F                   0x100f
270 #define BANDRICH_PRODUCT_1010                   0x1010
271 #define BANDRICH_PRODUCT_1011                   0x1011
272 #define BANDRICH_PRODUCT_1012                   0x1012
273
274 #define AMOI_VENDOR_ID                  0x1614
275 #define AMOI_PRODUCT_9508                       0x0800
276
277 #define QUALCOMM_VENDOR_ID                      0x05C6
278
279 #define MAXON_VENDOR_ID                         0x16d8
280
281 #define TELIT_VENDOR_ID                         0x1bc7
282 #define TELIT_PRODUCT_UC864E                    0x1003
283
284 /* ZTE PRODUCTS */
285 #define ZTE_VENDOR_ID                           0x19d2
286 #define ZTE_PRODUCT_MF622                       0x0001
287 #define ZTE_PRODUCT_MF628                       0x0015
288 #define ZTE_PRODUCT_MF626                       0x0031
289 #define ZTE_PRODUCT_CDMA_TECH                   0xfffe
290
291 #define BENQ_VENDOR_ID                          0x04a5
292 #define BENQ_PRODUCT_H10                        0x4068
293
294 static struct usb_device_id option_ids[] = {
295         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
296         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
297         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
298         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
299         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },
300         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS) },
301         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_LIGHT) },
302         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD) },
303         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT) },
304         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
305         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA_BUS) },
306         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER) },
307         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER_BUS) },
308         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX_READY) },
309         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_LIGHT) },
310         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_GT) },
311         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_EX) },
312         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_MODEM) },
313         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_MODEM) },
314         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM) },
315         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_LITE) },
316         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
317         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
318         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
319         { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
320         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
321         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
322         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
323         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) },
324         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1402, 0xff, 0xff, 0xff) },
325         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) },
326         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1404, 0xff, 0xff, 0xff) },
327         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) },
328         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) },
329         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1407, 0xff, 0xff, 0xff) },
330         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) },
331         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) },
332         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140A, 0xff, 0xff, 0xff) },
333         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140B, 0xff, 0xff, 0xff) },
334         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140C, 0xff, 0xff, 0xff) },
335         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140D, 0xff, 0xff, 0xff) },
336         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140E, 0xff, 0xff, 0xff) },
337         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E140F, 0xff, 0xff, 0xff) },
338         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) },
339         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) },
340         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) },
341         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) },
342         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) },
343         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) },
344         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) },
345         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) },
346         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) },
347         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) },
348         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141A, 0xff, 0xff, 0xff) },
349         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141B, 0xff, 0xff, 0xff) },
350         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141C, 0xff, 0xff, 0xff) },
351         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141D, 0xff, 0xff, 0xff) },
352         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141E, 0xff, 0xff, 0xff) },
353         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E141F, 0xff, 0xff, 0xff) },
354         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1420, 0xff, 0xff, 0xff) },
355         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1421, 0xff, 0xff, 0xff) },
356         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1422, 0xff, 0xff, 0xff) },
357         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1423, 0xff, 0xff, 0xff) },
358         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1424, 0xff, 0xff, 0xff) },
359         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1425, 0xff, 0xff, 0xff) },
360         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1426, 0xff, 0xff, 0xff) },
361         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1427, 0xff, 0xff, 0xff) },
362         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1428, 0xff, 0xff, 0xff) },
363         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1429, 0xff, 0xff, 0xff) },
364         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142A, 0xff, 0xff, 0xff) },
365         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142B, 0xff, 0xff, 0xff) },
366         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142C, 0xff, 0xff, 0xff) },
367         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142D, 0xff, 0xff, 0xff) },
368         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142E, 0xff, 0xff, 0xff) },
369         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E142F, 0xff, 0xff, 0xff) },
370         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1430, 0xff, 0xff, 0xff) },
371         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1431, 0xff, 0xff, 0xff) },
372         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1432, 0xff, 0xff, 0xff) },
373         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1433, 0xff, 0xff, 0xff) },
374         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1434, 0xff, 0xff, 0xff) },
375         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1435, 0xff, 0xff, 0xff) },
376         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1436, 0xff, 0xff, 0xff) },
377         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1437, 0xff, 0xff, 0xff) },
378         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1438, 0xff, 0xff, 0xff) },
379         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1439, 0xff, 0xff, 0xff) },
380         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143A, 0xff, 0xff, 0xff) },
381         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143B, 0xff, 0xff, 0xff) },
382         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143C, 0xff, 0xff, 0xff) },
383         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) },
384         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) },
385         { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) },
386         { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) },
387         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */
388         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */
389         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */
390         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) }, /* Novatel Merlin V720/S720/PC720 */
391         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) }, /* Novatel U730/U740 (VF version) */
392         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) }, /* Novatel U740 */
393         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) }, /* Novatel U870 */
394         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) }, /* Novatel Merlin XU870 HSDPA/3G */
395         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) }, /* Novatel X950D */
396         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */
397         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */
398         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */
399         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */
400         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */
401         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */
402         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
403         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
404         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
405         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
406         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */
407         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
408         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
409         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_FULLSPEED) }, /* Novatel HSPA Embedded product */
410         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_HIGHSPEED) }, /* Novatel EVDO product */
411         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_HIGHSPEED) }, /* Novatel HSPA product */
412         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_HIGHSPEED) }, /* Novatel EVDO Embedded product */
413         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_EMBEDDED_HIGHSPEED) }, /* Novatel HSPA Embedded product */
414         { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL) }, /* Novatel Global product */
415
416         { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) },
417         { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) },
418         { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) },
419
420         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_MINICARD) },             /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
421         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5500_MINICARD) },             /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
422         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5505_MINICARD) },             /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
423         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5700_EXPRESSCARD) },          /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
424         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5510_EXPRESSCARD) },          /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
425         { 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 */
426         { 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 */
427         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_VZW) },         /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
428         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_SPRINT) },      /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
429         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5720_MINICARD_TELUS) },       /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */
430         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) },    /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
431         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) },   /* Dell Wireless HSDPA 5520 */
432         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) },   /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
433         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) },      /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
434         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) },       /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
435         { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) },         /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
436         { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },   /* ADU-E100, ADU-310 */
437         { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
438         { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_620UW) },
439         { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) },
440         { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MSA501HS) },
441         { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) },
442         { USB_DEVICE(ONDA_VENDOR_ID, 0x0003) },
443         { USB_DEVICE(ONDA_VENDOR_ID, 0x0004) },
444         { USB_DEVICE(ONDA_VENDOR_ID, 0x0005) },
445         { USB_DEVICE(ONDA_VENDOR_ID, 0x0006) },
446         { USB_DEVICE(ONDA_VENDOR_ID, 0x0007) },
447         { USB_DEVICE(ONDA_VENDOR_ID, 0x0008) },
448         { USB_DEVICE(ONDA_VENDOR_ID, 0x0009) },
449         { USB_DEVICE(ONDA_VENDOR_ID, 0x000a) },
450         { USB_DEVICE(ONDA_VENDOR_ID, 0x000b) },
451         { USB_DEVICE(ONDA_VENDOR_ID, 0x000c) },
452         { USB_DEVICE(ONDA_VENDOR_ID, 0x000d) },
453         { USB_DEVICE(ONDA_VENDOR_ID, 0x000e) },
454         { USB_DEVICE(ONDA_VENDOR_ID, 0x000f) },
455         { USB_DEVICE(ONDA_VENDOR_ID, 0x0010) },
456         { USB_DEVICE(ONDA_VENDOR_ID, 0x0011) },
457         { USB_DEVICE(ONDA_VENDOR_ID, 0x0012) },
458         { USB_DEVICE(ONDA_VENDOR_ID, 0x0013) },
459         { USB_DEVICE(ONDA_VENDOR_ID, 0x0014) },
460         { USB_DEVICE(ONDA_VENDOR_ID, 0x0015) },
461         { USB_DEVICE(ONDA_VENDOR_ID, 0x0016) },
462         { USB_DEVICE(ONDA_VENDOR_ID, 0x0017) },
463         { USB_DEVICE(ONDA_VENDOR_ID, 0x0018) },
464         { USB_DEVICE(ONDA_VENDOR_ID, 0x0019) },
465         { USB_DEVICE(ONDA_VENDOR_ID, 0x0020) },
466         { USB_DEVICE(ONDA_VENDOR_ID, 0x0021) },
467         { USB_DEVICE(ONDA_VENDOR_ID, 0x0022) },
468         { USB_DEVICE(ONDA_VENDOR_ID, 0x0023) },
469         { USB_DEVICE(ONDA_VENDOR_ID, 0x0024) },
470         { USB_DEVICE(ONDA_VENDOR_ID, 0x0025) },
471         { USB_DEVICE(ONDA_VENDOR_ID, 0x0026) },
472         { USB_DEVICE(ONDA_VENDOR_ID, 0x0027) },
473         { USB_DEVICE(ONDA_VENDOR_ID, 0x0028) },
474         { USB_DEVICE(ONDA_VENDOR_ID, 0x0029) },
475         { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_MT503HS) },
476         { USB_DEVICE(YISO_VENDOR_ID, YISO_PRODUCT_U893) },
477         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
478         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
479         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1004) },
480         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1005) },
481         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1006) },
482         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1007) },
483         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1008) },
484         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1009) },
485         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100A) },
486         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100B) },
487         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100C) },
488         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100D) },
489         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100E) },
490         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_100F) },
491         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1010) },
492         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1011) },
493         { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_1012) },
494         { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC650) },
495         { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) },
496         { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6000)}, /* ZTE AC8700 */
497         { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
498         { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
499         { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
500         { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) },
501         { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) },
502         { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
503         { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
504         { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
505         { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
506         { } /* Terminating entry */
507 };
508 MODULE_DEVICE_TABLE(usb, option_ids);
509
510 static struct usb_driver option_driver = {
511         .name       = "option",
512         .probe      = usb_serial_probe,
513         .disconnect = usb_serial_disconnect,
514         .id_table   = option_ids,
515         .no_dynamic_id =        1,
516 };
517
518 /* The card has three separate interfaces, which the serial driver
519  * recognizes separately, thus num_port=1.
520  */
521
522 static struct usb_serial_driver option_1port_device = {
523         .driver = {
524                 .owner =        THIS_MODULE,
525                 .name =         "option1",
526         },
527         .description       = "GSM modem (1-port)",
528         .usb_driver        = &option_driver,
529         .id_table          = option_ids,
530         .num_ports         = 1,
531         .open              = option_open,
532         .close             = option_close,
533         .write             = option_write,
534         .write_room        = option_write_room,
535         .chars_in_buffer   = option_chars_in_buffer,
536         .set_termios       = option_set_termios,
537         .tiocmget          = option_tiocmget,
538         .tiocmset          = option_tiocmset,
539         .attach            = option_startup,
540         .shutdown          = option_shutdown,
541         .read_int_callback = option_instat_callback,
542 };
543
544 static int debug;
545
546 /* per port private data */
547
548 #define N_IN_URB 4
549 #define N_OUT_URB 1
550 #define IN_BUFLEN 4096
551 #define OUT_BUFLEN 128
552
553 struct option_port_private {
554         /* Input endpoints and buffer for this port */
555         struct urb *in_urbs[N_IN_URB];
556         u8 *in_buffer[N_IN_URB];
557         /* Output endpoints and buffer for this port */
558         struct urb *out_urbs[N_OUT_URB];
559         u8 *out_buffer[N_OUT_URB];
560         unsigned long out_busy;         /* Bit vector of URBs in use */
561
562         /* Settings for the port */
563         int rts_state;  /* Handshaking pins (outputs) */
564         int dtr_state;
565         int cts_state;  /* Handshaking pins (inputs) */
566         int dsr_state;
567         int dcd_state;
568         int ri_state;
569
570         unsigned long tx_start_time[N_OUT_URB];
571 };
572
573 /* Functions used by new usb-serial code. */
574 static int __init option_init(void)
575 {
576         int retval;
577         retval = usb_serial_register(&option_1port_device);
578         if (retval)
579                 goto failed_1port_device_register;
580         retval = usb_register(&option_driver);
581         if (retval)
582                 goto failed_driver_register;
583
584         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
585                DRIVER_DESC "\n");
586
587         return 0;
588
589 failed_driver_register:
590         usb_serial_deregister(&option_1port_device);
591 failed_1port_device_register:
592         return retval;
593 }
594
595 static void __exit option_exit(void)
596 {
597         usb_deregister(&option_driver);
598         usb_serial_deregister(&option_1port_device);
599 }
600
601 module_init(option_init);
602 module_exit(option_exit);
603
604 static void option_set_termios(struct tty_struct *tty,
605                 struct usb_serial_port *port, struct ktermios *old_termios)
606 {
607         dbg("%s", __func__);
608         /* Doesn't support option setting */
609         tty_termios_copy_hw(tty->termios, old_termios);
610         option_send_setup(tty, port);
611 }
612
613 static int option_tiocmget(struct tty_struct *tty, struct file *file)
614 {
615         struct usb_serial_port *port = tty->driver_data;
616         unsigned int value;
617         struct option_port_private *portdata;
618
619         portdata = usb_get_serial_port_data(port);
620
621         value = ((portdata->rts_state) ? TIOCM_RTS : 0) |
622                 ((portdata->dtr_state) ? TIOCM_DTR : 0) |
623                 ((portdata->cts_state) ? TIOCM_CTS : 0) |
624                 ((portdata->dsr_state) ? TIOCM_DSR : 0) |
625                 ((portdata->dcd_state) ? TIOCM_CAR : 0) |
626                 ((portdata->ri_state) ? TIOCM_RNG : 0);
627
628         return value;
629 }
630
631 static int option_tiocmset(struct tty_struct *tty, struct file *file,
632                         unsigned int set, unsigned int clear)
633 {
634         struct usb_serial_port *port = tty->driver_data;
635         struct option_port_private *portdata;
636
637         portdata = usb_get_serial_port_data(port);
638
639         /* FIXME: what locks portdata fields ? */
640         if (set & TIOCM_RTS)
641                 portdata->rts_state = 1;
642         if (set & TIOCM_DTR)
643                 portdata->dtr_state = 1;
644
645         if (clear & TIOCM_RTS)
646                 portdata->rts_state = 0;
647         if (clear & TIOCM_DTR)
648                 portdata->dtr_state = 0;
649         return option_send_setup(tty, port);
650 }
651
652 /* Write */
653 static int option_write(struct tty_struct *tty, struct usb_serial_port *port,
654                         const unsigned char *buf, int count)
655 {
656         struct option_port_private *portdata;
657         int i;
658         int left, todo;
659         struct urb *this_urb = NULL; /* spurious */
660         int err;
661
662         portdata = usb_get_serial_port_data(port);
663
664         dbg("%s: write (%d chars)", __func__, count);
665
666         i = 0;
667         left = count;
668         for (i = 0; left > 0 && i < N_OUT_URB; i++) {
669                 todo = left;
670                 if (todo > OUT_BUFLEN)
671                         todo = OUT_BUFLEN;
672
673                 this_urb = portdata->out_urbs[i];
674                 if (test_and_set_bit(i, &portdata->out_busy)) {
675                         if (time_before(jiffies,
676                                         portdata->tx_start_time[i] + 10 * HZ))
677                                 continue;
678                         usb_unlink_urb(this_urb);
679                         continue;
680                 }
681                 if (this_urb->status != 0)
682                         dbg("usb_write %p failed (err=%d)",
683                                 this_urb, this_urb->status);
684
685                 dbg("%s: endpoint %d buf %d", __func__,
686                         usb_pipeendpoint(this_urb->pipe), i);
687
688                 /* send the data */
689                 memcpy(this_urb->transfer_buffer, buf, todo);
690                 this_urb->transfer_buffer_length = todo;
691
692                 this_urb->dev = port->serial->dev;
693                 err = usb_submit_urb(this_urb, GFP_ATOMIC);
694                 if (err) {
695                         dbg("usb_submit_urb %p (write bulk) failed "
696                                 "(%d, has %d)", this_urb,
697                                 err, this_urb->status);
698                         clear_bit(i, &portdata->out_busy);
699                         continue;
700                 }
701                 portdata->tx_start_time[i] = jiffies;
702                 buf += todo;
703                 left -= todo;
704         }
705
706         count -= left;
707         dbg("%s: wrote (did %d)", __func__, count);
708         return count;
709 }
710
711 static void option_indat_callback(struct urb *urb)
712 {
713         int err;
714         int endpoint;
715         struct usb_serial_port *port;
716         struct tty_struct *tty;
717         unsigned char *data = urb->transfer_buffer;
718         int status = urb->status;
719
720         dbg("%s: %p", __func__, urb);
721
722         endpoint = usb_pipeendpoint(urb->pipe);
723         port =  urb->context;
724
725         if (status) {
726                 dbg("%s: nonzero status: %d on endpoint %02x.",
727                     __func__, status, endpoint);
728         } else {
729                 tty = tty_port_tty_get(&port->port);
730                 if (urb->actual_length) {
731                         tty_buffer_request_room(tty, urb->actual_length);
732                         tty_insert_flip_string(tty, data, urb->actual_length);
733                         tty_flip_buffer_push(tty);
734                 } else 
735                         dbg("%s: empty read urb received", __func__);
736                 tty_kref_put(tty);
737
738                 /* Resubmit urb so we continue receiving */
739                 if (port->port.count && status != -ESHUTDOWN) {
740                         err = usb_submit_urb(urb, GFP_ATOMIC);
741                         if (err)
742                                 printk(KERN_ERR "%s: resubmit read urb failed. "
743                                         "(%d)", __func__, err);
744                 }
745         }
746         return;
747 }
748
749 static void option_outdat_callback(struct urb *urb)
750 {
751         struct usb_serial_port *port;
752         struct option_port_private *portdata;
753         int i;
754
755         dbg("%s", __func__);
756
757         port =  urb->context;
758
759         usb_serial_port_softint(port);
760
761         portdata = usb_get_serial_port_data(port);
762         for (i = 0; i < N_OUT_URB; ++i) {
763                 if (portdata->out_urbs[i] == urb) {
764                         smp_mb__before_clear_bit();
765                         clear_bit(i, &portdata->out_busy);
766                         break;
767                 }
768         }
769 }
770
771 static void option_instat_callback(struct urb *urb)
772 {
773         int err;
774         int status = urb->status;
775         struct usb_serial_port *port =  urb->context;
776         struct option_port_private *portdata = usb_get_serial_port_data(port);
777         struct usb_serial *serial = port->serial;
778
779         dbg("%s", __func__);
780         dbg("%s: urb %p port %p has data %p", __func__, urb, port, portdata);
781
782         if (status == 0) {
783                 struct usb_ctrlrequest *req_pkt =
784                                 (struct usb_ctrlrequest *)urb->transfer_buffer;
785
786                 if (!req_pkt) {
787                         dbg("%s: NULL req_pkt\n", __func__);
788                         return;
789                 }
790                 if ((req_pkt->bRequestType == 0xA1) &&
791                                 (req_pkt->bRequest == 0x20)) {
792                         int old_dcd_state;
793                         unsigned char signals = *((unsigned char *)
794                                         urb->transfer_buffer +
795                                         sizeof(struct usb_ctrlrequest));
796
797                         dbg("%s: signal x%x", __func__, signals);
798
799                         old_dcd_state = portdata->dcd_state;
800                         portdata->cts_state = 1;
801                         portdata->dcd_state = ((signals & 0x01) ? 1 : 0);
802                         portdata->dsr_state = ((signals & 0x02) ? 1 : 0);
803                         portdata->ri_state = ((signals & 0x08) ? 1 : 0);
804
805                         if (old_dcd_state && !portdata->dcd_state) {
806                                 struct tty_struct *tty =
807                                                 tty_port_tty_get(&port->port);
808                                 if (tty && !C_CLOCAL(tty))
809                                         tty_hangup(tty);
810                                 tty_kref_put(tty);
811                         }
812                 } else {
813                         dbg("%s: type %x req %x", __func__,
814                                 req_pkt->bRequestType, req_pkt->bRequest);
815                 }
816         } else
817                 dbg("%s: error %d", __func__, status);
818
819         /* Resubmit urb so we continue receiving IRQ data */
820         if (status != -ESHUTDOWN) {
821                 urb->dev = serial->dev;
822                 err = usb_submit_urb(urb, GFP_ATOMIC);
823                 if (err)
824                         dbg("%s: resubmit intr urb failed. (%d)",
825                                 __func__, err);
826         }
827 }
828
829 static int option_write_room(struct tty_struct *tty)
830 {
831         struct usb_serial_port *port = tty->driver_data;
832         struct option_port_private *portdata;
833         int i;
834         int data_len = 0;
835         struct urb *this_urb;
836
837         portdata = usb_get_serial_port_data(port);
838
839
840         for (i = 0; i < N_OUT_URB; i++) {
841                 this_urb = portdata->out_urbs[i];
842                 if (this_urb && !test_bit(i, &portdata->out_busy))
843                         data_len += OUT_BUFLEN;
844         }
845
846         dbg("%s: %d", __func__, data_len);
847         return data_len;
848 }
849
850 static int option_chars_in_buffer(struct tty_struct *tty)
851 {
852         struct usb_serial_port *port = tty->driver_data;
853         struct option_port_private *portdata;
854         int i;
855         int data_len = 0;
856         struct urb *this_urb;
857
858         portdata = usb_get_serial_port_data(port);
859
860         for (i = 0; i < N_OUT_URB; i++) {
861                 this_urb = portdata->out_urbs[i];
862                 /* FIXME: This locking is insufficient as this_urb may
863                    go unused during the test */
864                 if (this_urb && test_bit(i, &portdata->out_busy))
865                         data_len += this_urb->transfer_buffer_length;
866         }
867         dbg("%s: %d", __func__, data_len);
868         return data_len;
869 }
870
871 static int option_open(struct tty_struct *tty,
872                         struct usb_serial_port *port, struct file *filp)
873 {
874         struct option_port_private *portdata;
875         struct usb_serial *serial = port->serial;
876         int i, err;
877         struct urb *urb;
878
879         portdata = usb_get_serial_port_data(port);
880
881         dbg("%s", __func__);
882
883         /* Set some sane defaults */
884         portdata->rts_state = 1;
885         portdata->dtr_state = 1;
886
887         /* Reset low level data toggle and start reading from endpoints */
888         for (i = 0; i < N_IN_URB; i++) {
889                 urb = portdata->in_urbs[i];
890                 if (!urb)
891                         continue;
892                 if (urb->dev != serial->dev) {
893                         dbg("%s: dev %p != %p", __func__,
894                                 urb->dev, serial->dev);
895                         continue;
896                 }
897
898                 /*
899                  * make sure endpoint data toggle is synchronized with the
900                  * device
901                  */
902                 usb_clear_halt(urb->dev, urb->pipe);
903
904                 err = usb_submit_urb(urb, GFP_KERNEL);
905                 if (err) {
906                         dbg("%s: submit urb %d failed (%d) %d",
907                                 __func__, i, err,
908                                 urb->transfer_buffer_length);
909                 }
910         }
911
912         /* Reset low level data toggle on out endpoints */
913         for (i = 0; i < N_OUT_URB; i++) {
914                 urb = portdata->out_urbs[i];
915                 if (!urb)
916                         continue;
917                 urb->dev = serial->dev;
918                 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
919                                 usb_pipeout(urb->pipe), 0); */
920         }
921
922         if (tty)
923                 tty->low_latency = 1;
924
925         option_send_setup(tty, port);
926
927         return 0;
928 }
929
930 static void option_close(struct tty_struct *tty,
931                         struct usb_serial_port *port, struct file *filp)
932 {
933         int i;
934         struct usb_serial *serial = port->serial;
935         struct option_port_private *portdata;
936
937         dbg("%s", __func__);
938         portdata = usb_get_serial_port_data(port);
939
940         portdata->rts_state = 0;
941         portdata->dtr_state = 0;
942
943         if (serial->dev) {
944                 mutex_lock(&serial->disc_mutex);
945                 if (!serial->disconnected)
946                         option_send_setup(tty, port);
947                 mutex_unlock(&serial->disc_mutex);
948
949                 /* Stop reading/writing urbs */
950                 for (i = 0; i < N_IN_URB; i++)
951                         usb_kill_urb(portdata->in_urbs[i]);
952                 for (i = 0; i < N_OUT_URB; i++)
953                         usb_kill_urb(portdata->out_urbs[i]);
954         }
955         tty_port_tty_set(&port->port, NULL);
956 }
957
958 /* Helper functions used by option_setup_urbs */
959 static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint,
960                 int dir, void *ctx, char *buf, int len,
961                 void (*callback)(struct urb *))
962 {
963         struct urb *urb;
964
965         if (endpoint == -1)
966                 return NULL;            /* endpoint not needed */
967
968         urb = usb_alloc_urb(0, GFP_KERNEL);             /* No ISO */
969         if (urb == NULL) {
970                 dbg("%s: alloc for endpoint %d failed.", __func__, endpoint);
971                 return NULL;
972         }
973
974                 /* Fill URB using supplied data. */
975         usb_fill_bulk_urb(urb, serial->dev,
976                       usb_sndbulkpipe(serial->dev, endpoint) | dir,
977                       buf, len, callback, ctx);
978
979         return urb;
980 }
981
982 /* Setup urbs */
983 static void option_setup_urbs(struct usb_serial *serial)
984 {
985         int i, j;
986         struct usb_serial_port *port;
987         struct option_port_private *portdata;
988
989         dbg("%s", __func__);
990
991         for (i = 0; i < serial->num_ports; i++) {
992                 port = serial->port[i];
993                 portdata = usb_get_serial_port_data(port);
994
995                 /* Do indat endpoints first */
996                 for (j = 0; j < N_IN_URB; ++j) {
997                         portdata->in_urbs[j] = option_setup_urb(serial,
998                                         port->bulk_in_endpointAddress,
999                                         USB_DIR_IN, port,
1000                                         portdata->in_buffer[j],
1001                                         IN_BUFLEN, option_indat_callback);
1002                 }
1003
1004                 /* outdat endpoints */
1005                 for (j = 0; j < N_OUT_URB; ++j) {
1006                         portdata->out_urbs[j] = option_setup_urb(serial,
1007                                         port->bulk_out_endpointAddress,
1008                                         USB_DIR_OUT, port,
1009                                         portdata->out_buffer[j],
1010                                         OUT_BUFLEN, option_outdat_callback);
1011                 }
1012         }
1013 }
1014
1015
1016 /** send RTS/DTR state to the port.
1017  *
1018  * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN
1019  * CDC.
1020 */
1021 static int option_send_setup(struct tty_struct *tty,
1022                                                 struct usb_serial_port *port)
1023 {
1024         struct usb_serial *serial = port->serial;
1025         struct option_port_private *portdata;
1026         int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
1027         dbg("%s", __func__);
1028
1029         portdata = usb_get_serial_port_data(port);
1030
1031         if (tty) {
1032                 int val = 0;
1033                 if (portdata->dtr_state)
1034                         val |= 0x01;
1035                 if (portdata->rts_state)
1036                         val |= 0x02;
1037
1038                 return usb_control_msg(serial->dev,
1039                         usb_rcvctrlpipe(serial->dev, 0),
1040                         0x22, 0x21, val, ifNum, NULL, 0, USB_CTRL_SET_TIMEOUT);
1041         }
1042         return 0;
1043 }
1044
1045 static int option_startup(struct usb_serial *serial)
1046 {
1047         int i, j, err;
1048         struct usb_serial_port *port;
1049         struct option_port_private *portdata;
1050         u8 *buffer;
1051
1052         dbg("%s", __func__);
1053
1054         /* Now setup per port private data */
1055         for (i = 0; i < serial->num_ports; i++) {
1056                 port = serial->port[i];
1057                 portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
1058                 if (!portdata) {
1059                         dbg("%s: kmalloc for option_port_private (%d) failed!.",
1060                                         __func__, i);
1061                         return 1;
1062                 }
1063
1064                 for (j = 0; j < N_IN_URB; j++) {
1065                         buffer = (u8 *)__get_free_page(GFP_KERNEL);
1066                         if (!buffer)
1067                                 goto bail_out_error;
1068                         portdata->in_buffer[j] = buffer;
1069                 }
1070
1071                 for (j = 0; j < N_OUT_URB; j++) {
1072                         buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL);
1073                         if (!buffer)
1074                                 goto bail_out_error2;
1075                         portdata->out_buffer[j] = buffer;
1076                 }
1077
1078                 usb_set_serial_port_data(port, portdata);
1079
1080                 if (!port->interrupt_in_urb)
1081                         continue;
1082                 err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
1083                 if (err)
1084                         dbg("%s: submit irq_in urb failed %d",
1085                                 __func__, err);
1086         }
1087         option_setup_urbs(serial);
1088         return 0;
1089
1090 bail_out_error2:
1091         for (j = 0; j < N_OUT_URB; j++)
1092                 kfree(portdata->out_buffer[j]);
1093 bail_out_error:
1094         for (j = 0; j < N_IN_URB; j++)
1095                 if (portdata->in_buffer[j])
1096                         free_page((unsigned long)portdata->in_buffer[j]);
1097         kfree(portdata);
1098         return 1;
1099 }
1100
1101 static void option_shutdown(struct usb_serial *serial)
1102 {
1103         int i, j;
1104         struct usb_serial_port *port;
1105         struct option_port_private *portdata;
1106
1107         dbg("%s", __func__);
1108
1109         /* Stop reading/writing urbs */
1110         for (i = 0; i < serial->num_ports; ++i) {
1111                 port = serial->port[i];
1112                 portdata = usb_get_serial_port_data(port);
1113                 for (j = 0; j < N_IN_URB; j++)
1114                         usb_kill_urb(portdata->in_urbs[j]);
1115                 for (j = 0; j < N_OUT_URB; j++)
1116                         usb_kill_urb(portdata->out_urbs[j]);
1117         }
1118
1119         /* Now free them */
1120         for (i = 0; i < serial->num_ports; ++i) {
1121                 port = serial->port[i];
1122                 portdata = usb_get_serial_port_data(port);
1123
1124                 for (j = 0; j < N_IN_URB; j++) {
1125                         if (portdata->in_urbs[j]) {
1126                                 usb_free_urb(portdata->in_urbs[j]);
1127                                 free_page((unsigned long)
1128                                         portdata->in_buffer[j]);
1129                                 portdata->in_urbs[j] = NULL;
1130                         }
1131                 }
1132                 for (j = 0; j < N_OUT_URB; j++) {
1133                         if (portdata->out_urbs[j]) {
1134                                 usb_free_urb(portdata->out_urbs[j]);
1135                                 kfree(portdata->out_buffer[j]);
1136                                 portdata->out_urbs[j] = NULL;
1137                         }
1138                 }
1139         }
1140
1141         /* Now free per port private data */
1142         for (i = 0; i < serial->num_ports; i++) {
1143                 port = serial->port[i];
1144                 kfree(usb_get_serial_port_data(port));
1145         }
1146 }
1147
1148 MODULE_AUTHOR(DRIVER_AUTHOR);
1149 MODULE_DESCRIPTION(DRIVER_DESC);
1150 MODULE_VERSION(DRIVER_VERSION);
1151 MODULE_LICENSE("GPL");
1152
1153 module_param(debug, bool, S_IRUGO | S_IWUSR);
1154 MODULE_PARM_DESC(debug, "Debug messages");