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
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33 #include <linux/kernel.h>
34 #include <linux/errno.h>
35 #include <linux/init.h>
36 #include <linux/slab.h>
37 #include <linux/tty.h>
38 #include <linux/serial.h>
39 #include <linux/tty_driver.h>
40 #include <linux/tty_flip.h>
41 #include <linux/module.h>
42 #include <linux/mutex.h>
43 #include <linux/uaccess.h>
44 #include <linux/usb.h>
45 #include <linux/usb/cdc.h>
46 #include <asm/byteorder.h>
47 #include <asm/unaligned.h>
48 #include <linux/list.h>
53 #define ACM_CLOSE_TIMEOUT 15 /* seconds to let writes drain */
56 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek"
57 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
59 static struct usb_driver acm_driver;
60 static struct tty_driver *acm_tty_driver;
61 static struct acm *acm_table[ACM_TTY_MINORS];
63 static DEFINE_MUTEX(open_mutex);
65 #define ACM_READY(acm) (acm && acm->dev && acm->port.count)
67 static const struct tty_port_operations acm_port_ops = {
71 * Functions for ACM control messages.
74 static int acm_ctrl_msg(struct acm *acm, int request, int value,
77 int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
78 request, USB_RT_ACM, value,
79 acm->control->altsetting[0].desc.bInterfaceNumber,
81 dev_dbg(&acm->control->dev,
82 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
83 __func__, request, value, len, retval);
84 return retval < 0 ? retval : 0;
87 /* devices aren't required to support these requests.
88 * the cdc acm descriptor tells whether they do...
90 #define acm_set_control(acm, control) \
91 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
92 #define acm_set_line(acm, line) \
93 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
94 #define acm_send_break(acm, ms) \
95 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
98 * Write buffer management.
99 * All of these assume proper locks taken by the caller.
102 static int acm_wb_alloc(struct acm *acm)
115 wbn = (wbn + 1) % ACM_NW;
121 static int acm_wb_is_avail(struct acm *acm)
127 spin_lock_irqsave(&acm->write_lock, flags);
128 for (i = 0; i < ACM_NW; i++)
130 spin_unlock_irqrestore(&acm->write_lock, flags);
135 * Finish write. Caller must hold acm->write_lock
137 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
141 usb_autopm_put_interface_async(acm->control);
147 * the caller is responsible for locking
150 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
156 wb->urb->transfer_buffer = wb->buf;
157 wb->urb->transfer_dma = wb->dmah;
158 wb->urb->transfer_buffer_length = wb->len;
159 wb->urb->dev = acm->dev;
161 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
163 dev_err(&acm->data->dev,
164 "%s - usb_submit_urb(write bulk) failed: %d\n",
166 acm_write_done(acm, wb);
171 static int acm_write_start(struct acm *acm, int wbn)
174 struct acm_wb *wb = &acm->wb[wbn];
177 spin_lock_irqsave(&acm->write_lock, flags);
180 spin_unlock_irqrestore(&acm->write_lock, flags);
184 dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
186 usb_autopm_get_interface_async(acm->control);
187 if (acm->susp_count) {
188 if (!acm->delayed_wb)
189 acm->delayed_wb = wb;
191 usb_autopm_put_interface_async(acm->control);
192 spin_unlock_irqrestore(&acm->write_lock, flags);
193 return 0; /* A white lie */
195 usb_mark_last_busy(acm->dev);
197 rc = acm_start_wb(acm, wb);
198 spin_unlock_irqrestore(&acm->write_lock, flags);
204 * attributes exported through sysfs
206 static ssize_t show_caps
207 (struct device *dev, struct device_attribute *attr, char *buf)
209 struct usb_interface *intf = to_usb_interface(dev);
210 struct acm *acm = usb_get_intfdata(intf);
212 return sprintf(buf, "%d", acm->ctrl_caps);
214 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
216 static ssize_t show_country_codes
217 (struct device *dev, struct device_attribute *attr, char *buf)
219 struct usb_interface *intf = to_usb_interface(dev);
220 struct acm *acm = usb_get_intfdata(intf);
222 memcpy(buf, acm->country_codes, acm->country_code_size);
223 return acm->country_code_size;
226 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
228 static ssize_t show_country_rel_date
229 (struct device *dev, struct device_attribute *attr, char *buf)
231 struct usb_interface *intf = to_usb_interface(dev);
232 struct acm *acm = usb_get_intfdata(intf);
234 return sprintf(buf, "%d", acm->country_rel_date);
237 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
239 * Interrupt handlers for various ACM device responses
242 /* control interface reports status changes with "interrupt" transfers */
243 static void acm_ctrl_irq(struct urb *urb)
245 struct acm *acm = urb->context;
246 struct usb_cdc_notification *dr = urb->transfer_buffer;
247 struct tty_struct *tty;
251 int status = urb->status;
260 /* this urb is terminated, clean up */
261 dev_dbg(&acm->control->dev,
262 "%s - urb shutting down with status: %d\n",
266 dev_dbg(&acm->control->dev,
267 "%s - nonzero urb status received: %d\n",
275 usb_mark_last_busy(acm->dev);
277 data = (unsigned char *)(dr + 1);
278 switch (dr->bNotificationType) {
279 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
280 dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
281 __func__, dr->wValue);
284 case USB_CDC_NOTIFY_SERIAL_STATE:
285 tty = tty_port_tty_get(&acm->port);
286 newctrl = get_unaligned_le16(data);
290 (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
291 dev_dbg(&acm->control->dev,
292 "%s - calling hangup\n", __func__);
298 acm->ctrlin = newctrl;
300 dev_dbg(&acm->control->dev,
301 "%s - input control lines: dcd%c dsr%c break%c "
302 "ring%c framing%c parity%c overrun%c\n",
304 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
305 acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
306 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
307 acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
308 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
309 acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
310 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
314 dev_dbg(&acm->control->dev,
315 "%s - unknown notification %d received: index %d "
316 "len %d data0 %d data1 %d\n",
318 dr->bNotificationType, dr->wIndex,
319 dr->wLength, data[0], data[1]);
323 retval = usb_submit_urb(urb, GFP_ATOMIC);
325 dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
329 /* data interface returns incoming bytes, or we got unthrottled */
330 static void acm_read_bulk(struct urb *urb)
333 struct acm_ru *rcv = urb->context;
334 struct acm *acm = rcv->instance;
335 int status = urb->status;
337 dev_vdbg(&acm->data->dev, "%s - status %d\n", __func__, status);
339 if (!ACM_READY(acm)) {
340 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
343 usb_mark_last_busy(acm->dev);
346 dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
350 buf->size = urb->actual_length;
352 if (likely(status == 0)) {
353 spin_lock(&acm->read_lock);
355 list_add_tail(&rcv->list, &acm->spare_read_urbs);
356 list_add_tail(&buf->list, &acm->filled_read_bufs);
357 spin_unlock(&acm->read_lock);
359 /* we drop the buffer due to an error */
360 spin_lock(&acm->read_lock);
361 list_add_tail(&rcv->list, &acm->spare_read_urbs);
362 list_add(&buf->list, &acm->spare_read_bufs);
363 spin_unlock(&acm->read_lock);
364 /* nevertheless the tasklet must be kicked unconditionally
365 so the queue cannot dry up */
367 if (likely(!acm->susp_count))
368 tasklet_schedule(&acm->urb_task);
371 static void acm_rx_tasklet(unsigned long _acm)
373 struct acm *acm = (void *)_acm;
375 struct tty_struct *tty;
378 unsigned char throttled;
380 dev_vdbg(&acm->data->dev, "%s\n", __func__);
382 if (!ACM_READY(acm)) {
383 dev_dbg(&acm->data->dev, "%s - acm not ready\n", __func__);
387 spin_lock_irqsave(&acm->throttle_lock, flags);
388 throttled = acm->throttle;
389 spin_unlock_irqrestore(&acm->throttle_lock, flags);
391 dev_dbg(&acm->data->dev, "%s - throttled\n", __func__);
395 tty = tty_port_tty_get(&acm->port);
398 spin_lock_irqsave(&acm->read_lock, flags);
399 if (list_empty(&acm->filled_read_bufs)) {
400 spin_unlock_irqrestore(&acm->read_lock, flags);
403 buf = list_entry(acm->filled_read_bufs.next,
404 struct acm_rb, list);
405 list_del(&buf->list);
406 spin_unlock_irqrestore(&acm->read_lock, flags);
408 dev_vdbg(&acm->data->dev, "%s - processing buf 0x%p, size = %d\n",
409 __func__, buf, buf->size);
411 spin_lock_irqsave(&acm->throttle_lock, flags);
412 throttled = acm->throttle;
413 spin_unlock_irqrestore(&acm->throttle_lock, flags);
415 tty_insert_flip_string(tty, buf->base, buf->size);
416 tty_flip_buffer_push(tty);
419 dev_dbg(&acm->data->dev, "%s - throttling noticed\n",
421 spin_lock_irqsave(&acm->read_lock, flags);
422 list_add(&buf->list, &acm->filled_read_bufs);
423 spin_unlock_irqrestore(&acm->read_lock, flags);
428 spin_lock_irqsave(&acm->read_lock, flags);
429 list_add(&buf->list, &acm->spare_read_bufs);
430 spin_unlock_irqrestore(&acm->read_lock, flags);
436 while (!list_empty(&acm->spare_read_bufs)) {
437 spin_lock_irqsave(&acm->read_lock, flags);
438 if (list_empty(&acm->spare_read_urbs)) {
440 spin_unlock_irqrestore(&acm->read_lock, flags);
443 rcv = list_entry(acm->spare_read_urbs.next,
444 struct acm_ru, list);
445 list_del(&rcv->list);
446 spin_unlock_irqrestore(&acm->read_lock, flags);
448 buf = list_entry(acm->spare_read_bufs.next,
449 struct acm_rb, list);
450 list_del(&buf->list);
455 usb_fill_int_urb(rcv->urb, acm->dev,
459 acm_read_bulk, rcv, acm->bInterval);
461 usb_fill_bulk_urb(rcv->urb, acm->dev,
466 rcv->urb->transfer_dma = buf->dma;
467 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
469 /* This shouldn't kill the driver as unsuccessful URBs are
470 returned to the free-urbs-pool and resubmited ASAP */
471 spin_lock_irqsave(&acm->read_lock, flags);
472 if (acm->susp_count ||
473 usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
474 list_add(&buf->list, &acm->spare_read_bufs);
475 list_add(&rcv->list, &acm->spare_read_urbs);
477 spin_unlock_irqrestore(&acm->read_lock, flags);
480 spin_unlock_irqrestore(&acm->read_lock, flags);
481 dev_vdbg(&acm->data->dev,
482 "%s - sending urb 0x%p, rcv 0x%p, buf 0x%p\n",
483 __func__, rcv->urb, rcv, buf);
486 spin_lock_irqsave(&acm->read_lock, flags);
488 spin_unlock_irqrestore(&acm->read_lock, flags);
491 /* data interface wrote those outgoing bytes */
492 static void acm_write_bulk(struct urb *urb)
494 struct acm_wb *wb = urb->context;
495 struct acm *acm = wb->instance;
498 if (urb->status || (urb->actual_length != urb->transfer_buffer_length))
499 dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
502 urb->transfer_buffer_length,
505 spin_lock_irqsave(&acm->write_lock, flags);
506 acm_write_done(acm, wb);
507 spin_unlock_irqrestore(&acm->write_lock, flags);
509 schedule_work(&acm->work);
511 wake_up_interruptible(&acm->drain_wait);
514 static void acm_softint(struct work_struct *work)
516 struct acm *acm = container_of(work, struct acm, work);
517 struct tty_struct *tty;
519 dev_vdbg(&acm->data->dev, "%s\n", __func__);
523 tty = tty_port_tty_get(&acm->port);
534 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
540 mutex_lock(&open_mutex);
542 acm = acm_table[tty->index];
543 if (!acm || !acm->dev)
548 dev_dbg(&acm->control->dev, "%s\n", __func__);
550 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
552 tty->driver_data = acm;
553 tty_port_tty_set(&acm->port, tty);
555 if (usb_autopm_get_interface(acm->control) < 0)
558 acm->control->needs_remote_wakeup = 1;
560 mutex_lock(&acm->mutex);
561 if (acm->port.count++) {
562 mutex_unlock(&acm->mutex);
563 usb_autopm_put_interface(acm->control);
567 acm->ctrlurb->dev = acm->dev;
568 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
569 dev_err(&acm->control->dev,
570 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
574 if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
575 (acm->ctrl_caps & USB_CDC_CAP_LINE))
578 usb_autopm_put_interface(acm->control);
580 INIT_LIST_HEAD(&acm->spare_read_urbs);
581 INIT_LIST_HEAD(&acm->spare_read_bufs);
582 INIT_LIST_HEAD(&acm->filled_read_bufs);
584 for (i = 0; i < acm->rx_buflimit; i++)
585 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
586 for (i = 0; i < acm->rx_buflimit; i++)
587 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
591 set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
592 rv = tty_port_block_til_ready(&acm->port, tty, filp);
593 tasklet_schedule(&acm->urb_task);
595 mutex_unlock(&acm->mutex);
597 mutex_unlock(&open_mutex);
601 usb_kill_urb(acm->ctrlurb);
604 mutex_unlock(&acm->mutex);
605 usb_autopm_put_interface(acm->control);
607 mutex_unlock(&open_mutex);
608 tty_port_tty_set(&acm->port, NULL);
612 static void acm_tty_unregister(struct acm *acm)
616 nr = acm->rx_buflimit;
617 tty_unregister_device(acm_tty_driver, acm->minor);
618 usb_put_intf(acm->control);
619 acm_table[acm->minor] = NULL;
620 usb_free_urb(acm->ctrlurb);
621 for (i = 0; i < ACM_NW; i++)
622 usb_free_urb(acm->wb[i].urb);
623 for (i = 0; i < nr; i++)
624 usb_free_urb(acm->ru[i].urb);
625 kfree(acm->country_codes);
629 static void acm_port_down(struct acm *acm)
631 int i, nr = acm->rx_buflimit;
632 mutex_lock(&open_mutex);
634 usb_autopm_get_interface(acm->control);
635 acm_set_control(acm, acm->ctrlout = 0);
636 usb_kill_urb(acm->ctrlurb);
637 for (i = 0; i < ACM_NW; i++)
638 usb_kill_urb(acm->wb[i].urb);
639 tasklet_disable(&acm->urb_task);
640 for (i = 0; i < nr; i++)
641 usb_kill_urb(acm->ru[i].urb);
642 tasklet_enable(&acm->urb_task);
643 acm->control->needs_remote_wakeup = 0;
644 usb_autopm_put_interface(acm->control);
646 mutex_unlock(&open_mutex);
649 static void acm_tty_hangup(struct tty_struct *tty)
651 struct acm *acm = tty->driver_data;
652 tty_port_hangup(&acm->port);
656 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
658 struct acm *acm = tty->driver_data;
660 /* Perform the closing process and see if we need to do the hardware
664 if (tty_port_close_start(&acm->port, tty, filp) == 0) {
665 mutex_lock(&open_mutex);
667 tty_port_tty_set(&acm->port, NULL);
668 acm_tty_unregister(acm);
669 tty->driver_data = NULL;
671 mutex_unlock(&open_mutex);
675 tty_port_close_end(&acm->port, tty);
676 tty_port_tty_set(&acm->port, NULL);
679 static int acm_tty_write(struct tty_struct *tty,
680 const unsigned char *buf, int count)
682 struct acm *acm = tty->driver_data;
693 dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
695 spin_lock_irqsave(&acm->write_lock, flags);
696 wbn = acm_wb_alloc(acm);
698 spin_unlock_irqrestore(&acm->write_lock, flags);
703 count = (count > acm->writesize) ? acm->writesize : count;
704 dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
705 memcpy(wb->buf, buf, count);
707 spin_unlock_irqrestore(&acm->write_lock, flags);
709 stat = acm_write_start(acm, wbn);
715 static int acm_tty_write_room(struct tty_struct *tty)
717 struct acm *acm = tty->driver_data;
721 * Do not let the line discipline to know that we have a reserve,
722 * or it might get too enthusiastic.
724 return acm_wb_is_avail(acm) ? acm->writesize : 0;
727 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
729 struct acm *acm = tty->driver_data;
733 * This is inaccurate (overcounts), but it works.
735 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
738 static void acm_tty_throttle(struct tty_struct *tty)
740 struct acm *acm = tty->driver_data;
743 spin_lock_bh(&acm->throttle_lock);
745 spin_unlock_bh(&acm->throttle_lock);
748 static void acm_tty_unthrottle(struct tty_struct *tty)
750 struct acm *acm = tty->driver_data;
753 spin_lock_bh(&acm->throttle_lock);
755 spin_unlock_bh(&acm->throttle_lock);
756 tasklet_schedule(&acm->urb_task);
759 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
761 struct acm *acm = tty->driver_data;
765 retval = acm_send_break(acm, state ? 0xffff : 0);
767 dev_dbg(&acm->control->dev, "%s - send break failed\n",
772 static int acm_tty_tiocmget(struct tty_struct *tty)
774 struct acm *acm = tty->driver_data;
779 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
780 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
781 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
782 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
783 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
787 static int acm_tty_tiocmset(struct tty_struct *tty,
788 unsigned int set, unsigned int clear)
790 struct acm *acm = tty->driver_data;
791 unsigned int newctrl;
796 newctrl = acm->ctrlout;
797 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
798 (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
799 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
800 (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
802 newctrl = (newctrl & ~clear) | set;
804 if (acm->ctrlout == newctrl)
806 return acm_set_control(acm, acm->ctrlout = newctrl);
809 static int acm_tty_ioctl(struct tty_struct *tty,
810 unsigned int cmd, unsigned long arg)
812 struct acm *acm = tty->driver_data;
820 static const __u32 acm_tty_speed[] = {
821 0, 50, 75, 110, 134, 150, 200, 300, 600,
822 1200, 1800, 2400, 4800, 9600, 19200, 38400,
823 57600, 115200, 230400, 460800, 500000, 576000,
824 921600, 1000000, 1152000, 1500000, 2000000,
825 2500000, 3000000, 3500000, 4000000
828 static const __u8 acm_tty_size[] = {
832 static void acm_tty_set_termios(struct tty_struct *tty,
833 struct ktermios *termios_old)
835 struct acm *acm = tty->driver_data;
836 struct ktermios *termios = tty->termios;
837 struct usb_cdc_line_coding newline;
838 int newctrl = acm->ctrlout;
843 newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
844 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
845 newline.bParityType = termios->c_cflag & PARENB ?
846 (termios->c_cflag & PARODD ? 1 : 2) +
847 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
848 newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
849 /* FIXME: Needs to clear unsupported bits in the termios */
850 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
852 if (!newline.dwDTERate) {
853 newline.dwDTERate = acm->line.dwDTERate;
854 newctrl &= ~ACM_CTRL_DTR;
856 newctrl |= ACM_CTRL_DTR;
858 if (newctrl != acm->ctrlout)
859 acm_set_control(acm, acm->ctrlout = newctrl);
861 if (memcmp(&acm->line, &newline, sizeof newline)) {
862 memcpy(&acm->line, &newline, sizeof newline);
863 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
865 le32_to_cpu(newline.dwDTERate),
866 newline.bCharFormat, newline.bParityType,
868 acm_set_line(acm, &acm->line);
873 * USB probe and disconnect routines.
876 /* Little helpers: write/read buffers free */
877 static void acm_write_buffers_free(struct acm *acm)
881 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
883 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
884 usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
887 static void acm_read_buffers_free(struct acm *acm)
889 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
890 int i, n = acm->rx_buflimit;
892 for (i = 0; i < n; i++)
893 usb_free_coherent(usb_dev, acm->readsize,
894 acm->rb[i].base, acm->rb[i].dma);
897 /* Little helper: write buffers allocate */
898 static int acm_write_buffers_alloc(struct acm *acm)
903 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
904 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
910 usb_free_coherent(acm->dev, acm->writesize,
919 static int acm_probe(struct usb_interface *intf,
920 const struct usb_device_id *id)
922 struct usb_cdc_union_desc *union_header = NULL;
923 struct usb_cdc_country_functional_desc *cfd = NULL;
924 unsigned char *buffer = intf->altsetting->extra;
925 int buflen = intf->altsetting->extralen;
926 struct usb_interface *control_interface;
927 struct usb_interface *data_interface;
928 struct usb_endpoint_descriptor *epctrl = NULL;
929 struct usb_endpoint_descriptor *epread = NULL;
930 struct usb_endpoint_descriptor *epwrite = NULL;
931 struct usb_device *usb_dev = interface_to_usbdev(intf);
934 int ctrlsize, readsize;
936 u8 ac_management_function = 0;
937 u8 call_management_function = 0;
938 int call_interface_num = -1;
939 int data_interface_num;
940 unsigned long quirks;
943 int combined_interfaces = 0;
946 quirks = (unsigned long)id->driver_info;
947 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
949 /* handle quirks deadly to normal probing*/
950 if (quirks == NO_UNION_NORMAL) {
951 data_interface = usb_ifnum_to_if(usb_dev, 1);
952 control_interface = usb_ifnum_to_if(usb_dev, 0);
953 goto skip_normal_probe;
958 dev_err(&intf->dev, "Weird descriptor references\n");
963 if (intf->cur_altsetting->endpoint &&
964 intf->cur_altsetting->endpoint->extralen &&
965 intf->cur_altsetting->endpoint->extra) {
967 "Seeking extra descriptors on endpoint\n");
968 buflen = intf->cur_altsetting->endpoint->extralen;
969 buffer = intf->cur_altsetting->endpoint->extra;
972 "Zero length descriptor references\n");
978 if (buffer[1] != USB_DT_CS_INTERFACE) {
979 dev_err(&intf->dev, "skipping garbage\n");
984 case USB_CDC_UNION_TYPE: /* we've found it */
986 dev_err(&intf->dev, "More than one "
987 "union descriptor, skipping ...\n");
990 union_header = (struct usb_cdc_union_desc *)buffer;
992 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
993 cfd = (struct usb_cdc_country_functional_desc *)buffer;
995 case USB_CDC_HEADER_TYPE: /* maybe check version */
996 break; /* for now we ignore it */
997 case USB_CDC_ACM_TYPE:
998 ac_management_function = buffer[3];
1000 case USB_CDC_CALL_MANAGEMENT_TYPE:
1001 call_management_function = buffer[3];
1002 call_interface_num = buffer[4];
1003 if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1004 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1007 /* there are LOTS more CDC descriptors that
1008 * could legitimately be found here.
1010 dev_dbg(&intf->dev, "Ignoring descriptor: "
1011 "type %02x, length %d\n",
1012 buffer[2], buffer[0]);
1016 buflen -= buffer[0];
1017 buffer += buffer[0];
1020 if (!union_header) {
1021 if (call_interface_num > 0) {
1022 dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1023 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1024 control_interface = intf;
1026 if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1027 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1030 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1031 combined_interfaces = 1;
1032 control_interface = data_interface = intf;
1033 goto look_for_collapsed_interface;
1037 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1038 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1039 if (!control_interface || !data_interface) {
1040 dev_dbg(&intf->dev, "no interfaces\n");
1045 if (data_interface_num != call_interface_num)
1046 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1048 if (control_interface == data_interface) {
1049 /* some broken devices designed for windows work this way */
1050 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1051 combined_interfaces = 1;
1052 /* a popular other OS doesn't use it */
1053 quirks |= NO_CAP_LINE;
1054 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1055 dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1058 look_for_collapsed_interface:
1059 for (i = 0; i < 3; i++) {
1060 struct usb_endpoint_descriptor *ep;
1061 ep = &data_interface->cur_altsetting->endpoint[i].desc;
1063 if (usb_endpoint_is_int_in(ep))
1065 else if (usb_endpoint_is_bulk_out(ep))
1067 else if (usb_endpoint_is_bulk_in(ep))
1072 if (!epctrl || !epread || !epwrite)
1075 goto made_compressed_probe;
1080 /*workaround for switched interfaces */
1081 if (data_interface->cur_altsetting->desc.bInterfaceClass
1082 != CDC_DATA_INTERFACE_TYPE) {
1083 if (control_interface->cur_altsetting->desc.bInterfaceClass
1084 == CDC_DATA_INTERFACE_TYPE) {
1085 struct usb_interface *t;
1087 "Your device has switched interfaces.\n");
1088 t = control_interface;
1089 control_interface = data_interface;
1096 /* Accept probe requests only for the control interface */
1097 if (!combined_interfaces && intf != control_interface)
1100 if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1101 /* valid in this context */
1102 dev_dbg(&intf->dev, "The data interface isn't available\n");
1107 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1110 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1111 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1112 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1115 /* workaround for switched endpoints */
1116 if (!usb_endpoint_dir_in(epread)) {
1117 /* descriptors are swapped */
1118 struct usb_endpoint_descriptor *t;
1120 "The data interface has switched endpoints\n");
1125 made_compressed_probe:
1126 dev_dbg(&intf->dev, "interfaces are valid\n");
1127 for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1129 if (minor == ACM_TTY_MINORS) {
1130 dev_err(&intf->dev, "no more free acm devices\n");
1134 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1136 dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1140 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1141 readsize = le16_to_cpu(epread->wMaxPacketSize) *
1142 (quirks == SINGLE_RX_URB ? 1 : 2);
1143 acm->combined_interfaces = combined_interfaces;
1144 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1145 acm->control = control_interface;
1146 acm->data = data_interface;
1149 acm->ctrl_caps = ac_management_function;
1150 if (quirks & NO_CAP_LINE)
1151 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1152 acm->ctrlsize = ctrlsize;
1153 acm->readsize = readsize;
1154 acm->rx_buflimit = num_rx_buf;
1155 acm->urb_task.func = acm_rx_tasklet;
1156 acm->urb_task.data = (unsigned long) acm;
1157 INIT_WORK(&acm->work, acm_softint);
1158 init_waitqueue_head(&acm->drain_wait);
1159 spin_lock_init(&acm->throttle_lock);
1160 spin_lock_init(&acm->write_lock);
1161 spin_lock_init(&acm->read_lock);
1162 mutex_init(&acm->mutex);
1163 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1164 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1166 acm->bInterval = epread->bInterval;
1167 tty_port_init(&acm->port);
1168 acm->port.ops = &acm_port_ops;
1170 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1172 dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1175 acm->ctrl_buffer = buf;
1177 if (acm_write_buffers_alloc(acm) < 0) {
1178 dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1182 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1183 if (!acm->ctrlurb) {
1184 dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1187 for (i = 0; i < num_rx_buf; i++) {
1188 struct acm_ru *rcv = &(acm->ru[i]);
1190 rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1191 if (rcv->urb == NULL) {
1193 "out of memory (read urbs usb_alloc_urb)\n");
1197 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1198 rcv->instance = acm;
1200 for (i = 0; i < num_rx_buf; i++) {
1201 struct acm_rb *rb = &(acm->rb[i]);
1203 rb->base = usb_alloc_coherent(acm->dev, readsize,
1204 GFP_KERNEL, &rb->dma);
1207 "out of memory (read bufs usb_alloc_coherent)\n");
1211 for (i = 0; i < ACM_NW; i++) {
1212 struct acm_wb *snd = &(acm->wb[i]);
1214 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1215 if (snd->urb == NULL) {
1217 "out of memory (write urbs usb_alloc_urb)\n");
1221 if (usb_endpoint_xfer_int(epwrite))
1222 usb_fill_int_urb(snd->urb, usb_dev,
1223 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1224 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1226 usb_fill_bulk_urb(snd->urb, usb_dev,
1227 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1228 NULL, acm->writesize, acm_write_bulk, snd);
1229 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1230 snd->instance = acm;
1233 usb_set_intfdata(intf, acm);
1235 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1239 if (cfd) { /* export the country data */
1240 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1241 if (!acm->country_codes)
1242 goto skip_countries;
1243 acm->country_code_size = cfd->bLength - 4;
1244 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1246 acm->country_rel_date = cfd->iCountryCodeRelDate;
1248 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1250 kfree(acm->country_codes);
1251 goto skip_countries;
1254 i = device_create_file(&intf->dev,
1255 &dev_attr_iCountryCodeRelDate);
1257 device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1258 kfree(acm->country_codes);
1259 goto skip_countries;
1264 usb_fill_int_urb(acm->ctrlurb, usb_dev,
1265 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1266 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1267 /* works around buggy devices */
1268 epctrl->bInterval ? epctrl->bInterval : 0xff);
1269 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1270 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1272 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1274 acm_set_control(acm, acm->ctrlout);
1276 acm->line.dwDTERate = cpu_to_le32(9600);
1277 acm->line.bDataBits = 8;
1278 acm_set_line(acm, &acm->line);
1280 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1281 usb_set_intfdata(data_interface, acm);
1283 usb_get_intf(control_interface);
1284 tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1286 acm_table[minor] = acm;
1290 for (i = 0; i < ACM_NW; i++)
1291 usb_free_urb(acm->wb[i].urb);
1293 acm_read_buffers_free(acm);
1295 for (i = 0; i < num_rx_buf; i++)
1296 usb_free_urb(acm->ru[i].urb);
1297 usb_free_urb(acm->ctrlurb);
1299 acm_write_buffers_free(acm);
1301 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1308 static void stop_data_traffic(struct acm *acm)
1312 dev_dbg(&acm->control->dev, "%s\n", __func__);
1314 tasklet_disable(&acm->urb_task);
1316 usb_kill_urb(acm->ctrlurb);
1317 for (i = 0; i < ACM_NW; i++)
1318 usb_kill_urb(acm->wb[i].urb);
1319 for (i = 0; i < acm->rx_buflimit; i++)
1320 usb_kill_urb(acm->ru[i].urb);
1322 tasklet_enable(&acm->urb_task);
1324 cancel_work_sync(&acm->work);
1327 static void acm_disconnect(struct usb_interface *intf)
1329 struct acm *acm = usb_get_intfdata(intf);
1330 struct usb_device *usb_dev = interface_to_usbdev(intf);
1331 struct tty_struct *tty;
1333 /* sibling interface is already cleaning up */
1337 mutex_lock(&open_mutex);
1338 if (acm->country_codes) {
1339 device_remove_file(&acm->control->dev,
1340 &dev_attr_wCountryCodes);
1341 device_remove_file(&acm->control->dev,
1342 &dev_attr_iCountryCodeRelDate);
1344 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1346 usb_set_intfdata(acm->control, NULL);
1347 usb_set_intfdata(acm->data, NULL);
1349 stop_data_traffic(acm);
1351 acm_write_buffers_free(acm);
1352 usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1354 acm_read_buffers_free(acm);
1356 if (!acm->combined_interfaces)
1357 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1358 acm->data : acm->control);
1360 if (acm->port.count == 0) {
1361 acm_tty_unregister(acm);
1362 mutex_unlock(&open_mutex);
1366 mutex_unlock(&open_mutex);
1367 tty = tty_port_tty_get(&acm->port);
1375 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1377 struct acm *acm = usb_get_intfdata(intf);
1380 if (message.event & PM_EVENT_AUTO) {
1383 spin_lock_irq(&acm->read_lock);
1384 spin_lock(&acm->write_lock);
1385 b = acm->processing + acm->transmitting;
1386 spin_unlock(&acm->write_lock);
1387 spin_unlock_irq(&acm->read_lock);
1392 spin_lock_irq(&acm->read_lock);
1393 spin_lock(&acm->write_lock);
1394 cnt = acm->susp_count++;
1395 spin_unlock(&acm->write_lock);
1396 spin_unlock_irq(&acm->read_lock);
1401 we treat opened interfaces differently,
1402 we must guard against open
1404 mutex_lock(&acm->mutex);
1406 if (acm->port.count)
1407 stop_data_traffic(acm);
1409 mutex_unlock(&acm->mutex);
1413 static int acm_resume(struct usb_interface *intf)
1415 struct acm *acm = usb_get_intfdata(intf);
1420 spin_lock_irq(&acm->read_lock);
1421 acm->susp_count -= 1;
1422 cnt = acm->susp_count;
1423 spin_unlock_irq(&acm->read_lock);
1428 mutex_lock(&acm->mutex);
1429 if (acm->port.count) {
1430 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1432 spin_lock_irq(&acm->write_lock);
1433 if (acm->delayed_wb) {
1434 wb = acm->delayed_wb;
1435 acm->delayed_wb = NULL;
1436 spin_unlock_irq(&acm->write_lock);
1437 acm_start_wb(acm, wb);
1439 spin_unlock_irq(&acm->write_lock);
1443 * delayed error checking because we must
1444 * do the write path at all cost
1449 tasklet_schedule(&acm->urb_task);
1453 mutex_unlock(&acm->mutex);
1457 static int acm_reset_resume(struct usb_interface *intf)
1459 struct acm *acm = usb_get_intfdata(intf);
1460 struct tty_struct *tty;
1462 mutex_lock(&acm->mutex);
1463 if (acm->port.count) {
1464 tty = tty_port_tty_get(&acm->port);
1470 mutex_unlock(&acm->mutex);
1471 return acm_resume(intf);
1474 #endif /* CONFIG_PM */
1476 #define NOKIA_PCSUITE_ACM_INFO(x) \
1477 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1478 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1479 USB_CDC_ACM_PROTO_VENDOR)
1481 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1482 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1483 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1484 USB_CDC_ACM_PROTO_VENDOR)
1487 * USB driver structure.
1490 static const struct usb_device_id acm_ids[] = {
1491 /* quirky and broken devices */
1492 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1493 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1495 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1496 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1498 { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1499 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1501 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1502 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1504 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1505 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1507 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1508 .driver_info = SINGLE_RX_URB,
1510 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1511 .driver_info = SINGLE_RX_URB, /* firmware bug */
1513 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1514 .driver_info = SINGLE_RX_URB, /* firmware bug */
1516 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1517 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1519 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1520 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1522 { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1523 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1525 { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1526 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1528 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1529 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1531 { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1533 { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1534 .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1535 data interface instead of
1536 communications interface.
1537 Maybe we should define a new
1540 { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1541 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1543 { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1544 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1547 /* Nokia S60 phones expose two ACM channels. The first is
1548 * a modem and is picked up by the standard AT-command
1549 * information below. The second is 'vendor-specific' but
1550 * is treated as a serial device at the S60 end, so we want
1551 * to expose it on Linux too. */
1552 { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1553 { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1554 { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1555 { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1556 { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1557 { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1558 { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1559 { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1560 { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1561 { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1562 { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1563 { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1564 { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1565 { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1566 { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1567 { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1568 { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1569 { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */
1570 { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1571 { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1572 { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1573 { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */
1574 { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1575 { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1576 { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1577 { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1578 { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1579 { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1580 { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1581 { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1582 { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1583 { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */
1584 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1585 { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1586 { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1587 { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1588 { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1589 { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1590 { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1591 { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */
1592 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1593 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1594 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1595 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1596 { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1597 { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1598 { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1599 { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1600 { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1601 { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1602 { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1603 { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1604 { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1605 { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1606 { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1607 { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1609 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1611 /* Support Lego NXT using pbLua firmware */
1612 { USB_DEVICE(0x0694, 0xff00),
1613 .driver_info = NOT_A_MODEM,
1616 /* control interfaces without any protocol set */
1617 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1618 USB_CDC_PROTO_NONE) },
1620 /* control interfaces with various AT-command sets */
1621 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1622 USB_CDC_ACM_PROTO_AT_V25TER) },
1623 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1624 USB_CDC_ACM_PROTO_AT_PCCA101) },
1625 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1626 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1627 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1628 USB_CDC_ACM_PROTO_AT_GSM) },
1629 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1630 USB_CDC_ACM_PROTO_AT_3G) },
1631 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1632 USB_CDC_ACM_PROTO_AT_CDMA) },
1637 MODULE_DEVICE_TABLE(usb, acm_ids);
1639 static struct usb_driver acm_driver = {
1642 .disconnect = acm_disconnect,
1644 .suspend = acm_suspend,
1645 .resume = acm_resume,
1646 .reset_resume = acm_reset_resume,
1648 .id_table = acm_ids,
1650 .supports_autosuspend = 1,
1655 * TTY driver structures.
1658 static const struct tty_operations acm_ops = {
1659 .open = acm_tty_open,
1660 .close = acm_tty_close,
1661 .hangup = acm_tty_hangup,
1662 .write = acm_tty_write,
1663 .write_room = acm_tty_write_room,
1664 .ioctl = acm_tty_ioctl,
1665 .throttle = acm_tty_throttle,
1666 .unthrottle = acm_tty_unthrottle,
1667 .chars_in_buffer = acm_tty_chars_in_buffer,
1668 .break_ctl = acm_tty_break_ctl,
1669 .set_termios = acm_tty_set_termios,
1670 .tiocmget = acm_tty_tiocmget,
1671 .tiocmset = acm_tty_tiocmset,
1678 static int __init acm_init(void)
1681 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1682 if (!acm_tty_driver)
1684 acm_tty_driver->owner = THIS_MODULE,
1685 acm_tty_driver->driver_name = "acm",
1686 acm_tty_driver->name = "ttyACM",
1687 acm_tty_driver->major = ACM_TTY_MAJOR,
1688 acm_tty_driver->minor_start = 0,
1689 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1690 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1691 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1692 acm_tty_driver->init_termios = tty_std_termios;
1693 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1695 tty_set_operations(acm_tty_driver, &acm_ops);
1697 retval = tty_register_driver(acm_tty_driver);
1699 put_tty_driver(acm_tty_driver);
1703 retval = usb_register(&acm_driver);
1705 tty_unregister_driver(acm_tty_driver);
1706 put_tty_driver(acm_tty_driver);
1710 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1715 static void __exit acm_exit(void)
1717 usb_deregister(&acm_driver);
1718 tty_unregister_driver(acm_tty_driver);
1719 put_tty_driver(acm_tty_driver);
1722 module_init(acm_init);
1723 module_exit(acm_exit);
1725 MODULE_AUTHOR(DRIVER_AUTHOR);
1726 MODULE_DESCRIPTION(DRIVER_DESC);
1727 MODULE_LICENSE("GPL");
1728 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);