4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de>
5 * Copyright (c) 1999 Pavel Machek <pavel@ucw.cz>
6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com>
7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz>
8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name>
9 * Copyright (c) 2005 David Kubicek <dave@awk.cz>
10 * Copyright (c) 2011 Johan Hovold <jhovold@gmail.com>
12 * USB Abstract Control Model driver for USB modems and ISDN adapters
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 #include <linux/kernel.h>
35 #include <linux/errno.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/tty.h>
39 #include <linux/serial.h>
40 #include <linux/tty_driver.h>
41 #include <linux/tty_flip.h>
42 #include <linux/module.h>
43 #include <linux/mutex.h>
44 #include <linux/uaccess.h>
45 #include <linux/usb.h>
46 #include <linux/usb/cdc.h>
47 #include <asm/byteorder.h>
48 #include <asm/unaligned.h>
49 #include <linux/list.h>
54 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
55 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
57 static struct usb_driver acm_driver;
58 static struct tty_driver *acm_tty_driver;
59 static struct acm *acm_table[ACM_TTY_MINORS];
61 static DEFINE_MUTEX(open_mutex);
63 #define ACM_READY(acm) (acm && acm->dev && acm->port.count)
65 static const struct tty_port_operations acm_port_ops = {
69 * Functions for ACM control messages.
72 static int acm_ctrl_msg(struct acm *acm, int request, int value,
77 retval = usb_autopm_get_interface(acm->control);
81 retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
82 request, USB_RT_ACM, value,
83 acm->control->altsetting[0].desc.bInterfaceNumber,
86 dev_dbg(&acm->control->dev,
87 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
88 __func__, request, value, len, retval);
90 usb_autopm_put_interface(acm->control);
92 return retval < 0 ? retval : 0;
95 /* devices aren't required to support these requests.
96 * the cdc acm descriptor tells whether they do...
98 #define acm_set_control(acm, control) \
99 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
100 #define acm_set_line(acm, line) \
101 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
102 #define acm_send_break(acm, ms) \
103 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
106 * Write buffer management.
107 * All of these assume proper locks taken by the caller.
110 static int acm_wb_alloc(struct acm *acm)
123 wbn = (wbn + 1) % ACM_NW;
129 static int acm_wb_is_avail(struct acm *acm)
135 spin_lock_irqsave(&acm->write_lock, flags);
136 for (i = 0; i < ACM_NW; i++)
138 spin_unlock_irqrestore(&acm->write_lock, flags);
143 * Finish write. Caller must hold acm->write_lock
145 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
149 usb_autopm_put_interface_async(acm->control);
155 * the caller is responsible for locking
158 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
164 wb->urb->transfer_buffer = wb->buf;
165 wb->urb->transfer_dma = wb->dmah;
166 wb->urb->transfer_buffer_length = wb->len;
167 wb->urb->dev = acm->dev;
169 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
171 dev_err(&acm->data->dev,
172 "%s - usb_submit_urb(write bulk) failed: %d\n",
174 acm_write_done(acm, wb);
179 static int acm_write_start(struct acm *acm, int wbn)
182 struct acm_wb *wb = &acm->wb[wbn];
185 spin_lock_irqsave(&acm->write_lock, flags);
188 spin_unlock_irqrestore(&acm->write_lock, flags);
192 dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
194 usb_autopm_get_interface_async(acm->control);
195 if (acm->susp_count) {
196 usb_anchor_urb(wb->urb, &acm->delayed);
197 spin_unlock_irqrestore(&acm->write_lock, flags);
200 usb_mark_last_busy(acm->dev);
202 rc = acm_start_wb(acm, wb);
203 spin_unlock_irqrestore(&acm->write_lock, flags);
209 * attributes exported through sysfs
211 static ssize_t show_caps
212 (struct device *dev, struct device_attribute *attr, char *buf)
214 struct usb_interface *intf = to_usb_interface(dev);
215 struct acm *acm = usb_get_intfdata(intf);
217 return sprintf(buf, "%d", acm->ctrl_caps);
219 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
221 static ssize_t show_country_codes
222 (struct device *dev, struct device_attribute *attr, char *buf)
224 struct usb_interface *intf = to_usb_interface(dev);
225 struct acm *acm = usb_get_intfdata(intf);
227 memcpy(buf, acm->country_codes, acm->country_code_size);
228 return acm->country_code_size;
231 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
233 static ssize_t show_country_rel_date
234 (struct device *dev, struct device_attribute *attr, char *buf)
236 struct usb_interface *intf = to_usb_interface(dev);
237 struct acm *acm = usb_get_intfdata(intf);
239 return sprintf(buf, "%d", acm->country_rel_date);
242 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
244 * Interrupt handlers for various ACM device responses
247 /* control interface reports status changes with "interrupt" transfers */
248 static void acm_ctrl_irq(struct urb *urb)
250 struct acm *acm = urb->context;
251 struct usb_cdc_notification *dr = urb->transfer_buffer;
252 struct tty_struct *tty;
256 int status = urb->status;
265 /* this urb is terminated, clean up */
266 dev_dbg(&acm->control->dev,
267 "%s - urb shutting down with status: %d\n",
271 dev_dbg(&acm->control->dev,
272 "%s - nonzero urb status received: %d\n",
280 usb_mark_last_busy(acm->dev);
282 data = (unsigned char *)(dr + 1);
283 switch (dr->bNotificationType) {
284 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
285 dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
286 __func__, dr->wValue);
289 case USB_CDC_NOTIFY_SERIAL_STATE:
290 tty = tty_port_tty_get(&acm->port);
291 newctrl = get_unaligned_le16(data);
295 (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
296 dev_dbg(&acm->control->dev,
297 "%s - calling hangup\n", __func__);
303 acm->ctrlin = newctrl;
305 dev_dbg(&acm->control->dev,
306 "%s - input control lines: dcd%c dsr%c break%c "
307 "ring%c framing%c parity%c overrun%c\n",
309 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
310 acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
311 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
312 acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
313 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
314 acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
315 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
319 dev_dbg(&acm->control->dev,
320 "%s - unknown notification %d received: index %d "
321 "len %d data0 %d data1 %d\n",
323 dr->bNotificationType, dr->wIndex,
324 dr->wLength, data[0], data[1]);
328 retval = usb_submit_urb(urb, GFP_ATOMIC);
330 dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
334 static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
338 if (!test_and_clear_bit(index, &acm->read_urbs_free))
341 dev_vdbg(&acm->data->dev, "%s - urb %d\n", __func__, index);
343 res = usb_submit_urb(acm->read_urbs[index], mem_flags);
346 dev_err(&acm->data->dev,
347 "%s - usb_submit_urb failed: %d\n",
350 set_bit(index, &acm->read_urbs_free);
357 static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
362 for (i = 0; i < acm->rx_buflimit; ++i) {
363 res = acm_submit_read_urb(acm, i, mem_flags);
371 static void acm_process_read_urb(struct acm *acm, struct urb *urb)
373 struct tty_struct *tty;
375 if (!urb->actual_length)
378 tty = tty_port_tty_get(&acm->port);
382 tty_insert_flip_string(tty, urb->transfer_buffer, urb->actual_length);
383 tty_flip_buffer_push(tty);
388 static void acm_read_bulk_callback(struct urb *urb)
390 struct acm_rb *rb = urb->context;
391 struct acm *acm = rb->instance;
394 dev_vdbg(&acm->data->dev, "%s - urb %d, len %d\n", __func__,
395 rb->index, urb->actual_length);
396 set_bit(rb->index, &acm->read_urbs_free);
399 dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
402 usb_mark_last_busy(acm->dev);
405 dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
406 __func__, urb->status);
409 acm_process_read_urb(acm, urb);
411 /* throttle device if requested by tty */
412 spin_lock_irqsave(&acm->read_lock, flags);
413 acm->throttled = acm->throttle_req;
414 if (!acm->throttled && !acm->susp_count) {
415 spin_unlock_irqrestore(&acm->read_lock, flags);
416 acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
418 spin_unlock_irqrestore(&acm->read_lock, flags);
422 /* data interface wrote those outgoing bytes */
423 static void acm_write_bulk(struct urb *urb)
425 struct acm_wb *wb = urb->context;
426 struct acm *acm = wb->instance;
429 if (urb->status || (urb->actual_length != urb->transfer_buffer_length))
430 dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
433 urb->transfer_buffer_length,
436 spin_lock_irqsave(&acm->write_lock, flags);
437 acm_write_done(acm, wb);
438 spin_unlock_irqrestore(&acm->write_lock, flags);
440 schedule_work(&acm->work);
443 static void acm_softint(struct work_struct *work)
445 struct acm *acm = container_of(work, struct acm, work);
446 struct tty_struct *tty;
448 dev_vdbg(&acm->data->dev, "%s\n", __func__);
452 tty = tty_port_tty_get(&acm->port);
463 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
468 mutex_lock(&open_mutex);
470 acm = acm_table[tty->index];
471 if (!acm || !acm->dev)
476 dev_dbg(&acm->control->dev, "%s\n", __func__);
478 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
480 tty->driver_data = acm;
481 tty_port_tty_set(&acm->port, tty);
483 if (usb_autopm_get_interface(acm->control) < 0)
486 acm->control->needs_remote_wakeup = 1;
488 mutex_lock(&acm->mutex);
489 if (acm->port.count++) {
490 mutex_unlock(&acm->mutex);
491 usb_autopm_put_interface(acm->control);
495 acm->ctrlurb->dev = acm->dev;
496 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
497 dev_err(&acm->control->dev,
498 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
502 if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
503 (acm->ctrl_caps & USB_CDC_CAP_LINE))
506 usb_autopm_put_interface(acm->control);
509 * Unthrottle device in case the TTY was closed while throttled.
511 spin_lock_irq(&acm->read_lock);
513 acm->throttle_req = 0;
514 spin_unlock_irq(&acm->read_lock);
516 if (acm_submit_read_urbs(acm, GFP_KERNEL))
519 set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
520 rv = tty_port_block_til_ready(&acm->port, tty, filp);
522 mutex_unlock(&acm->mutex);
524 mutex_unlock(&open_mutex);
529 mutex_unlock(&acm->mutex);
530 usb_autopm_put_interface(acm->control);
532 mutex_unlock(&open_mutex);
533 tty_port_tty_set(&acm->port, NULL);
537 static void acm_tty_unregister(struct acm *acm)
541 tty_unregister_device(acm_tty_driver, acm->minor);
542 usb_put_intf(acm->control);
543 acm_table[acm->minor] = NULL;
544 usb_free_urb(acm->ctrlurb);
545 for (i = 0; i < ACM_NW; i++)
546 usb_free_urb(acm->wb[i].urb);
547 for (i = 0; i < acm->rx_buflimit; i++)
548 usb_free_urb(acm->read_urbs[i]);
549 kfree(acm->country_codes);
553 static void acm_port_down(struct acm *acm)
560 usb_autopm_get_interface(acm->control);
561 acm_set_control(acm, acm->ctrlout = 0);
564 urb = usb_get_from_anchor(&acm->delayed);
569 usb_autopm_put_interface_async(acm->control);
572 usb_kill_urb(acm->ctrlurb);
573 for (i = 0; i < ACM_NW; i++)
574 usb_kill_urb(acm->wb[i].urb);
575 for (i = 0; i < acm->rx_buflimit; i++)
576 usb_kill_urb(acm->read_urbs[i]);
577 acm->control->needs_remote_wakeup = 0;
578 usb_autopm_put_interface(acm->control);
582 static void acm_tty_hangup(struct tty_struct *tty)
586 mutex_lock(&open_mutex);
587 acm = tty->driver_data;
592 tty_port_hangup(&acm->port);
596 mutex_unlock(&open_mutex);
599 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
601 struct acm *acm = tty->driver_data;
603 /* Perform the closing process and see if we need to do the hardware
608 mutex_lock(&open_mutex);
609 if (tty_port_close_start(&acm->port, tty, filp) == 0) {
611 tty_port_tty_set(&acm->port, NULL);
612 acm_tty_unregister(acm);
613 tty->driver_data = NULL;
615 mutex_unlock(&open_mutex);
619 tty_port_close_end(&acm->port, tty);
620 tty_port_tty_set(&acm->port, NULL);
621 mutex_unlock(&open_mutex);
624 static int acm_tty_write(struct tty_struct *tty,
625 const unsigned char *buf, int count)
627 struct acm *acm = tty->driver_data;
638 dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
640 spin_lock_irqsave(&acm->write_lock, flags);
641 wbn = acm_wb_alloc(acm);
643 spin_unlock_irqrestore(&acm->write_lock, flags);
648 count = (count > acm->writesize) ? acm->writesize : count;
649 dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
650 memcpy(wb->buf, buf, count);
652 spin_unlock_irqrestore(&acm->write_lock, flags);
654 stat = acm_write_start(acm, wbn);
660 static int acm_tty_write_room(struct tty_struct *tty)
662 struct acm *acm = tty->driver_data;
666 * Do not let the line discipline to know that we have a reserve,
667 * or it might get too enthusiastic.
669 return acm_wb_is_avail(acm) ? acm->writesize : 0;
672 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
674 struct acm *acm = tty->driver_data;
678 * This is inaccurate (overcounts), but it works.
680 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
683 static void acm_tty_throttle(struct tty_struct *tty)
685 struct acm *acm = tty->driver_data;
690 spin_lock_irq(&acm->read_lock);
691 acm->throttle_req = 1;
692 spin_unlock_irq(&acm->read_lock);
695 static void acm_tty_unthrottle(struct tty_struct *tty)
697 struct acm *acm = tty->driver_data;
698 unsigned int was_throttled;
703 spin_lock_irq(&acm->read_lock);
704 was_throttled = acm->throttled;
706 acm->throttle_req = 0;
707 spin_unlock_irq(&acm->read_lock);
710 acm_submit_read_urbs(acm, GFP_KERNEL);
713 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
715 struct acm *acm = tty->driver_data;
719 retval = acm_send_break(acm, state ? 0xffff : 0);
721 dev_dbg(&acm->control->dev, "%s - send break failed\n",
726 static int acm_tty_tiocmget(struct tty_struct *tty)
728 struct acm *acm = tty->driver_data;
733 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
734 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
735 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
736 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
737 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
741 static int acm_tty_tiocmset(struct tty_struct *tty,
742 unsigned int set, unsigned int clear)
744 struct acm *acm = tty->driver_data;
745 unsigned int newctrl;
750 newctrl = acm->ctrlout;
751 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
752 (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
753 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
754 (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
756 newctrl = (newctrl & ~clear) | set;
758 if (acm->ctrlout == newctrl)
760 return acm_set_control(acm, acm->ctrlout = newctrl);
763 static int acm_tty_ioctl(struct tty_struct *tty,
764 unsigned int cmd, unsigned long arg)
766 struct acm *acm = tty->driver_data;
774 static const __u32 acm_tty_speed[] = {
775 0, 50, 75, 110, 134, 150, 200, 300, 600,
776 1200, 1800, 2400, 4800, 9600, 19200, 38400,
777 57600, 115200, 230400, 460800, 500000, 576000,
778 921600, 1000000, 1152000, 1500000, 2000000,
779 2500000, 3000000, 3500000, 4000000
782 static void acm_tty_set_termios(struct tty_struct *tty,
783 struct ktermios *termios_old)
785 struct acm *acm = tty->driver_data;
786 struct ktermios *termios = tty->termios;
787 struct usb_cdc_line_coding newline;
788 int newctrl = acm->ctrlout;
793 newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
794 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
795 newline.bParityType = termios->c_cflag & PARENB ?
796 (termios->c_cflag & PARODD ? 1 : 2) +
797 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
798 switch (termios->c_cflag & CSIZE) {
800 newline.bDataBits = 5;
803 newline.bDataBits = 6;
806 newline.bDataBits = 7;
810 newline.bDataBits = 8;
813 /* FIXME: Needs to clear unsupported bits in the termios */
814 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
816 if (!newline.dwDTERate) {
817 newline.dwDTERate = acm->line.dwDTERate;
818 newctrl &= ~ACM_CTRL_DTR;
820 newctrl |= ACM_CTRL_DTR;
822 if (newctrl != acm->ctrlout)
823 acm_set_control(acm, acm->ctrlout = newctrl);
825 if (memcmp(&acm->line, &newline, sizeof newline)) {
826 memcpy(&acm->line, &newline, sizeof newline);
827 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
829 le32_to_cpu(newline.dwDTERate),
830 newline.bCharFormat, newline.bParityType,
832 acm_set_line(acm, &acm->line);
837 * USB probe and disconnect routines.
840 /* Little helpers: write/read buffers free */
841 static void acm_write_buffers_free(struct acm *acm)
845 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
847 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
848 usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
851 static void acm_read_buffers_free(struct acm *acm)
853 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
856 for (i = 0; i < acm->rx_buflimit; i++)
857 usb_free_coherent(usb_dev, acm->readsize,
858 acm->read_buffers[i].base, acm->read_buffers[i].dma);
861 /* Little helper: write buffers allocate */
862 static int acm_write_buffers_alloc(struct acm *acm)
867 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
868 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
874 usb_free_coherent(acm->dev, acm->writesize,
883 static int acm_probe(struct usb_interface *intf,
884 const struct usb_device_id *id)
886 struct usb_cdc_union_desc *union_header = NULL;
887 struct usb_cdc_country_functional_desc *cfd = NULL;
888 unsigned char *buffer = intf->altsetting->extra;
889 int buflen = intf->altsetting->extralen;
890 struct usb_interface *control_interface;
891 struct usb_interface *data_interface;
892 struct usb_endpoint_descriptor *epctrl = NULL;
893 struct usb_endpoint_descriptor *epread = NULL;
894 struct usb_endpoint_descriptor *epwrite = NULL;
895 struct usb_device *usb_dev = interface_to_usbdev(intf);
898 int ctrlsize, readsize;
900 u8 ac_management_function = 0;
901 u8 call_management_function = 0;
902 int call_interface_num = -1;
903 int data_interface_num = -1;
904 unsigned long quirks;
907 int combined_interfaces = 0;
910 quirks = (unsigned long)id->driver_info;
911 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
913 /* handle quirks deadly to normal probing*/
914 if (quirks == NO_UNION_NORMAL) {
915 data_interface = usb_ifnum_to_if(usb_dev, 1);
916 control_interface = usb_ifnum_to_if(usb_dev, 0);
917 goto skip_normal_probe;
922 dev_err(&intf->dev, "Weird descriptor references\n");
927 if (intf->cur_altsetting->endpoint &&
928 intf->cur_altsetting->endpoint->extralen &&
929 intf->cur_altsetting->endpoint->extra) {
931 "Seeking extra descriptors on endpoint\n");
932 buflen = intf->cur_altsetting->endpoint->extralen;
933 buffer = intf->cur_altsetting->endpoint->extra;
936 "Zero length descriptor references\n");
942 if (buffer[1] != USB_DT_CS_INTERFACE) {
943 dev_err(&intf->dev, "skipping garbage\n");
948 case USB_CDC_UNION_TYPE: /* we've found it */
950 dev_err(&intf->dev, "More than one "
951 "union descriptor, skipping ...\n");
954 union_header = (struct usb_cdc_union_desc *)buffer;
956 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
957 cfd = (struct usb_cdc_country_functional_desc *)buffer;
959 case USB_CDC_HEADER_TYPE: /* maybe check version */
960 break; /* for now we ignore it */
961 case USB_CDC_ACM_TYPE:
962 ac_management_function = buffer[3];
964 case USB_CDC_CALL_MANAGEMENT_TYPE:
965 call_management_function = buffer[3];
966 call_interface_num = buffer[4];
967 if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
968 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
971 /* there are LOTS more CDC descriptors that
972 * could legitimately be found here.
974 dev_dbg(&intf->dev, "Ignoring descriptor: "
975 "type %02x, length %d\n",
976 buffer[2], buffer[0]);
985 if (call_interface_num > 0) {
986 dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
987 /* quirks for Droids MuIn LCD */
988 if (quirks & NO_DATA_INTERFACE)
989 data_interface = usb_ifnum_to_if(usb_dev, 0);
991 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
992 control_interface = intf;
994 if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
995 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
998 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
999 combined_interfaces = 1;
1000 control_interface = data_interface = intf;
1001 goto look_for_collapsed_interface;
1005 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1006 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1007 if (!control_interface || !data_interface) {
1008 dev_dbg(&intf->dev, "no interfaces\n");
1013 if (data_interface_num != call_interface_num)
1014 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1016 if (control_interface == data_interface) {
1017 /* some broken devices designed for windows work this way */
1018 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1019 combined_interfaces = 1;
1020 /* a popular other OS doesn't use it */
1021 quirks |= NO_CAP_LINE;
1022 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1023 dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1026 look_for_collapsed_interface:
1027 for (i = 0; i < 3; i++) {
1028 struct usb_endpoint_descriptor *ep;
1029 ep = &data_interface->cur_altsetting->endpoint[i].desc;
1031 if (usb_endpoint_is_int_in(ep))
1033 else if (usb_endpoint_is_bulk_out(ep))
1035 else if (usb_endpoint_is_bulk_in(ep))
1040 if (!epctrl || !epread || !epwrite)
1043 goto made_compressed_probe;
1048 /*workaround for switched interfaces */
1049 if (data_interface->cur_altsetting->desc.bInterfaceClass
1050 != CDC_DATA_INTERFACE_TYPE) {
1051 if (control_interface->cur_altsetting->desc.bInterfaceClass
1052 == CDC_DATA_INTERFACE_TYPE) {
1053 struct usb_interface *t;
1055 "Your device has switched interfaces.\n");
1056 t = control_interface;
1057 control_interface = data_interface;
1064 /* Accept probe requests only for the control interface */
1065 if (!combined_interfaces && intf != control_interface)
1068 if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1069 /* valid in this context */
1070 dev_dbg(&intf->dev, "The data interface isn't available\n");
1075 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1076 control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1079 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1080 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1081 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1084 /* workaround for switched endpoints */
1085 if (!usb_endpoint_dir_in(epread)) {
1086 /* descriptors are swapped */
1087 struct usb_endpoint_descriptor *t;
1089 "The data interface has switched endpoints\n");
1094 made_compressed_probe:
1095 dev_dbg(&intf->dev, "interfaces are valid\n");
1096 for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1098 if (minor == ACM_TTY_MINORS) {
1099 dev_err(&intf->dev, "no more free acm devices\n");
1103 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1105 dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1109 ctrlsize = usb_endpoint_maxp(epctrl);
1110 readsize = usb_endpoint_maxp(epread) *
1111 (quirks == SINGLE_RX_URB ? 1 : 2);
1112 acm->combined_interfaces = combined_interfaces;
1113 acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1114 acm->control = control_interface;
1115 acm->data = data_interface;
1118 acm->ctrl_caps = ac_management_function;
1119 if (quirks & NO_CAP_LINE)
1120 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1121 acm->ctrlsize = ctrlsize;
1122 acm->readsize = readsize;
1123 acm->rx_buflimit = num_rx_buf;
1124 INIT_WORK(&acm->work, acm_softint);
1125 spin_lock_init(&acm->write_lock);
1126 spin_lock_init(&acm->read_lock);
1127 mutex_init(&acm->mutex);
1128 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1129 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1131 acm->bInterval = epread->bInterval;
1132 tty_port_init(&acm->port);
1133 acm->port.ops = &acm_port_ops;
1134 init_usb_anchor(&acm->delayed);
1136 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1138 dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1141 acm->ctrl_buffer = buf;
1143 if (acm_write_buffers_alloc(acm) < 0) {
1144 dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1148 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1149 if (!acm->ctrlurb) {
1150 dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1153 for (i = 0; i < num_rx_buf; i++) {
1154 struct acm_rb *rb = &(acm->read_buffers[i]);
1157 rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1160 dev_err(&intf->dev, "out of memory "
1161 "(read bufs usb_alloc_coherent)\n");
1167 urb = usb_alloc_urb(0, GFP_KERNEL);
1170 "out of memory (read urbs usb_alloc_urb)\n");
1173 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1174 urb->transfer_dma = rb->dma;
1175 if (acm->is_int_ep) {
1176 usb_fill_int_urb(urb, acm->dev,
1180 acm_read_bulk_callback, rb,
1183 usb_fill_bulk_urb(urb, acm->dev,
1187 acm_read_bulk_callback, rb);
1190 acm->read_urbs[i] = urb;
1191 __set_bit(i, &acm->read_urbs_free);
1193 for (i = 0; i < ACM_NW; i++) {
1194 struct acm_wb *snd = &(acm->wb[i]);
1196 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1197 if (snd->urb == NULL) {
1199 "out of memory (write urbs usb_alloc_urb)\n");
1203 if (usb_endpoint_xfer_int(epwrite))
1204 usb_fill_int_urb(snd->urb, usb_dev,
1205 usb_sndintpipe(usb_dev, epwrite->bEndpointAddress),
1206 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1208 usb_fill_bulk_urb(snd->urb, usb_dev,
1209 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1210 NULL, acm->writesize, acm_write_bulk, snd);
1211 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1212 snd->instance = acm;
1215 usb_set_intfdata(intf, acm);
1217 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1221 if (cfd) { /* export the country data */
1222 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1223 if (!acm->country_codes)
1224 goto skip_countries;
1225 acm->country_code_size = cfd->bLength - 4;
1226 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1228 acm->country_rel_date = cfd->iCountryCodeRelDate;
1230 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1232 kfree(acm->country_codes);
1233 acm->country_codes = NULL;
1234 acm->country_code_size = 0;
1235 goto skip_countries;
1238 i = device_create_file(&intf->dev,
1239 &dev_attr_iCountryCodeRelDate);
1241 device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1242 kfree(acm->country_codes);
1243 acm->country_codes = NULL;
1244 acm->country_code_size = 0;
1245 goto skip_countries;
1250 usb_fill_int_urb(acm->ctrlurb, usb_dev,
1251 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1252 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1253 /* works around buggy devices */
1254 epctrl->bInterval ? epctrl->bInterval : 0xff);
1255 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1256 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1258 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1260 acm_set_control(acm, acm->ctrlout);
1262 acm->line.dwDTERate = cpu_to_le32(9600);
1263 acm->line.bDataBits = 8;
1264 acm_set_line(acm, &acm->line);
1266 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1267 usb_set_intfdata(data_interface, acm);
1269 usb_get_intf(control_interface);
1270 tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1272 acm_table[minor] = acm;
1276 for (i = 0; i < ACM_NW; i++)
1277 usb_free_urb(acm->wb[i].urb);
1279 for (i = 0; i < num_rx_buf; i++)
1280 usb_free_urb(acm->read_urbs[i]);
1281 acm_read_buffers_free(acm);
1282 usb_free_urb(acm->ctrlurb);
1284 acm_write_buffers_free(acm);
1286 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1293 static void stop_data_traffic(struct acm *acm)
1297 dev_dbg(&acm->control->dev, "%s\n", __func__);
1299 usb_kill_urb(acm->ctrlurb);
1300 for (i = 0; i < ACM_NW; i++)
1301 usb_kill_urb(acm->wb[i].urb);
1302 for (i = 0; i < acm->rx_buflimit; i++)
1303 usb_kill_urb(acm->read_urbs[i]);
1305 cancel_work_sync(&acm->work);
1308 static void acm_disconnect(struct usb_interface *intf)
1310 struct acm *acm = usb_get_intfdata(intf);
1311 struct usb_device *usb_dev = interface_to_usbdev(intf);
1312 struct tty_struct *tty;
1314 /* sibling interface is already cleaning up */
1318 mutex_lock(&open_mutex);
1319 if (acm->country_codes) {
1320 device_remove_file(&acm->control->dev,
1321 &dev_attr_wCountryCodes);
1322 device_remove_file(&acm->control->dev,
1323 &dev_attr_iCountryCodeRelDate);
1325 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1327 usb_set_intfdata(acm->control, NULL);
1328 usb_set_intfdata(acm->data, NULL);
1330 stop_data_traffic(acm);
1332 acm_write_buffers_free(acm);
1333 usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1335 acm_read_buffers_free(acm);
1337 if (!acm->combined_interfaces)
1338 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1339 acm->data : acm->control);
1341 if (acm->port.count == 0) {
1342 acm_tty_unregister(acm);
1343 mutex_unlock(&open_mutex);
1347 mutex_unlock(&open_mutex);
1348 tty = tty_port_tty_get(&acm->port);
1356 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1358 struct acm *acm = usb_get_intfdata(intf);
1361 spin_lock_irq(&acm->read_lock);
1362 spin_lock(&acm->write_lock);
1363 if (PMSG_IS_AUTO(message)) {
1364 if (acm->transmitting) {
1365 spin_unlock(&acm->write_lock);
1366 spin_unlock_irq(&acm->read_lock);
1370 cnt = acm->susp_count++;
1371 spin_unlock(&acm->write_lock);
1372 spin_unlock_irq(&acm->read_lock);
1377 we treat opened interfaces differently,
1378 we must guard against open
1380 mutex_lock(&acm->mutex);
1382 if (acm->port.count)
1383 stop_data_traffic(acm);
1385 mutex_unlock(&acm->mutex);
1389 static int acm_resume(struct usb_interface *intf)
1391 struct acm *acm = usb_get_intfdata(intf);
1395 mutex_lock(&acm->mutex);
1396 spin_lock_irq(&acm->read_lock);
1397 spin_lock(&acm->write_lock);
1399 if (--acm->susp_count)
1402 if (acm->port.count) {
1403 rv = usb_submit_urb(acm->ctrlurb, GFP_ATOMIC);
1406 urb = usb_get_from_anchor(&acm->delayed);
1410 acm_start_wb(acm, urb->context);
1414 * delayed error checking because we must
1415 * do the write path at all cost
1420 rv = acm_submit_read_urbs(acm, GFP_ATOMIC);
1423 spin_unlock(&acm->write_lock);
1424 spin_unlock_irq(&acm->read_lock);
1425 mutex_unlock(&acm->mutex);
1430 static int acm_reset_resume(struct usb_interface *intf)
1432 struct acm *acm = usb_get_intfdata(intf);
1433 struct tty_struct *tty;
1435 mutex_lock(&acm->mutex);
1436 if (acm->port.count) {
1437 tty = tty_port_tty_get(&acm->port);
1443 mutex_unlock(&acm->mutex);
1444 return acm_resume(intf);
1447 #endif /* CONFIG_PM */
1449 #define NOKIA_PCSUITE_ACM_INFO(x) \
1450 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1451 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1452 USB_CDC_ACM_PROTO_VENDOR)
1454 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1455 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1456 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1457 USB_CDC_ACM_PROTO_VENDOR)
1460 * USB driver structure.
1463 static const struct usb_device_id acm_ids[] = {
1464 /* quirky and broken devices */
1465 { USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1466 .driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1467 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1468 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1470 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1471 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1473 { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1474 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1476 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1477 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1479 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1480 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1482 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1483 .driver_info = SINGLE_RX_URB,
1485 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1486 .driver_info = SINGLE_RX_URB, /* firmware bug */
1488 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1489 .driver_info = SINGLE_RX_URB, /* firmware bug */
1491 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1492 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1494 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1495 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1497 { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1498 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1500 { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1501 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1503 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1504 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1506 { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1508 /* Motorola H24 HSPA module: */
1509 { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */
1510 { USB_DEVICE(0x22b8, 0x2d92), /* modem + diagnostics */
1511 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1513 { USB_DEVICE(0x22b8, 0x2d93), /* modem + AT port */
1514 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1516 { USB_DEVICE(0x22b8, 0x2d95), /* modem + AT port + diagnostics */
1517 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1519 { USB_DEVICE(0x22b8, 0x2d96), /* modem + NMEA */
1520 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1522 { USB_DEVICE(0x22b8, 0x2d97), /* modem + diagnostics + NMEA */
1523 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1525 { USB_DEVICE(0x22b8, 0x2d99), /* modem + AT port + NMEA */
1526 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1528 { USB_DEVICE(0x22b8, 0x2d9a), /* modem + AT port + diagnostics + NMEA */
1529 .driver_info = NO_UNION_NORMAL, /* handle only modem interface */
1532 { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1533 .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1534 data interface instead of
1535 communications interface.
1536 Maybe we should define a new
1539 { USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1540 .driver_info = NO_UNION_NORMAL,
1542 { USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1543 .driver_info = NO_UNION_NORMAL,
1545 { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1546 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1548 { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1549 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1552 /* Nokia S60 phones expose two ACM channels. The first is
1553 * a modem and is picked up by the standard AT-command
1554 * information below. The second is 'vendor-specific' but
1555 * is treated as a serial device at the S60 end, so we want
1556 * to expose it on Linux too. */
1557 { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1558 { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1559 { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1560 { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1561 { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1562 { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1563 { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1564 { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1565 { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1566 { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1567 { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1568 { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1569 { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1570 { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1571 { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1572 { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1573 { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1574 { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */
1575 { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1576 { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1577 { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1578 { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */
1579 { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1580 { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1581 { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1582 { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1583 { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1584 { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1585 { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1586 { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1587 { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1588 { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */
1589 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1590 { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1591 { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1592 { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1593 { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1594 { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1595 { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1596 { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */
1597 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1598 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1599 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1600 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1601 { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1602 { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1603 { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1604 { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1605 { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1606 { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1607 { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1608 { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1609 { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1610 { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1611 { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1612 { NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1613 { NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1614 { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1616 /* Support for Owen devices */
1617 { USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1619 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1621 /* Support Lego NXT using pbLua firmware */
1622 { USB_DEVICE(0x0694, 0xff00),
1623 .driver_info = NOT_A_MODEM,
1626 /* Support for Droids MuIn LCD */
1627 { USB_DEVICE(0x04d8, 0x000b),
1628 .driver_info = NO_DATA_INTERFACE,
1631 /* control interfaces without any protocol set */
1632 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1633 USB_CDC_PROTO_NONE) },
1635 /* control interfaces with various AT-command sets */
1636 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1637 USB_CDC_ACM_PROTO_AT_V25TER) },
1638 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1639 USB_CDC_ACM_PROTO_AT_PCCA101) },
1640 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1641 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1642 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1643 USB_CDC_ACM_PROTO_AT_GSM) },
1644 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1645 USB_CDC_ACM_PROTO_AT_3G) },
1646 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1647 USB_CDC_ACM_PROTO_AT_CDMA) },
1652 MODULE_DEVICE_TABLE(usb, acm_ids);
1654 static struct usb_driver acm_driver = {
1657 .disconnect = acm_disconnect,
1659 .suspend = acm_suspend,
1660 .resume = acm_resume,
1661 .reset_resume = acm_reset_resume,
1663 .id_table = acm_ids,
1665 .supports_autosuspend = 1,
1670 * TTY driver structures.
1673 static const struct tty_operations acm_ops = {
1674 .open = acm_tty_open,
1675 .close = acm_tty_close,
1676 .hangup = acm_tty_hangup,
1677 .write = acm_tty_write,
1678 .write_room = acm_tty_write_room,
1679 .ioctl = acm_tty_ioctl,
1680 .throttle = acm_tty_throttle,
1681 .unthrottle = acm_tty_unthrottle,
1682 .chars_in_buffer = acm_tty_chars_in_buffer,
1683 .break_ctl = acm_tty_break_ctl,
1684 .set_termios = acm_tty_set_termios,
1685 .tiocmget = acm_tty_tiocmget,
1686 .tiocmset = acm_tty_tiocmset,
1693 static int __init acm_init(void)
1696 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1697 if (!acm_tty_driver)
1699 acm_tty_driver->owner = THIS_MODULE,
1700 acm_tty_driver->driver_name = "acm",
1701 acm_tty_driver->name = "ttyACM",
1702 acm_tty_driver->major = ACM_TTY_MAJOR,
1703 acm_tty_driver->minor_start = 0,
1704 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1705 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1706 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1707 acm_tty_driver->init_termios = tty_std_termios;
1708 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1710 tty_set_operations(acm_tty_driver, &acm_ops);
1712 retval = tty_register_driver(acm_tty_driver);
1714 put_tty_driver(acm_tty_driver);
1718 retval = usb_register(&acm_driver);
1720 tty_unregister_driver(acm_tty_driver);
1721 put_tty_driver(acm_tty_driver);
1725 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1730 static void __exit acm_exit(void)
1732 usb_deregister(&acm_driver);
1733 tty_unregister_driver(acm_tty_driver);
1734 put_tty_driver(acm_tty_driver);
1737 module_init(acm_init);
1738 module_exit(acm_exit);
1740 MODULE_AUTHOR(DRIVER_AUTHOR);
1741 MODULE_DESCRIPTION(DRIVER_DESC);
1742 MODULE_LICENSE("GPL");
1743 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);