xref: /linux/drivers/usb/serial/usb-serial.c (revision 3252b11fc4790d046b93f300c898df2f7cd7c176)
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 	if (!IS_ERR(port->write_fifo) && port->write_fifo)
599 		kfifo_free(port->write_fifo);
600 	kfree(port->bulk_in_buffer);
601 	kfree(port->bulk_out_buffer);
602 	kfree(port->interrupt_in_buffer);
603 	kfree(port->interrupt_out_buffer);
604 	kfree(port);
605 }
606 
607 static struct usb_serial *create_serial(struct usb_device *dev,
608 					struct usb_interface *interface,
609 					struct usb_serial_driver *driver)
610 {
611 	struct usb_serial *serial;
612 
613 	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
614 	if (!serial) {
615 		dev_err(&dev->dev, "%s - out of memory\n", __func__);
616 		return NULL;
617 	}
618 	serial->dev = usb_get_dev(dev);
619 	serial->type = driver;
620 	serial->interface = interface;
621 	kref_init(&serial->kref);
622 	mutex_init(&serial->disc_mutex);
623 	serial->minor = SERIAL_TTY_NO_MINOR;
624 
625 	return serial;
626 }
627 
628 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
629 					    struct usb_serial_driver *drv)
630 {
631 	struct usb_dynid *dynid;
632 
633 	spin_lock(&drv->dynids.lock);
634 	list_for_each_entry(dynid, &drv->dynids.list, node) {
635 		if (usb_match_one_id(intf, &dynid->id)) {
636 			spin_unlock(&drv->dynids.lock);
637 			return &dynid->id;
638 		}
639 	}
640 	spin_unlock(&drv->dynids.lock);
641 	return NULL;
642 }
643 
644 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
645 						struct usb_interface *intf)
646 {
647 	const struct usb_device_id *id;
648 
649 	id = usb_match_id(intf, drv->id_table);
650 	if (id) {
651 		dbg("static descriptor matches");
652 		goto exit;
653 	}
654 	id = match_dynamic_id(intf, drv);
655 	if (id)
656 		dbg("dynamic descriptor matches");
657 exit:
658 	return id;
659 }
660 
661 static struct usb_serial_driver *search_serial_device(
662 					struct usb_interface *iface)
663 {
664 	const struct usb_device_id *id;
665 	struct usb_serial_driver *drv;
666 
667 	/* Check if the usb id matches a known device */
668 	list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
669 		id = get_iface_id(drv, iface);
670 		if (id)
671 			return drv;
672 	}
673 
674 	return NULL;
675 }
676 
677 static int serial_carrier_raised(struct tty_port *port)
678 {
679 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
680 	struct usb_serial_driver *drv = p->serial->type;
681 	if (drv->carrier_raised)
682 		return drv->carrier_raised(p);
683 	/* No carrier control - don't block */
684 	return 1;
685 }
686 
687 static void serial_dtr_rts(struct tty_port *port, int on)
688 {
689 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
690 	struct usb_serial_driver *drv = p->serial->type;
691 	if (drv->dtr_rts)
692 		drv->dtr_rts(p, on);
693 }
694 
695 static const struct tty_port_operations serial_port_ops = {
696 	.carrier_raised = serial_carrier_raised,
697 	.dtr_rts = serial_dtr_rts,
698 	.activate = serial_activate,
699 	.shutdown = serial_down,
700 };
701 
702 int usb_serial_probe(struct usb_interface *interface,
703 			       const struct usb_device_id *id)
704 {
705 	struct usb_device *dev = interface_to_usbdev(interface);
706 	struct usb_serial *serial = NULL;
707 	struct usb_serial_port *port;
708 	struct usb_host_interface *iface_desc;
709 	struct usb_endpoint_descriptor *endpoint;
710 	struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
711 	struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
712 	struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
713 	struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
714 	struct usb_serial_driver *type = NULL;
715 	int retval;
716 	unsigned int minor;
717 	int buffer_size;
718 	int i;
719 	int num_interrupt_in = 0;
720 	int num_interrupt_out = 0;
721 	int num_bulk_in = 0;
722 	int num_bulk_out = 0;
723 	int num_ports = 0;
724 	int max_endpoints;
725 
726 	lock_kernel(); /* guard against unloading a serial driver module */
727 	type = search_serial_device(interface);
728 	if (!type) {
729 		unlock_kernel();
730 		dbg("none matched");
731 		return -ENODEV;
732 	}
733 
734 	serial = create_serial(dev, interface, type);
735 	if (!serial) {
736 		unlock_kernel();
737 		dev_err(&interface->dev, "%s - out of memory\n", __func__);
738 		return -ENOMEM;
739 	}
740 
741 	/* if this device type has a probe function, call it */
742 	if (type->probe) {
743 		const struct usb_device_id *id;
744 
745 		if (!try_module_get(type->driver.owner)) {
746 			unlock_kernel();
747 			dev_err(&interface->dev,
748 				"module get failed, exiting\n");
749 			kfree(serial);
750 			return -EIO;
751 		}
752 
753 		id = get_iface_id(type, interface);
754 		retval = type->probe(serial, id);
755 		module_put(type->driver.owner);
756 
757 		if (retval) {
758 			unlock_kernel();
759 			dbg("sub driver rejected device");
760 			kfree(serial);
761 			return retval;
762 		}
763 	}
764 
765 	/* descriptor matches, let's find the endpoints needed */
766 	/* check out the endpoints */
767 	iface_desc = interface->cur_altsetting;
768 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
769 		endpoint = &iface_desc->endpoint[i].desc;
770 
771 		if (usb_endpoint_is_bulk_in(endpoint)) {
772 			/* we found a bulk in endpoint */
773 			dbg("found bulk in on endpoint %d", i);
774 			bulk_in_endpoint[num_bulk_in] = endpoint;
775 			++num_bulk_in;
776 		}
777 
778 		if (usb_endpoint_is_bulk_out(endpoint)) {
779 			/* we found a bulk out endpoint */
780 			dbg("found bulk out on endpoint %d", i);
781 			bulk_out_endpoint[num_bulk_out] = endpoint;
782 			++num_bulk_out;
783 		}
784 
785 		if (usb_endpoint_is_int_in(endpoint)) {
786 			/* we found a interrupt in endpoint */
787 			dbg("found interrupt in on endpoint %d", i);
788 			interrupt_in_endpoint[num_interrupt_in] = endpoint;
789 			++num_interrupt_in;
790 		}
791 
792 		if (usb_endpoint_is_int_out(endpoint)) {
793 			/* we found an interrupt out endpoint */
794 			dbg("found interrupt out on endpoint %d", i);
795 			interrupt_out_endpoint[num_interrupt_out] = endpoint;
796 			++num_interrupt_out;
797 		}
798 	}
799 
800 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
801 	/* BEGIN HORRIBLE HACK FOR PL2303 */
802 	/* this is needed due to the looney way its endpoints are set up */
803 	if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
804 	     (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
805 	    ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
806 	     (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
807 	    ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
808 	     (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
809 	    ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
810 	     (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
811 		if (interface != dev->actconfig->interface[0]) {
812 			/* check out the endpoints of the other interface*/
813 			iface_desc = dev->actconfig->interface[0]->cur_altsetting;
814 			for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
815 				endpoint = &iface_desc->endpoint[i].desc;
816 				if (usb_endpoint_is_int_in(endpoint)) {
817 					/* we found a interrupt in endpoint */
818 					dbg("found interrupt in for Prolific device on separate interface");
819 					interrupt_in_endpoint[num_interrupt_in] = endpoint;
820 					++num_interrupt_in;
821 				}
822 			}
823 		}
824 
825 		/* Now make sure the PL-2303 is configured correctly.
826 		 * If not, give up now and hope this hack will work
827 		 * properly during a later invocation of usb_serial_probe
828 		 */
829 		if (num_bulk_in == 0 || num_bulk_out == 0) {
830 			unlock_kernel();
831 			dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
832 			kfree(serial);
833 			return -ENODEV;
834 		}
835 	}
836 	/* END HORRIBLE HACK FOR PL2303 */
837 #endif
838 
839 #ifdef CONFIG_USB_SERIAL_GENERIC
840 	if (type == &usb_serial_generic_device) {
841 		num_ports = num_bulk_out;
842 		if (num_ports == 0) {
843 			unlock_kernel();
844 			dev_err(&interface->dev,
845 			    "Generic device with no bulk out, not allowed.\n");
846 			kfree(serial);
847 			return -EIO;
848 		}
849 	}
850 #endif
851 	if (!num_ports) {
852 		/* if this device type has a calc_num_ports function, call it */
853 		if (type->calc_num_ports) {
854 			if (!try_module_get(type->driver.owner)) {
855 				unlock_kernel();
856 				dev_err(&interface->dev,
857 					"module get failed, exiting\n");
858 				kfree(serial);
859 				return -EIO;
860 			}
861 			num_ports = type->calc_num_ports(serial);
862 			module_put(type->driver.owner);
863 		}
864 		if (!num_ports)
865 			num_ports = type->num_ports;
866 	}
867 
868 	serial->num_ports = num_ports;
869 	serial->num_bulk_in = num_bulk_in;
870 	serial->num_bulk_out = num_bulk_out;
871 	serial->num_interrupt_in = num_interrupt_in;
872 	serial->num_interrupt_out = num_interrupt_out;
873 
874 	/* found all that we need */
875 	dev_info(&interface->dev, "%s converter detected\n",
876 			type->description);
877 
878 	/* create our ports, we need as many as the max endpoints */
879 	/* we don't use num_ports here because some devices have more
880 	   endpoint pairs than ports */
881 	max_endpoints = max(num_bulk_in, num_bulk_out);
882 	max_endpoints = max(max_endpoints, num_interrupt_in);
883 	max_endpoints = max(max_endpoints, num_interrupt_out);
884 	max_endpoints = max(max_endpoints, (int)serial->num_ports);
885 	serial->num_port_pointers = max_endpoints;
886 	unlock_kernel();
887 
888 	dbg("%s - setting up %d port structures for this device",
889 						__func__, max_endpoints);
890 	for (i = 0; i < max_endpoints; ++i) {
891 		port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
892 		if (!port)
893 			goto probe_error;
894 		tty_port_init(&port->port);
895 		port->port.ops = &serial_port_ops;
896 		port->serial = serial;
897 		spin_lock_init(&port->lock);
898 		/* Keep this for private driver use for the moment but
899 		   should probably go away */
900 		INIT_WORK(&port->work, usb_serial_port_work);
901 		serial->port[i] = port;
902 		port->dev.parent = &interface->dev;
903 		port->dev.driver = NULL;
904 		port->dev.bus = &usb_serial_bus_type;
905 		port->dev.release = &port_release;
906 		device_initialize(&port->dev);
907 	}
908 
909 	/* set up the endpoint information */
910 	for (i = 0; i < num_bulk_in; ++i) {
911 		endpoint = bulk_in_endpoint[i];
912 		port = serial->port[i];
913 		port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
914 		if (!port->read_urb) {
915 			dev_err(&interface->dev, "No free urbs available\n");
916 			goto probe_error;
917 		}
918 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
919 		port->bulk_in_size = buffer_size;
920 		port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
921 		port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
922 		if (!port->bulk_in_buffer) {
923 			dev_err(&interface->dev,
924 					"Couldn't allocate bulk_in_buffer\n");
925 			goto probe_error;
926 		}
927 		usb_fill_bulk_urb(port->read_urb, dev,
928 				usb_rcvbulkpipe(dev,
929 						endpoint->bEndpointAddress),
930 				port->bulk_in_buffer, buffer_size,
931 				serial->type->read_bulk_callback, port);
932 	}
933 
934 	for (i = 0; i < num_bulk_out; ++i) {
935 		endpoint = bulk_out_endpoint[i];
936 		port = serial->port[i];
937 		port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
938 		if (!port->write_urb) {
939 			dev_err(&interface->dev, "No free urbs available\n");
940 			goto probe_error;
941 		}
942 		port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
943 			&port->lock);
944 		if (IS_ERR(port->write_fifo))
945 			goto probe_error;
946 		buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
947 		port->bulk_out_size = buffer_size;
948 		port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
949 		port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
950 		if (!port->bulk_out_buffer) {
951 			dev_err(&interface->dev,
952 					"Couldn't allocate bulk_out_buffer\n");
953 			goto probe_error;
954 		}
955 		usb_fill_bulk_urb(port->write_urb, dev,
956 				usb_sndbulkpipe(dev,
957 					endpoint->bEndpointAddress),
958 				port->bulk_out_buffer, buffer_size,
959 				serial->type->write_bulk_callback, port);
960 	}
961 
962 	if (serial->type->read_int_callback) {
963 		for (i = 0; i < num_interrupt_in; ++i) {
964 			endpoint = interrupt_in_endpoint[i];
965 			port = serial->port[i];
966 			port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
967 			if (!port->interrupt_in_urb) {
968 				dev_err(&interface->dev,
969 						"No free urbs available\n");
970 				goto probe_error;
971 			}
972 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
973 			port->interrupt_in_endpointAddress =
974 						endpoint->bEndpointAddress;
975 			port->interrupt_in_buffer = kmalloc(buffer_size,
976 								GFP_KERNEL);
977 			if (!port->interrupt_in_buffer) {
978 				dev_err(&interface->dev,
979 				    "Couldn't allocate interrupt_in_buffer\n");
980 				goto probe_error;
981 			}
982 			usb_fill_int_urb(port->interrupt_in_urb, dev,
983 				usb_rcvintpipe(dev,
984 						endpoint->bEndpointAddress),
985 				port->interrupt_in_buffer, buffer_size,
986 				serial->type->read_int_callback, port,
987 				endpoint->bInterval);
988 		}
989 	} else if (num_interrupt_in) {
990 		dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
991 	}
992 
993 	if (serial->type->write_int_callback) {
994 		for (i = 0; i < num_interrupt_out; ++i) {
995 			endpoint = interrupt_out_endpoint[i];
996 			port = serial->port[i];
997 			port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
998 			if (!port->interrupt_out_urb) {
999 				dev_err(&interface->dev,
1000 						"No free urbs available\n");
1001 				goto probe_error;
1002 			}
1003 			buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1004 			port->interrupt_out_size = buffer_size;
1005 			port->interrupt_out_endpointAddress =
1006 						endpoint->bEndpointAddress;
1007 			port->interrupt_out_buffer = kmalloc(buffer_size,
1008 								GFP_KERNEL);
1009 			if (!port->interrupt_out_buffer) {
1010 				dev_err(&interface->dev,
1011 				  "Couldn't allocate interrupt_out_buffer\n");
1012 				goto probe_error;
1013 			}
1014 			usb_fill_int_urb(port->interrupt_out_urb, dev,
1015 				usb_sndintpipe(dev,
1016 						  endpoint->bEndpointAddress),
1017 				port->interrupt_out_buffer, buffer_size,
1018 				serial->type->write_int_callback, port,
1019 				endpoint->bInterval);
1020 		}
1021 	} else if (num_interrupt_out) {
1022 		dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1023 	}
1024 
1025 	/* if this device type has an attach function, call it */
1026 	if (type->attach) {
1027 		if (!try_module_get(type->driver.owner)) {
1028 			dev_err(&interface->dev,
1029 					"module get failed, exiting\n");
1030 			goto probe_error;
1031 		}
1032 		retval = type->attach(serial);
1033 		module_put(type->driver.owner);
1034 		if (retval < 0)
1035 			goto probe_error;
1036 		serial->attached = 1;
1037 		if (retval > 0) {
1038 			/* quietly accept this device, but don't bind to a
1039 			   serial port as it's about to disappear */
1040 			serial->num_ports = 0;
1041 			goto exit;
1042 		}
1043 	} else {
1044 		serial->attached = 1;
1045 	}
1046 
1047 	if (get_free_serial(serial, num_ports, &minor) == NULL) {
1048 		dev_err(&interface->dev, "No more free serial devices\n");
1049 		goto probe_error;
1050 	}
1051 	serial->minor = minor;
1052 
1053 	/* register all of the individual ports with the driver core */
1054 	for (i = 0; i < num_ports; ++i) {
1055 		port = serial->port[i];
1056 		dev_set_name(&port->dev, "ttyUSB%d", port->number);
1057 		dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1058 		port->dev_state = PORT_REGISTERING;
1059 		retval = device_add(&port->dev);
1060 		if (retval) {
1061 			dev_err(&port->dev, "Error registering port device, "
1062 				"continuing\n");
1063 			port->dev_state = PORT_UNREGISTERED;
1064 		} else {
1065 			port->dev_state = PORT_REGISTERED;
1066 		}
1067 	}
1068 
1069 	usb_serial_console_init(debug, minor);
1070 
1071 exit:
1072 	/* success */
1073 	usb_set_intfdata(interface, serial);
1074 	return 0;
1075 
1076 probe_error:
1077 	usb_serial_put(serial);
1078 	return -EIO;
1079 }
1080 EXPORT_SYMBOL_GPL(usb_serial_probe);
1081 
1082 void usb_serial_disconnect(struct usb_interface *interface)
1083 {
1084 	int i;
1085 	struct usb_serial *serial = usb_get_intfdata(interface);
1086 	struct device *dev = &interface->dev;
1087 	struct usb_serial_port *port;
1088 
1089 	usb_serial_console_disconnect(serial);
1090 	dbg("%s", __func__);
1091 
1092 	mutex_lock(&serial->disc_mutex);
1093 	usb_set_intfdata(interface, NULL);
1094 	/* must set a flag, to signal subdrivers */
1095 	serial->disconnected = 1;
1096 	mutex_unlock(&serial->disc_mutex);
1097 
1098 	for (i = 0; i < serial->num_ports; ++i) {
1099 		port = serial->port[i];
1100 		if (port) {
1101 			struct tty_struct *tty = tty_port_tty_get(&port->port);
1102 			if (tty) {
1103 				tty_vhangup(tty);
1104 				tty_kref_put(tty);
1105 			}
1106 			kill_traffic(port);
1107 			cancel_work_sync(&port->work);
1108 			if (port->dev_state == PORT_REGISTERED) {
1109 
1110 				/* Make sure the port is bound so that the
1111 				 * driver's port_remove method is called.
1112 				 */
1113 				if (!port->dev.driver) {
1114 					int rc;
1115 
1116 					port->dev.driver =
1117 							&serial->type->driver;
1118 					rc = device_bind_driver(&port->dev);
1119 				}
1120 				port->dev_state = PORT_UNREGISTERING;
1121 				device_del(&port->dev);
1122 				port->dev_state = PORT_UNREGISTERED;
1123 			}
1124 		}
1125 	}
1126 	serial->type->disconnect(serial);
1127 
1128 	/* let the last holder of this object cause it to be cleaned up */
1129 	usb_serial_put(serial);
1130 	dev_info(dev, "device disconnected\n");
1131 }
1132 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1133 
1134 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1135 {
1136 	struct usb_serial *serial = usb_get_intfdata(intf);
1137 	struct usb_serial_port *port;
1138 	int i, r = 0;
1139 
1140 	serial->suspending = 1;
1141 
1142 	if (serial->type->suspend) {
1143 		r = serial->type->suspend(serial, message);
1144 		if (r < 0) {
1145 			serial->suspending = 0;
1146 			goto err_out;
1147 		}
1148 	}
1149 
1150 	for (i = 0; i < serial->num_ports; ++i) {
1151 		port = serial->port[i];
1152 		if (port)
1153 			kill_traffic(port);
1154 	}
1155 
1156 err_out:
1157 	return r;
1158 }
1159 EXPORT_SYMBOL(usb_serial_suspend);
1160 
1161 int usb_serial_resume(struct usb_interface *intf)
1162 {
1163 	struct usb_serial *serial = usb_get_intfdata(intf);
1164 	int rv;
1165 
1166 	serial->suspending = 0;
1167 	if (serial->type->resume)
1168 		rv = serial->type->resume(serial);
1169 	else
1170 		rv = usb_serial_generic_resume(serial);
1171 
1172 	return rv;
1173 }
1174 EXPORT_SYMBOL(usb_serial_resume);
1175 
1176 static const struct tty_operations serial_ops = {
1177 	.open =			serial_open,
1178 	.close =		serial_close,
1179 	.write =		serial_write,
1180 	.hangup = 		serial_hangup,
1181 	.write_room =		serial_write_room,
1182 	.ioctl =		serial_ioctl,
1183 	.set_termios =		serial_set_termios,
1184 	.throttle =		serial_throttle,
1185 	.unthrottle =		serial_unthrottle,
1186 	.break_ctl =		serial_break,
1187 	.chars_in_buffer =	serial_chars_in_buffer,
1188 	.tiocmget =		serial_tiocmget,
1189 	.tiocmset =		serial_tiocmset,
1190 	.cleanup = 		serial_cleanup,
1191 	.install = 		serial_install,
1192 	.proc_fops =		&serial_proc_fops,
1193 };
1194 
1195 
1196 struct tty_driver *usb_serial_tty_driver;
1197 
1198 static int __init usb_serial_init(void)
1199 {
1200 	int i;
1201 	int result;
1202 
1203 	usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1204 	if (!usb_serial_tty_driver)
1205 		return -ENOMEM;
1206 
1207 	/* Initialize our global data */
1208 	for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1209 		serial_table[i] = NULL;
1210 
1211 	result = bus_register(&usb_serial_bus_type);
1212 	if (result) {
1213 		printk(KERN_ERR "usb-serial: %s - registering bus driver "
1214 		       "failed\n", __func__);
1215 		goto exit_bus;
1216 	}
1217 
1218 	usb_serial_tty_driver->owner = THIS_MODULE;
1219 	usb_serial_tty_driver->driver_name = "usbserial";
1220 	usb_serial_tty_driver->name = 	"ttyUSB";
1221 	usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1222 	usb_serial_tty_driver->minor_start = 0;
1223 	usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1224 	usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1225 	usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1226 						TTY_DRIVER_DYNAMIC_DEV;
1227 	usb_serial_tty_driver->init_termios = tty_std_termios;
1228 	usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1229 							| HUPCL | CLOCAL;
1230 	usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1231 	usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1232 	tty_set_operations(usb_serial_tty_driver, &serial_ops);
1233 	result = tty_register_driver(usb_serial_tty_driver);
1234 	if (result) {
1235 		printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1236 		       __func__);
1237 		goto exit_reg_driver;
1238 	}
1239 
1240 	/* register the USB driver */
1241 	result = usb_register(&usb_serial_driver);
1242 	if (result < 0) {
1243 		printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1244 		       __func__);
1245 		goto exit_tty;
1246 	}
1247 
1248 	/* register the generic driver, if we should */
1249 	result = usb_serial_generic_register(debug);
1250 	if (result < 0) {
1251 		printk(KERN_ERR "usb-serial: %s - registering generic "
1252 		       "driver failed\n", __func__);
1253 		goto exit_generic;
1254 	}
1255 
1256 	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1257 
1258 	return result;
1259 
1260 exit_generic:
1261 	usb_deregister(&usb_serial_driver);
1262 
1263 exit_tty:
1264 	tty_unregister_driver(usb_serial_tty_driver);
1265 
1266 exit_reg_driver:
1267 	bus_unregister(&usb_serial_bus_type);
1268 
1269 exit_bus:
1270 	printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1271 	       __func__, result);
1272 	put_tty_driver(usb_serial_tty_driver);
1273 	return result;
1274 }
1275 
1276 
1277 static void __exit usb_serial_exit(void)
1278 {
1279 	usb_serial_console_exit();
1280 
1281 	usb_serial_generic_deregister();
1282 
1283 	usb_deregister(&usb_serial_driver);
1284 	tty_unregister_driver(usb_serial_tty_driver);
1285 	put_tty_driver(usb_serial_tty_driver);
1286 	bus_unregister(&usb_serial_bus_type);
1287 }
1288 
1289 
1290 module_init(usb_serial_init);
1291 module_exit(usb_serial_exit);
1292 
1293 #define set_to_generic_if_null(type, function)				\
1294 	do {								\
1295 		if (!type->function) {					\
1296 			type->function = usb_serial_generic_##function;	\
1297 			dbg("Had to override the " #function		\
1298 				" usb serial operation with the generic one.");\
1299 			}						\
1300 	} while (0)
1301 
1302 static void fixup_generic(struct usb_serial_driver *device)
1303 {
1304 	set_to_generic_if_null(device, open);
1305 	set_to_generic_if_null(device, write);
1306 	set_to_generic_if_null(device, close);
1307 	set_to_generic_if_null(device, write_room);
1308 	set_to_generic_if_null(device, chars_in_buffer);
1309 	set_to_generic_if_null(device, read_bulk_callback);
1310 	set_to_generic_if_null(device, write_bulk_callback);
1311 	set_to_generic_if_null(device, disconnect);
1312 	set_to_generic_if_null(device, release);
1313 }
1314 
1315 int usb_serial_register(struct usb_serial_driver *driver)
1316 {
1317 	/* must be called with BKL held */
1318 	int retval;
1319 
1320 	if (usb_disabled())
1321 		return -ENODEV;
1322 
1323 	fixup_generic(driver);
1324 
1325 	if (!driver->description)
1326 		driver->description = driver->driver.name;
1327 
1328 	/* Add this device to our list of devices */
1329 	list_add(&driver->driver_list, &usb_serial_driver_list);
1330 
1331 	retval = usb_serial_bus_register(driver);
1332 	if (retval) {
1333 		printk(KERN_ERR "usb-serial: problem %d when registering "
1334 		       "driver %s\n", retval, driver->description);
1335 		list_del(&driver->driver_list);
1336 	} else
1337 		printk(KERN_INFO "USB Serial support registered for %s\n",
1338 						driver->description);
1339 
1340 	return retval;
1341 }
1342 EXPORT_SYMBOL_GPL(usb_serial_register);
1343 
1344 
1345 void usb_serial_deregister(struct usb_serial_driver *device)
1346 {
1347 	/* must be called with BKL held */
1348 	printk(KERN_INFO "USB Serial deregistering driver %s\n",
1349 	       device->description);
1350 	list_del(&device->driver_list);
1351 	usb_serial_bus_deregister(device);
1352 }
1353 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1354 
1355 /* Module information */
1356 MODULE_AUTHOR(DRIVER_AUTHOR);
1357 MODULE_DESCRIPTION(DRIVER_DESC);
1358 MODULE_LICENSE("GPL");
1359 
1360 module_param(debug, bool, S_IRUGO | S_IWUSR);
1361 MODULE_PARM_DESC(debug, "Debug enabled or not");
1362