Lines Matching +full:usb +full:- +full:port +full:- +full:id

1 // SPDX-License-Identifier: GPL-2.0
3 * USB Serial Converter driver
5 * Copyright (C) 2009 - 2013 Johan Hovold (jhovold@gmail.com)
6 * Copyright (C) 1999 - 2012 Greg Kroah-Hartman (greg@kroah.com)
13 * See Documentation/usb/usb-serial.rst for more information on using this
34 #include <linux/usb.h>
35 #include <linux/usb/serial.h>
39 #define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
40 #define DRIVER_DESC "USB Serial Driver core"
57 * Look up the serial port structure. If it is found and it hasn't been
64 struct usb_serial_port *port; in usb_serial_port_get_by_minor() local
67 port = idr_find(&serial_minors, minor); in usb_serial_port_get_by_minor()
68 if (!port) in usb_serial_port_get_by_minor()
71 serial = port->serial; in usb_serial_port_get_by_minor()
72 mutex_lock(&serial->disc_mutex); in usb_serial_port_get_by_minor()
73 if (serial->disconnected) { in usb_serial_port_get_by_minor()
74 mutex_unlock(&serial->disc_mutex); in usb_serial_port_get_by_minor()
75 port = NULL; in usb_serial_port_get_by_minor()
77 kref_get(&serial->kref); in usb_serial_port_get_by_minor()
81 return port; in usb_serial_port_get_by_minor()
86 struct usb_serial_port *port; in allocate_minors() local
90 dev_dbg(&serial->interface->dev, "%s %d\n", __func__, num_ports); in allocate_minors()
94 port = serial->port[i]; in allocate_minors()
95 minor = idr_alloc(&serial_minors, port, 0, in allocate_minors()
99 port->minor = minor; in allocate_minors()
100 port->port_number = i; in allocate_minors()
102 serial->minors_reserved = 1; in allocate_minors()
108 idr_remove(&serial_minors, serial->port[j]->minor); in allocate_minors()
118 for (i = 0; i < serial->num_ports; ++i) in release_minors()
119 idr_remove(&serial_minors, serial->port[i]->minor); in release_minors()
121 serial->minors_reserved = 0; in release_minors()
127 struct usb_serial_port *port; in destroy_serial() local
133 if (serial->minors_reserved) in destroy_serial()
136 if (serial->attached && serial->type->release) in destroy_serial()
137 serial->type->release(serial); in destroy_serial()
140 for (i = 0; i < serial->num_port_pointers; ++i) { in destroy_serial()
141 port = serial->port[i]; in destroy_serial()
142 if (port) { in destroy_serial()
143 port->serial = NULL; in destroy_serial()
144 put_device(&port->dev); in destroy_serial()
148 usb_put_intf(serial->interface); in destroy_serial()
149 usb_put_dev(serial->dev); in destroy_serial()
155 kref_put(&serial->kref, destroy_serial); in usb_serial_put()
163 * serial_install - install tty
164 * @driver: the driver (USB in our case)
168 * USB serial settings but permit them to be overridden by
169 * serial->type->init_termios on first open.
173 * where we store a pointer to the port, and where we do an autoresume.
178 int idx = tty->index; in serial_install()
180 struct usb_serial_port *port; in serial_install() local
182 int retval = -ENODEV; in serial_install()
184 port = usb_serial_port_get_by_minor(idx); in serial_install()
185 if (!port) in serial_install()
188 serial = port->serial; in serial_install()
189 if (!try_module_get(serial->type->driver.owner)) in serial_install()
192 retval = usb_autopm_get_interface(serial->interface); in serial_install()
196 init_termios = (driver->termios[idx] == NULL); in serial_install()
202 mutex_unlock(&serial->disc_mutex); in serial_install()
205 if (init_termios && serial->type->init_termios) in serial_install()
206 serial->type->init_termios(tty); in serial_install()
208 tty->driver_data = port; in serial_install()
213 usb_autopm_put_interface(serial->interface); in serial_install()
215 module_put(serial->type->driver.owner); in serial_install()
218 mutex_unlock(&serial->disc_mutex); in serial_install()
224 struct usb_serial_port *port = in serial_port_activate() local
225 container_of(tport, struct usb_serial_port, port); in serial_port_activate()
226 struct usb_serial *serial = port->serial; in serial_port_activate()
229 mutex_lock(&serial->disc_mutex); in serial_port_activate()
230 if (serial->disconnected) in serial_port_activate()
231 retval = -ENODEV; in serial_port_activate()
233 retval = port->serial->type->open(tty, port); in serial_port_activate()
234 mutex_unlock(&serial->disc_mutex); in serial_port_activate()
244 struct usb_serial_port *port = tty->driver_data; in serial_open() local
246 dev_dbg(tty->dev, "%s\n", __func__); in serial_open()
248 return tty_port_open(&port->port, tty, filp); in serial_open()
252 * serial_port_shutdown - shut down hardware
253 * @tport: tty port to shut down
255 * Shut down a USB serial port. Serialized against activate by the
263 struct usb_serial_port *port = in serial_port_shutdown() local
264 container_of(tport, struct usb_serial_port, port); in serial_port_shutdown()
265 struct usb_serial_driver *drv = port->serial->type; in serial_port_shutdown()
267 if (drv->close) in serial_port_shutdown()
268 drv->close(port); in serial_port_shutdown()
273 struct usb_serial_port *port = tty->driver_data; in serial_hangup() local
275 dev_dbg(tty->dev, "%s\n", __func__); in serial_hangup()
277 tty_port_hangup(&port->port); in serial_hangup()
282 struct usb_serial_port *port = tty->driver_data; in serial_close() local
284 dev_dbg(tty->dev, "%s\n", __func__); in serial_close()
286 tty_port_close(&port->port, tty, filp); in serial_close()
290 * serial_cleanup - free resources post close/hangup
293 * Do the resource freeing and refcount dropping for the port.
300 struct usb_serial_port *port = tty->driver_data; in serial_cleanup() local
304 dev_dbg(tty->dev, "%s\n", __func__); in serial_cleanup()
309 if (port->port.console) in serial_cleanup()
312 tty->driver_data = NULL; in serial_cleanup()
314 serial = port->serial; in serial_cleanup()
315 owner = serial->type->driver.owner; in serial_cleanup()
317 usb_autopm_put_interface(serial->interface); in serial_cleanup()
326 struct usb_serial_port *port = tty->driver_data; in serial_write() local
327 int retval = -ENODEV; in serial_write()
329 if (port->serial->dev->state == USB_STATE_NOTATTACHED) in serial_write()
332 dev_dbg(tty->dev, "%s - %d byte(s)\n", __func__, count); in serial_write()
334 retval = port->serial->type->write(tty, port, buf, count); in serial_write()
343 struct usb_serial_port *port = tty->driver_data; in serial_write_room() local
345 dev_dbg(tty->dev, "%s\n", __func__); in serial_write_room()
347 return port->serial->type->write_room(tty); in serial_write_room()
352 struct usb_serial_port *port = tty->driver_data; in serial_chars_in_buffer() local
353 struct usb_serial *serial = port->serial; in serial_chars_in_buffer()
355 dev_dbg(tty->dev, "%s\n", __func__); in serial_chars_in_buffer()
357 if (serial->disconnected) in serial_chars_in_buffer()
360 return serial->type->chars_in_buffer(tty); in serial_chars_in_buffer()
365 struct usb_serial_port *port = tty->driver_data; in serial_wait_until_sent() local
366 struct usb_serial *serial = port->serial; in serial_wait_until_sent()
368 dev_dbg(tty->dev, "%s\n", __func__); in serial_wait_until_sent()
370 if (!port->serial->type->wait_until_sent) in serial_wait_until_sent()
373 mutex_lock(&serial->disc_mutex); in serial_wait_until_sent()
374 if (!serial->disconnected) in serial_wait_until_sent()
375 port->serial->type->wait_until_sent(tty, timeout); in serial_wait_until_sent()
376 mutex_unlock(&serial->disc_mutex); in serial_wait_until_sent()
381 struct usb_serial_port *port = tty->driver_data; in serial_throttle() local
383 dev_dbg(tty->dev, "%s\n", __func__); in serial_throttle()
385 if (port->serial->type->throttle) in serial_throttle()
386 port->serial->type->throttle(tty); in serial_throttle()
391 struct usb_serial_port *port = tty->driver_data; in serial_unthrottle() local
393 dev_dbg(tty->dev, "%s\n", __func__); in serial_unthrottle()
395 if (port->serial->type->unthrottle) in serial_unthrottle()
396 port->serial->type->unthrottle(tty); in serial_unthrottle()
401 struct usb_serial_port *port = tty->driver_data; in serial_get_serial() local
403 if (port->serial->type->get_serial) in serial_get_serial()
404 return port->serial->type->get_serial(tty, ss); in serial_get_serial()
405 return -ENOTTY; in serial_get_serial()
410 struct usb_serial_port *port = tty->driver_data; in serial_set_serial() local
412 if (port->serial->type->set_serial) in serial_set_serial()
413 return port->serial->type->set_serial(tty, ss); in serial_set_serial()
414 return -ENOTTY; in serial_set_serial()
420 struct usb_serial_port *port = tty->driver_data; in serial_ioctl() local
421 int retval = -ENOIOCTLCMD; in serial_ioctl()
423 dev_dbg(tty->dev, "%s - cmd 0x%04x\n", __func__, cmd); in serial_ioctl()
427 if (port->serial->type->tiocmiwait) in serial_ioctl()
428 retval = port->serial->type->tiocmiwait(tty, arg); in serial_ioctl()
431 if (port->serial->type->ioctl) in serial_ioctl()
432 retval = port->serial->type->ioctl(tty, cmd, arg); in serial_ioctl()
440 struct usb_serial_port *port = tty->driver_data; in serial_set_termios() local
442 dev_dbg(tty->dev, "%s\n", __func__); in serial_set_termios()
444 if (port->serial->type->set_termios) in serial_set_termios()
445 port->serial->type->set_termios(tty, port, old); in serial_set_termios()
447 tty_termios_copy_hw(&tty->termios, old); in serial_set_termios()
452 struct usb_serial_port *port = tty->driver_data; in serial_break() local
454 dev_dbg(tty->dev, "%s\n", __func__); in serial_break()
456 if (port->serial->type->break_ctl) in serial_break()
457 port->serial->type->break_ctl(tty, break_state); in serial_break()
465 struct usb_serial_port *port; in serial_proc_show() local
471 port = usb_serial_port_get_by_minor(i); in serial_proc_show()
472 if (port == NULL) in serial_proc_show()
474 serial = port->serial; in serial_proc_show()
477 if (serial->type->driver.owner) in serial_proc_show()
479 module_name(serial->type->driver.owner)); in serial_proc_show()
481 serial->type->description); in serial_proc_show()
483 le16_to_cpu(serial->dev->descriptor.idVendor), in serial_proc_show()
484 le16_to_cpu(serial->dev->descriptor.idProduct)); in serial_proc_show()
485 seq_printf(m, " num_ports:%d", serial->num_ports); in serial_proc_show()
486 seq_printf(m, " port:%d", port->port_number); in serial_proc_show()
487 usb_make_path(serial->dev, tmp, sizeof(tmp)); in serial_proc_show()
492 mutex_unlock(&serial->disc_mutex); in serial_proc_show()
499 struct usb_serial_port *port = tty->driver_data; in serial_tiocmget() local
501 dev_dbg(tty->dev, "%s\n", __func__); in serial_tiocmget()
503 if (port->serial->type->tiocmget) in serial_tiocmget()
504 return port->serial->type->tiocmget(tty); in serial_tiocmget()
505 return -EINVAL; in serial_tiocmget()
511 struct usb_serial_port *port = tty->driver_data; in serial_tiocmset() local
513 dev_dbg(tty->dev, "%s\n", __func__); in serial_tiocmset()
515 if (port->serial->type->tiocmset) in serial_tiocmset()
516 return port->serial->type->tiocmset(tty, set, clear); in serial_tiocmset()
517 return -EINVAL; in serial_tiocmset()
523 struct usb_serial_port *port = tty->driver_data; in serial_get_icount() local
525 dev_dbg(tty->dev, "%s\n", __func__); in serial_get_icount()
527 if (port->serial->type->get_icount) in serial_get_icount()
528 return port->serial->type->get_icount(tty, icount); in serial_get_icount()
529 return -EINVAL; in serial_get_icount()
534 * disciplines have an annoying habit of calling tty->write from
537 void usb_serial_port_softint(struct usb_serial_port *port) in usb_serial_port_softint() argument
539 schedule_work(&port->work); in usb_serial_port_softint()
545 struct usb_serial_port *port = in usb_serial_port_work() local
548 tty_port_tty_wakeup(&port->port); in usb_serial_port_work()
551 static void usb_serial_port_poison_urbs(struct usb_serial_port *port) in usb_serial_port_poison_urbs() argument
555 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) in usb_serial_port_poison_urbs()
556 usb_poison_urb(port->read_urbs[i]); in usb_serial_port_poison_urbs()
557 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) in usb_serial_port_poison_urbs()
558 usb_poison_urb(port->write_urbs[i]); in usb_serial_port_poison_urbs()
560 usb_poison_urb(port->interrupt_in_urb); in usb_serial_port_poison_urbs()
561 usb_poison_urb(port->interrupt_out_urb); in usb_serial_port_poison_urbs()
564 static void usb_serial_port_unpoison_urbs(struct usb_serial_port *port) in usb_serial_port_unpoison_urbs() argument
568 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) in usb_serial_port_unpoison_urbs()
569 usb_unpoison_urb(port->read_urbs[i]); in usb_serial_port_unpoison_urbs()
570 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) in usb_serial_port_unpoison_urbs()
571 usb_unpoison_urb(port->write_urbs[i]); in usb_serial_port_unpoison_urbs()
573 usb_unpoison_urb(port->interrupt_in_urb); in usb_serial_port_unpoison_urbs()
574 usb_unpoison_urb(port->interrupt_out_urb); in usb_serial_port_unpoison_urbs()
579 struct usb_serial_port *port = to_usb_serial_port(dev); in usb_serial_port_release() local
584 usb_free_urb(port->interrupt_in_urb); in usb_serial_port_release()
585 usb_free_urb(port->interrupt_out_urb); in usb_serial_port_release()
586 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in usb_serial_port_release()
587 usb_free_urb(port->read_urbs[i]); in usb_serial_port_release()
588 kfree(port->bulk_in_buffers[i]); in usb_serial_port_release()
590 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) { in usb_serial_port_release()
591 usb_free_urb(port->write_urbs[i]); in usb_serial_port_release()
592 kfree(port->bulk_out_buffers[i]); in usb_serial_port_release()
594 kfifo_free(&port->write_fifo); in usb_serial_port_release()
595 kfree(port->interrupt_in_buffer); in usb_serial_port_release()
596 kfree(port->interrupt_out_buffer); in usb_serial_port_release()
597 tty_port_destroy(&port->port); in usb_serial_port_release()
598 kfree(port); in usb_serial_port_release()
610 serial->dev = usb_get_dev(dev); in create_serial()
611 serial->type = driver; in create_serial()
612 serial->interface = usb_get_intf(interface); in create_serial()
613 kref_init(&serial->kref); in create_serial()
614 mutex_init(&serial->disc_mutex); in create_serial()
615 serial->minors_reserved = 0; in create_serial()
625 spin_lock(&drv->dynids.lock); in match_dynamic_id()
626 list_for_each_entry(dynid, &drv->dynids.list, node) { in match_dynamic_id()
627 if (usb_match_one_id(intf, &dynid->id)) { in match_dynamic_id()
628 spin_unlock(&drv->dynids.lock); in match_dynamic_id()
629 return &dynid->id; in match_dynamic_id()
632 spin_unlock(&drv->dynids.lock); in match_dynamic_id()
639 const struct usb_device_id *id; in get_iface_id() local
641 id = usb_match_id(intf, drv->id_table); in get_iface_id()
642 if (id) { in get_iface_id()
643 dev_dbg(&intf->dev, "static descriptor matches\n"); in get_iface_id()
646 id = match_dynamic_id(intf, drv); in get_iface_id()
647 if (id) in get_iface_id()
648 dev_dbg(&intf->dev, "dynamic descriptor matches\n"); in get_iface_id()
650 return id; in get_iface_id()
657 const struct usb_device_id *id = NULL; in search_serial_device() local
659 struct usb_driver *driver = to_usb_driver(iface->dev.driver); in search_serial_device()
661 /* Check if the usb id matches a known device */ in search_serial_device()
663 if (drv->usb_driver == driver) in search_serial_device()
664 id = get_iface_id(drv, iface); in search_serial_device()
665 if (id) in search_serial_device()
672 static int serial_port_carrier_raised(struct tty_port *port) in serial_port_carrier_raised() argument
674 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); in serial_port_carrier_raised()
675 struct usb_serial_driver *drv = p->serial->type; in serial_port_carrier_raised()
677 if (drv->carrier_raised) in serial_port_carrier_raised()
678 return drv->carrier_raised(p); in serial_port_carrier_raised()
679 /* No carrier control - don't block */ in serial_port_carrier_raised()
683 static void serial_port_dtr_rts(struct tty_port *port, int on) in serial_port_dtr_rts() argument
685 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port); in serial_port_dtr_rts()
686 struct usb_serial_driver *drv = p->serial->type; in serial_port_dtr_rts()
688 if (drv->dtr_rts) in serial_port_dtr_rts()
689 drv->dtr_rts(p, on); in serial_port_dtr_rts()
695 struct usb_serial_port *port = to_usb_serial_port(dev); in port_number_show() local
697 return sprintf(buf, "%u\n", port->port_number); in port_number_show()
717 struct device *dev = &serial->interface->dev; in find_endpoints()
722 BUILD_BUG_ON(ARRAY_SIZE(epds->bulk_in) < USB_MAXENDPOINTS / 2); in find_endpoints()
723 BUILD_BUG_ON(ARRAY_SIZE(epds->bulk_out) < USB_MAXENDPOINTS / 2); in find_endpoints()
724 BUILD_BUG_ON(ARRAY_SIZE(epds->interrupt_in) < USB_MAXENDPOINTS / 2); in find_endpoints()
725 BUILD_BUG_ON(ARRAY_SIZE(epds->interrupt_out) < USB_MAXENDPOINTS / 2); in find_endpoints()
727 iface_desc = serial->interface->cur_altsetting; in find_endpoints()
728 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { in find_endpoints()
729 epd = &iface_desc->endpoint[i].desc; in find_endpoints()
733 epds->bulk_in[epds->num_bulk_in++] = epd; in find_endpoints()
736 epds->bulk_out[epds->num_bulk_out++] = epd; in find_endpoints()
739 epds->interrupt_in[epds->num_interrupt_in++] = epd; in find_endpoints()
742 epds->interrupt_out[epds->num_interrupt_out++] = epd; in find_endpoints()
747 static int setup_port_bulk_in(struct usb_serial_port *port, in setup_port_bulk_in() argument
750 struct usb_serial_driver *type = port->serial->type; in setup_port_bulk_in()
751 struct usb_device *udev = port->serial->dev; in setup_port_bulk_in()
755 buffer_size = max_t(int, type->bulk_in_size, usb_endpoint_maxp(epd)); in setup_port_bulk_in()
756 port->bulk_in_size = buffer_size; in setup_port_bulk_in()
757 port->bulk_in_endpointAddress = epd->bEndpointAddress; in setup_port_bulk_in()
759 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) { in setup_port_bulk_in()
760 set_bit(i, &port->read_urbs_free); in setup_port_bulk_in()
761 port->read_urbs[i] = usb_alloc_urb(0, GFP_KERNEL); in setup_port_bulk_in()
762 if (!port->read_urbs[i]) in setup_port_bulk_in()
763 return -ENOMEM; in setup_port_bulk_in()
764 port->bulk_in_buffers[i] = kmalloc(buffer_size, GFP_KERNEL); in setup_port_bulk_in()
765 if (!port->bulk_in_buffers[i]) in setup_port_bulk_in()
766 return -ENOMEM; in setup_port_bulk_in()
767 usb_fill_bulk_urb(port->read_urbs[i], udev, in setup_port_bulk_in()
768 usb_rcvbulkpipe(udev, epd->bEndpointAddress), in setup_port_bulk_in()
769 port->bulk_in_buffers[i], buffer_size, in setup_port_bulk_in()
770 type->read_bulk_callback, port); in setup_port_bulk_in()
773 port->read_urb = port->read_urbs[0]; in setup_port_bulk_in()
774 port->bulk_in_buffer = port->bulk_in_buffers[0]; in setup_port_bulk_in()
779 static int setup_port_bulk_out(struct usb_serial_port *port, in setup_port_bulk_out() argument
782 struct usb_serial_driver *type = port->serial->type; in setup_port_bulk_out()
783 struct usb_device *udev = port->serial->dev; in setup_port_bulk_out()
787 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL)) in setup_port_bulk_out()
788 return -ENOMEM; in setup_port_bulk_out()
789 if (type->bulk_out_size) in setup_port_bulk_out()
790 buffer_size = type->bulk_out_size; in setup_port_bulk_out()
793 port->bulk_out_size = buffer_size; in setup_port_bulk_out()
794 port->bulk_out_endpointAddress = epd->bEndpointAddress; in setup_port_bulk_out()
796 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) { in setup_port_bulk_out()
797 set_bit(i, &port->write_urbs_free); in setup_port_bulk_out()
798 port->write_urbs[i] = usb_alloc_urb(0, GFP_KERNEL); in setup_port_bulk_out()
799 if (!port->write_urbs[i]) in setup_port_bulk_out()
800 return -ENOMEM; in setup_port_bulk_out()
801 port->bulk_out_buffers[i] = kmalloc(buffer_size, GFP_KERNEL); in setup_port_bulk_out()
802 if (!port->bulk_out_buffers[i]) in setup_port_bulk_out()
803 return -ENOMEM; in setup_port_bulk_out()
804 usb_fill_bulk_urb(port->write_urbs[i], udev, in setup_port_bulk_out()
805 usb_sndbulkpipe(udev, epd->bEndpointAddress), in setup_port_bulk_out()
806 port->bulk_out_buffers[i], buffer_size, in setup_port_bulk_out()
807 type->write_bulk_callback, port); in setup_port_bulk_out()
810 port->write_urb = port->write_urbs[0]; in setup_port_bulk_out()
811 port->bulk_out_buffer = port->bulk_out_buffers[0]; in setup_port_bulk_out()
816 static int setup_port_interrupt_in(struct usb_serial_port *port, in setup_port_interrupt_in() argument
819 struct usb_serial_driver *type = port->serial->type; in setup_port_interrupt_in()
820 struct usb_device *udev = port->serial->dev; in setup_port_interrupt_in()
823 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); in setup_port_interrupt_in()
824 if (!port->interrupt_in_urb) in setup_port_interrupt_in()
825 return -ENOMEM; in setup_port_interrupt_in()
827 port->interrupt_in_endpointAddress = epd->bEndpointAddress; in setup_port_interrupt_in()
828 port->interrupt_in_buffer = kmalloc(buffer_size, GFP_KERNEL); in setup_port_interrupt_in()
829 if (!port->interrupt_in_buffer) in setup_port_interrupt_in()
830 return -ENOMEM; in setup_port_interrupt_in()
831 usb_fill_int_urb(port->interrupt_in_urb, udev, in setup_port_interrupt_in()
832 usb_rcvintpipe(udev, epd->bEndpointAddress), in setup_port_interrupt_in()
833 port->interrupt_in_buffer, buffer_size, in setup_port_interrupt_in()
834 type->read_int_callback, port, in setup_port_interrupt_in()
835 epd->bInterval); in setup_port_interrupt_in()
840 static int setup_port_interrupt_out(struct usb_serial_port *port, in setup_port_interrupt_out() argument
843 struct usb_serial_driver *type = port->serial->type; in setup_port_interrupt_out()
844 struct usb_device *udev = port->serial->dev; in setup_port_interrupt_out()
847 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); in setup_port_interrupt_out()
848 if (!port->interrupt_out_urb) in setup_port_interrupt_out()
849 return -ENOMEM; in setup_port_interrupt_out()
851 port->interrupt_out_size = buffer_size; in setup_port_interrupt_out()
852 port->interrupt_out_endpointAddress = epd->bEndpointAddress; in setup_port_interrupt_out()
853 port->interrupt_out_buffer = kmalloc(buffer_size, GFP_KERNEL); in setup_port_interrupt_out()
854 if (!port->interrupt_out_buffer) in setup_port_interrupt_out()
855 return -ENOMEM; in setup_port_interrupt_out()
856 usb_fill_int_urb(port->interrupt_out_urb, udev, in setup_port_interrupt_out()
857 usb_sndintpipe(udev, epd->bEndpointAddress), in setup_port_interrupt_out()
858 port->interrupt_out_buffer, buffer_size, in setup_port_interrupt_out()
859 type->write_int_callback, port, in setup_port_interrupt_out()
860 epd->bInterval); in setup_port_interrupt_out()
866 const struct usb_device_id *id) in usb_serial_probe() argument
868 struct device *ddev = &interface->dev; in usb_serial_probe()
871 struct usb_serial_port *port; in usb_serial_probe() local
884 return -ENODEV; in usb_serial_probe()
887 if (!try_module_get(type->driver.owner)) { in usb_serial_probe()
890 return -EIO; in usb_serial_probe()
896 retval = -ENOMEM; in usb_serial_probe()
901 if (type->probe) { in usb_serial_probe()
902 const struct usb_device_id *id; in usb_serial_probe() local
904 id = get_iface_id(type, interface); in usb_serial_probe()
905 retval = type->probe(serial, id); in usb_serial_probe()
916 retval = -ENOMEM; in usb_serial_probe()
922 if (epds->num_bulk_in < type->num_bulk_in || in usb_serial_probe()
923 epds->num_bulk_out < type->num_bulk_out || in usb_serial_probe()
924 epds->num_interrupt_in < type->num_interrupt_in || in usb_serial_probe()
925 epds->num_interrupt_out < type->num_interrupt_out) { in usb_serial_probe()
927 retval = -ENODEV; in usb_serial_probe()
931 if (type->calc_num_ports) { in usb_serial_probe()
932 retval = type->calc_num_ports(serial, epds); in usb_serial_probe()
939 num_ports = type->num_ports; in usb_serial_probe()
946 serial->num_ports = (unsigned char)num_ports; in usb_serial_probe()
947 serial->num_bulk_in = epds->num_bulk_in; in usb_serial_probe()
948 serial->num_bulk_out = epds->num_bulk_out; in usb_serial_probe()
949 serial->num_interrupt_in = epds->num_interrupt_in; in usb_serial_probe()
950 serial->num_interrupt_out = epds->num_interrupt_out; in usb_serial_probe()
953 dev_info(ddev, "%s converter detected\n", type->description); in usb_serial_probe()
958 max_endpoints = max(epds->num_bulk_in, epds->num_bulk_out); in usb_serial_probe()
959 max_endpoints = max(max_endpoints, epds->num_interrupt_in); in usb_serial_probe()
960 max_endpoints = max(max_endpoints, epds->num_interrupt_out); in usb_serial_probe()
961 max_endpoints = max(max_endpoints, serial->num_ports); in usb_serial_probe()
962 serial->num_port_pointers = max_endpoints; in usb_serial_probe()
964 dev_dbg(ddev, "setting up %d port structure(s)\n", max_endpoints); in usb_serial_probe()
966 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL); in usb_serial_probe()
967 if (!port) { in usb_serial_probe()
968 retval = -ENOMEM; in usb_serial_probe()
971 tty_port_init(&port->port); in usb_serial_probe()
972 port->port.ops = &serial_port_ops; in usb_serial_probe()
973 port->serial = serial; in usb_serial_probe()
974 spin_lock_init(&port->lock); in usb_serial_probe()
977 INIT_WORK(&port->work, usb_serial_port_work); in usb_serial_probe()
978 serial->port[i] = port; in usb_serial_probe()
979 port->dev.parent = &interface->dev; in usb_serial_probe()
980 port->dev.driver = NULL; in usb_serial_probe()
981 port->dev.bus = &usb_serial_bus_type; in usb_serial_probe()
982 port->dev.release = &usb_serial_port_release; in usb_serial_probe()
983 port->dev.groups = usb_serial_port_groups; in usb_serial_probe()
984 device_initialize(&port->dev); in usb_serial_probe()
988 for (i = 0; i < epds->num_bulk_in; ++i) { in usb_serial_probe()
989 retval = setup_port_bulk_in(serial->port[i], epds->bulk_in[i]); in usb_serial_probe()
994 for (i = 0; i < epds->num_bulk_out; ++i) { in usb_serial_probe()
995 retval = setup_port_bulk_out(serial->port[i], in usb_serial_probe()
996 epds->bulk_out[i]); in usb_serial_probe()
1001 if (serial->type->read_int_callback) { in usb_serial_probe()
1002 for (i = 0; i < epds->num_interrupt_in; ++i) { in usb_serial_probe()
1003 retval = setup_port_interrupt_in(serial->port[i], in usb_serial_probe()
1004 epds->interrupt_in[i]); in usb_serial_probe()
1008 } else if (epds->num_interrupt_in) { in usb_serial_probe()
1012 if (serial->type->write_int_callback) { in usb_serial_probe()
1013 for (i = 0; i < epds->num_interrupt_out; ++i) { in usb_serial_probe()
1014 retval = setup_port_interrupt_out(serial->port[i], in usb_serial_probe()
1015 epds->interrupt_out[i]); in usb_serial_probe()
1019 } else if (epds->num_interrupt_out) { in usb_serial_probe()
1026 if (type->attach) { in usb_serial_probe()
1027 retval = type->attach(serial); in usb_serial_probe()
1030 serial->attached = 1; in usb_serial_probe()
1033 serial port as it's about to disappear */ in usb_serial_probe()
1034 serial->num_ports = 0; in usb_serial_probe()
1038 serial->attached = 1; in usb_serial_probe()
1049 port = serial->port[i]; in usb_serial_probe()
1050 dev_set_name(&port->dev, "ttyUSB%d", port->minor); in usb_serial_probe()
1051 dev_dbg(ddev, "registering %s\n", dev_name(&port->dev)); in usb_serial_probe()
1052 device_enable_async_suspend(&port->dev); in usb_serial_probe()
1054 retval = device_add(&port->dev); in usb_serial_probe()
1056 dev_err(ddev, "Error registering port device, continuing\n"); in usb_serial_probe()
1060 usb_serial_console_init(serial->port[0]->minor); in usb_serial_probe()
1063 module_put(type->driver.owner); in usb_serial_probe()
1071 module_put(type->driver.owner); in usb_serial_probe()
1080 struct device *dev = &interface->dev; in usb_serial_disconnect()
1081 struct usb_serial_port *port; in usb_serial_disconnect() local
1086 mutex_lock(&serial->disc_mutex); in usb_serial_disconnect()
1088 serial->disconnected = 1; in usb_serial_disconnect()
1089 mutex_unlock(&serial->disc_mutex); in usb_serial_disconnect()
1091 for (i = 0; i < serial->num_ports; ++i) { in usb_serial_disconnect()
1092 port = serial->port[i]; in usb_serial_disconnect()
1093 tty = tty_port_tty_get(&port->port); in usb_serial_disconnect()
1098 usb_serial_port_poison_urbs(port); in usb_serial_disconnect()
1099 wake_up_interruptible(&port->port.delta_msr_wait); in usb_serial_disconnect()
1100 cancel_work_sync(&port->work); in usb_serial_disconnect()
1101 if (device_is_registered(&port->dev)) in usb_serial_disconnect()
1102 device_del(&port->dev); in usb_serial_disconnect()
1104 if (serial->type->disconnect) in usb_serial_disconnect()
1105 serial->type->disconnect(serial); in usb_serial_disconnect()
1117 serial->suspending = 1; in usb_serial_suspend()
1120 * serial->type->suspend() MUST return 0 in system sleep context, in usb_serial_suspend()
1124 if (serial->type->suspend) { in usb_serial_suspend()
1125 r = serial->type->suspend(serial, message); in usb_serial_suspend()
1127 serial->suspending = 0; in usb_serial_suspend()
1132 for (i = 0; i < serial->num_ports; ++i) in usb_serial_suspend()
1133 usb_serial_port_poison_urbs(serial->port[i]); in usb_serial_suspend()
1143 for (i = 0; i < serial->num_ports; ++i) in usb_serial_unpoison_port_urbs()
1144 usb_serial_port_unpoison_urbs(serial->port[i]); in usb_serial_unpoison_port_urbs()
1154 serial->suspending = 0; in usb_serial_resume()
1155 if (serial->type->resume) in usb_serial_resume()
1156 rv = serial->type->resume(serial); in usb_serial_resume()
1171 serial->suspending = 0; in usb_serial_reset_resume()
1172 if (serial->type->reset_resume) { in usb_serial_reset_resume()
1173 rv = serial->type->reset_resume(serial); in usb_serial_reset_resume()
1175 rv = -EOPNOTSUPP; in usb_serial_reset_resume()
1176 intf->needs_binding = 1; in usb_serial_reset_resume()
1214 return -ENOMEM; in usb_serial_init()
1219 pr_err("%s - registering bus driver failed\n", __func__); in usb_serial_init()
1223 usb_serial_tty_driver->driver_name = "usbserial"; in usb_serial_init()
1224 usb_serial_tty_driver->name = "ttyUSB"; in usb_serial_init()
1225 usb_serial_tty_driver->major = USB_SERIAL_TTY_MAJOR; in usb_serial_init()
1226 usb_serial_tty_driver->minor_start = 0; in usb_serial_init()
1227 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; in usb_serial_init()
1228 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL; in usb_serial_init()
1229 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | in usb_serial_init()
1231 usb_serial_tty_driver->init_termios = tty_std_termios; in usb_serial_init()
1232 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD in usb_serial_init()
1234 usb_serial_tty_driver->init_termios.c_ispeed = 9600; in usb_serial_init()
1235 usb_serial_tty_driver->init_termios.c_ospeed = 9600; in usb_serial_init()
1239 pr_err("%s - tty_register_driver failed\n", __func__); in usb_serial_init()
1246 pr_err("%s - registering generic driver failed\n", __func__); in usb_serial_init()
1259 pr_err("%s - returning with error %d\n", __func__, result); in usb_serial_init()
1283 if (!type->function) { \
1284 type->function = usb_serial_generic_##function; \
1286 type->driver.name); \
1297 if (device->tx_empty) in usb_serial_operations_init()
1310 return -ENODEV; in usb_serial_register()
1312 if (!driver->description) in usb_serial_register()
1313 driver->description = driver->driver.name; in usb_serial_register()
1314 if (!driver->usb_driver) { in usb_serial_register()
1316 driver->description); in usb_serial_register()
1317 return -EINVAL; in usb_serial_register()
1321 driver->driver.suppress_bind_attrs = true; in usb_serial_register()
1327 list_add(&driver->driver_list, &usb_serial_driver_list); in usb_serial_register()
1331 pr_err("problem %d when registering driver %s\n", retval, driver->description); in usb_serial_register()
1332 list_del(&driver->driver_list); in usb_serial_register()
1334 pr_info("USB Serial support registered for %s\n", driver->description); in usb_serial_register()
1342 pr_info("USB Serial deregistering driver %s\n", device->description); in usb_serial_deregister()
1345 list_del(&device->driver_list); in usb_serial_deregister()
1352 * usb_serial_register_drivers - register drivers for a usb-serial module
1353 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1378 * Suspend/resume support is implemented in the usb-serial core, in usb_serial_register_drivers()
1379 * so fill in the PM-related fields in udriver. in usb_serial_register_drivers()
1383 return -ENOMEM; in usb_serial_register_drivers()
1385 udriver->name = name; in usb_serial_register_drivers()
1386 udriver->no_dynamic_id = 1; in usb_serial_register_drivers()
1387 udriver->supports_autosuspend = 1; in usb_serial_register_drivers()
1388 udriver->suspend = usb_serial_suspend; in usb_serial_register_drivers()
1389 udriver->resume = usb_serial_resume; in usb_serial_register_drivers()
1390 udriver->probe = usb_serial_probe; in usb_serial_register_drivers()
1391 udriver->disconnect = usb_serial_disconnect; in usb_serial_register_drivers()
1395 if ((*sd)->reset_resume) { in usb_serial_register_drivers()
1396 udriver->reset_resume = usb_serial_reset_resume; in usb_serial_register_drivers()
1406 (*sd)->usb_driver = udriver; in usb_serial_register_drivers()
1413 udriver->id_table = id_table; in usb_serial_register_drivers()
1414 rc = driver_attach(&udriver->drvwrap.driver); in usb_serial_register_drivers()
1418 while (sd-- > serial_drivers) in usb_serial_register_drivers()
1428 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1429 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1437 struct usb_driver *udriver = (*serial_drivers)->usb_driver; in usb_serial_deregister_drivers()