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