xref: /linux/drivers/usb/serial/usb-serial.c (revision 5499b45190237ca90dd2ac86395cf464fe1f4cc7)
1 /*
2  * USB Serial Converter driver
3  *
4  * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
5  * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6  * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7  *
8  *	This program is free software; you can redistribute it and/or
9  *	modify it under the terms of the GNU General Public License version
10  *	2 as published by the Free Software Foundation.
11  *
12  * This driver was originally based on the ACM driver by Armin Fuerst (which was
13  * based on a driver by Brad Keryan)
14  *
15  * See Documentation/usb/usb-serial.txt for more information on using this
16  * driver
17  *
18  */
19 
20 #include <linux/kernel.h>
21 #include <linux/errno.h>
22 #include <linux/init.h>
23 #include <linux/slab.h>
24 #include <linux/smp_lock.h>
25 #include <linux/tty.h>
26 #include <linux/tty_driver.h>
27 #include <linux/tty_flip.h>
28 #include <linux/module.h>
29 #include <linux/moduleparam.h>
30 #include <linux/seq_file.h>
31 #include <linux/spinlock.h>
32 #include <linux/mutex.h>
33 #include <linux/list.h>
34 #include <linux/uaccess.h>
35 #include <linux/serial.h>
36 #include <linux/usb.h>
37 #include <linux/usb/serial.h>
38 #include <linux/kfifo.h>
39 #include "pl2303.h"
40 
41 /*
42  * Version Information
43  */
44 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
45 #define DRIVER_DESC "USB Serial Driver core"
46 
47 /* Driver structure we register with the USB core */
48 static struct usb_driver usb_serial_driver = {
49 	.name =		"usbserial",
50 	.probe =	usb_serial_probe,
51 	.disconnect =	usb_serial_disconnect,
52 	.suspend =	usb_serial_suspend,
53 	.resume =	usb_serial_resume,
54 	.no_dynamic_id = 	1,
55 };
56 
57 /* There is no MODULE_DEVICE_TABLE for usbserial.c.  Instead
58    the MODULE_DEVICE_TABLE declarations in each serial driver
59    cause the "hotplug" program to pull in whatever module is necessary
60    via modprobe, and modprobe will load usbserial because the serial
61    drivers depend on it.
62 */
63 
64 static int debug;
65 /* initially all NULL */
66 static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
67 static DEFINE_MUTEX(table_lock);
68 static LIST_HEAD(usb_serial_driver_list);
69 
70 /*
71  * Look up the serial structure.  If it is found and it hasn't been
72  * disconnected, return with its disc_mutex held and its refcount
73  * incremented.  Otherwise return NULL.
74  */
75 struct usb_serial *usb_serial_get_by_index(unsigned index)
76 {
77 	struct usb_serial *serial;
78 
79 	mutex_lock(&table_lock);
80 	serial = serial_table[index];
81 
82 	if (serial) {
83 		mutex_lock(&serial->disc_mutex);
84 		if (serial->disconnected) {
85 			mutex_unlock(&serial->disc_mutex);
86 			serial = NULL;
87 		} else {
88 			kref_get(&serial->kref);
89 		}
90 	}
91 	mutex_unlock(&table_lock);
92 	return serial;
93 }
94 
95 static struct usb_serial *get_free_serial(struct usb_serial *serial,
96 					int num_ports, unsigned int *minor)
97 {
98 	unsigned int i, j;
99 	int good_spot;
100 
101 	dbg("%s %d", __func__, num_ports);
102 
103 	*minor = 0;
104 	mutex_lock(&table_lock);
105 	for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
106 		if (serial_table[i])
107 			continue;
108 
109 		good_spot = 1;
110 		for (j = 1; j <= num_ports-1; ++j)
111 			if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
112 				good_spot = 0;
113 				i += j;
114 				break;
115 			}
116 		if (good_spot == 0)
117 			continue;
118 
119 		*minor = i;
120 		j = 0;
121 		dbg("%s - minor base = %d", __func__, *minor);
122 		for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
123 			serial_table[i] = serial;
124 			serial->port[j++]->number = i;
125 		}
126 		mutex_unlock(&table_lock);
127 		return serial;
128 	}
129 	mutex_unlock(&table_lock);
130 	return NULL;
131 }
132 
133 static void return_serial(struct usb_serial *serial)
134 {
135 	int i;
136 
137 	dbg("%s", __func__);
138 
139 	mutex_lock(&table_lock);
140 	for (i = 0; i < serial->num_ports; ++i)
141 		serial_table[serial->minor + i] = NULL;
142 	mutex_unlock(&table_lock);
143 }
144 
145 static void destroy_serial(struct kref *kref)
146 {
147 	struct usb_serial *serial;
148 	struct usb_serial_port *port;
149 	int i;
150 
151 	serial = to_usb_serial(kref);
152 
153 	dbg("%s - %s", __func__, serial->type->description);
154 
155 	/* return the minor range that this device had */
156 	if (serial->minor != SERIAL_TTY_NO_MINOR)
157 		return_serial(serial);
158 
159 	if (serial->attached)
160 		serial->type->release(serial);
161 
162 	/* Now that nothing is using the ports, they can be freed */
163 	for (i = 0; i < serial->num_port_pointers; ++i) {
164 		port = serial->port[i];
165 		if (port) {
166 			port->serial = NULL;
167 			put_device(&port->dev);
168 		}
169 	}
170 
171 	usb_put_dev(serial->dev);
172 	kfree(serial);
173 }
174 
175 void usb_serial_put(struct usb_serial *serial)
176 {
177 	kref_put(&serial->kref, destroy_serial);
178 }
179 
180 /*****************************************************************************
181  * Driver tty interface functions
182  *****************************************************************************/
183 
184 /**
185  * serial_install - install tty
186  * @driver: the driver (USB in our case)
187  * @tty: the tty being created
188  *
189  * Create the termios objects for this tty.  We use the default
190  * USB serial settings but permit them to be overridden by
191  * serial->type->init_termios.
192  *
193  * This is the first place a new tty gets used.  Hence this is where we
194  * acquire references to the usb_serial structure and the driver module,
195  * where we store a pointer to the port, and where we do an autoresume.
196  * All these actions are reversed in serial_cleanup().
197  */
198 static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
199 {
200 	int idx = tty->index;
201 	struct usb_serial *serial;
202 	struct usb_serial_port *port;
203 	int retval = -ENODEV;
204 
205 	dbg("%s", __func__);
206 
207 	serial = usb_serial_get_by_index(idx);
208 	if (!serial)
209 		return retval;
210 
211 	port = serial->port[idx - serial->minor];
212 	if (!port)
213 		goto error_no_port;
214 	if (!try_module_get(serial->type->driver.owner))
215 		goto error_module_get;
216 
217 	/* perform the standard setup */
218 	retval = tty_init_termios(tty);
219 	if (retval)
220 		goto error_init_termios;
221 
222 	retval = usb_autopm_get_interface(serial->interface);
223 	if (retval)
224 		goto error_get_interface;
225 
226 	mutex_unlock(&serial->disc_mutex);
227 
228 	/* allow the driver to update the settings */
229 	if (serial->type->init_termios)
230 		serial->type->init_termios(tty);
231 
232 	tty->driver_data = port;
233 
234 	/* Final install (we use the default method) */
235 	tty_driver_kref_get(driver);
236 	tty->count++;
237 	driver->ttys[idx] = tty;
238 	return retval;
239 
240  error_get_interface:
241  error_init_termios:
242 	module_put(serial->type->driver.owner);
243  error_module_get:
244  error_no_port:
245 	usb_serial_put(serial);
246 	mutex_unlock(&serial->disc_mutex);
247 	return retval;
248 }
249 
250 static int serial_activate(struct tty_port *tport, struct tty_struct *tty)
251 {
252 	struct usb_serial_port *port =
253 		container_of(tport, struct usb_serial_port, port);
254 	struct usb_serial *serial = port->serial;
255 	int retval;
256 
257 	mutex_lock(&serial->disc_mutex);
258 	if (serial->disconnected)
259 		retval = -ENODEV;
260 	else
261 		retval = port->serial->type->open(tty, port);
262 	mutex_unlock(&serial->disc_mutex);
263 	return retval;
264 }
265 
266 static int serial_open(struct tty_struct *tty, struct file *filp)
267 {
268 	struct usb_serial_port *port = tty->driver_data;
269 
270 	dbg("%s - port %d", __func__, port->number);
271 	return tty_port_open(&port->port, tty, filp);
272 }
273 
274 /**
275  * serial_down - shut down hardware
276  * @tport: tty port to shut down
277  *
278  * Shut down a USB serial port unless it is the console.  We never
279  * shut down the console hardware as it will always be in use. Serialized
280  * against activate by the tport mutex and kept to matching open/close pairs
281  * of calls by the ASYNCB_INITIALIZED flag.
282  */
283 static void serial_down(struct tty_port *tport)
284 {
285 	struct usb_serial_port *port =
286 		container_of(tport, struct usb_serial_port, port);
287 	struct usb_serial_driver *drv = port->serial->type;
288 	/*
289 	 * The console is magical.  Do not hang up the console hardware
290 	 * or there will be tears.
291 	 */
292 	if (port->console)
293 		return;
294 	if (drv->close)
295 		drv->close(port);
296 }
297 
298 static void serial_hangup(struct tty_struct *tty)
299 {
300 	struct usb_serial_port *port = tty->driver_data;
301 	dbg("%s - port %d", __func__, port->number);
302 	tty_port_hangup(&port->port);
303 }
304 
305 static void serial_close(struct tty_struct *tty, struct file *filp)
306 {
307 	struct usb_serial_port *port = tty->driver_data;
308 	dbg("%s - port %d", __func__, port->number);
309 	tty_port_close(&port->port, tty, filp);
310 }
311 
312 /**
313  * serial_cleanup - free resources post close/hangup
314  * @port: port to free up
315  *
316  * Do the resource freeing and refcount dropping for the port.
317  * Avoid freeing the console.
318  *
319  * Called asynchronously after the last tty kref is dropped,
320  * and the tty layer has already done the tty_shutdown(tty);
321  */
322 static void serial_cleanup(struct tty_struct *tty)
323 {
324 	struct usb_serial_port *port = tty->driver_data;
325 	struct usb_serial *serial;
326 	struct module *owner;
327 
328 	/* The console is magical.  Do not hang up the console hardware
329 	 * or there will be tears.
330 	 */
331 	if (port->console)
332 		return;
333 
334 	dbg("%s - port %d", __func__, port->number);
335 
336 	tty->driver_data = NULL;
337 
338 	serial = port->serial;
339 	owner = serial->type->driver.owner;
340 
341 	mutex_lock(&serial->disc_mutex);
342 	if (!serial->disconnected)
343 		usb_autopm_put_interface(serial->interface);
344 	mutex_unlock(&serial->disc_mutex);
345 
346 	usb_serial_put(serial);
347 	module_put(owner);
348 }
349 
350 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
351 								int count)
352 {
353 	struct usb_serial_port *port = tty->driver_data;
354 	int retval = -ENODEV;
355 
356 	if (port->serial->dev->state == USB_STATE_NOTATTACHED)
357 		goto exit;
358 
359 	dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
360 
361 	/* count is managed under the mutex lock for the tty so cannot
362 	   drop to zero until after the last close completes */
363 	WARN_ON(!port->port.count);
364 
365 	/* pass on to the driver specific version of this function */
366 	retval = port->serial->type->write(tty, port, buf, count);
367 
368 exit:
369 	return retval;
370 }
371 
372 static int serial_write_room(struct tty_struct *tty)
373 {
374 	struct usb_serial_port *port = tty->driver_data;
375 	dbg("%s - port %d", __func__, port->number);
376 	WARN_ON(!port->port.count);
377 	/* pass on to the driver specific version of this function */
378 	return port->serial->type->write_room(tty);
379 }
380 
381 static int serial_chars_in_buffer(struct tty_struct *tty)
382 {
383 	struct usb_serial_port *port = tty->driver_data;
384 	dbg("%s = port %d", __func__, port->number);
385 
386 	/* if the device was unplugged then any remaining characters
387 	   fell out of the connector ;) */
388 	if (port->serial->disconnected)
389 		return 0;
390 	/* pass on to the driver specific version of this function */
391 	return port->serial->type->chars_in_buffer(tty);
392 }
393 
394 static void serial_throttle(struct tty_struct *tty)
395 {
396 	struct usb_serial_port *port = tty->driver_data;
397 	dbg("%s - port %d", __func__, port->number);
398 
399 	WARN_ON(!port->port.count);
400 	/* pass on to the driver specific version of this function */
401 	if (port->serial->type->throttle)
402 		port->serial->type->throttle(tty);
403 }
404 
405 static void serial_unthrottle(struct tty_struct *tty)
406 {
407 	struct usb_serial_port *port = tty->driver_data;
408 	dbg("%s - port %d", __func__, port->number);
409 
410 	WARN_ON(!port->port.count);
411 	/* pass on to the driver specific version of this function */
412 	if (port->serial->type->unthrottle)
413 		port->serial->type->unthrottle(tty);
414 }
415 
416 static int serial_ioctl(struct tty_struct *tty, struct file *file,
417 					unsigned int cmd, unsigned long arg)
418 {
419 	struct usb_serial_port *port = tty->driver_data;
420 	int retval = -ENODEV;
421 
422 	dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
423 
424 	WARN_ON(!port->port.count);
425 
426 	/* pass on to the driver specific version of this function
427 	   if it is available */
428 	if (port->serial->type->ioctl) {
429 		retval = port->serial->type->ioctl(tty, file, cmd, arg);
430 	} else
431 		retval = -ENOIOCTLCMD;
432 	return retval;
433 }
434 
435 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
436 {
437 	struct usb_serial_port *port = tty->driver_data;
438 	dbg("%s - port %d", __func__, port->number);
439 
440 	WARN_ON(!port->port.count);
441 	/* pass on to the driver specific version of this function
442 	   if it is available */
443 	if (port->serial->type->set_termios)
444 		port->serial->type->set_termios(tty, port, old);
445 	else
446 		tty_termios_copy_hw(tty->termios, old);
447 }
448 
449 static int serial_break(struct tty_struct *tty, int break_state)
450 {
451 	struct usb_serial_port *port = tty->driver_data;
452 
453 	dbg("%s - port %d", __func__, port->number);
454 
455 	WARN_ON(!port->port.count);
456 	/* pass on to the driver specific version of this function
457 	   if it is available */
458 	if (port->serial->type->break_ctl)
459 		port->serial->type->break_ctl(tty, break_state);
460 	return 0;
461 }
462 
463 static int serial_proc_show(struct seq_file *m, void *v)
464 {
465 	struct usb_serial *serial;
466 	int i;
467 	char tmp[40];
468 
469 	dbg("%s", __func__);
470 	seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
471 	for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
472 		serial = usb_serial_get_by_index(i);
473 		if (serial == NULL)
474 			continue;
475 
476 		seq_printf(m, "%d:", i);
477 		if (serial->type->driver.owner)
478 			seq_printf(m, " module:%s",
479 				module_name(serial->type->driver.owner));
480 		seq_printf(m, " name:\"%s\"",
481 				serial->type->description);
482 		seq_printf(m, " vendor:%04x product:%04x",
483 			le16_to_cpu(serial->dev->descriptor.idVendor),
484 			le16_to_cpu(serial->dev->descriptor.idProduct));
485 		seq_printf(m, " num_ports:%d", serial->num_ports);
486 		seq_printf(m, " port:%d", i - serial->minor + 1);
487 		usb_make_path(serial->dev, tmp, sizeof(tmp));
488 		seq_printf(m, " path:%s", tmp);
489 
490 		seq_putc(m, '\n');
491 		usb_serial_put(serial);
492 		mutex_unlock(&serial->disc_mutex);
493 	}
494 	return 0;
495 }
496 
497 static int serial_proc_open(struct inode *inode, struct file *file)
498 {
499 	return single_open(file, serial_proc_show, NULL);
500 }
501 
502 static const struct file_operations serial_proc_fops = {
503 	.owner		= THIS_MODULE,
504 	.open		= serial_proc_open,
505 	.read		= seq_read,
506 	.llseek		= seq_lseek,
507 	.release	= single_release,
508 };
509 
510 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
511 {
512 	struct usb_serial_port *port = tty->driver_data;
513 
514 	dbg("%s - port %d", __func__, port->number);
515 
516 	WARN_ON(!port->port.count);
517 	if (port->serial->type->tiocmget)
518 		return port->serial->type->tiocmget(tty, file);
519 	return -EINVAL;
520 }
521 
522 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
523 			    unsigned int set, unsigned int clear)
524 {
525 	struct usb_serial_port *port = tty->driver_data;
526 
527 	dbg("%s - port %d", __func__, port->number);
528 
529 	WARN_ON(!port->port.count);
530 	if (port->serial->type->tiocmset)
531 		return port->serial->type->tiocmset(tty, file, set, clear);
532 	return -EINVAL;
533 }
534 
535 /*
536  * We would be calling tty_wakeup here, but unfortunately some line
537  * disciplines have an annoying habit of calling tty->write from
538  * the write wakeup callback (e.g. n_hdlc.c).
539  */
540 void usb_serial_port_softint(struct usb_serial_port *port)
541 {
542 	schedule_work(&port->work);
543 }
544 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
545 
546 static void usb_serial_port_work(struct work_struct *work)
547 {
548 	struct usb_serial_port *port =
549 		container_of(work, struct usb_serial_port, work);
550 	struct tty_struct *tty;
551 
552 	dbg("%s - port %d", __func__, port->number);
553 
554 	tty = tty_port_tty_get(&port->port);
555 	if (!tty)
556 		return;
557 
558 	tty_wakeup(tty);
559 	tty_kref_put(tty);
560 }
561 
562 static void kill_traffic(struct usb_serial_port *port)
563 {
564 	usb_kill_urb(port->read_urb);
565 	usb_kill_urb(port->write_urb);
566 	/*
567 	 * This is tricky.
568 	 * Some drivers submit the read_urb in the
569 	 * handler for the write_urb or vice versa
570 	 * this order determines the order in which
571 	 * usb_kill_urb() must be used to reliably
572 	 * kill the URBs. As it is unknown here,
573 	 * both orders must be used in turn.
574 	 * The call below is not redundant.
575 	 */
576 	usb_kill_urb(port->read_urb);
577 	usb_kill_urb(port->interrupt_in_urb);
578 	usb_kill_urb(port->interrupt_out_urb);
579 }
580 
581 static void port_release(struct device *dev)
582 {
583 	struct usb_serial_port *port = to_usb_serial_port(dev);
584 
585 	dbg ("%s - %s", __func__, dev_name(dev));
586 
587 	/*
588 	 * Stop all the traffic before cancelling the work, so that
589 	 * nobody will restart it by calling usb_serial_port_softint.
590 	 */
591 	kill_traffic(port);
592 	cancel_work_sync(&port->work);
593 
594 	usb_free_urb(port->read_urb);
595 	usb_free_urb(port->write_urb);
596 	usb_free_urb(port->interrupt_in_urb);
597 	usb_free_urb(port->interrupt_out_urb);
598 	kfifo_free(&port->write_fifo);
599 	kfree(port->bulk_in_buffer);
600 	kfree(port->bulk_out_buffer);
601 	kfree(port->interrupt_in_buffer);
602 	kfree(port->interrupt_out_buffer);
603 	kfree(port);
604 }
605 
606 static struct usb_serial *create_serial(struct usb_device *dev,
607 					struct usb_interface *interface,
608 					struct usb_serial_driver *driver)
609 {
610 	struct usb_serial *serial;
611 
612 	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
613 	if (!serial) {
614 		dev_err(&dev->dev, "%s - out of memory\n", __func__);
615 		return NULL;
616 	}
617 	serial->dev = usb_get_dev(dev);
618 	serial->type = driver;
619 	serial->interface = interface;
620 	kref_init(&serial->kref);
621 	mutex_init(&serial->disc_mutex);
622 	serial->minor = SERIAL_TTY_NO_MINOR;
623 
624 	return serial;
625 }
626 
627 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
628 					    struct usb_serial_driver *drv)
629 {
630 	struct usb_dynid *dynid;
631 
632 	spin_lock(&drv->dynids.lock);
633 	list_for_each_entry(dynid, &drv->dynids.list, node) {
634 		if (usb_match_one_id(intf, &dynid->id)) {
635 			spin_unlock(&drv->dynids.lock);
636 			return &dynid->id;
637 		}
638 	}
639 	spin_unlock(&drv->dynids.lock);
640 	return NULL;
641 }
642 
643 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
644 						struct usb_interface *intf)
645 {
646 	const struct usb_device_id *id;
647 
648 	id = usb_match_id(intf, drv->id_table);
649 	if (id) {
650 		dbg("static descriptor matches");
651 		goto exit;
652 	}
653 	id = match_dynamic_id(intf, drv);
654 	if (id)
655 		dbg("dynamic descriptor matches");
656 exit:
657 	return id;
658 }
659 
660 static struct usb_serial_driver *search_serial_device(
661 					struct usb_interface *iface)
662 {
663 	const struct usb_device_id *id;
664 	struct usb_serial_driver *drv;
665 
666 	/* Check if the usb id matches a known device */
667 	list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
668 		id = get_iface_id(drv, iface);
669 		if (id)
670 			return drv;
671 	}
672 
673 	return NULL;
674 }
675 
676 static int serial_carrier_raised(struct tty_port *port)
677 {
678 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
679 	struct usb_serial_driver *drv = p->serial->type;
680 	if (drv->carrier_raised)
681 		return drv->carrier_raised(p);
682 	/* No carrier control - don't block */
683 	return 1;
684 }
685 
686 static void serial_dtr_rts(struct tty_port *port, int on)
687 {
688 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
689 	struct usb_serial_driver *drv = p->serial->type;
690 	if (drv->dtr_rts)
691 		drv->dtr_rts(p, on);
692 }
693 
694 static const struct tty_port_operations serial_port_ops = {
695 	.carrier_raised = serial_carrier_raised,
696 	.dtr_rts = serial_dtr_rts,
697 	.activate = serial_activate,
698 	.shutdown = serial_down,
699 };
700 
701 int usb_serial_probe(struct usb_interface *interface,
702 			       const struct usb_device_id *id)
703 {
704 	struct usb_device *dev = interface_to_usbdev(interface);
705 	struct usb_serial *serial = NULL;
706 	struct usb_serial_port *port;
707 	struct usb_host_interface *iface_desc;
708 	struct usb_endpoint_descriptor *endpoint;
709 	struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
710 	struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
711 	struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
712 	struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
713 	struct usb_serial_driver *type = NULL;
714 	int retval;
715 	unsigned int minor;
716 	int buffer_size;
717 	int i;
718 	int num_interrupt_in = 0;
719 	int num_interrupt_out = 0;
720 	int num_bulk_in = 0;
721 	int num_bulk_out = 0;
722 	int num_ports = 0;
723 	int max_endpoints;
724 
725 	lock_kernel(); /* guard against unloading a serial driver module */
726 	type = search_serial_device(interface);
727 	if (!type) {
728 		unlock_kernel();
729 		dbg("none matched");
730 		return -ENODEV;
731 	}
732 
733 	serial = create_serial(dev, interface, type);
734 	if (!serial) {
735 		unlock_kernel();
736 		dev_err(&interface->dev, "%s - out of memory\n", __func__);
737 		return -ENOMEM;
738 	}
739 
740 	/* if this device type has a probe function, call it */
741 	if (type->probe) {
742 		const struct usb_device_id *id;
743 
744 		if (!try_module_get(type->driver.owner)) {
745 			unlock_kernel();
746 			dev_err(&interface->dev,
747 				"module get failed, exiting\n");
748 			kfree(serial);
749 			return -EIO;
750 		}
751 
752 		id = get_iface_id(type, interface);
753 		retval = type->probe(serial, id);
754 		module_put(type->driver.owner);
755 
756 		if (retval) {
757 			unlock_kernel();
758 			dbg("sub driver rejected device");
759 			kfree(serial);
760 			return retval;
761 		}
762 	}
763 
764 	/* descriptor matches, let's find the endpoints needed */
765 	/* check out the endpoints */
766 	iface_desc = interface->cur_altsetting;
767 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
768 		endpoint = &iface_desc->endpoint[i].desc;
769 
770 		if (usb_endpoint_is_bulk_in(endpoint)) {
771 			/* we found a bulk in endpoint */
772 			dbg("found bulk in on endpoint %d", i);
773 			bulk_in_endpoint[num_bulk_in] = endpoint;
774 			++num_bulk_in;
775 		}
776 
777 		if (usb_endpoint_is_bulk_out(endpoint)) {
778 			/* we found a bulk out endpoint */
779 			dbg("found bulk out on endpoint %d", i);
780 			bulk_out_endpoint[num_bulk_out] = endpoint;
781 			++num_bulk_out;
782 		}
783 
784 		if (usb_endpoint_is_int_in(endpoint)) {
785 			/* we found a interrupt in endpoint */
786 			dbg("found interrupt in on endpoint %d", i);
787 			interrupt_in_endpoint[num_interrupt_in] = endpoint;
788 			++num_interrupt_in;
789 		}
790 
791 		if (usb_endpoint_is_int_out(endpoint)) {
792 			/* we found an interrupt out endpoint */
793 			dbg("found interrupt out on endpoint %d", i);
794 			interrupt_out_endpoint[num_interrupt_out] = endpoint;
795 			++num_interrupt_out;
796 		}
797 	}
798 
799 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
800 	/* BEGIN HORRIBLE HACK FOR PL2303 */
801 	/* this is needed due to the looney way its endpoints are set up */
802 	if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
803 	     (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
804 	    ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
805 	     (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
806 	    ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
807 	     (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
808 	    ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
809 	     (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
810 		if (interface != dev->actconfig->interface[0]) {
811 			/* check out the endpoints of the other interface*/
812 			iface_desc = dev->actconfig->interface[0]->cur_altsetting;
813 			for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
814 				endpoint = &iface_desc->endpoint[i].desc;
815 				if (usb_endpoint_is_int_in(endpoint)) {
816 					/* we found a interrupt in endpoint */
817 					dbg("found interrupt in for Prolific device on separate interface");
818 					interrupt_in_endpoint[num_interrupt_in] = endpoint;
819 					++num_interrupt_in;
820 				}
821 			}
822 		}
823 
824 		/* Now make sure the PL-2303 is configured correctly.
825 		 * If not, give up now and hope this hack will work
826 		 * properly during a later invocation of usb_serial_probe
827 		 */
828 		if (num_bulk_in == 0 || num_bulk_out == 0) {
829 			unlock_kernel();
830 			dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
831 			kfree(serial);
832 			return -ENODEV;
833 		}
834 	}
835 	/* END HORRIBLE HACK FOR PL2303 */
836 #endif
837 
838 #ifdef CONFIG_USB_SERIAL_GENERIC
839 	if (type == &usb_serial_generic_device) {
840 		num_ports = num_bulk_out;
841 		if (num_ports == 0) {
842 			unlock_kernel();
843 			dev_err(&interface->dev,
844 			    "Generic device with no bulk out, not allowed.\n");
845 			kfree(serial);
846 			return -EIO;
847 		}
848 	}
849 #endif
850 	if (!num_ports) {
851 		/* if this device type has a calc_num_ports function, call it */
852 		if (type->calc_num_ports) {
853 			if (!try_module_get(type->driver.owner)) {
854 				unlock_kernel();
855 				dev_err(&interface->dev,
856 					"module get failed, exiting\n");
857 				kfree(serial);
858 				return -EIO;
859 			}
860 			num_ports = type->calc_num_ports(serial);
861 			module_put(type->driver.owner);
862 		}
863 		if (!num_ports)
864 			num_ports = type->num_ports;
865 	}
866 
867 	serial->num_ports = num_ports;
868 	serial->num_bulk_in = num_bulk_in;
869 	serial->num_bulk_out = num_bulk_out;
870 	serial->num_interrupt_in = num_interrupt_in;
871 	serial->num_interrupt_out = num_interrupt_out;
872 
873 	/* found all that we need */
874 	dev_info(&interface->dev, "%s converter detected\n",
875 			type->description);
876 
877 	/* create our ports, we need as many as the max endpoints */
878 	/* we don't use num_ports here because some devices have more
879 	   endpoint pairs than ports */
880 	max_endpoints = max(num_bulk_in, num_bulk_out);
881 	max_endpoints = max(max_endpoints, num_interrupt_in);
882 	max_endpoints = max(max_endpoints, num_interrupt_out);
883 	max_endpoints = max(max_endpoints, (int)serial->num_ports);
884 	serial->num_port_pointers = max_endpoints;
885 	unlock_kernel();
886 
887 	dbg("%s - setting up %d port structures for this device",
888 						__func__, max_endpoints);
889 	for (i = 0; i < max_endpoints; ++i) {
890 		port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
891 		if (!port)
892 			goto probe_error;
893 		tty_port_init(&port->port);
894 		port->port.ops = &serial_port_ops;
895 		port->serial = serial;
896 		spin_lock_init(&port->lock);
897 		/* Keep this for private driver use for the moment but
898 		   should probably go away */
899 		INIT_WORK(&port->work, usb_serial_port_work);
900 		serial->port[i] = port;
901 		port->dev.parent = &interface->dev;
902 		port->dev.driver = NULL;
903 		port->dev.bus = &usb_serial_bus_type;
904 		port->dev.release = &port_release;
905 		device_initialize(&port->dev);
906 	}
907 
908 	/* set up the endpoint information */
909 	for (i = 0; i < num_bulk_in; ++i) {
910 		endpoint = bulk_in_endpoint[i];
911 		port = serial->port[i];
912 		port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
913 		if (!port->read_urb) {
914 			dev_err(&interface->dev, "No free urbs available\n");
915 			goto probe_error;
916 		}
917 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
918 		port->bulk_in_size = buffer_size;
919 		port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
920 		port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
921 		if (!port->bulk_in_buffer) {
922 			dev_err(&interface->dev,
923 					"Couldn't allocate bulk_in_buffer\n");
924 			goto probe_error;
925 		}
926 		usb_fill_bulk_urb(port->read_urb, dev,
927 				usb_rcvbulkpipe(dev,
928 						endpoint->bEndpointAddress),
929 				port->bulk_in_buffer, buffer_size,
930 				serial->type->read_bulk_callback, port);
931 	}
932 
933 	for (i = 0; i < num_bulk_out; ++i) {
934 		endpoint = bulk_out_endpoint[i];
935 		port = serial->port[i];
936 		port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
937 		if (!port->write_urb) {
938 			dev_err(&interface->dev, "No free urbs available\n");
939 			goto probe_error;
940 		}
941 		if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
942 			goto probe_error;
943 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
944 		port->bulk_out_size = buffer_size;
945 		port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
946 		port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
947 		if (!port->bulk_out_buffer) {
948 			dev_err(&interface->dev,
949 					"Couldn't allocate bulk_out_buffer\n");
950 			goto probe_error;
951 		}
952 		usb_fill_bulk_urb(port->write_urb, dev,
953 				usb_sndbulkpipe(dev,
954 					endpoint->bEndpointAddress),
955 				port->bulk_out_buffer, buffer_size,
956 				serial->type->write_bulk_callback, port);
957 	}
958 
959 	if (serial->type->read_int_callback) {
960 		for (i = 0; i < num_interrupt_in; ++i) {
961 			endpoint = interrupt_in_endpoint[i];
962 			port = serial->port[i];
963 			port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
964 			if (!port->interrupt_in_urb) {
965 				dev_err(&interface->dev,
966 						"No free urbs available\n");
967 				goto probe_error;
968 			}
969 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
970 			port->interrupt_in_endpointAddress =
971 						endpoint->bEndpointAddress;
972 			port->interrupt_in_buffer = kmalloc(buffer_size,
973 								GFP_KERNEL);
974 			if (!port->interrupt_in_buffer) {
975 				dev_err(&interface->dev,
976 				    "Couldn't allocate interrupt_in_buffer\n");
977 				goto probe_error;
978 			}
979 			usb_fill_int_urb(port->interrupt_in_urb, dev,
980 				usb_rcvintpipe(dev,
981 						endpoint->bEndpointAddress),
982 				port->interrupt_in_buffer, buffer_size,
983 				serial->type->read_int_callback, port,
984 				endpoint->bInterval);
985 		}
986 	} else if (num_interrupt_in) {
987 		dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
988 	}
989 
990 	if (serial->type->write_int_callback) {
991 		for (i = 0; i < num_interrupt_out; ++i) {
992 			endpoint = interrupt_out_endpoint[i];
993 			port = serial->port[i];
994 			port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
995 			if (!port->interrupt_out_urb) {
996 				dev_err(&interface->dev,
997 						"No free urbs available\n");
998 				goto probe_error;
999 			}
1000 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1001 			port->interrupt_out_size = buffer_size;
1002 			port->interrupt_out_endpointAddress =
1003 						endpoint->bEndpointAddress;
1004 			port->interrupt_out_buffer = kmalloc(buffer_size,
1005 								GFP_KERNEL);
1006 			if (!port->interrupt_out_buffer) {
1007 				dev_err(&interface->dev,
1008 				  "Couldn't allocate interrupt_out_buffer\n");
1009 				goto probe_error;
1010 			}
1011 			usb_fill_int_urb(port->interrupt_out_urb, dev,
1012 				usb_sndintpipe(dev,
1013 						  endpoint->bEndpointAddress),
1014 				port->interrupt_out_buffer, buffer_size,
1015 				serial->type->write_int_callback, port,
1016 				endpoint->bInterval);
1017 		}
1018 	} else if (num_interrupt_out) {
1019 		dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1020 	}
1021 
1022 	/* if this device type has an attach function, call it */
1023 	if (type->attach) {
1024 		if (!try_module_get(type->driver.owner)) {
1025 			dev_err(&interface->dev,
1026 					"module get failed, exiting\n");
1027 			goto probe_error;
1028 		}
1029 		retval = type->attach(serial);
1030 		module_put(type->driver.owner);
1031 		if (retval < 0)
1032 			goto probe_error;
1033 		serial->attached = 1;
1034 		if (retval > 0) {
1035 			/* quietly accept this device, but don't bind to a
1036 			   serial port as it's about to disappear */
1037 			serial->num_ports = 0;
1038 			goto exit;
1039 		}
1040 	} else {
1041 		serial->attached = 1;
1042 	}
1043 
1044 	if (get_free_serial(serial, num_ports, &minor) == NULL) {
1045 		dev_err(&interface->dev, "No more free serial devices\n");
1046 		goto probe_error;
1047 	}
1048 	serial->minor = minor;
1049 
1050 	/* register all of the individual ports with the driver core */
1051 	for (i = 0; i < num_ports; ++i) {
1052 		port = serial->port[i];
1053 		dev_set_name(&port->dev, "ttyUSB%d", port->number);
1054 		dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1055 		port->dev_state = PORT_REGISTERING;
1056 		retval = device_add(&port->dev);
1057 		if (retval) {
1058 			dev_err(&port->dev, "Error registering port device, "
1059 				"continuing\n");
1060 			port->dev_state = PORT_UNREGISTERED;
1061 		} else {
1062 			port->dev_state = PORT_REGISTERED;
1063 		}
1064 	}
1065 
1066 	usb_serial_console_init(debug, minor);
1067 
1068 exit:
1069 	/* success */
1070 	usb_set_intfdata(interface, serial);
1071 	return 0;
1072 
1073 probe_error:
1074 	usb_serial_put(serial);
1075 	return -EIO;
1076 }
1077 EXPORT_SYMBOL_GPL(usb_serial_probe);
1078 
1079 void usb_serial_disconnect(struct usb_interface *interface)
1080 {
1081 	int i;
1082 	struct usb_serial *serial = usb_get_intfdata(interface);
1083 	struct device *dev = &interface->dev;
1084 	struct usb_serial_port *port;
1085 
1086 	usb_serial_console_disconnect(serial);
1087 	dbg("%s", __func__);
1088 
1089 	mutex_lock(&serial->disc_mutex);
1090 	usb_set_intfdata(interface, NULL);
1091 	/* must set a flag, to signal subdrivers */
1092 	serial->disconnected = 1;
1093 	mutex_unlock(&serial->disc_mutex);
1094 
1095 	for (i = 0; i < serial->num_ports; ++i) {
1096 		port = serial->port[i];
1097 		if (port) {
1098 			struct tty_struct *tty = tty_port_tty_get(&port->port);
1099 			if (tty) {
1100 				tty_vhangup(tty);
1101 				tty_kref_put(tty);
1102 			}
1103 			kill_traffic(port);
1104 			cancel_work_sync(&port->work);
1105 			if (port->dev_state == PORT_REGISTERED) {
1106 
1107 				/* Make sure the port is bound so that the
1108 				 * driver's port_remove method is called.
1109 				 */
1110 				if (!port->dev.driver) {
1111 					int rc;
1112 
1113 					port->dev.driver =
1114 							&serial->type->driver;
1115 					rc = device_bind_driver(&port->dev);
1116 				}
1117 				port->dev_state = PORT_UNREGISTERING;
1118 				device_del(&port->dev);
1119 				port->dev_state = PORT_UNREGISTERED;
1120 			}
1121 		}
1122 	}
1123 	serial->type->disconnect(serial);
1124 
1125 	/* let the last holder of this object cause it to be cleaned up */
1126 	usb_serial_put(serial);
1127 	dev_info(dev, "device disconnected\n");
1128 }
1129 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1130 
1131 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1132 {
1133 	struct usb_serial *serial = usb_get_intfdata(intf);
1134 	struct usb_serial_port *port;
1135 	int i, r = 0;
1136 
1137 	serial->suspending = 1;
1138 
1139 	if (serial->type->suspend) {
1140 		r = serial->type->suspend(serial, message);
1141 		if (r < 0) {
1142 			serial->suspending = 0;
1143 			goto err_out;
1144 		}
1145 	}
1146 
1147 	for (i = 0; i < serial->num_ports; ++i) {
1148 		port = serial->port[i];
1149 		if (port)
1150 			kill_traffic(port);
1151 	}
1152 
1153 err_out:
1154 	return r;
1155 }
1156 EXPORT_SYMBOL(usb_serial_suspend);
1157 
1158 int usb_serial_resume(struct usb_interface *intf)
1159 {
1160 	struct usb_serial *serial = usb_get_intfdata(intf);
1161 	int rv;
1162 
1163 	serial->suspending = 0;
1164 	if (serial->type->resume)
1165 		rv = serial->type->resume(serial);
1166 	else
1167 		rv = usb_serial_generic_resume(serial);
1168 
1169 	return rv;
1170 }
1171 EXPORT_SYMBOL(usb_serial_resume);
1172 
1173 static const struct tty_operations serial_ops = {
1174 	.open =			serial_open,
1175 	.close =		serial_close,
1176 	.write =		serial_write,
1177 	.hangup = 		serial_hangup,
1178 	.write_room =		serial_write_room,
1179 	.ioctl =		serial_ioctl,
1180 	.set_termios =		serial_set_termios,
1181 	.throttle =		serial_throttle,
1182 	.unthrottle =		serial_unthrottle,
1183 	.break_ctl =		serial_break,
1184 	.chars_in_buffer =	serial_chars_in_buffer,
1185 	.tiocmget =		serial_tiocmget,
1186 	.tiocmset =		serial_tiocmset,
1187 	.cleanup = 		serial_cleanup,
1188 	.install = 		serial_install,
1189 	.proc_fops =		&serial_proc_fops,
1190 };
1191 
1192 
1193 struct tty_driver *usb_serial_tty_driver;
1194 
1195 static int __init usb_serial_init(void)
1196 {
1197 	int i;
1198 	int result;
1199 
1200 	usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1201 	if (!usb_serial_tty_driver)
1202 		return -ENOMEM;
1203 
1204 	/* Initialize our global data */
1205 	for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1206 		serial_table[i] = NULL;
1207 
1208 	result = bus_register(&usb_serial_bus_type);
1209 	if (result) {
1210 		printk(KERN_ERR "usb-serial: %s - registering bus driver "
1211 		       "failed\n", __func__);
1212 		goto exit_bus;
1213 	}
1214 
1215 	usb_serial_tty_driver->owner = THIS_MODULE;
1216 	usb_serial_tty_driver->driver_name = "usbserial";
1217 	usb_serial_tty_driver->name = 	"ttyUSB";
1218 	usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1219 	usb_serial_tty_driver->minor_start = 0;
1220 	usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1221 	usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1222 	usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1223 						TTY_DRIVER_DYNAMIC_DEV;
1224 	usb_serial_tty_driver->init_termios = tty_std_termios;
1225 	usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1226 							| HUPCL | CLOCAL;
1227 	usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1228 	usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1229 	tty_set_operations(usb_serial_tty_driver, &serial_ops);
1230 	result = tty_register_driver(usb_serial_tty_driver);
1231 	if (result) {
1232 		printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1233 		       __func__);
1234 		goto exit_reg_driver;
1235 	}
1236 
1237 	/* register the USB driver */
1238 	result = usb_register(&usb_serial_driver);
1239 	if (result < 0) {
1240 		printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1241 		       __func__);
1242 		goto exit_tty;
1243 	}
1244 
1245 	/* register the generic driver, if we should */
1246 	result = usb_serial_generic_register(debug);
1247 	if (result < 0) {
1248 		printk(KERN_ERR "usb-serial: %s - registering generic "
1249 		       "driver failed\n", __func__);
1250 		goto exit_generic;
1251 	}
1252 
1253 	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1254 
1255 	return result;
1256 
1257 exit_generic:
1258 	usb_deregister(&usb_serial_driver);
1259 
1260 exit_tty:
1261 	tty_unregister_driver(usb_serial_tty_driver);
1262 
1263 exit_reg_driver:
1264 	bus_unregister(&usb_serial_bus_type);
1265 
1266 exit_bus:
1267 	printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1268 	       __func__, result);
1269 	put_tty_driver(usb_serial_tty_driver);
1270 	return result;
1271 }
1272 
1273 
1274 static void __exit usb_serial_exit(void)
1275 {
1276 	usb_serial_console_exit();
1277 
1278 	usb_serial_generic_deregister();
1279 
1280 	usb_deregister(&usb_serial_driver);
1281 	tty_unregister_driver(usb_serial_tty_driver);
1282 	put_tty_driver(usb_serial_tty_driver);
1283 	bus_unregister(&usb_serial_bus_type);
1284 }
1285 
1286 
1287 module_init(usb_serial_init);
1288 module_exit(usb_serial_exit);
1289 
1290 #define set_to_generic_if_null(type, function)				\
1291 	do {								\
1292 		if (!type->function) {					\
1293 			type->function = usb_serial_generic_##function;	\
1294 			dbg("Had to override the " #function		\
1295 				" usb serial operation with the generic one.");\
1296 			}						\
1297 	} while (0)
1298 
1299 static void fixup_generic(struct usb_serial_driver *device)
1300 {
1301 	set_to_generic_if_null(device, open);
1302 	set_to_generic_if_null(device, write);
1303 	set_to_generic_if_null(device, close);
1304 	set_to_generic_if_null(device, write_room);
1305 	set_to_generic_if_null(device, chars_in_buffer);
1306 	set_to_generic_if_null(device, read_bulk_callback);
1307 	set_to_generic_if_null(device, write_bulk_callback);
1308 	set_to_generic_if_null(device, disconnect);
1309 	set_to_generic_if_null(device, release);
1310 }
1311 
1312 int usb_serial_register(struct usb_serial_driver *driver)
1313 {
1314 	/* must be called with BKL held */
1315 	int retval;
1316 
1317 	if (usb_disabled())
1318 		return -ENODEV;
1319 
1320 	fixup_generic(driver);
1321 
1322 	if (!driver->description)
1323 		driver->description = driver->driver.name;
1324 
1325 	/* Add this device to our list of devices */
1326 	list_add(&driver->driver_list, &usb_serial_driver_list);
1327 
1328 	retval = usb_serial_bus_register(driver);
1329 	if (retval) {
1330 		printk(KERN_ERR "usb-serial: problem %d when registering "
1331 		       "driver %s\n", retval, driver->description);
1332 		list_del(&driver->driver_list);
1333 	} else
1334 		printk(KERN_INFO "USB Serial support registered for %s\n",
1335 						driver->description);
1336 
1337 	return retval;
1338 }
1339 EXPORT_SYMBOL_GPL(usb_serial_register);
1340 
1341 
1342 void usb_serial_deregister(struct usb_serial_driver *device)
1343 {
1344 	/* must be called with BKL held */
1345 	printk(KERN_INFO "USB Serial deregistering driver %s\n",
1346 	       device->description);
1347 	list_del(&device->driver_list);
1348 	usb_serial_bus_deregister(device);
1349 }
1350 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1351 
1352 /* Module information */
1353 MODULE_AUTHOR(DRIVER_AUTHOR);
1354 MODULE_DESCRIPTION(DRIVER_DESC);
1355 MODULE_LICENSE("GPL");
1356 
1357 module_param(debug, bool, S_IRUGO | S_IWUSR);
1358 MODULE_PARM_DESC(debug, "Debug enabled or not");
1359