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