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 = {
98 * Functions for ACM control messages.
101 static int acm_ctrl_msg(struct acm *acm, int request, int value,
104 int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
105 request, USB_RT_ACM, value,
106 acm->control->altsetting[0].desc.bInterfaceNumber,
108 dev_dbg(&acm->control->dev,
109 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
110 __func__, request, value, len, retval);
111 return retval < 0 ? retval : 0;
114 /* devices aren't required to support these requests.
115 * the cdc acm descriptor tells whether they do...
117 #define acm_set_control(acm, control) \
118 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
119 #define acm_set_line(acm, line) \
120 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
121 #define acm_send_break(acm, ms) \
122 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
125 * Write buffer management.
126 * All of these assume proper locks taken by the caller.
129 static int acm_wb_alloc(struct acm *acm)
142 wbn = (wbn + 1) % ACM_NW;
148 static int acm_wb_is_avail(struct acm *acm)
154 spin_lock_irqsave(&acm->write_lock, flags);
155 for (i = 0; i < ACM_NW; i++)
157 spin_unlock_irqrestore(&acm->write_lock, flags);
162 * Finish write. Caller must hold acm->write_lock
164 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
168 usb_autopm_put_interface_async(acm->control);
174 * the caller is responsible for locking
177 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
183 wb->urb->transfer_buffer = wb->buf;
184 wb->urb->transfer_dma = wb->dmah;
185 wb->urb->transfer_buffer_length = wb->len;
186 wb->urb->dev = acm->dev;
188 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
190 dev_err(&acm->data->dev,
191 "%s - usb_submit_urb(write bulk) failed: %d\n",
193 acm_write_done(acm, wb);
198 static int acm_write_start(struct acm *acm, int wbn)
201 struct acm_wb *wb = &acm->wb[wbn];
204 spin_lock_irqsave(&acm->write_lock, flags);
207 spin_unlock_irqrestore(&acm->write_lock, flags);
211 dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
213 usb_autopm_get_interface_async(acm->control);
214 if (acm->susp_count) {
215 if (!acm->delayed_wb)
216 acm->delayed_wb = wb;
218 usb_autopm_put_interface_async(acm->control);
219 spin_unlock_irqrestore(&acm->write_lock, flags);
220 return 0; /* A white lie */
222 usb_mark_last_busy(acm->dev);
224 rc = acm_start_wb(acm, wb);
225 spin_unlock_irqrestore(&acm->write_lock, flags);
231 * attributes exported through sysfs
233 static ssize_t show_caps
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->ctrl_caps);
241 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
243 static ssize_t show_country_codes
244 (struct device *dev, struct device_attribute *attr, char *buf)
246 struct usb_interface *intf = to_usb_interface(dev);
247 struct acm *acm = usb_get_intfdata(intf);
249 memcpy(buf, acm->country_codes, acm->country_code_size);
250 return acm->country_code_size;
253 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
255 static ssize_t show_country_rel_date
256 (struct device *dev, struct device_attribute *attr, char *buf)
258 struct usb_interface *intf = to_usb_interface(dev);
259 struct acm *acm = usb_get_intfdata(intf);
261 return sprintf(buf, "%d", acm->country_rel_date);
264 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
266 * Interrupt handlers for various ACM device responses
269 /* control interface reports status changes with "interrupt" transfers */
270 static void acm_ctrl_irq(struct urb *urb)
272 struct acm *acm = urb->context;
273 struct usb_cdc_notification *dr = urb->transfer_buffer;
274 struct tty_struct *tty;
278 int status = urb->status;
287 /* this urb is terminated, clean up */
288 dev_dbg(&acm->control->dev,
289 "%s - urb shutting down with status: %d\n",
293 dev_dbg(&acm->control->dev,
294 "%s - nonzero urb status received: %d\n",
302 usb_mark_last_busy(acm->dev);
304 data = (unsigned char *)(dr + 1);
305 switch (dr->bNotificationType) {
306 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
307 dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
308 __func__, dr->wValue);
311 case USB_CDC_NOTIFY_SERIAL_STATE:
312 tty = tty_port_tty_get(&acm->port);
313 newctrl = get_unaligned_le16(data);
317 (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
318 dev_dbg(&acm->control->dev,
319 "%s - calling hangup\n", __func__);
325 acm->ctrlin = newctrl;
327 dev_dbg(&acm->control->dev,
328 "%s - input control lines: dcd%c dsr%c break%c "
329 "ring%c framing%c parity%c overrun%c\n",
331 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
332 acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
333 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
334 acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
335 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
336 acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
337 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
341 dev_dbg(&acm->control->dev,
342 "%s - unknown notification %d received: index %d "
343 "len %d data0 %d data1 %d\n",
345 dr->bNotificationType, dr->wIndex,
346 dr->wLength, data[0], data[1]);
350 retval = usb_submit_urb(urb, GFP_ATOMIC);
352 dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
356 /* data interface returns incoming bytes, or we got unthrottled */
357 static void acm_read_bulk(struct urb *urb)
360 struct acm_ru *rcv = urb->context;
361 struct acm *acm = rcv->instance;
362 int status = urb->status;
364 dev_vdbg(&acm->data->dev, "%s - status %d\n", __func__, status);
366 if (!ACM_READY(acm)) {
367 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
370 usb_mark_last_busy(acm->dev);
373 dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
377 buf->size = urb->actual_length;
379 if (likely(status == 0)) {
380 spin_lock(&acm->read_lock);
382 list_add_tail(&rcv->list, &acm->spare_read_urbs);
383 list_add_tail(&buf->list, &acm->filled_read_bufs);
384 spin_unlock(&acm->read_lock);
386 /* we drop the buffer due to an error */
387 spin_lock(&acm->read_lock);
388 list_add_tail(&rcv->list, &acm->spare_read_urbs);
389 list_add(&buf->list, &acm->spare_read_bufs);
390 spin_unlock(&acm->read_lock);
391 /* nevertheless the tasklet must be kicked unconditionally
392 so the queue cannot dry up */
394 if (likely(!acm->susp_count))
395 tasklet_schedule(&acm->urb_task);
398 static void acm_rx_tasklet(unsigned long _acm)
400 struct acm *acm = (void *)_acm;
402 struct tty_struct *tty;
405 unsigned char throttled;
407 dev_vdbg(&acm->data->dev, "%s\n", __func__);
409 if (!ACM_READY(acm)) {
410 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
414 spin_lock_irqsave(&acm->throttle_lock, flags);
415 throttled = acm->throttle;
416 spin_unlock_irqrestore(&acm->throttle_lock, flags);
418 dev_dbg(&acm->data->dev, "%s - throttled\n", __func__);
422 tty = tty_port_tty_get(&acm->port);
425 spin_lock_irqsave(&acm->read_lock, flags);
426 if (list_empty(&acm->filled_read_bufs)) {
427 spin_unlock_irqrestore(&acm->read_lock, flags);
430 buf = list_entry(acm->filled_read_bufs.next,
431 struct acm_rb, list);
432 list_del(&buf->list);
433 spin_unlock_irqrestore(&acm->read_lock, flags);
435 dev_vdbg(&acm->data->dev, "%s - processing buf 0x%p, size = %d\n",
436 __func__, buf, buf->size);
438 spin_lock_irqsave(&acm->throttle_lock, flags);
439 throttled = acm->throttle;
440 spin_unlock_irqrestore(&acm->throttle_lock, flags);
442 tty_insert_flip_string(tty, buf->base, buf->size);
443 tty_flip_buffer_push(tty);
446 dev_dbg(&acm->data->dev, "%s - throttling noticed\n",
448 spin_lock_irqsave(&acm->read_lock, flags);
449 list_add(&buf->list, &acm->filled_read_bufs);
450 spin_unlock_irqrestore(&acm->read_lock, flags);
455 spin_lock_irqsave(&acm->read_lock, flags);
456 list_add(&buf->list, &acm->spare_read_bufs);
457 spin_unlock_irqrestore(&acm->read_lock, flags);
463 while (!list_empty(&acm->spare_read_bufs)) {
464 spin_lock_irqsave(&acm->read_lock, flags);
465 if (list_empty(&acm->spare_read_urbs)) {
467 spin_unlock_irqrestore(&acm->read_lock, flags);
470 rcv = list_entry(acm->spare_read_urbs.next,
471 struct acm_ru, list);
472 list_del(&rcv->list);
473 spin_unlock_irqrestore(&acm->read_lock, flags);
475 buf = list_entry(acm->spare_read_bufs.next,
476 struct acm_rb, list);
477 list_del(&buf->list);
482 usb_fill_int_urb(rcv->urb, acm->dev,
486 acm_read_bulk, rcv, acm->bInterval);
488 usb_fill_bulk_urb(rcv->urb, acm->dev,
493 rcv->urb->transfer_dma = buf->dma;
494 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
496 /* This shouldn't kill the driver as unsuccessful URBs are
497 returned to the free-urbs-pool and resubmited ASAP */
498 spin_lock_irqsave(&acm->read_lock, flags);
499 if (acm->susp_count ||
500 usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
501 list_add(&buf->list, &acm->spare_read_bufs);
502 list_add(&rcv->list, &acm->spare_read_urbs);
504 spin_unlock_irqrestore(&acm->read_lock, flags);
507 spin_unlock_irqrestore(&acm->read_lock, flags);
508 dev_vdbg(&acm->data->dev,
509 "%s - sending urb 0x%p, rcv 0x%p, buf 0x%p\n",
510 __func__, rcv->urb, rcv, buf);
513 spin_lock_irqsave(&acm->read_lock, flags);
515 spin_unlock_irqrestore(&acm->read_lock, flags);
518 /* data interface wrote those outgoing bytes */
519 static void acm_write_bulk(struct urb *urb)
521 struct acm_wb *wb = urb->context;
522 struct acm *acm = wb->instance;
525 if (urb->status || (urb->actual_length != urb->transfer_buffer_length))
526 dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
529 urb->transfer_buffer_length,
532 spin_lock_irqsave(&acm->write_lock, flags);
533 acm_write_done(acm, wb);
534 spin_unlock_irqrestore(&acm->write_lock, flags);
536 schedule_work(&acm->work);
538 wake_up_interruptible(&acm->drain_wait);
541 static void acm_softint(struct work_struct *work)
543 struct acm *acm = container_of(work, struct acm, work);
544 struct tty_struct *tty;
546 dev_vdbg(&acm->data->dev, "%s\n", __func__);
550 tty = tty_port_tty_get(&acm->port);
561 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
567 mutex_lock(&open_mutex);
569 acm = acm_table[tty->index];
570 if (!acm || !acm->dev)
575 dev_dbg(&acm->control->dev, "%s\n", __func__);
577 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
579 tty->driver_data = acm;
580 tty_port_tty_set(&acm->port, tty);
582 if (usb_autopm_get_interface(acm->control) < 0)
585 acm->control->needs_remote_wakeup = 1;
587 mutex_lock(&acm->mutex);
588 if (acm->port.count++) {
589 mutex_unlock(&acm->mutex);
590 usb_autopm_put_interface(acm->control);
594 acm->ctrlurb->dev = acm->dev;
595 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
596 dev_err(&acm->control->dev,
597 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
601 if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
602 (acm->ctrl_caps & USB_CDC_CAP_LINE))
605 usb_autopm_put_interface(acm->control);
607 INIT_LIST_HEAD(&acm->spare_read_urbs);
608 INIT_LIST_HEAD(&acm->spare_read_bufs);
609 INIT_LIST_HEAD(&acm->filled_read_bufs);
611 for (i = 0; i < acm->rx_buflimit; i++)
612 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
613 for (i = 0; i < acm->rx_buflimit; i++)
614 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
618 set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
619 rv = tty_port_block_til_ready(&acm->port, tty, filp);
620 tasklet_schedule(&acm->urb_task);
622 mutex_unlock(&acm->mutex);
624 mutex_unlock(&open_mutex);
628 usb_kill_urb(acm->ctrlurb);
631 mutex_unlock(&acm->mutex);
632 usb_autopm_put_interface(acm->control);
634 mutex_unlock(&open_mutex);
635 tty_port_tty_set(&acm->port, NULL);
639 static void acm_tty_unregister(struct acm *acm)
643 nr = acm->rx_buflimit;
644 tty_unregister_device(acm_tty_driver, acm->minor);
645 usb_put_intf(acm->control);
646 acm_table[acm->minor] = NULL;
647 usb_free_urb(acm->ctrlurb);
648 for (i = 0; i < ACM_NW; i++)
649 usb_free_urb(acm->wb[i].urb);
650 for (i = 0; i < nr; i++)
651 usb_free_urb(acm->ru[i].urb);
652 kfree(acm->country_codes);
656 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
658 static void acm_port_down(struct acm *acm)
660 int i, nr = acm->rx_buflimit;
661 mutex_lock(&open_mutex);
663 usb_autopm_get_interface(acm->control);
664 acm_set_control(acm, acm->ctrlout = 0);
665 usb_kill_urb(acm->ctrlurb);
666 for (i = 0; i < ACM_NW; i++)
667 usb_kill_urb(acm->wb[i].urb);
668 tasklet_disable(&acm->urb_task);
669 for (i = 0; i < nr; i++)
670 usb_kill_urb(acm->ru[i].urb);
671 tasklet_enable(&acm->urb_task);
672 acm->control->needs_remote_wakeup = 0;
673 usb_autopm_put_interface(acm->control);
675 mutex_unlock(&open_mutex);
678 static void acm_tty_hangup(struct tty_struct *tty)
680 struct acm *acm = tty->driver_data;
681 tty_port_hangup(&acm->port);
685 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
687 struct acm *acm = tty->driver_data;
689 /* Perform the closing process and see if we need to do the hardware
693 if (tty_port_close_start(&acm->port, tty, filp) == 0) {
694 mutex_lock(&open_mutex);
696 tty_port_tty_set(&acm->port, NULL);
697 acm_tty_unregister(acm);
698 tty->driver_data = NULL;
700 mutex_unlock(&open_mutex);
704 tty_port_close_end(&acm->port, tty);
705 tty_port_tty_set(&acm->port, NULL);
708 static int acm_tty_write(struct tty_struct *tty,
709 const unsigned char *buf, int count)
711 struct acm *acm = tty->driver_data;
722 dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
724 spin_lock_irqsave(&acm->write_lock, flags);
725 wbn = acm_wb_alloc(acm);
727 spin_unlock_irqrestore(&acm->write_lock, flags);
732 count = (count > acm->writesize) ? acm->writesize : count;
733 dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
734 memcpy(wb->buf, buf, count);
736 spin_unlock_irqrestore(&acm->write_lock, flags);
738 stat = acm_write_start(acm, wbn);
744 static int acm_tty_write_room(struct tty_struct *tty)
746 struct acm *acm = tty->driver_data;
750 * Do not let the line discipline to know that we have a reserve,
751 * or it might get too enthusiastic.
753 return acm_wb_is_avail(acm) ? acm->writesize : 0;
756 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
758 struct acm *acm = tty->driver_data;
762 * This is inaccurate (overcounts), but it works.
764 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
767 static void acm_tty_throttle(struct tty_struct *tty)
769 struct acm *acm = tty->driver_data;
772 spin_lock_bh(&acm->throttle_lock);
774 spin_unlock_bh(&acm->throttle_lock);
777 static void acm_tty_unthrottle(struct tty_struct *tty)
779 struct acm *acm = tty->driver_data;
782 spin_lock_bh(&acm->throttle_lock);
784 spin_unlock_bh(&acm->throttle_lock);
785 tasklet_schedule(&acm->urb_task);
788 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
790 struct acm *acm = tty->driver_data;
794 retval = acm_send_break(acm, state ? 0xffff : 0);
796 dev_dbg(&acm->control->dev, "%s - send break failed\n",
801 static int acm_tty_tiocmget(struct tty_struct *tty)
803 struct acm *acm = tty->driver_data;
808 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
809 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
810 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
811 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
812 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
816 static int acm_tty_tiocmset(struct tty_struct *tty,
817 unsigned int set, unsigned int clear)
819 struct acm *acm = tty->driver_data;
820 unsigned int newctrl;
825 newctrl = acm->ctrlout;
826 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
827 (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
828 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
829 (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
831 newctrl = (newctrl & ~clear) | set;
833 if (acm->ctrlout == newctrl)
835 return acm_set_control(acm, acm->ctrlout = newctrl);
838 static int acm_tty_ioctl(struct tty_struct *tty,
839 unsigned int cmd, unsigned long arg)
841 struct acm *acm = tty->driver_data;
849 static const __u32 acm_tty_speed[] = {
850 0, 50, 75, 110, 134, 150, 200, 300, 600,
851 1200, 1800, 2400, 4800, 9600, 19200, 38400,
852 57600, 115200, 230400, 460800, 500000, 576000,
853 921600, 1000000, 1152000, 1500000, 2000000,
854 2500000, 3000000, 3500000, 4000000
857 static const __u8 acm_tty_size[] = {
861 static void acm_tty_set_termios(struct tty_struct *tty,
862 struct ktermios *termios_old)
864 struct acm *acm = tty->driver_data;
865 struct ktermios *termios = tty->termios;
866 struct usb_cdc_line_coding newline;
867 int newctrl = acm->ctrlout;
872 newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
873 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
874 newline.bParityType = termios->c_cflag & PARENB ?
875 (termios->c_cflag & PARODD ? 1 : 2) +
876 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
877 newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
878 /* FIXME: Needs to clear unsupported bits in the termios */
879 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
881 if (!newline.dwDTERate) {
882 newline.dwDTERate = acm->line.dwDTERate;
883 newctrl &= ~ACM_CTRL_DTR;
885 newctrl |= ACM_CTRL_DTR;
887 if (newctrl != acm->ctrlout)
888 acm_set_control(acm, acm->ctrlout = newctrl);
890 if (memcmp(&acm->line, &newline, sizeof newline)) {
891 memcpy(&acm->line, &newline, sizeof newline);
892 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
894 le32_to_cpu(newline.dwDTERate),
895 newline.bCharFormat, newline.bParityType,
897 acm_set_line(acm, &acm->line);
902 * USB probe and disconnect routines.
905 /* Little helpers: write/read buffers free */
906 static void acm_write_buffers_free(struct acm *acm)
910 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
912 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
913 usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
916 static void acm_read_buffers_free(struct acm *acm)
918 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
919 int i, n = acm->rx_buflimit;
921 for (i = 0; i < n; i++)
922 usb_free_coherent(usb_dev, acm->readsize,
923 acm->rb[i].base, acm->rb[i].dma);
926 /* Little helper: write buffers allocate */
927 static int acm_write_buffers_alloc(struct acm *acm)
932 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
933 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
939 usb_free_coherent(acm->dev, acm->writesize,
948 static int acm_probe(struct usb_interface *intf,
949 const struct usb_device_id *id)
951 struct usb_cdc_union_desc *union_header = NULL;
952 struct usb_cdc_country_functional_desc *cfd = NULL;
953 unsigned char *buffer = intf->altsetting->extra;
954 int buflen = intf->altsetting->extralen;
955 struct usb_interface *control_interface;
956 struct usb_interface *data_interface;
957 struct usb_endpoint_descriptor *epctrl = NULL;
958 struct usb_endpoint_descriptor *epread = NULL;
959 struct usb_endpoint_descriptor *epwrite = NULL;
960 struct usb_device *usb_dev = interface_to_usbdev(intf);
963 int ctrlsize, readsize;
965 u8 ac_management_function = 0;
966 u8 call_management_function = 0;
967 int call_interface_num = -1;
968 int data_interface_num;
969 unsigned long quirks;
972 int combined_interfaces = 0;
975 quirks = (unsigned long)id->driver_info;
976 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
978 /* handle quirks deadly to normal probing*/
979 if (quirks == NO_UNION_NORMAL) {
980 data_interface = usb_ifnum_to_if(usb_dev, 1);
981 control_interface = usb_ifnum_to_if(usb_dev, 0);
982 goto skip_normal_probe;
987 dev_err(&intf->dev, "Weird descriptor references\n");
992 if (intf->cur_altsetting->endpoint &&
993 intf->cur_altsetting->endpoint->extralen &&
994 intf->cur_altsetting->endpoint->extra) {
996 "Seeking extra descriptors on endpoint\n");
997 buflen = intf->cur_altsetting->endpoint->extralen;
998 buffer = intf->cur_altsetting->endpoint->extra;
1001 "Zero length descriptor references\n");
1006 while (buflen > 0) {
1007 if (buffer[1] != USB_DT_CS_INTERFACE) {
1008 dev_err(&intf->dev, "skipping garbage\n");
1012 switch (buffer[2]) {
1013 case USB_CDC_UNION_TYPE: /* we've found it */
1015 dev_err(&intf->dev, "More than one "
1016 "union descriptor, skipping ...\n");
1019 union_header = (struct usb_cdc_union_desc *)buffer;
1021 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1022 cfd = (struct usb_cdc_country_functional_desc *)buffer;
1024 case USB_CDC_HEADER_TYPE: /* maybe check version */
1025 break; /* for now we ignore it */
1026 case USB_CDC_ACM_TYPE:
1027 ac_management_function = buffer[3];
1029 case USB_CDC_CALL_MANAGEMENT_TYPE:
1030 call_management_function = buffer[3];
1031 call_interface_num = buffer[4];
1032 if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1033 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1036 /* there are LOTS more CDC descriptors that
1037 * could legitimately be found here.
1039 dev_dbg(&intf->dev, "Ignoring descriptor: "
1040 "type %02x, length %d\n",
1041 buffer[2], buffer[0]);
1045 buflen -= buffer[0];
1046 buffer += buffer[0];
1049 if (!union_header) {
1050 if (call_interface_num > 0) {
1051 dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1052 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1053 control_interface = intf;
1055 if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1056 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1059 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1060 combined_interfaces = 1;
1061 control_interface = data_interface = intf;
1062 goto look_for_collapsed_interface;
1066 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1067 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1068 if (!control_interface || !data_interface) {
1069 dev_dbg(&intf->dev, "no interfaces\n");
1074 if (data_interface_num != call_interface_num)
1075 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1077 if (control_interface == data_interface) {
1078 /* some broken devices designed for windows work this way */
1079 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1080 combined_interfaces = 1;
1081 /* a popular other OS doesn't use it */
1082 quirks |= NO_CAP_LINE;
1083 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1084 dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1087 look_for_collapsed_interface:
1088 for (i = 0; i < 3; i++) {
1089 struct usb_endpoint_descriptor *ep;
1090 ep = &data_interface->cur_altsetting->endpoint[i].desc;
1092 if (usb_endpoint_is_int_in(ep))
1094 else if (usb_endpoint_is_bulk_out(ep))
1096 else if (usb_endpoint_is_bulk_in(ep))
1101 if (!epctrl || !epread || !epwrite)
1104 goto made_compressed_probe;
1109 /*workaround for switched interfaces */
1110 if (data_interface->cur_altsetting->desc.bInterfaceClass
1111 != CDC_DATA_INTERFACE_TYPE) {
1112 if (control_interface->cur_altsetting->desc.bInterfaceClass
1113 == CDC_DATA_INTERFACE_TYPE) {
1114 struct usb_interface *t;
1116 "Your device has switched interfaces.\n");
1117 t = control_interface;
1118 control_interface = data_interface;
1125 /* Accept probe requests only for the control interface */
1126 if (!combined_interfaces && intf != control_interface)
1129 if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1130 /* valid in this context */
1131 dev_dbg(&intf->dev, "The data interface isn't available\n");
1136 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1139 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1140 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1141 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1144 /* workaround for switched endpoints */
1145 if (!usb_endpoint_dir_in(epread)) {
1146 /* descriptors are swapped */
1147 struct usb_endpoint_descriptor *t;
1149 "The data interface has switched endpoints\n");
1154 made_compressed_probe:
1155 dev_dbg(&intf->dev, "interfaces are valid\n");
1156 for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1158 if (minor == ACM_TTY_MINORS) {
1159 dev_err(&intf->dev, "no more free acm devices\n");
1163 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1165 dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1169 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1170 readsize = le16_to_cpu(epread->wMaxPacketSize) *
1171 (quirks == SINGLE_RX_URB ? 1 : 2);
1172 acm->combined_interfaces = combined_interfaces;
1173 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1174 acm->control = control_interface;
1175 acm->data = data_interface;
1178 acm->ctrl_caps = ac_management_function;
1179 if (quirks & NO_CAP_LINE)
1180 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1181 acm->ctrlsize = ctrlsize;
1182 acm->readsize = readsize;
1183 acm->rx_buflimit = num_rx_buf;
1184 acm->urb_task.func = acm_rx_tasklet;
1185 acm->urb_task.data = (unsigned long) acm;
1186 INIT_WORK(&acm->work, acm_softint);
1187 init_waitqueue_head(&acm->drain_wait);
1188 spin_lock_init(&acm->throttle_lock);
1189 spin_lock_init(&acm->write_lock);
1190 spin_lock_init(&acm->read_lock);
1191 mutex_init(&acm->mutex);
1192 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1193 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1195 acm->bInterval = epread->bInterval;
1196 tty_port_init(&acm->port);
1197 acm->port.ops = &acm_port_ops;
1199 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1201 dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1204 acm->ctrl_buffer = buf;
1206 if (acm_write_buffers_alloc(acm) < 0) {
1207 dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1211 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1212 if (!acm->ctrlurb) {
1213 dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1216 for (i = 0; i < num_rx_buf; i++) {
1217 struct acm_ru *rcv = &(acm->ru[i]);
1219 rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1220 if (rcv->urb == NULL) {
1222 "out of memory (read urbs usb_alloc_urb)\n");
1226 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1227 rcv->instance = acm;
1229 for (i = 0; i < num_rx_buf; i++) {
1230 struct acm_rb *rb = &(acm->rb[i]);
1232 rb->base = usb_alloc_coherent(acm->dev, readsize,
1233 GFP_KERNEL, &rb->dma);
1236 "out of memory (read bufs usb_alloc_coherent)\n");
1240 for (i = 0; i < ACM_NW; i++) {
1241 struct acm_wb *snd = &(acm->wb[i]);
1243 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1244 if (snd->urb == NULL) {
1246 "out of memory (write urbs usb_alloc_urb)\n");
1250 if (usb_endpoint_xfer_int(epwrite))
1251 usb_fill_int_urb(snd->urb, usb_dev,
1252 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1253 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1255 usb_fill_bulk_urb(snd->urb, usb_dev,
1256 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1257 NULL, acm->writesize, acm_write_bulk, snd);
1258 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1259 snd->instance = acm;
1262 usb_set_intfdata(intf, acm);
1264 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1268 if (cfd) { /* export the country data */
1269 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1270 if (!acm->country_codes)
1271 goto skip_countries;
1272 acm->country_code_size = cfd->bLength - 4;
1273 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1275 acm->country_rel_date = cfd->iCountryCodeRelDate;
1277 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1279 kfree(acm->country_codes);
1280 goto skip_countries;
1283 i = device_create_file(&intf->dev,
1284 &dev_attr_iCountryCodeRelDate);
1286 device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1287 kfree(acm->country_codes);
1288 goto skip_countries;
1293 usb_fill_int_urb(acm->ctrlurb, usb_dev,
1294 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1295 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1296 /* works around buggy devices */
1297 epctrl->bInterval ? epctrl->bInterval : 0xff);
1298 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1299 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1301 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1303 acm_set_control(acm, acm->ctrlout);
1305 acm->line.dwDTERate = cpu_to_le32(9600);
1306 acm->line.bDataBits = 8;
1307 acm_set_line(acm, &acm->line);
1309 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1310 usb_set_intfdata(data_interface, acm);
1312 usb_get_intf(control_interface);
1313 tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1315 acm_table[minor] = acm;
1319 for (i = 0; i < ACM_NW; i++)
1320 usb_free_urb(acm->wb[i].urb);
1322 acm_read_buffers_free(acm);
1324 for (i = 0; i < num_rx_buf; i++)
1325 usb_free_urb(acm->ru[i].urb);
1326 usb_free_urb(acm->ctrlurb);
1328 acm_write_buffers_free(acm);
1330 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1337 static void stop_data_traffic(struct acm *acm)
1341 dev_dbg(&acm->control->dev, "%s\n", __func__);
1343 tasklet_disable(&acm->urb_task);
1345 usb_kill_urb(acm->ctrlurb);
1346 for (i = 0; i < ACM_NW; i++)
1347 usb_kill_urb(acm->wb[i].urb);
1348 for (i = 0; i < acm->rx_buflimit; i++)
1349 usb_kill_urb(acm->ru[i].urb);
1351 tasklet_enable(&acm->urb_task);
1353 cancel_work_sync(&acm->work);
1356 static void acm_disconnect(struct usb_interface *intf)
1358 struct acm *acm = usb_get_intfdata(intf);
1359 struct usb_device *usb_dev = interface_to_usbdev(intf);
1360 struct tty_struct *tty;
1362 /* sibling interface is already cleaning up */
1366 mutex_lock(&open_mutex);
1367 if (acm->country_codes) {
1368 device_remove_file(&acm->control->dev,
1369 &dev_attr_wCountryCodes);
1370 device_remove_file(&acm->control->dev,
1371 &dev_attr_iCountryCodeRelDate);
1373 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1375 usb_set_intfdata(acm->control, NULL);
1376 usb_set_intfdata(acm->data, NULL);
1378 stop_data_traffic(acm);
1380 acm_write_buffers_free(acm);
1381 usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1383 acm_read_buffers_free(acm);
1385 if (!acm->combined_interfaces)
1386 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1387 acm->data : acm->control);
1389 if (acm->port.count == 0) {
1390 acm_tty_unregister(acm);
1391 mutex_unlock(&open_mutex);
1395 mutex_unlock(&open_mutex);
1396 tty = tty_port_tty_get(&acm->port);
1404 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1406 struct acm *acm = usb_get_intfdata(intf);
1409 if (message.event & PM_EVENT_AUTO) {
1412 spin_lock_irq(&acm->read_lock);
1413 spin_lock(&acm->write_lock);
1414 b = acm->processing + acm->transmitting;
1415 spin_unlock(&acm->write_lock);
1416 spin_unlock_irq(&acm->read_lock);
1421 spin_lock_irq(&acm->read_lock);
1422 spin_lock(&acm->write_lock);
1423 cnt = acm->susp_count++;
1424 spin_unlock(&acm->write_lock);
1425 spin_unlock_irq(&acm->read_lock);
1430 we treat opened interfaces differently,
1431 we must guard against open
1433 mutex_lock(&acm->mutex);
1435 if (acm->port.count)
1436 stop_data_traffic(acm);
1438 mutex_unlock(&acm->mutex);
1442 static int acm_resume(struct usb_interface *intf)
1444 struct acm *acm = usb_get_intfdata(intf);
1449 spin_lock_irq(&acm->read_lock);
1450 acm->susp_count -= 1;
1451 cnt = acm->susp_count;
1452 spin_unlock_irq(&acm->read_lock);
1457 mutex_lock(&acm->mutex);
1458 if (acm->port.count) {
1459 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1461 spin_lock_irq(&acm->write_lock);
1462 if (acm->delayed_wb) {
1463 wb = acm->delayed_wb;
1464 acm->delayed_wb = NULL;
1465 spin_unlock_irq(&acm->write_lock);
1466 acm_start_wb(acm, wb);
1468 spin_unlock_irq(&acm->write_lock);
1472 * delayed error checking because we must
1473 * do the write path at all cost
1478 tasklet_schedule(&acm->urb_task);
1482 mutex_unlock(&acm->mutex);
1486 static int acm_reset_resume(struct usb_interface *intf)
1488 struct acm *acm = usb_get_intfdata(intf);
1489 struct tty_struct *tty;
1491 mutex_lock(&acm->mutex);
1492 if (acm->port.count) {
1493 tty = tty_port_tty_get(&acm->port);
1499 mutex_unlock(&acm->mutex);
1500 return acm_resume(intf);
1503 #endif /* CONFIG_PM */
1505 #define NOKIA_PCSUITE_ACM_INFO(x) \
1506 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1507 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1508 USB_CDC_ACM_PROTO_VENDOR)
1510 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1511 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1512 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1513 USB_CDC_ACM_PROTO_VENDOR)
1516 * USB driver structure.
1519 static const struct usb_device_id acm_ids[] = {
1520 /* quirky and broken devices */
1521 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1522 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1524 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1525 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1527 { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1528 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1530 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1531 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1533 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1534 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1536 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1537 .driver_info = SINGLE_RX_URB,
1539 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1540 .driver_info = SINGLE_RX_URB, /* firmware bug */
1542 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1543 .driver_info = SINGLE_RX_URB, /* firmware bug */
1545 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1546 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1548 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1549 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1551 { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1552 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1554 { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1555 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1557 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1558 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1560 { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1562 { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1563 .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1564 data interface instead of
1565 communications interface.
1566 Maybe we should define a new
1569 { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1570 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1572 { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1573 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1576 /* Nokia S60 phones expose two ACM channels. The first is
1577 * a modem and is picked up by the standard AT-command
1578 * information below. The second is 'vendor-specific' but
1579 * is treated as a serial device at the S60 end, so we want
1580 * to expose it on Linux too. */
1581 { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1582 { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1583 { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1584 { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1585 { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1586 { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1587 { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1588 { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1589 { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1590 { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1591 { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1592 { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1593 { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1594 { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1595 { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1596 { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1597 { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1598 { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */
1599 { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1600 { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1601 { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1602 { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */
1603 { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1604 { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1605 { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1606 { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1607 { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1608 { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1609 { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1610 { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1611 { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1612 { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */
1613 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1614 { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1615 { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1616 { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1617 { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1618 { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1619 { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1620 { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */
1621 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1622 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1623 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1624 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1625 { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1626 { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1627 { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1628 { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1629 { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1630 { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1631 { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1632 { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1633 { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1634 { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1635 { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1636 { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1638 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1640 /* Support Lego NXT using pbLua firmware */
1641 { USB_DEVICE(0x0694, 0xff00),
1642 .driver_info = NOT_A_MODEM,
1645 /* control interfaces without any protocol set */
1646 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1647 USB_CDC_PROTO_NONE) },
1649 /* control interfaces with various AT-command sets */
1650 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1651 USB_CDC_ACM_PROTO_AT_V25TER) },
1652 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1653 USB_CDC_ACM_PROTO_AT_PCCA101) },
1654 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1655 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1656 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1657 USB_CDC_ACM_PROTO_AT_GSM) },
1658 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1659 USB_CDC_ACM_PROTO_AT_3G) },
1660 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1661 USB_CDC_ACM_PROTO_AT_CDMA) },
1666 MODULE_DEVICE_TABLE(usb, acm_ids);
1668 static struct usb_driver acm_driver = {
1671 .disconnect = acm_disconnect,
1673 .suspend = acm_suspend,
1674 .resume = acm_resume,
1675 .reset_resume = acm_reset_resume,
1677 .id_table = acm_ids,
1679 .supports_autosuspend = 1,
1684 * TTY driver structures.
1687 static const struct tty_operations acm_ops = {
1688 .open = acm_tty_open,
1689 .close = acm_tty_close,
1690 .hangup = acm_tty_hangup,
1691 .write = acm_tty_write,
1692 .write_room = acm_tty_write_room,
1693 .ioctl = acm_tty_ioctl,
1694 .throttle = acm_tty_throttle,
1695 .unthrottle = acm_tty_unthrottle,
1696 .chars_in_buffer = acm_tty_chars_in_buffer,
1697 .break_ctl = acm_tty_break_ctl,
1698 .set_termios = acm_tty_set_termios,
1699 .tiocmget = acm_tty_tiocmget,
1700 .tiocmset = acm_tty_tiocmset,
1707 static int __init acm_init(void)
1710 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1711 if (!acm_tty_driver)
1713 acm_tty_driver->owner = THIS_MODULE,
1714 acm_tty_driver->driver_name = "acm",
1715 acm_tty_driver->name = "ttyACM",
1716 acm_tty_driver->major = ACM_TTY_MAJOR,
1717 acm_tty_driver->minor_start = 0,
1718 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1719 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1720 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1721 acm_tty_driver->init_termios = tty_std_termios;
1722 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1724 tty_set_operations(acm_tty_driver, &acm_ops);
1726 retval = tty_register_driver(acm_tty_driver);
1728 put_tty_driver(acm_tty_driver);
1732 retval = usb_register(&acm_driver);
1734 tty_unregister_driver(acm_tty_driver);
1735 put_tty_driver(acm_tty_driver);
1739 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1745 static void __exit acm_exit(void)
1747 usb_deregister(&acm_driver);
1748 tty_unregister_driver(acm_tty_driver);
1749 put_tty_driver(acm_tty_driver);
1752 module_init(acm_init);
1753 module_exit(acm_exit);
1755 MODULE_AUTHOR(DRIVER_AUTHOR);
1756 MODULE_DESCRIPTION(DRIVER_DESC);
1757 MODULE_LICENSE("GPL");
1758 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);