xref: /linux/drivers/usb/serial/option.c (revision 98366c20a275e957416e9516db5dcb7195b4e101)
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.1"
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 usb_serial_port *port, struct file *filp);
47 static void option_close(struct usb_serial_port *port, struct file *filp);
48 static int  option_startup(struct usb_serial *serial);
49 static void option_shutdown(struct usb_serial *serial);
50 static void option_rx_throttle(struct usb_serial_port *port);
51 static void option_rx_unthrottle(struct usb_serial_port *port);
52 static int  option_write_room(struct usb_serial_port *port);
53 
54 static void option_instat_callback(struct urb *urb);
55 
56 static int option_write(struct usb_serial_port *port,
57 			const unsigned char *buf, int count);
58 
59 static int  option_chars_in_buffer(struct usb_serial_port *port);
60 static int  option_ioctl(struct usb_serial_port *port, struct file *file,
61 			unsigned int cmd, unsigned long arg);
62 static void option_set_termios(struct usb_serial_port *port,
63 				struct ktermios *old);
64 static void option_break_ctl(struct usb_serial_port *port, int break_state);
65 static int  option_tiocmget(struct usb_serial_port *port, struct file *file);
66 static int  option_tiocmset(struct usb_serial_port *port, struct file *file,
67 				unsigned int set, unsigned int clear);
68 static int  option_send_setup(struct usb_serial_port *port);
69 
70 /* Vendor and product IDs */
71 #define OPTION_VENDOR_ID			0x0AF0
72 #define OPTION_PRODUCT_COLT			0x5000
73 #define OPTION_PRODUCT_RICOLA			0x6000
74 #define OPTION_PRODUCT_RICOLA_LIGHT		0x6100
75 #define OPTION_PRODUCT_RICOLA_QUAD		0x6200
76 #define OPTION_PRODUCT_RICOLA_QUAD_LIGHT	0x6300
77 #define OPTION_PRODUCT_RICOLA_NDIS		0x6050
78 #define OPTION_PRODUCT_RICOLA_NDIS_LIGHT	0x6150
79 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD		0x6250
80 #define OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT	0x6350
81 #define OPTION_PRODUCT_COBRA			0x6500
82 #define OPTION_PRODUCT_COBRA_BUS		0x6501
83 #define OPTION_PRODUCT_VIPER			0x6600
84 #define OPTION_PRODUCT_VIPER_BUS		0x6601
85 #define OPTION_PRODUCT_GT_MAX_READY		0x6701
86 #define OPTION_PRODUCT_GT_MAX			0x6711
87 #define OPTION_PRODUCT_FUJI_MODEM_LIGHT		0x6721
88 #define OPTION_PRODUCT_FUJI_MODEM_GT		0x6741
89 #define OPTION_PRODUCT_FUJI_MODEM_EX		0x6761
90 #define OPTION_PRODUCT_FUJI_NETWORK_LIGHT	0x6731
91 #define OPTION_PRODUCT_FUJI_NETWORK_GT		0x6751
92 #define OPTION_PRODUCT_FUJI_NETWORK_EX		0x6771
93 #define OPTION_PRODUCT_KOI_MODEM		0x6800
94 #define OPTION_PRODUCT_KOI_NETWORK		0x6811
95 #define OPTION_PRODUCT_SCORPION_MODEM		0x6901
96 #define OPTION_PRODUCT_SCORPION_NETWORK		0x6911
97 #define OPTION_PRODUCT_ETNA_MODEM		0x7001
98 #define OPTION_PRODUCT_ETNA_NETWORK		0x7011
99 #define OPTION_PRODUCT_ETNA_MODEM_LITE		0x7021
100 #define OPTION_PRODUCT_ETNA_MODEM_GT		0x7041
101 #define OPTION_PRODUCT_ETNA_MODEM_EX		0x7061
102 #define OPTION_PRODUCT_ETNA_NETWORK_LITE	0x7031
103 #define OPTION_PRODUCT_ETNA_NETWORK_GT		0x7051
104 #define OPTION_PRODUCT_ETNA_NETWORK_EX		0x7071
105 #define OPTION_PRODUCT_ETNA_KOI_MODEM		0x7100
106 #define OPTION_PRODUCT_ETNA_KOI_NETWORK		0x7111
107 
108 #define HUAWEI_VENDOR_ID			0x12D1
109 #define HUAWEI_PRODUCT_E600			0x1001
110 #define HUAWEI_PRODUCT_E220			0x1003
111 #define HUAWEI_PRODUCT_E220BIS			0x1004
112 
113 #define NOVATELWIRELESS_VENDOR_ID		0x1410
114 #define DELL_VENDOR_ID				0x413C
115 
116 #define ANYDATA_VENDOR_ID			0x16d5
117 #define ANYDATA_PRODUCT_ADU_E100A		0x6501
118 #define ANYDATA_PRODUCT_ADU_500A		0x6502
119 
120 #define BANDRICH_VENDOR_ID			0x1A8D
121 #define BANDRICH_PRODUCT_C100_1			0x1002
122 #define BANDRICH_PRODUCT_C100_2			0x1003
123 
124 static struct usb_device_id option_ids[] = {
125 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
126 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
127 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) },
128 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) },
129 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) },
130 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS) },
131 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_LIGHT) },
132 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD) },
133 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT) },
134 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) },
135 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA_BUS) },
136 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER) },
137 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER_BUS) },
138 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX_READY) },
139 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX) },
140 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_LIGHT) },
141 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_GT) },
142 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_EX) },
143 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_LIGHT) },
144 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_GT) },
145 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_EX) },
146 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_MODEM) },
147 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_NETWORK) },
148 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_MODEM) },
149 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_NETWORK) },
150 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM) },
151 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK) },
152 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_LITE) },
153 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
154 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
155 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_LITE) },
156 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_GT) },
157 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) },
158 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
159 	{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) },
160 	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) },
161 	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220) },
162 	{ USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS) },
163 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1100) }, /* Novatel Merlin XS620/S640 */
164 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1110) }, /* Novatel Merlin S620 */
165 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1120) }, /* Novatel Merlin EX720 */
166 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1130) }, /* Novatel Merlin S720 */
167 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1400) }, /* Novatel U730 */
168 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1410) }, /* Novatel U740 */
169 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1420) }, /* Novatel EU870 */
170 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x1430) }, /* Novatel Merlin XU870 HSDPA/3G */
171 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2100) }, /* Novatel EV620 CDMA/EV-DO */
172 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2110) }, /* Novatel Merlin ES620 / Merlin ES720 / Ovation U720 */
173 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2130) }, /* Novatel Merlin ES620 SM Bus */
174 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x2410) }, /* Novatel EU740 */
175 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4100) }, /* Novatel U727 */
176 	{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, 0x4400) }, /* Novatel MC950 */
177 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8114) },	/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */
178 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8115) },	/* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
179 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8116) },	/* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */
180 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8117) },	/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */
181 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8118) },	/* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */
182 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8128) },	/* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */
183 	{ USB_DEVICE(DELL_VENDOR_ID, 0x8137) },	/* Dell Wireless HSDPA 5520 */
184 	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) },
185 	{ USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) },
186 	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) },
187 	{ USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) },
188 	{ } /* Terminating entry */
189 };
190 MODULE_DEVICE_TABLE(usb, option_ids);
191 
192 static struct usb_driver option_driver = {
193 	.name       = "option",
194 	.probe      = usb_serial_probe,
195 	.disconnect = usb_serial_disconnect,
196 	.id_table   = option_ids,
197 	.no_dynamic_id = 	1,
198 };
199 
200 /* The card has three separate interfaces, which the serial driver
201  * recognizes separately, thus num_port=1.
202  */
203 
204 static struct usb_serial_driver option_1port_device = {
205 	.driver = {
206 		.owner =	THIS_MODULE,
207 		.name =		"option1",
208 	},
209 	.description       = "GSM modem (1-port)",
210 	.usb_driver        = &option_driver,
211 	.id_table          = option_ids,
212 	.num_interrupt_in  = NUM_DONT_CARE,
213 	.num_bulk_in       = NUM_DONT_CARE,
214 	.num_bulk_out      = NUM_DONT_CARE,
215 	.num_ports         = 1,
216 	.open              = option_open,
217 	.close             = option_close,
218 	.write             = option_write,
219 	.write_room        = option_write_room,
220 	.chars_in_buffer   = option_chars_in_buffer,
221 	.throttle          = option_rx_throttle,
222 	.unthrottle        = option_rx_unthrottle,
223 	.ioctl             = option_ioctl,
224 	.set_termios       = option_set_termios,
225 	.break_ctl         = option_break_ctl,
226 	.tiocmget          = option_tiocmget,
227 	.tiocmset          = option_tiocmset,
228 	.attach            = option_startup,
229 	.shutdown          = option_shutdown,
230 	.read_int_callback = option_instat_callback,
231 };
232 
233 #ifdef CONFIG_USB_DEBUG
234 static int debug;
235 #else
236 #define debug 0
237 #endif
238 
239 /* per port private data */
240 
241 #define N_IN_URB 4
242 #define N_OUT_URB 1
243 #define IN_BUFLEN 4096
244 #define OUT_BUFLEN 128
245 
246 struct option_port_private {
247 	/* Input endpoints and buffer for this port */
248 	struct urb *in_urbs[N_IN_URB];
249 	char in_buffer[N_IN_URB][IN_BUFLEN];
250 	/* Output endpoints and buffer for this port */
251 	struct urb *out_urbs[N_OUT_URB];
252 	char out_buffer[N_OUT_URB][OUT_BUFLEN];
253 	unsigned long out_busy;		/* Bit vector of URBs in use */
254 
255 	/* Settings for the port */
256 	int rts_state;	/* Handshaking pins (outputs) */
257 	int dtr_state;
258 	int cts_state;	/* Handshaking pins (inputs) */
259 	int dsr_state;
260 	int dcd_state;
261 	int ri_state;
262 
263 	unsigned long tx_start_time[N_OUT_URB];
264 };
265 
266 /* Functions used by new usb-serial code. */
267 static int __init option_init(void)
268 {
269 	int retval;
270 	retval = usb_serial_register(&option_1port_device);
271 	if (retval)
272 		goto failed_1port_device_register;
273 	retval = usb_register(&option_driver);
274 	if (retval)
275 		goto failed_driver_register;
276 
277 	info(DRIVER_DESC ": " DRIVER_VERSION);
278 
279 	return 0;
280 
281 failed_driver_register:
282 	usb_serial_deregister (&option_1port_device);
283 failed_1port_device_register:
284 	return retval;
285 }
286 
287 static void __exit option_exit(void)
288 {
289 	usb_deregister (&option_driver);
290 	usb_serial_deregister (&option_1port_device);
291 }
292 
293 module_init(option_init);
294 module_exit(option_exit);
295 
296 static void option_rx_throttle(struct usb_serial_port *port)
297 {
298 	dbg("%s", __FUNCTION__);
299 }
300 
301 static void option_rx_unthrottle(struct usb_serial_port *port)
302 {
303 	dbg("%s", __FUNCTION__);
304 }
305 
306 static void option_break_ctl(struct usb_serial_port *port, int break_state)
307 {
308 	/* Unfortunately, I don't know how to send a break */
309 	dbg("%s", __FUNCTION__);
310 }
311 
312 static void option_set_termios(struct usb_serial_port *port,
313 			struct ktermios *old_termios)
314 {
315 	dbg("%s", __FUNCTION__);
316 	/* Doesn't support option setting */
317 	tty_termios_copy_hw(port->tty->termios, old_termios);
318 	option_send_setup(port);
319 }
320 
321 static int option_tiocmget(struct usb_serial_port *port, struct file *file)
322 {
323 	unsigned int value;
324 	struct option_port_private *portdata;
325 
326 	portdata = usb_get_serial_port_data(port);
327 
328 	value = ((portdata->rts_state) ? TIOCM_RTS : 0) |
329 		((portdata->dtr_state) ? TIOCM_DTR : 0) |
330 		((portdata->cts_state) ? TIOCM_CTS : 0) |
331 		((portdata->dsr_state) ? TIOCM_DSR : 0) |
332 		((portdata->dcd_state) ? TIOCM_CAR : 0) |
333 		((portdata->ri_state) ? TIOCM_RNG : 0);
334 
335 	return value;
336 }
337 
338 static int option_tiocmset(struct usb_serial_port *port, struct file *file,
339 			unsigned int set, unsigned int clear)
340 {
341 	struct option_port_private *portdata;
342 
343 	portdata = usb_get_serial_port_data(port);
344 
345 	if (set & TIOCM_RTS)
346 		portdata->rts_state = 1;
347 	if (set & TIOCM_DTR)
348 		portdata->dtr_state = 1;
349 
350 	if (clear & TIOCM_RTS)
351 		portdata->rts_state = 0;
352 	if (clear & TIOCM_DTR)
353 		portdata->dtr_state = 0;
354 	return option_send_setup(port);
355 }
356 
357 static int option_ioctl(struct usb_serial_port *port, struct file *file,
358 			unsigned int cmd, unsigned long arg)
359 {
360 	return -ENOIOCTLCMD;
361 }
362 
363 /* Write */
364 static int option_write(struct usb_serial_port *port,
365 			const unsigned char *buf, int count)
366 {
367 	struct option_port_private *portdata;
368 	int i;
369 	int left, todo;
370 	struct urb *this_urb = NULL; /* spurious */
371 	int err;
372 
373 	portdata = usb_get_serial_port_data(port);
374 
375 	dbg("%s: write (%d chars)", __FUNCTION__, count);
376 
377 	i = 0;
378 	left = count;
379 	for (i=0; left > 0 && i < N_OUT_URB; i++) {
380 		todo = left;
381 		if (todo > OUT_BUFLEN)
382 			todo = OUT_BUFLEN;
383 
384 		this_urb = portdata->out_urbs[i];
385 		if (test_and_set_bit(i, &portdata->out_busy)) {
386 			if (time_before(jiffies,
387 					portdata->tx_start_time[i] + 10 * HZ))
388 				continue;
389 			usb_unlink_urb(this_urb);
390 			continue;
391 		}
392 		if (this_urb->status != 0)
393 			dbg("usb_write %p failed (err=%d)",
394 				this_urb, this_urb->status);
395 
396 		dbg("%s: endpoint %d buf %d", __FUNCTION__,
397 			usb_pipeendpoint(this_urb->pipe), i);
398 
399 		/* send the data */
400 		memcpy (this_urb->transfer_buffer, buf, todo);
401 		this_urb->transfer_buffer_length = todo;
402 
403 		this_urb->dev = port->serial->dev;
404 		err = usb_submit_urb(this_urb, GFP_ATOMIC);
405 		if (err) {
406 			dbg("usb_submit_urb %p (write bulk) failed "
407 				"(%d, has %d)", this_urb,
408 				err, this_urb->status);
409 			clear_bit(i, &portdata->out_busy);
410 			continue;
411 		}
412 		portdata->tx_start_time[i] = jiffies;
413 		buf += todo;
414 		left -= todo;
415 	}
416 
417 	count -= left;
418 	dbg("%s: wrote (did %d)", __FUNCTION__, count);
419 	return count;
420 }
421 
422 static void option_indat_callback(struct urb *urb)
423 {
424 	int err;
425 	int endpoint;
426 	struct usb_serial_port *port;
427 	struct tty_struct *tty;
428 	unsigned char *data = urb->transfer_buffer;
429 	int status = urb->status;
430 
431 	dbg("%s: %p", __FUNCTION__, urb);
432 
433 	endpoint = usb_pipeendpoint(urb->pipe);
434 	port = (struct usb_serial_port *) urb->context;
435 
436 	if (status) {
437 		dbg("%s: nonzero status: %d on endpoint %02x.",
438 		    __FUNCTION__, status, endpoint);
439 	} else {
440 		tty = port->tty;
441 		if (urb->actual_length) {
442 			tty_buffer_request_room(tty, urb->actual_length);
443 			tty_insert_flip_string(tty, data, urb->actual_length);
444 			tty_flip_buffer_push(tty);
445 		} else {
446 			dbg("%s: empty read urb received", __FUNCTION__);
447 		}
448 
449 		/* Resubmit urb so we continue receiving */
450 		if (port->open_count && status != -ESHUTDOWN) {
451 			err = usb_submit_urb(urb, GFP_ATOMIC);
452 			if (err)
453 				printk(KERN_ERR "%s: resubmit read urb failed. "
454 					"(%d)", __FUNCTION__, err);
455 		}
456 	}
457 	return;
458 }
459 
460 static void option_outdat_callback(struct urb *urb)
461 {
462 	struct usb_serial_port *port;
463 	struct option_port_private *portdata;
464 	int i;
465 
466 	dbg("%s", __FUNCTION__);
467 
468 	port = (struct usb_serial_port *) urb->context;
469 
470 	usb_serial_port_softint(port);
471 
472 	portdata = usb_get_serial_port_data(port);
473 	for (i = 0; i < N_OUT_URB; ++i) {
474 		if (portdata->out_urbs[i] == urb) {
475 			smp_mb__before_clear_bit();
476 			clear_bit(i, &portdata->out_busy);
477 			break;
478 		}
479 	}
480 }
481 
482 static void option_instat_callback(struct urb *urb)
483 {
484 	int err;
485 	int status = urb->status;
486 	struct usb_serial_port *port = (struct usb_serial_port *) urb->context;
487 	struct option_port_private *portdata = usb_get_serial_port_data(port);
488 	struct usb_serial *serial = port->serial;
489 
490 	dbg("%s", __FUNCTION__);
491 	dbg("%s: urb %p port %p has data %p", __FUNCTION__,urb,port,portdata);
492 
493 	if (status == 0) {
494 		struct usb_ctrlrequest *req_pkt =
495 				(struct usb_ctrlrequest *)urb->transfer_buffer;
496 
497 		if (!req_pkt) {
498 			dbg("%s: NULL req_pkt\n", __FUNCTION__);
499 			return;
500 		}
501 		if ((req_pkt->bRequestType == 0xA1) &&
502 				(req_pkt->bRequest == 0x20)) {
503 			int old_dcd_state;
504 			unsigned char signals = *((unsigned char *)
505 					urb->transfer_buffer +
506 					sizeof(struct usb_ctrlrequest));
507 
508 			dbg("%s: signal x%x", __FUNCTION__, signals);
509 
510 			old_dcd_state = portdata->dcd_state;
511 			portdata->cts_state = 1;
512 			portdata->dcd_state = ((signals & 0x01) ? 1 : 0);
513 			portdata->dsr_state = ((signals & 0x02) ? 1 : 0);
514 			portdata->ri_state = ((signals & 0x08) ? 1 : 0);
515 
516 			if (port->tty && !C_CLOCAL(port->tty) &&
517 					old_dcd_state && !portdata->dcd_state)
518 				tty_hangup(port->tty);
519 		} else {
520 			dbg("%s: type %x req %x", __FUNCTION__,
521 				req_pkt->bRequestType,req_pkt->bRequest);
522 		}
523 	} else
524 		dbg("%s: error %d", __FUNCTION__, status);
525 
526 	/* Resubmit urb so we continue receiving IRQ data */
527 	if (status != -ESHUTDOWN) {
528 		urb->dev = serial->dev;
529 		err = usb_submit_urb(urb, GFP_ATOMIC);
530 		if (err)
531 			dbg("%s: resubmit intr urb failed. (%d)",
532 				__FUNCTION__, err);
533 	}
534 }
535 
536 static int option_write_room(struct usb_serial_port *port)
537 {
538 	struct option_port_private *portdata;
539 	int i;
540 	int data_len = 0;
541 	struct urb *this_urb;
542 
543 	portdata = usb_get_serial_port_data(port);
544 
545 	for (i=0; i < N_OUT_URB; i++) {
546 		this_urb = portdata->out_urbs[i];
547 		if (this_urb && !test_bit(i, &portdata->out_busy))
548 			data_len += OUT_BUFLEN;
549 	}
550 
551 	dbg("%s: %d", __FUNCTION__, data_len);
552 	return data_len;
553 }
554 
555 static int option_chars_in_buffer(struct usb_serial_port *port)
556 {
557 	struct option_port_private *portdata;
558 	int i;
559 	int data_len = 0;
560 	struct urb *this_urb;
561 
562 	portdata = usb_get_serial_port_data(port);
563 
564 	for (i=0; i < N_OUT_URB; i++) {
565 		this_urb = portdata->out_urbs[i];
566 		if (this_urb && test_bit(i, &portdata->out_busy))
567 			data_len += this_urb->transfer_buffer_length;
568 	}
569 	dbg("%s: %d", __FUNCTION__, data_len);
570 	return data_len;
571 }
572 
573 static int option_open(struct usb_serial_port *port, struct file *filp)
574 {
575 	struct option_port_private *portdata;
576 	struct usb_serial *serial = port->serial;
577 	int i, err;
578 	struct urb *urb;
579 
580 	portdata = usb_get_serial_port_data(port);
581 
582 	dbg("%s", __FUNCTION__);
583 
584 	/* Set some sane defaults */
585 	portdata->rts_state = 1;
586 	portdata->dtr_state = 1;
587 
588 	/* Reset low level data toggle and start reading from endpoints */
589 	for (i = 0; i < N_IN_URB; i++) {
590 		urb = portdata->in_urbs[i];
591 		if (! urb)
592 			continue;
593 		if (urb->dev != serial->dev) {
594 			dbg("%s: dev %p != %p", __FUNCTION__,
595 				urb->dev, serial->dev);
596 			continue;
597 		}
598 
599 		/*
600 		 * make sure endpoint data toggle is synchronized with the
601 		 * device
602 		 */
603 		usb_clear_halt(urb->dev, urb->pipe);
604 
605 		err = usb_submit_urb(urb, GFP_KERNEL);
606 		if (err) {
607 			dbg("%s: submit urb %d failed (%d) %d",
608 				__FUNCTION__, i, err,
609 				urb->transfer_buffer_length);
610 		}
611 	}
612 
613 	/* Reset low level data toggle on out endpoints */
614 	for (i = 0; i < N_OUT_URB; i++) {
615 		urb = portdata->out_urbs[i];
616 		if (! urb)
617 			continue;
618 		urb->dev = serial->dev;
619 		/* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
620 				usb_pipeout(urb->pipe), 0); */
621 	}
622 
623 	port->tty->low_latency = 1;
624 
625 	option_send_setup(port);
626 
627 	return (0);
628 }
629 
630 static void option_close(struct usb_serial_port *port, struct file *filp)
631 {
632 	int i;
633 	struct usb_serial *serial = port->serial;
634 	struct option_port_private *portdata;
635 
636 	dbg("%s", __FUNCTION__);
637 	portdata = usb_get_serial_port_data(port);
638 
639 	portdata->rts_state = 0;
640 	portdata->dtr_state = 0;
641 
642 	if (serial->dev) {
643 		option_send_setup(port);
644 
645 		/* Stop reading/writing urbs */
646 		for (i = 0; i < N_IN_URB; i++)
647 			usb_kill_urb(portdata->in_urbs[i]);
648 		for (i = 0; i < N_OUT_URB; i++)
649 			usb_kill_urb(portdata->out_urbs[i]);
650 	}
651 	port->tty = NULL;
652 }
653 
654 /* Helper functions used by option_setup_urbs */
655 static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint,
656 		int dir, void *ctx, char *buf, int len,
657 		void (*callback)(struct urb *))
658 {
659 	struct urb *urb;
660 
661 	if (endpoint == -1)
662 		return NULL;		/* endpoint not needed */
663 
664 	urb = usb_alloc_urb(0, GFP_KERNEL);		/* No ISO */
665 	if (urb == NULL) {
666 		dbg("%s: alloc for endpoint %d failed.", __FUNCTION__, endpoint);
667 		return NULL;
668 	}
669 
670 		/* Fill URB using supplied data. */
671 	usb_fill_bulk_urb(urb, serial->dev,
672 		      usb_sndbulkpipe(serial->dev, endpoint) | dir,
673 		      buf, len, callback, ctx);
674 
675 	return urb;
676 }
677 
678 /* Setup urbs */
679 static void option_setup_urbs(struct usb_serial *serial)
680 {
681 	int i,j;
682 	struct usb_serial_port *port;
683 	struct option_port_private *portdata;
684 
685 	dbg("%s", __FUNCTION__);
686 
687 	for (i = 0; i < serial->num_ports; i++) {
688 		port = serial->port[i];
689 		portdata = usb_get_serial_port_data(port);
690 
691 	/* Do indat endpoints first */
692 		for (j = 0; j < N_IN_URB; ++j) {
693 			portdata->in_urbs[j] = option_setup_urb (serial,
694                   	port->bulk_in_endpointAddress, USB_DIR_IN, port,
695                   	portdata->in_buffer[j], IN_BUFLEN, option_indat_callback);
696 		}
697 
698 		/* outdat endpoints */
699 		for (j = 0; j < N_OUT_URB; ++j) {
700 			portdata->out_urbs[j] = option_setup_urb (serial,
701                   	port->bulk_out_endpointAddress, USB_DIR_OUT, port,
702                   	portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback);
703 		}
704 	}
705 }
706 
707 static int option_send_setup(struct usb_serial_port *port)
708 {
709 	struct usb_serial *serial = port->serial;
710 	struct option_port_private *portdata;
711 
712 	dbg("%s", __FUNCTION__);
713 
714 	if (port->number != 0)
715 		return 0;
716 
717 	portdata = usb_get_serial_port_data(port);
718 
719 	if (port->tty) {
720 		int val = 0;
721 		if (portdata->dtr_state)
722 			val |= 0x01;
723 		if (portdata->rts_state)
724 			val |= 0x02;
725 
726 		return usb_control_msg(serial->dev,
727 				usb_rcvctrlpipe(serial->dev, 0),
728 				0x22,0x21,val,0,NULL,0,USB_CTRL_SET_TIMEOUT);
729 	}
730 
731 	return 0;
732 }
733 
734 static int option_startup(struct usb_serial *serial)
735 {
736 	int i, err;
737 	struct usb_serial_port *port;
738 	struct option_port_private *portdata;
739 
740 	dbg("%s", __FUNCTION__);
741 
742 	/* Now setup per port private data */
743 	for (i = 0; i < serial->num_ports; i++) {
744 		port = serial->port[i];
745 		portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
746 		if (!portdata) {
747 			dbg("%s: kmalloc for option_port_private (%d) failed!.",
748 					__FUNCTION__, i);
749 			return (1);
750 		}
751 
752 		usb_set_serial_port_data(port, portdata);
753 
754 		if (! port->interrupt_in_urb)
755 			continue;
756 		err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
757 		if (err)
758 			dbg("%s: submit irq_in urb failed %d",
759 				__FUNCTION__, err);
760 	}
761 
762 	option_setup_urbs(serial);
763 
764 	return (0);
765 }
766 
767 static void option_shutdown(struct usb_serial *serial)
768 {
769 	int i, j;
770 	struct usb_serial_port *port;
771 	struct option_port_private *portdata;
772 
773 	dbg("%s", __FUNCTION__);
774 
775 	/* Stop reading/writing urbs */
776 	for (i = 0; i < serial->num_ports; ++i) {
777 		port = serial->port[i];
778 		portdata = usb_get_serial_port_data(port);
779 		for (j = 0; j < N_IN_URB; j++)
780 			usb_kill_urb(portdata->in_urbs[j]);
781 		for (j = 0; j < N_OUT_URB; j++)
782 			usb_kill_urb(portdata->out_urbs[j]);
783 	}
784 
785 	/* Now free them */
786 	for (i = 0; i < serial->num_ports; ++i) {
787 		port = serial->port[i];
788 		portdata = usb_get_serial_port_data(port);
789 
790 		for (j = 0; j < N_IN_URB; j++) {
791 			if (portdata->in_urbs[j]) {
792 				usb_free_urb(portdata->in_urbs[j]);
793 				portdata->in_urbs[j] = NULL;
794 			}
795 		}
796 		for (j = 0; j < N_OUT_URB; j++) {
797 			if (portdata->out_urbs[j]) {
798 				usb_free_urb(portdata->out_urbs[j]);
799 				portdata->out_urbs[j] = NULL;
800 			}
801 		}
802 	}
803 
804 	/* Now free per port private data */
805 	for (i = 0; i < serial->num_ports; i++) {
806 		port = serial->port[i];
807 		kfree(usb_get_serial_port_data(port));
808 	}
809 }
810 
811 MODULE_AUTHOR(DRIVER_AUTHOR);
812 MODULE_DESCRIPTION(DRIVER_DESC);
813 MODULE_VERSION(DRIVER_VERSION);
814 MODULE_LICENSE("GPL");
815 
816 #ifdef CONFIG_USB_DEBUG
817 module_param(debug, bool, S_IRUGO | S_IWUSR);
818 MODULE_PARM_DESC(debug, "Debug messages");
819 #endif
820 
821