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>
11 * USB Abstract Control Model driver for USB modems and ISDN adapters
16 * v0.9 - thorough cleaning, URBification, almost a rewrite
17 * v0.10 - some more cleanups
18 * v0.11 - fixed flow control, read error doesn't stop reads
19 * v0.12 - added TIOCM ioctls, added break handling, made struct acm
21 * v0.13 - added termios, added hangup
22 * v0.14 - sized down struct acm
23 * v0.15 - fixed flow control again - characters could be lost
24 * v0.16 - added code for modems with swapped data and control interfaces
25 * v0.17 - added new style probing
26 * v0.18 - fixed new style probing for devices with more configurations
27 * v0.19 - fixed CLOCAL handling (thanks to Richard Shih-Ping Chan)
28 * v0.20 - switched to probing on interface (rather than device) class
29 * v0.21 - revert to probing on device for devices with multiple configs
30 * v0.22 - probe only the control interface. if usbcore doesn't choose the
31 * config we want, sysadmin changes bConfigurationValue in sysfs.
32 * v0.23 - use softirq for rx processing, as needed by tty layer
33 * v0.24 - change probe method to evaluate CDC union descriptor
34 * v0.25 - downstream tasks paralelized to maximize throughput
35 * v0.26 - multiple write urbs, writesize increased
39 * This program is free software; you can redistribute it and/or modify
40 * it under the terms of the GNU General Public License as published by
41 * the Free Software Foundation; either version 2 of the License, or
42 * (at your option) any later version.
44 * This program is distributed in the hope that it will be useful,
45 * but WITHOUT ANY WARRANTY; without even the implied warranty of
46 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47 * GNU General Public License for more details.
49 * You should have received a copy of the GNU General Public License
50 * along with this program; if not, write to the Free Software
51 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
57 #include <linux/kernel.h>
58 #include <linux/errno.h>
59 #include <linux/init.h>
60 #include <linux/slab.h>
61 #include <linux/tty.h>
62 #include <linux/serial.h>
63 #include <linux/tty_driver.h>
64 #include <linux/tty_flip.h>
65 #include <linux/module.h>
66 #include <linux/mutex.h>
67 #include <linux/uaccess.h>
68 #include <linux/usb.h>
69 #include <linux/usb/cdc.h>
70 #include <asm/byteorder.h>
71 #include <asm/unaligned.h>
72 #include <linux/list.h>
77 #define ACM_CLOSE_TIMEOUT 15 /* seconds to let writes drain */
82 #define DRIVER_VERSION "v0.26"
83 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek"
84 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
86 static struct usb_driver acm_driver;
87 static struct tty_driver *acm_tty_driver;
88 static struct acm *acm_table[ACM_TTY_MINORS];
90 static DEFINE_MUTEX(open_mutex);
92 #define ACM_READY(acm) (acm && acm->dev && acm->port.count)
94 static const struct tty_port_operations acm_port_ops = {
104 * Functions for ACM control messages.
107 static int acm_ctrl_msg(struct acm *acm, int request, int value,
110 int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
111 request, USB_RT_ACM, value,
112 acm->control->altsetting[0].desc.bInterfaceNumber,
114 dev_dbg(&acm->control->dev,
115 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
116 __func__, request, value, len, retval);
117 return retval < 0 ? retval : 0;
120 /* devices aren't required to support these requests.
121 * the cdc acm descriptor tells whether they do...
123 #define acm_set_control(acm, control) \
124 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
125 #define acm_set_line(acm, line) \
126 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
127 #define acm_send_break(acm, ms) \
128 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
131 * Write buffer management.
132 * All of these assume proper locks taken by the caller.
135 static int acm_wb_alloc(struct acm *acm)
148 wbn = (wbn + 1) % ACM_NW;
154 static int acm_wb_is_avail(struct acm *acm)
160 spin_lock_irqsave(&acm->write_lock, flags);
161 for (i = 0; i < ACM_NW; i++)
163 spin_unlock_irqrestore(&acm->write_lock, flags);
168 * Finish write. Caller must hold acm->write_lock
170 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
174 usb_autopm_put_interface_async(acm->control);
180 * the caller is responsible for locking
183 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
189 wb->urb->transfer_buffer = wb->buf;
190 wb->urb->transfer_dma = wb->dmah;
191 wb->urb->transfer_buffer_length = wb->len;
192 wb->urb->dev = acm->dev;
194 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
196 dev_err(&acm->data->dev,
197 "%s - usb_submit_urb(write bulk) failed: %d\n",
199 acm_write_done(acm, wb);
204 static int acm_write_start(struct acm *acm, int wbn)
207 struct acm_wb *wb = &acm->wb[wbn];
210 spin_lock_irqsave(&acm->write_lock, flags);
213 spin_unlock_irqrestore(&acm->write_lock, flags);
217 dev_dbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
219 usb_autopm_get_interface_async(acm->control);
220 if (acm->susp_count) {
221 if (!acm->delayed_wb)
222 acm->delayed_wb = wb;
224 usb_autopm_put_interface_async(acm->control);
225 spin_unlock_irqrestore(&acm->write_lock, flags);
226 return 0; /* A white lie */
228 usb_mark_last_busy(acm->dev);
230 rc = acm_start_wb(acm, wb);
231 spin_unlock_irqrestore(&acm->write_lock, flags);
237 * attributes exported through sysfs
239 static ssize_t show_caps
240 (struct device *dev, struct device_attribute *attr, char *buf)
242 struct usb_interface *intf = to_usb_interface(dev);
243 struct acm *acm = usb_get_intfdata(intf);
245 return sprintf(buf, "%d", acm->ctrl_caps);
247 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
249 static ssize_t show_country_codes
250 (struct device *dev, struct device_attribute *attr, char *buf)
252 struct usb_interface *intf = to_usb_interface(dev);
253 struct acm *acm = usb_get_intfdata(intf);
255 memcpy(buf, acm->country_codes, acm->country_code_size);
256 return acm->country_code_size;
259 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
261 static ssize_t show_country_rel_date
262 (struct device *dev, struct device_attribute *attr, char *buf)
264 struct usb_interface *intf = to_usb_interface(dev);
265 struct acm *acm = usb_get_intfdata(intf);
267 return sprintf(buf, "%d", acm->country_rel_date);
270 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
272 * Interrupt handlers for various ACM device responses
275 /* control interface reports status changes with "interrupt" transfers */
276 static void acm_ctrl_irq(struct urb *urb)
278 struct acm *acm = urb->context;
279 struct usb_cdc_notification *dr = urb->transfer_buffer;
280 struct tty_struct *tty;
284 int status = urb->status;
293 /* this urb is terminated, clean up */
294 dev_dbg(&acm->control->dev,
295 "%s - urb shutting down with status: %d\n",
299 dev_dbg(&acm->control->dev,
300 "%s - nonzero urb status received: %d\n",
308 usb_mark_last_busy(acm->dev);
310 data = (unsigned char *)(dr + 1);
311 switch (dr->bNotificationType) {
312 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
313 dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
314 __func__, dr->wValue);
317 case USB_CDC_NOTIFY_SERIAL_STATE:
318 tty = tty_port_tty_get(&acm->port);
319 newctrl = get_unaligned_le16(data);
323 (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
324 dev_dbg(&acm->control->dev,
325 "%s - calling hangup\n", __func__);
331 acm->ctrlin = newctrl;
333 dev_dbg(&acm->control->dev,
334 "%s - input control lines: dcd%c dsr%c break%c "
335 "ring%c framing%c parity%c overrun%c\n",
337 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
338 acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
339 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
340 acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
341 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
342 acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
343 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
347 dev_dbg(&acm->control->dev,
348 "%s - unknown notification %d received: index %d "
349 "len %d data0 %d data1 %d\n",
351 dr->bNotificationType, dr->wIndex,
352 dr->wLength, data[0], data[1]);
356 retval = usb_submit_urb(urb, GFP_ATOMIC);
358 dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
362 /* data interface returns incoming bytes, or we got unthrottled */
363 static void acm_read_bulk(struct urb *urb)
366 struct acm_ru *rcv = urb->context;
367 struct acm *acm = rcv->instance;
368 int status = urb->status;
370 dev_dbg(&acm->data->dev, "%s - status %d\n", __func__, status);
372 if (!ACM_READY(acm)) {
373 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
376 usb_mark_last_busy(acm->dev);
379 dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
383 buf->size = urb->actual_length;
385 if (likely(status == 0)) {
386 spin_lock(&acm->read_lock);
388 list_add_tail(&rcv->list, &acm->spare_read_urbs);
389 list_add_tail(&buf->list, &acm->filled_read_bufs);
390 spin_unlock(&acm->read_lock);
392 /* we drop the buffer due to an error */
393 spin_lock(&acm->read_lock);
394 list_add_tail(&rcv->list, &acm->spare_read_urbs);
395 list_add(&buf->list, &acm->spare_read_bufs);
396 spin_unlock(&acm->read_lock);
397 /* nevertheless the tasklet must be kicked unconditionally
398 so the queue cannot dry up */
400 if (likely(!acm->susp_count))
401 tasklet_schedule(&acm->urb_task);
404 static void acm_rx_tasklet(unsigned long _acm)
406 struct acm *acm = (void *)_acm;
408 struct tty_struct *tty;
411 unsigned char throttled;
413 dev_dbg(&acm->data->dev, "%s\n", __func__);
415 if (!ACM_READY(acm)) {
416 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
420 spin_lock_irqsave(&acm->throttle_lock, flags);
421 throttled = acm->throttle;
422 spin_unlock_irqrestore(&acm->throttle_lock, flags);
424 dev_dbg(&acm->data->dev, "%s - throttled\n", __func__);
428 tty = tty_port_tty_get(&acm->port);
431 spin_lock_irqsave(&acm->read_lock, flags);
432 if (list_empty(&acm->filled_read_bufs)) {
433 spin_unlock_irqrestore(&acm->read_lock, flags);
436 buf = list_entry(acm->filled_read_bufs.next,
437 struct acm_rb, list);
438 list_del(&buf->list);
439 spin_unlock_irqrestore(&acm->read_lock, flags);
441 dev_dbg(&acm->data->dev, "%s - processing buf 0x%p, size = %d\n",
442 __func__, buf, buf->size);
444 spin_lock_irqsave(&acm->throttle_lock, flags);
445 throttled = acm->throttle;
446 spin_unlock_irqrestore(&acm->throttle_lock, flags);
448 tty_insert_flip_string(tty, buf->base, buf->size);
449 tty_flip_buffer_push(tty);
452 dev_dbg(&acm->data->dev, "%s - throttling noticed\n",
454 spin_lock_irqsave(&acm->read_lock, flags);
455 list_add(&buf->list, &acm->filled_read_bufs);
456 spin_unlock_irqrestore(&acm->read_lock, flags);
461 spin_lock_irqsave(&acm->read_lock, flags);
462 list_add(&buf->list, &acm->spare_read_bufs);
463 spin_unlock_irqrestore(&acm->read_lock, flags);
469 while (!list_empty(&acm->spare_read_bufs)) {
470 spin_lock_irqsave(&acm->read_lock, flags);
471 if (list_empty(&acm->spare_read_urbs)) {
473 spin_unlock_irqrestore(&acm->read_lock, flags);
476 rcv = list_entry(acm->spare_read_urbs.next,
477 struct acm_ru, list);
478 list_del(&rcv->list);
479 spin_unlock_irqrestore(&acm->read_lock, flags);
481 buf = list_entry(acm->spare_read_bufs.next,
482 struct acm_rb, list);
483 list_del(&buf->list);
488 usb_fill_int_urb(rcv->urb, acm->dev,
492 acm_read_bulk, rcv, acm->bInterval);
494 usb_fill_bulk_urb(rcv->urb, acm->dev,
499 rcv->urb->transfer_dma = buf->dma;
500 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
502 /* This shouldn't kill the driver as unsuccessful URBs are
503 returned to the free-urbs-pool and resubmited ASAP */
504 spin_lock_irqsave(&acm->read_lock, flags);
505 if (acm->susp_count ||
506 usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
507 list_add(&buf->list, &acm->spare_read_bufs);
508 list_add(&rcv->list, &acm->spare_read_urbs);
510 spin_unlock_irqrestore(&acm->read_lock, flags);
513 spin_unlock_irqrestore(&acm->read_lock, flags);
514 dev_dbg(&acm->data->dev,
515 "%s - sending urb 0x%p, rcv 0x%p, buf 0x%p\n",
516 __func__, rcv->urb, rcv, buf);
519 spin_lock_irqsave(&acm->read_lock, flags);
521 spin_unlock_irqrestore(&acm->read_lock, flags);
524 /* data interface wrote those outgoing bytes */
525 static void acm_write_bulk(struct urb *urb)
527 struct acm_wb *wb = urb->context;
528 struct acm *acm = wb->instance;
531 if (verbose || urb->status
532 || (urb->actual_length != urb->transfer_buffer_length))
533 dev_dbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
536 urb->transfer_buffer_length,
539 spin_lock_irqsave(&acm->write_lock, flags);
540 acm_write_done(acm, wb);
541 spin_unlock_irqrestore(&acm->write_lock, flags);
543 schedule_work(&acm->work);
545 wake_up_interruptible(&acm->drain_wait);
548 static void acm_softint(struct work_struct *work)
550 struct acm *acm = container_of(work, struct acm, work);
551 struct tty_struct *tty;
553 dev_vdbg(&acm->data->dev, "%s\n", __func__);
557 tty = tty_port_tty_get(&acm->port);
568 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
574 mutex_lock(&open_mutex);
576 acm = acm_table[tty->index];
577 if (!acm || !acm->dev)
582 dev_dbg(&acm->control->dev, "%s\n", __func__);
584 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
586 tty->driver_data = acm;
587 tty_port_tty_set(&acm->port, tty);
589 if (usb_autopm_get_interface(acm->control) < 0)
592 acm->control->needs_remote_wakeup = 1;
594 mutex_lock(&acm->mutex);
595 if (acm->port.count++) {
596 mutex_unlock(&acm->mutex);
597 usb_autopm_put_interface(acm->control);
601 acm->ctrlurb->dev = acm->dev;
602 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
603 dev_err(&acm->control->dev,
604 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
608 if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
609 (acm->ctrl_caps & USB_CDC_CAP_LINE))
612 usb_autopm_put_interface(acm->control);
614 INIT_LIST_HEAD(&acm->spare_read_urbs);
615 INIT_LIST_HEAD(&acm->spare_read_bufs);
616 INIT_LIST_HEAD(&acm->filled_read_bufs);
618 for (i = 0; i < acm->rx_buflimit; i++)
619 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
620 for (i = 0; i < acm->rx_buflimit; i++)
621 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
625 set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
626 rv = tty_port_block_til_ready(&acm->port, tty, filp);
627 tasklet_schedule(&acm->urb_task);
629 mutex_unlock(&acm->mutex);
631 mutex_unlock(&open_mutex);
635 usb_kill_urb(acm->ctrlurb);
638 mutex_unlock(&acm->mutex);
639 usb_autopm_put_interface(acm->control);
641 mutex_unlock(&open_mutex);
642 tty_port_tty_set(&acm->port, NULL);
646 static void acm_tty_unregister(struct acm *acm)
650 nr = acm->rx_buflimit;
651 tty_unregister_device(acm_tty_driver, acm->minor);
652 usb_put_intf(acm->control);
653 acm_table[acm->minor] = NULL;
654 usb_free_urb(acm->ctrlurb);
655 for (i = 0; i < ACM_NW; i++)
656 usb_free_urb(acm->wb[i].urb);
657 for (i = 0; i < nr; i++)
658 usb_free_urb(acm->ru[i].urb);
659 kfree(acm->country_codes);
663 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
665 static void acm_port_down(struct acm *acm)
667 int i, nr = acm->rx_buflimit;
668 mutex_lock(&open_mutex);
670 usb_autopm_get_interface(acm->control);
671 acm_set_control(acm, acm->ctrlout = 0);
672 usb_kill_urb(acm->ctrlurb);
673 for (i = 0; i < ACM_NW; i++)
674 usb_kill_urb(acm->wb[i].urb);
675 tasklet_disable(&acm->urb_task);
676 for (i = 0; i < nr; i++)
677 usb_kill_urb(acm->ru[i].urb);
678 tasklet_enable(&acm->urb_task);
679 acm->control->needs_remote_wakeup = 0;
680 usb_autopm_put_interface(acm->control);
682 mutex_unlock(&open_mutex);
685 static void acm_tty_hangup(struct tty_struct *tty)
687 struct acm *acm = tty->driver_data;
688 tty_port_hangup(&acm->port);
692 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
694 struct acm *acm = tty->driver_data;
696 /* Perform the closing process and see if we need to do the hardware
700 if (tty_port_close_start(&acm->port, tty, filp) == 0) {
701 mutex_lock(&open_mutex);
703 tty_port_tty_set(&acm->port, NULL);
704 acm_tty_unregister(acm);
705 tty->driver_data = NULL;
707 mutex_unlock(&open_mutex);
711 tty_port_close_end(&acm->port, tty);
712 tty_port_tty_set(&acm->port, NULL);
715 static int acm_tty_write(struct tty_struct *tty,
716 const unsigned char *buf, int count)
718 struct acm *acm = tty->driver_data;
729 dev_dbg(&acm->data->dev, "%s - count %d\n", __func__, count);
731 spin_lock_irqsave(&acm->write_lock, flags);
732 wbn = acm_wb_alloc(acm);
734 spin_unlock_irqrestore(&acm->write_lock, flags);
739 count = (count > acm->writesize) ? acm->writesize : count;
740 dev_dbg(&acm->data->dev, "%s - write %d\n", __func__, count);
741 memcpy(wb->buf, buf, count);
743 spin_unlock_irqrestore(&acm->write_lock, flags);
745 stat = acm_write_start(acm, wbn);
751 static int acm_tty_write_room(struct tty_struct *tty)
753 struct acm *acm = tty->driver_data;
757 * Do not let the line discipline to know that we have a reserve,
758 * or it might get too enthusiastic.
760 return acm_wb_is_avail(acm) ? acm->writesize : 0;
763 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
765 struct acm *acm = tty->driver_data;
769 * This is inaccurate (overcounts), but it works.
771 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
774 static void acm_tty_throttle(struct tty_struct *tty)
776 struct acm *acm = tty->driver_data;
779 spin_lock_bh(&acm->throttle_lock);
781 spin_unlock_bh(&acm->throttle_lock);
784 static void acm_tty_unthrottle(struct tty_struct *tty)
786 struct acm *acm = tty->driver_data;
789 spin_lock_bh(&acm->throttle_lock);
791 spin_unlock_bh(&acm->throttle_lock);
792 tasklet_schedule(&acm->urb_task);
795 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
797 struct acm *acm = tty->driver_data;
801 retval = acm_send_break(acm, state ? 0xffff : 0);
803 dev_dbg(&acm->control->dev, "%s - send break failed\n",
808 static int acm_tty_tiocmget(struct tty_struct *tty)
810 struct acm *acm = tty->driver_data;
815 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
816 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
817 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
818 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
819 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
823 static int acm_tty_tiocmset(struct tty_struct *tty,
824 unsigned int set, unsigned int clear)
826 struct acm *acm = tty->driver_data;
827 unsigned int newctrl;
832 newctrl = acm->ctrlout;
833 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
834 (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
835 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
836 (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
838 newctrl = (newctrl & ~clear) | set;
840 if (acm->ctrlout == newctrl)
842 return acm_set_control(acm, acm->ctrlout = newctrl);
845 static int acm_tty_ioctl(struct tty_struct *tty,
846 unsigned int cmd, unsigned long arg)
848 struct acm *acm = tty->driver_data;
856 static const __u32 acm_tty_speed[] = {
857 0, 50, 75, 110, 134, 150, 200, 300, 600,
858 1200, 1800, 2400, 4800, 9600, 19200, 38400,
859 57600, 115200, 230400, 460800, 500000, 576000,
860 921600, 1000000, 1152000, 1500000, 2000000,
861 2500000, 3000000, 3500000, 4000000
864 static const __u8 acm_tty_size[] = {
868 static void acm_tty_set_termios(struct tty_struct *tty,
869 struct ktermios *termios_old)
871 struct acm *acm = tty->driver_data;
872 struct ktermios *termios = tty->termios;
873 struct usb_cdc_line_coding newline;
874 int newctrl = acm->ctrlout;
879 newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
880 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
881 newline.bParityType = termios->c_cflag & PARENB ?
882 (termios->c_cflag & PARODD ? 1 : 2) +
883 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
884 newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
885 /* FIXME: Needs to clear unsupported bits in the termios */
886 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
888 if (!newline.dwDTERate) {
889 newline.dwDTERate = acm->line.dwDTERate;
890 newctrl &= ~ACM_CTRL_DTR;
892 newctrl |= ACM_CTRL_DTR;
894 if (newctrl != acm->ctrlout)
895 acm_set_control(acm, acm->ctrlout = newctrl);
897 if (memcmp(&acm->line, &newline, sizeof newline)) {
898 memcpy(&acm->line, &newline, sizeof newline);
899 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
901 le32_to_cpu(newline.dwDTERate),
902 newline.bCharFormat, newline.bParityType,
904 acm_set_line(acm, &acm->line);
909 * USB probe and disconnect routines.
912 /* Little helpers: write/read buffers free */
913 static void acm_write_buffers_free(struct acm *acm)
917 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
919 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
920 usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
923 static void acm_read_buffers_free(struct acm *acm)
925 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
926 int i, n = acm->rx_buflimit;
928 for (i = 0; i < n; i++)
929 usb_free_coherent(usb_dev, acm->readsize,
930 acm->rb[i].base, acm->rb[i].dma);
933 /* Little helper: write buffers allocate */
934 static int acm_write_buffers_alloc(struct acm *acm)
939 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
940 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
946 usb_free_coherent(acm->dev, acm->writesize,
955 static int acm_probe(struct usb_interface *intf,
956 const struct usb_device_id *id)
958 struct usb_cdc_union_desc *union_header = NULL;
959 struct usb_cdc_country_functional_desc *cfd = NULL;
960 unsigned char *buffer = intf->altsetting->extra;
961 int buflen = intf->altsetting->extralen;
962 struct usb_interface *control_interface;
963 struct usb_interface *data_interface;
964 struct usb_endpoint_descriptor *epctrl = NULL;
965 struct usb_endpoint_descriptor *epread = NULL;
966 struct usb_endpoint_descriptor *epwrite = NULL;
967 struct usb_device *usb_dev = interface_to_usbdev(intf);
970 int ctrlsize, readsize;
972 u8 ac_management_function = 0;
973 u8 call_management_function = 0;
974 int call_interface_num = -1;
975 int data_interface_num;
976 unsigned long quirks;
979 int combined_interfaces = 0;
982 quirks = (unsigned long)id->driver_info;
983 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
985 /* handle quirks deadly to normal probing*/
986 if (quirks == NO_UNION_NORMAL) {
987 data_interface = usb_ifnum_to_if(usb_dev, 1);
988 control_interface = usb_ifnum_to_if(usb_dev, 0);
989 goto skip_normal_probe;
994 dev_err(&intf->dev, "Weird descriptor references\n");
999 if (intf->cur_altsetting->endpoint &&
1000 intf->cur_altsetting->endpoint->extralen &&
1001 intf->cur_altsetting->endpoint->extra) {
1003 "Seeking extra descriptors on endpoint\n");
1004 buflen = intf->cur_altsetting->endpoint->extralen;
1005 buffer = intf->cur_altsetting->endpoint->extra;
1008 "Zero length descriptor references\n");
1013 while (buflen > 0) {
1014 if (buffer[1] != USB_DT_CS_INTERFACE) {
1015 dev_err(&intf->dev, "skipping garbage\n");
1019 switch (buffer[2]) {
1020 case USB_CDC_UNION_TYPE: /* we've found it */
1022 dev_err(&intf->dev, "More than one "
1023 "union descriptor, skipping ...\n");
1026 union_header = (struct usb_cdc_union_desc *)buffer;
1028 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1029 cfd = (struct usb_cdc_country_functional_desc *)buffer;
1031 case USB_CDC_HEADER_TYPE: /* maybe check version */
1032 break; /* for now we ignore it */
1033 case USB_CDC_ACM_TYPE:
1034 ac_management_function = buffer[3];
1036 case USB_CDC_CALL_MANAGEMENT_TYPE:
1037 call_management_function = buffer[3];
1038 call_interface_num = buffer[4];
1039 if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1040 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1043 /* there are LOTS more CDC descriptors that
1044 * could legitimately be found here.
1046 dev_dbg(&intf->dev, "Ignoring descriptor: "
1047 "type %02x, length %d\n",
1048 buffer[2], buffer[0]);
1052 buflen -= buffer[0];
1053 buffer += buffer[0];
1056 if (!union_header) {
1057 if (call_interface_num > 0) {
1058 dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1059 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1060 control_interface = intf;
1062 if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1063 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1066 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1067 combined_interfaces = 1;
1068 control_interface = data_interface = intf;
1069 goto look_for_collapsed_interface;
1073 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1074 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1075 if (!control_interface || !data_interface) {
1076 dev_dbg(&intf->dev, "no interfaces\n");
1081 if (data_interface_num != call_interface_num)
1082 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1084 if (control_interface == data_interface) {
1085 /* some broken devices designed for windows work this way */
1086 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1087 combined_interfaces = 1;
1088 /* a popular other OS doesn't use it */
1089 quirks |= NO_CAP_LINE;
1090 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1091 dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1094 look_for_collapsed_interface:
1095 for (i = 0; i < 3; i++) {
1096 struct usb_endpoint_descriptor *ep;
1097 ep = &data_interface->cur_altsetting->endpoint[i].desc;
1099 if (usb_endpoint_is_int_in(ep))
1101 else if (usb_endpoint_is_bulk_out(ep))
1103 else if (usb_endpoint_is_bulk_in(ep))
1108 if (!epctrl || !epread || !epwrite)
1111 goto made_compressed_probe;
1116 /*workaround for switched interfaces */
1117 if (data_interface->cur_altsetting->desc.bInterfaceClass
1118 != CDC_DATA_INTERFACE_TYPE) {
1119 if (control_interface->cur_altsetting->desc.bInterfaceClass
1120 == CDC_DATA_INTERFACE_TYPE) {
1121 struct usb_interface *t;
1123 "Your device has switched interfaces.\n");
1124 t = control_interface;
1125 control_interface = data_interface;
1132 /* Accept probe requests only for the control interface */
1133 if (!combined_interfaces && intf != control_interface)
1136 if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1137 /* valid in this context */
1138 dev_dbg(&intf->dev, "The data interface isn't available\n");
1143 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1146 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1147 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1148 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1151 /* workaround for switched endpoints */
1152 if (!usb_endpoint_dir_in(epread)) {
1153 /* descriptors are swapped */
1154 struct usb_endpoint_descriptor *t;
1156 "The data interface has switched endpoints\n");
1161 made_compressed_probe:
1162 dev_dbg(&intf->dev, "interfaces are valid\n");
1163 for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1165 if (minor == ACM_TTY_MINORS) {
1166 dev_err(&intf->dev, "no more free acm devices\n");
1170 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1172 dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1176 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1177 readsize = le16_to_cpu(epread->wMaxPacketSize) *
1178 (quirks == SINGLE_RX_URB ? 1 : 2);
1179 acm->combined_interfaces = combined_interfaces;
1180 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1181 acm->control = control_interface;
1182 acm->data = data_interface;
1185 acm->ctrl_caps = ac_management_function;
1186 if (quirks & NO_CAP_LINE)
1187 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1188 acm->ctrlsize = ctrlsize;
1189 acm->readsize = readsize;
1190 acm->rx_buflimit = num_rx_buf;
1191 acm->urb_task.func = acm_rx_tasklet;
1192 acm->urb_task.data = (unsigned long) acm;
1193 INIT_WORK(&acm->work, acm_softint);
1194 init_waitqueue_head(&acm->drain_wait);
1195 spin_lock_init(&acm->throttle_lock);
1196 spin_lock_init(&acm->write_lock);
1197 spin_lock_init(&acm->read_lock);
1198 mutex_init(&acm->mutex);
1199 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1200 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1202 acm->bInterval = epread->bInterval;
1203 tty_port_init(&acm->port);
1204 acm->port.ops = &acm_port_ops;
1206 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1208 dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1211 acm->ctrl_buffer = buf;
1213 if (acm_write_buffers_alloc(acm) < 0) {
1214 dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1218 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1219 if (!acm->ctrlurb) {
1220 dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1223 for (i = 0; i < num_rx_buf; i++) {
1224 struct acm_ru *rcv = &(acm->ru[i]);
1226 rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1227 if (rcv->urb == NULL) {
1229 "out of memory (read urbs usb_alloc_urb)\n");
1233 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1234 rcv->instance = acm;
1236 for (i = 0; i < num_rx_buf; i++) {
1237 struct acm_rb *rb = &(acm->rb[i]);
1239 rb->base = usb_alloc_coherent(acm->dev, readsize,
1240 GFP_KERNEL, &rb->dma);
1243 "out of memory (read bufs usb_alloc_coherent)\n");
1247 for (i = 0; i < ACM_NW; i++) {
1248 struct acm_wb *snd = &(acm->wb[i]);
1250 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1251 if (snd->urb == NULL) {
1253 "out of memory (write urbs usb_alloc_urb)\n");
1257 if (usb_endpoint_xfer_int(epwrite))
1258 usb_fill_int_urb(snd->urb, usb_dev,
1259 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1260 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1262 usb_fill_bulk_urb(snd->urb, usb_dev,
1263 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1264 NULL, acm->writesize, acm_write_bulk, snd);
1265 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1266 snd->instance = acm;
1269 usb_set_intfdata(intf, acm);
1271 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1275 if (cfd) { /* export the country data */
1276 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1277 if (!acm->country_codes)
1278 goto skip_countries;
1279 acm->country_code_size = cfd->bLength - 4;
1280 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1282 acm->country_rel_date = cfd->iCountryCodeRelDate;
1284 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1286 kfree(acm->country_codes);
1287 goto skip_countries;
1290 i = device_create_file(&intf->dev,
1291 &dev_attr_iCountryCodeRelDate);
1293 device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1294 kfree(acm->country_codes);
1295 goto skip_countries;
1300 usb_fill_int_urb(acm->ctrlurb, usb_dev,
1301 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1302 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1303 /* works around buggy devices */
1304 epctrl->bInterval ? epctrl->bInterval : 0xff);
1305 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1306 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1308 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1310 acm_set_control(acm, acm->ctrlout);
1312 acm->line.dwDTERate = cpu_to_le32(9600);
1313 acm->line.bDataBits = 8;
1314 acm_set_line(acm, &acm->line);
1316 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1317 usb_set_intfdata(data_interface, acm);
1319 usb_get_intf(control_interface);
1320 tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1322 acm_table[minor] = acm;
1326 for (i = 0; i < ACM_NW; i++)
1327 usb_free_urb(acm->wb[i].urb);
1329 acm_read_buffers_free(acm);
1331 for (i = 0; i < num_rx_buf; i++)
1332 usb_free_urb(acm->ru[i].urb);
1333 usb_free_urb(acm->ctrlurb);
1335 acm_write_buffers_free(acm);
1337 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1344 static void stop_data_traffic(struct acm *acm)
1348 dev_dbg(&acm->control->dev, "%s\n", __func__);
1350 tasklet_disable(&acm->urb_task);
1352 usb_kill_urb(acm->ctrlurb);
1353 for (i = 0; i < ACM_NW; i++)
1354 usb_kill_urb(acm->wb[i].urb);
1355 for (i = 0; i < acm->rx_buflimit; i++)
1356 usb_kill_urb(acm->ru[i].urb);
1358 tasklet_enable(&acm->urb_task);
1360 cancel_work_sync(&acm->work);
1363 static void acm_disconnect(struct usb_interface *intf)
1365 struct acm *acm = usb_get_intfdata(intf);
1366 struct usb_device *usb_dev = interface_to_usbdev(intf);
1367 struct tty_struct *tty;
1369 /* sibling interface is already cleaning up */
1373 mutex_lock(&open_mutex);
1374 if (acm->country_codes) {
1375 device_remove_file(&acm->control->dev,
1376 &dev_attr_wCountryCodes);
1377 device_remove_file(&acm->control->dev,
1378 &dev_attr_iCountryCodeRelDate);
1380 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1382 usb_set_intfdata(acm->control, NULL);
1383 usb_set_intfdata(acm->data, NULL);
1385 stop_data_traffic(acm);
1387 acm_write_buffers_free(acm);
1388 usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1390 acm_read_buffers_free(acm);
1392 if (!acm->combined_interfaces)
1393 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1394 acm->data : acm->control);
1396 if (acm->port.count == 0) {
1397 acm_tty_unregister(acm);
1398 mutex_unlock(&open_mutex);
1402 mutex_unlock(&open_mutex);
1403 tty = tty_port_tty_get(&acm->port);
1411 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1413 struct acm *acm = usb_get_intfdata(intf);
1416 if (message.event & PM_EVENT_AUTO) {
1419 spin_lock_irq(&acm->read_lock);
1420 spin_lock(&acm->write_lock);
1421 b = acm->processing + acm->transmitting;
1422 spin_unlock(&acm->write_lock);
1423 spin_unlock_irq(&acm->read_lock);
1428 spin_lock_irq(&acm->read_lock);
1429 spin_lock(&acm->write_lock);
1430 cnt = acm->susp_count++;
1431 spin_unlock(&acm->write_lock);
1432 spin_unlock_irq(&acm->read_lock);
1437 we treat opened interfaces differently,
1438 we must guard against open
1440 mutex_lock(&acm->mutex);
1442 if (acm->port.count)
1443 stop_data_traffic(acm);
1445 mutex_unlock(&acm->mutex);
1449 static int acm_resume(struct usb_interface *intf)
1451 struct acm *acm = usb_get_intfdata(intf);
1456 spin_lock_irq(&acm->read_lock);
1457 acm->susp_count -= 1;
1458 cnt = acm->susp_count;
1459 spin_unlock_irq(&acm->read_lock);
1464 mutex_lock(&acm->mutex);
1465 if (acm->port.count) {
1466 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1468 spin_lock_irq(&acm->write_lock);
1469 if (acm->delayed_wb) {
1470 wb = acm->delayed_wb;
1471 acm->delayed_wb = NULL;
1472 spin_unlock_irq(&acm->write_lock);
1473 acm_start_wb(acm, wb);
1475 spin_unlock_irq(&acm->write_lock);
1479 * delayed error checking because we must
1480 * do the write path at all cost
1485 tasklet_schedule(&acm->urb_task);
1489 mutex_unlock(&acm->mutex);
1493 static int acm_reset_resume(struct usb_interface *intf)
1495 struct acm *acm = usb_get_intfdata(intf);
1496 struct tty_struct *tty;
1498 mutex_lock(&acm->mutex);
1499 if (acm->port.count) {
1500 tty = tty_port_tty_get(&acm->port);
1506 mutex_unlock(&acm->mutex);
1507 return acm_resume(intf);
1510 #endif /* CONFIG_PM */
1512 #define NOKIA_PCSUITE_ACM_INFO(x) \
1513 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1514 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1515 USB_CDC_ACM_PROTO_VENDOR)
1517 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1518 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1519 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1520 USB_CDC_ACM_PROTO_VENDOR)
1523 * USB driver structure.
1526 static const struct usb_device_id acm_ids[] = {
1527 /* quirky and broken devices */
1528 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1529 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1531 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1532 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1534 { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1535 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1537 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1538 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1540 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1541 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1543 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1544 .driver_info = SINGLE_RX_URB,
1546 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1547 .driver_info = SINGLE_RX_URB, /* firmware bug */
1549 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1550 .driver_info = SINGLE_RX_URB, /* firmware bug */
1552 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1553 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1555 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1556 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1558 { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1559 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1561 { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1562 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1564 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1565 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1567 { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1569 { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1570 .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1571 data interface instead of
1572 communications interface.
1573 Maybe we should define a new
1576 { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1577 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1579 { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1580 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1583 /* Nokia S60 phones expose two ACM channels. The first is
1584 * a modem and is picked up by the standard AT-command
1585 * information below. The second is 'vendor-specific' but
1586 * is treated as a serial device at the S60 end, so we want
1587 * to expose it on Linux too. */
1588 { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1589 { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1590 { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1591 { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1592 { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1593 { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1594 { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1595 { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1596 { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1597 { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1598 { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1599 { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1600 { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1601 { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1602 { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1603 { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1604 { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1605 { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */
1606 { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1607 { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1608 { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1609 { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */
1610 { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1611 { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1612 { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1613 { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1614 { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1615 { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1616 { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1617 { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1618 { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1619 { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */
1620 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1621 { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1622 { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1623 { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1624 { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1625 { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1626 { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1627 { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */
1628 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1629 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1630 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1631 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1632 { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1633 { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1634 { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1635 { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1636 { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1637 { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1638 { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1639 { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1640 { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1641 { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1642 { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1643 { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1645 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1647 /* Support Lego NXT using pbLua firmware */
1648 { USB_DEVICE(0x0694, 0xff00),
1649 .driver_info = NOT_A_MODEM,
1652 /* control interfaces without any protocol set */
1653 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1654 USB_CDC_PROTO_NONE) },
1656 /* control interfaces with various AT-command sets */
1657 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1658 USB_CDC_ACM_PROTO_AT_V25TER) },
1659 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1660 USB_CDC_ACM_PROTO_AT_PCCA101) },
1661 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1662 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1663 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1664 USB_CDC_ACM_PROTO_AT_GSM) },
1665 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1666 USB_CDC_ACM_PROTO_AT_3G) },
1667 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1668 USB_CDC_ACM_PROTO_AT_CDMA) },
1673 MODULE_DEVICE_TABLE(usb, acm_ids);
1675 static struct usb_driver acm_driver = {
1678 .disconnect = acm_disconnect,
1680 .suspend = acm_suspend,
1681 .resume = acm_resume,
1682 .reset_resume = acm_reset_resume,
1684 .id_table = acm_ids,
1686 .supports_autosuspend = 1,
1691 * TTY driver structures.
1694 static const struct tty_operations acm_ops = {
1695 .open = acm_tty_open,
1696 .close = acm_tty_close,
1697 .hangup = acm_tty_hangup,
1698 .write = acm_tty_write,
1699 .write_room = acm_tty_write_room,
1700 .ioctl = acm_tty_ioctl,
1701 .throttle = acm_tty_throttle,
1702 .unthrottle = acm_tty_unthrottle,
1703 .chars_in_buffer = acm_tty_chars_in_buffer,
1704 .break_ctl = acm_tty_break_ctl,
1705 .set_termios = acm_tty_set_termios,
1706 .tiocmget = acm_tty_tiocmget,
1707 .tiocmset = acm_tty_tiocmset,
1714 static int __init acm_init(void)
1717 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1718 if (!acm_tty_driver)
1720 acm_tty_driver->owner = THIS_MODULE,
1721 acm_tty_driver->driver_name = "acm",
1722 acm_tty_driver->name = "ttyACM",
1723 acm_tty_driver->major = ACM_TTY_MAJOR,
1724 acm_tty_driver->minor_start = 0,
1725 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1726 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1727 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1728 acm_tty_driver->init_termios = tty_std_termios;
1729 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1731 tty_set_operations(acm_tty_driver, &acm_ops);
1733 retval = tty_register_driver(acm_tty_driver);
1735 put_tty_driver(acm_tty_driver);
1739 retval = usb_register(&acm_driver);
1741 tty_unregister_driver(acm_tty_driver);
1742 put_tty_driver(acm_tty_driver);
1746 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1752 static void __exit acm_exit(void)
1754 usb_deregister(&acm_driver);
1755 tty_unregister_driver(acm_tty_driver);
1756 put_tty_driver(acm_tty_driver);
1759 module_init(acm_init);
1760 module_exit(acm_exit);
1762 MODULE_AUTHOR(DRIVER_AUTHOR);
1763 MODULE_DESCRIPTION(DRIVER_DESC);
1764 MODULE_LICENSE("GPL");
1765 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);