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