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