4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de>
5 * Copyright (c) 1999 Pavel Machek <pavel@ucw.cz>
6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com>
7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz>
8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name>
9 * Copyright (c) 2005 David Kubicek <dave@awk.cz>
10 * Copyright (c) 2011 Johan Hovold <jhovold@gmail.com>
12 * USB Abstract Control Model driver for USB modems and ISDN adapters
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License as published by
18 * the Free Software Foundation; either version 2 of the License, or
19 * (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 #include <linux/kernel.h>
35 #include <linux/errno.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/tty.h>
39 #include <linux/serial.h>
40 #include <linux/tty_driver.h>
41 #include <linux/tty_flip.h>
42 #include <linux/module.h>
43 #include <linux/mutex.h>
44 #include <linux/uaccess.h>
45 #include <linux/usb.h>
46 #include <linux/usb/cdc.h>
47 #include <asm/byteorder.h>
48 #include <asm/unaligned.h>
49 #include <linux/list.h>
54 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
55 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
57 static struct usb_driver acm_driver;
58 static struct tty_driver *acm_tty_driver;
59 static struct acm *acm_table[ACM_TTY_MINORS];
61 static DEFINE_MUTEX(acm_table_lock);
68 * Look up an ACM structure by index. If found and not disconnected, increment
69 * its refcount and return it with its mutex held.
71 static struct acm *acm_get_by_index(unsigned index)
75 mutex_lock(&acm_table_lock);
76 acm = acm_table[index];
78 mutex_lock(&acm->mutex);
79 if (acm->disconnected) {
80 mutex_unlock(&acm->mutex);
83 tty_port_get(&acm->port);
84 mutex_unlock(&acm->mutex);
87 mutex_unlock(&acm_table_lock);
92 * Try to find an available minor number and if found, associate it with 'acm'.
94 static int acm_alloc_minor(struct acm *acm)
98 mutex_lock(&acm_table_lock);
99 for (minor = 0; minor < ACM_TTY_MINORS; minor++) {
100 if (!acm_table[minor]) {
101 acm_table[minor] = acm;
105 mutex_unlock(&acm_table_lock);
110 /* Release the minor number associated with 'acm'. */
111 static void acm_release_minor(struct acm *acm)
113 mutex_lock(&acm_table_lock);
114 acm_table[acm->minor] = NULL;
115 mutex_unlock(&acm_table_lock);
119 * Functions for ACM control messages.
122 static int acm_ctrl_msg(struct acm *acm, int request, int value,
125 int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
126 request, USB_RT_ACM, value,
127 acm->control->altsetting[0].desc.bInterfaceNumber,
129 dev_dbg(&acm->control->dev,
130 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
131 __func__, request, value, len, retval);
132 return retval < 0 ? retval : 0;
135 /* devices aren't required to support these requests.
136 * the cdc acm descriptor tells whether they do...
138 #define acm_set_control(acm, control) \
139 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
140 #define acm_set_line(acm, line) \
141 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
142 #define acm_send_break(acm, ms) \
143 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
146 * Write buffer management.
147 * All of these assume proper locks taken by the caller.
150 static int acm_wb_alloc(struct acm *acm)
163 wbn = (wbn + 1) % ACM_NW;
169 static int acm_wb_is_avail(struct acm *acm)
175 spin_lock_irqsave(&acm->write_lock, flags);
176 for (i = 0; i < ACM_NW; i++)
178 spin_unlock_irqrestore(&acm->write_lock, flags);
183 * Finish write. Caller must hold acm->write_lock
185 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
189 usb_autopm_put_interface_async(acm->control);
195 * the caller is responsible for locking
198 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
204 wb->urb->transfer_buffer = wb->buf;
205 wb->urb->transfer_dma = wb->dmah;
206 wb->urb->transfer_buffer_length = wb->len;
207 wb->urb->dev = acm->dev;
209 rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
211 dev_err(&acm->data->dev,
212 "%s - usb_submit_urb(write bulk) failed: %d\n",
214 acm_write_done(acm, wb);
219 static int acm_write_start(struct acm *acm, int wbn)
222 struct acm_wb *wb = &acm->wb[wbn];
225 spin_lock_irqsave(&acm->write_lock, flags);
228 spin_unlock_irqrestore(&acm->write_lock, flags);
232 dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
234 usb_autopm_get_interface_async(acm->control);
235 if (acm->susp_count) {
236 if (!acm->delayed_wb)
237 acm->delayed_wb = wb;
239 usb_autopm_put_interface_async(acm->control);
240 spin_unlock_irqrestore(&acm->write_lock, flags);
241 return 0; /* A white lie */
243 usb_mark_last_busy(acm->dev);
245 rc = acm_start_wb(acm, wb);
246 spin_unlock_irqrestore(&acm->write_lock, flags);
252 * attributes exported through sysfs
254 static ssize_t show_caps
255 (struct device *dev, struct device_attribute *attr, char *buf)
257 struct usb_interface *intf = to_usb_interface(dev);
258 struct acm *acm = usb_get_intfdata(intf);
260 return sprintf(buf, "%d", acm->ctrl_caps);
262 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
264 static ssize_t show_country_codes
265 (struct device *dev, struct device_attribute *attr, char *buf)
267 struct usb_interface *intf = to_usb_interface(dev);
268 struct acm *acm = usb_get_intfdata(intf);
270 memcpy(buf, acm->country_codes, acm->country_code_size);
271 return acm->country_code_size;
274 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
276 static ssize_t show_country_rel_date
277 (struct device *dev, struct device_attribute *attr, char *buf)
279 struct usb_interface *intf = to_usb_interface(dev);
280 struct acm *acm = usb_get_intfdata(intf);
282 return sprintf(buf, "%d", acm->country_rel_date);
285 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
287 * Interrupt handlers for various ACM device responses
290 /* control interface reports status changes with "interrupt" transfers */
291 static void acm_ctrl_irq(struct urb *urb)
293 struct acm *acm = urb->context;
294 struct usb_cdc_notification *dr = urb->transfer_buffer;
298 int status = urb->status;
307 /* this urb is terminated, clean up */
308 dev_dbg(&acm->control->dev,
309 "%s - urb shutting down with status: %d\n",
313 dev_dbg(&acm->control->dev,
314 "%s - nonzero urb status received: %d\n",
319 usb_mark_last_busy(acm->dev);
321 data = (unsigned char *)(dr + 1);
322 switch (dr->bNotificationType) {
323 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
324 dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
325 __func__, dr->wValue);
328 case USB_CDC_NOTIFY_SERIAL_STATE:
329 newctrl = get_unaligned_le16(data);
331 if (!acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
332 dev_dbg(&acm->control->dev, "%s - calling hangup\n",
334 tty_port_tty_hangup(&acm->port, false);
337 acm->ctrlin = newctrl;
339 dev_dbg(&acm->control->dev,
340 "%s - input control lines: dcd%c dsr%c break%c "
341 "ring%c framing%c parity%c overrun%c\n",
343 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
344 acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
345 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
346 acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
347 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
348 acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
349 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
353 dev_dbg(&acm->control->dev,
354 "%s - unknown notification %d received: index %d "
355 "len %d data0 %d data1 %d\n",
357 dr->bNotificationType, dr->wIndex,
358 dr->wLength, data[0], data[1]);
362 retval = usb_submit_urb(urb, GFP_ATOMIC);
364 dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
368 static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
372 if (!test_and_clear_bit(index, &acm->read_urbs_free))
375 dev_vdbg(&acm->data->dev, "%s - urb %d\n", __func__, index);
377 res = usb_submit_urb(acm->read_urbs[index], mem_flags);
380 dev_err(&acm->data->dev,
381 "%s - usb_submit_urb failed: %d\n",
384 set_bit(index, &acm->read_urbs_free);
391 static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
396 for (i = 0; i < acm->rx_buflimit; ++i) {
397 res = acm_submit_read_urb(acm, i, mem_flags);
405 static void acm_process_read_urb(struct acm *acm, struct urb *urb)
407 if (!urb->actual_length)
410 tty_insert_flip_string(&acm->port, urb->transfer_buffer,
412 tty_flip_buffer_push(&acm->port);
415 static void acm_read_bulk_callback(struct urb *urb)
417 struct acm_rb *rb = urb->context;
418 struct acm *acm = rb->instance;
421 dev_vdbg(&acm->data->dev, "%s - urb %d, len %d\n", __func__,
422 rb->index, urb->actual_length);
423 set_bit(rb->index, &acm->read_urbs_free);
426 dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
429 usb_mark_last_busy(acm->dev);
432 dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
433 __func__, urb->status);
436 acm_process_read_urb(acm, urb);
438 /* throttle device if requested by tty */
439 spin_lock_irqsave(&acm->read_lock, flags);
440 acm->throttled = acm->throttle_req;
441 if (!acm->throttled && !acm->susp_count) {
442 spin_unlock_irqrestore(&acm->read_lock, flags);
443 acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
445 spin_unlock_irqrestore(&acm->read_lock, flags);
449 /* data interface wrote those outgoing bytes */
450 static void acm_write_bulk(struct urb *urb)
452 struct acm_wb *wb = urb->context;
453 struct acm *acm = wb->instance;
456 if (urb->status || (urb->actual_length != urb->transfer_buffer_length))
457 dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
460 urb->transfer_buffer_length,
463 spin_lock_irqsave(&acm->write_lock, flags);
464 acm_write_done(acm, wb);
465 spin_unlock_irqrestore(&acm->write_lock, flags);
466 schedule_work(&acm->work);
469 static void acm_softint(struct work_struct *work)
471 struct acm *acm = container_of(work, struct acm, work);
473 dev_vdbg(&acm->data->dev, "%s\n", __func__);
475 tty_port_tty_wakeup(&acm->port);
482 static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
487 dev_dbg(tty->dev, "%s\n", __func__);
489 acm = acm_get_by_index(tty->index);
493 retval = tty_standard_install(driver, tty);
495 goto error_init_termios;
497 tty->driver_data = acm;
502 tty_port_put(&acm->port);
506 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
508 struct acm *acm = tty->driver_data;
510 dev_dbg(tty->dev, "%s\n", __func__);
512 return tty_port_open(&acm->port, tty, filp);
515 static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
517 struct acm *acm = container_of(port, struct acm, port);
518 int retval = -ENODEV;
520 dev_dbg(&acm->control->dev, "%s\n", __func__);
522 mutex_lock(&acm->mutex);
523 if (acm->disconnected)
526 retval = usb_autopm_get_interface(acm->control);
528 goto error_get_interface;
531 * FIXME: Why do we need this? Allocating 64K of physically contiguous
532 * memory is really nasty...
534 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
535 acm->control->needs_remote_wakeup = 1;
537 acm->ctrlurb->dev = acm->dev;
538 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
539 dev_err(&acm->control->dev,
540 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
541 goto error_submit_urb;
544 acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS;
545 if (acm_set_control(acm, acm->ctrlout) < 0 &&
546 (acm->ctrl_caps & USB_CDC_CAP_LINE))
547 goto error_set_control;
549 usb_autopm_put_interface(acm->control);
552 * Unthrottle device in case the TTY was closed while throttled.
554 spin_lock_irq(&acm->read_lock);
556 acm->throttle_req = 0;
557 spin_unlock_irq(&acm->read_lock);
559 if (acm_submit_read_urbs(acm, GFP_KERNEL))
560 goto error_submit_read_urbs;
562 mutex_unlock(&acm->mutex);
566 error_submit_read_urbs:
568 acm_set_control(acm, acm->ctrlout);
570 usb_kill_urb(acm->ctrlurb);
572 usb_autopm_put_interface(acm->control);
575 mutex_unlock(&acm->mutex);
579 static void acm_port_destruct(struct tty_port *port)
581 struct acm *acm = container_of(port, struct acm, port);
583 dev_dbg(&acm->control->dev, "%s\n", __func__);
585 tty_unregister_device(acm_tty_driver, acm->minor);
586 acm_release_minor(acm);
587 usb_put_intf(acm->control);
588 kfree(acm->country_codes);
592 static void acm_port_shutdown(struct tty_port *port)
594 struct acm *acm = container_of(port, struct acm, port);
597 dev_dbg(&acm->control->dev, "%s\n", __func__);
599 mutex_lock(&acm->mutex);
600 if (!acm->disconnected) {
601 usb_autopm_get_interface(acm->control);
602 acm_set_control(acm, acm->ctrlout = 0);
603 usb_kill_urb(acm->ctrlurb);
604 for (i = 0; i < ACM_NW; i++)
605 usb_kill_urb(acm->wb[i].urb);
606 for (i = 0; i < acm->rx_buflimit; i++)
607 usb_kill_urb(acm->read_urbs[i]);
608 acm->control->needs_remote_wakeup = 0;
609 usb_autopm_put_interface(acm->control);
611 mutex_unlock(&acm->mutex);
614 static void acm_tty_cleanup(struct tty_struct *tty)
616 struct acm *acm = tty->driver_data;
617 dev_dbg(&acm->control->dev, "%s\n", __func__);
618 tty_port_put(&acm->port);
621 static void acm_tty_hangup(struct tty_struct *tty)
623 struct acm *acm = tty->driver_data;
624 dev_dbg(&acm->control->dev, "%s\n", __func__);
625 tty_port_hangup(&acm->port);
628 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
630 struct acm *acm = tty->driver_data;
631 dev_dbg(&acm->control->dev, "%s\n", __func__);
632 tty_port_close(&acm->port, tty, filp);
635 static int acm_tty_write(struct tty_struct *tty,
636 const unsigned char *buf, int count)
638 struct acm *acm = tty->driver_data;
647 dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
649 spin_lock_irqsave(&acm->write_lock, flags);
650 wbn = acm_wb_alloc(acm);
652 spin_unlock_irqrestore(&acm->write_lock, flags);
657 count = (count > acm->writesize) ? acm->writesize : count;
658 dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
659 memcpy(wb->buf, buf, count);
661 spin_unlock_irqrestore(&acm->write_lock, flags);
663 stat = acm_write_start(acm, wbn);
669 static int acm_tty_write_room(struct tty_struct *tty)
671 struct acm *acm = tty->driver_data;
673 * Do not let the line discipline to know that we have a reserve,
674 * or it might get too enthusiastic.
676 return acm_wb_is_avail(acm) ? acm->writesize : 0;
679 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
681 struct acm *acm = tty->driver_data;
683 * if the device was unplugged then any remaining characters fell out
684 * of the connector ;)
686 if (acm->disconnected)
689 * This is inaccurate (overcounts), but it works.
691 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
694 static void acm_tty_throttle(struct tty_struct *tty)
696 struct acm *acm = tty->driver_data;
698 spin_lock_irq(&acm->read_lock);
699 acm->throttle_req = 1;
700 spin_unlock_irq(&acm->read_lock);
703 static void acm_tty_unthrottle(struct tty_struct *tty)
705 struct acm *acm = tty->driver_data;
706 unsigned int was_throttled;
708 spin_lock_irq(&acm->read_lock);
709 was_throttled = acm->throttled;
711 acm->throttle_req = 0;
712 spin_unlock_irq(&acm->read_lock);
715 acm_submit_read_urbs(acm, GFP_KERNEL);
718 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
720 struct acm *acm = tty->driver_data;
723 retval = acm_send_break(acm, state ? 0xffff : 0);
725 dev_dbg(&acm->control->dev, "%s - send break failed\n",
730 static int acm_tty_tiocmget(struct tty_struct *tty)
732 struct acm *acm = tty->driver_data;
734 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
735 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
736 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
737 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
738 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
742 static int acm_tty_tiocmset(struct tty_struct *tty,
743 unsigned int set, unsigned int clear)
745 struct acm *acm = tty->driver_data;
746 unsigned int newctrl;
748 newctrl = acm->ctrlout;
749 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
750 (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
751 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
752 (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
754 newctrl = (newctrl & ~clear) | set;
756 if (acm->ctrlout == newctrl)
758 return acm_set_control(acm, acm->ctrlout = newctrl);
761 static int get_serial_info(struct acm *acm, struct serial_struct __user *info)
763 struct serial_struct tmp;
768 memset(&tmp, 0, sizeof(tmp));
769 tmp.flags = ASYNC_LOW_LATENCY;
770 tmp.xmit_fifo_size = acm->writesize;
771 tmp.baud_base = le32_to_cpu(acm->line.dwDTERate);
772 tmp.close_delay = acm->port.close_delay / 10;
773 tmp.closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
774 ASYNC_CLOSING_WAIT_NONE :
775 acm->port.closing_wait / 10;
777 if (copy_to_user(info, &tmp, sizeof(tmp)))
783 static int set_serial_info(struct acm *acm,
784 struct serial_struct __user *newinfo)
786 struct serial_struct new_serial;
787 unsigned int closing_wait, close_delay;
790 if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
793 close_delay = new_serial.close_delay * 10;
794 closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
795 ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
797 mutex_lock(&acm->port.mutex);
799 if (!capable(CAP_SYS_ADMIN)) {
800 if ((close_delay != acm->port.close_delay) ||
801 (closing_wait != acm->port.closing_wait))
804 retval = -EOPNOTSUPP;
806 acm->port.close_delay = close_delay;
807 acm->port.closing_wait = closing_wait;
810 mutex_unlock(&acm->port.mutex);
814 static int acm_tty_ioctl(struct tty_struct *tty,
815 unsigned int cmd, unsigned long arg)
817 struct acm *acm = tty->driver_data;
818 int rv = -ENOIOCTLCMD;
821 case TIOCGSERIAL: /* gets serial port data */
822 rv = get_serial_info(acm, (struct serial_struct __user *) arg);
825 rv = set_serial_info(acm, (struct serial_struct __user *) arg);
832 static const __u32 acm_tty_speed[] = {
833 0, 50, 75, 110, 134, 150, 200, 300, 600,
834 1200, 1800, 2400, 4800, 9600, 19200, 38400,
835 57600, 115200, 230400, 460800, 500000, 576000,
836 921600, 1000000, 1152000, 1500000, 2000000,
837 2500000, 3000000, 3500000, 4000000
840 static void acm_tty_set_termios(struct tty_struct *tty,
841 struct ktermios *termios_old)
843 struct acm *acm = tty->driver_data;
844 struct ktermios *termios = &tty->termios;
845 struct usb_cdc_line_coding newline;
846 int newctrl = acm->ctrlout;
848 newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
849 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
850 newline.bParityType = termios->c_cflag & PARENB ?
851 (termios->c_cflag & PARODD ? 1 : 2) +
852 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
853 switch (termios->c_cflag & CSIZE) {
855 newline.bDataBits = 5;
858 newline.bDataBits = 6;
861 newline.bDataBits = 7;
865 newline.bDataBits = 8;
868 /* FIXME: Needs to clear unsupported bits in the termios */
869 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
871 if (!newline.dwDTERate) {
872 newline.dwDTERate = acm->line.dwDTERate;
873 newctrl &= ~ACM_CTRL_DTR;
875 newctrl |= ACM_CTRL_DTR;
877 if (newctrl != acm->ctrlout)
878 acm_set_control(acm, acm->ctrlout = newctrl);
880 if (memcmp(&acm->line, &newline, sizeof newline)) {
881 memcpy(&acm->line, &newline, sizeof newline);
882 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
884 le32_to_cpu(newline.dwDTERate),
885 newline.bCharFormat, newline.bParityType,
887 acm_set_line(acm, &acm->line);
891 static const struct tty_port_operations acm_port_ops = {
892 .shutdown = acm_port_shutdown,
893 .activate = acm_port_activate,
894 .destruct = acm_port_destruct,
898 * USB probe and disconnect routines.
901 /* Little helpers: write/read buffers free */
902 static void acm_write_buffers_free(struct acm *acm)
906 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
908 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
909 usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
912 static void acm_read_buffers_free(struct acm *acm)
914 struct usb_device *usb_dev = interface_to_usbdev(acm->control);
917 for (i = 0; i < acm->rx_buflimit; i++)
918 usb_free_coherent(usb_dev, acm->readsize,
919 acm->read_buffers[i].base, acm->read_buffers[i].dma);
922 /* Little helper: write buffers allocate */
923 static int acm_write_buffers_alloc(struct acm *acm)
928 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
929 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
935 usb_free_coherent(acm->dev, acm->writesize,
944 static int acm_probe(struct usb_interface *intf,
945 const struct usb_device_id *id)
947 struct usb_cdc_union_desc *union_header = NULL;
948 struct usb_cdc_country_functional_desc *cfd = NULL;
949 unsigned char *buffer = intf->altsetting->extra;
950 int buflen = intf->altsetting->extralen;
951 struct usb_interface *control_interface;
952 struct usb_interface *data_interface;
953 struct usb_endpoint_descriptor *epctrl = NULL;
954 struct usb_endpoint_descriptor *epread = NULL;
955 struct usb_endpoint_descriptor *epwrite = NULL;
956 struct usb_device *usb_dev = interface_to_usbdev(intf);
959 int ctrlsize, readsize;
961 u8 ac_management_function = 0;
962 u8 call_management_function = 0;
963 int call_interface_num = -1;
964 int data_interface_num = -1;
965 unsigned long quirks;
968 int combined_interfaces = 0;
971 quirks = (unsigned long)id->driver_info;
972 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
974 /* handle quirks deadly to normal probing*/
975 if (quirks == NO_UNION_NORMAL) {
976 data_interface = usb_ifnum_to_if(usb_dev, 1);
977 control_interface = usb_ifnum_to_if(usb_dev, 0);
978 goto skip_normal_probe;
983 dev_err(&intf->dev, "Weird descriptor references\n");
988 if (intf->cur_altsetting->endpoint &&
989 intf->cur_altsetting->endpoint->extralen &&
990 intf->cur_altsetting->endpoint->extra) {
992 "Seeking extra descriptors on endpoint\n");
993 buflen = intf->cur_altsetting->endpoint->extralen;
994 buffer = intf->cur_altsetting->endpoint->extra;
997 "Zero length descriptor references\n");
1002 while (buflen > 0) {
1003 if (buffer[1] != USB_DT_CS_INTERFACE) {
1004 dev_err(&intf->dev, "skipping garbage\n");
1008 switch (buffer[2]) {
1009 case USB_CDC_UNION_TYPE: /* we've found it */
1011 dev_err(&intf->dev, "More than one "
1012 "union descriptor, skipping ...\n");
1015 union_header = (struct usb_cdc_union_desc *)buffer;
1017 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1018 cfd = (struct usb_cdc_country_functional_desc *)buffer;
1020 case USB_CDC_HEADER_TYPE: /* maybe check version */
1021 break; /* for now we ignore it */
1022 case USB_CDC_ACM_TYPE:
1023 ac_management_function = buffer[3];
1025 case USB_CDC_CALL_MANAGEMENT_TYPE:
1026 call_management_function = buffer[3];
1027 call_interface_num = buffer[4];
1028 if ((quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1029 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1032 /* there are LOTS more CDC descriptors that
1033 * could legitimately be found here.
1035 dev_dbg(&intf->dev, "Ignoring descriptor: "
1036 "type %02x, length %d\n",
1037 buffer[2], buffer[0]);
1041 buflen -= buffer[0];
1042 buffer += buffer[0];
1045 if (!union_header) {
1046 if (call_interface_num > 0) {
1047 dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1048 /* quirks for Droids MuIn LCD */
1049 if (quirks & NO_DATA_INTERFACE)
1050 data_interface = usb_ifnum_to_if(usb_dev, 0);
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 ||
1137 control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1140 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1141 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1142 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1145 /* workaround for switched endpoints */
1146 if (!usb_endpoint_dir_in(epread)) {
1147 /* descriptors are swapped */
1148 struct usb_endpoint_descriptor *t;
1150 "The data interface has switched endpoints\n");
1155 made_compressed_probe:
1156 dev_dbg(&intf->dev, "interfaces are valid\n");
1158 acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1160 dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1164 minor = acm_alloc_minor(acm);
1165 if (minor == ACM_TTY_MINORS) {
1166 dev_err(&intf->dev, "no more free acm devices\n");
1171 ctrlsize = usb_endpoint_maxp(epctrl);
1172 readsize = usb_endpoint_maxp(epread) *
1173 (quirks == SINGLE_RX_URB ? 1 : 2);
1174 acm->combined_interfaces = combined_interfaces;
1175 acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1176 acm->control = control_interface;
1177 acm->data = data_interface;
1180 acm->ctrl_caps = ac_management_function;
1181 if (quirks & NO_CAP_LINE)
1182 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1183 acm->ctrlsize = ctrlsize;
1184 acm->readsize = readsize;
1185 acm->rx_buflimit = num_rx_buf;
1186 INIT_WORK(&acm->work, acm_softint);
1187 spin_lock_init(&acm->write_lock);
1188 spin_lock_init(&acm->read_lock);
1189 mutex_init(&acm->mutex);
1190 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1191 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1193 acm->bInterval = epread->bInterval;
1194 tty_port_init(&acm->port);
1195 acm->port.ops = &acm_port_ops;
1197 buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1199 dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1202 acm->ctrl_buffer = buf;
1204 if (acm_write_buffers_alloc(acm) < 0) {
1205 dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1209 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1210 if (!acm->ctrlurb) {
1211 dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1214 for (i = 0; i < num_rx_buf; i++) {
1215 struct acm_rb *rb = &(acm->read_buffers[i]);
1218 rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1221 dev_err(&intf->dev, "out of memory "
1222 "(read bufs usb_alloc_coherent)\n");
1228 urb = usb_alloc_urb(0, GFP_KERNEL);
1231 "out of memory (read urbs usb_alloc_urb)\n");
1234 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1235 urb->transfer_dma = rb->dma;
1236 if (acm->is_int_ep) {
1237 usb_fill_int_urb(urb, acm->dev,
1241 acm_read_bulk_callback, rb,
1244 usb_fill_bulk_urb(urb, acm->dev,
1248 acm_read_bulk_callback, rb);
1251 acm->read_urbs[i] = urb;
1252 __set_bit(i, &acm->read_urbs_free);
1254 for (i = 0; i < ACM_NW; i++) {
1255 struct acm_wb *snd = &(acm->wb[i]);
1257 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1258 if (snd->urb == NULL) {
1260 "out of memory (write urbs usb_alloc_urb)\n");
1264 if (usb_endpoint_xfer_int(epwrite))
1265 usb_fill_int_urb(snd->urb, usb_dev,
1266 usb_sndintpipe(usb_dev, epwrite->bEndpointAddress),
1267 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1269 usb_fill_bulk_urb(snd->urb, usb_dev,
1270 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1271 NULL, acm->writesize, acm_write_bulk, snd);
1272 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1273 snd->instance = acm;
1276 usb_set_intfdata(intf, acm);
1278 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1282 if (cfd) { /* export the country data */
1283 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1284 if (!acm->country_codes)
1285 goto skip_countries;
1286 acm->country_code_size = cfd->bLength - 4;
1287 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1289 acm->country_rel_date = cfd->iCountryCodeRelDate;
1291 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1293 kfree(acm->country_codes);
1294 acm->country_codes = NULL;
1295 acm->country_code_size = 0;
1296 goto skip_countries;
1299 i = device_create_file(&intf->dev,
1300 &dev_attr_iCountryCodeRelDate);
1302 device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1303 kfree(acm->country_codes);
1304 acm->country_codes = NULL;
1305 acm->country_code_size = 0;
1306 goto skip_countries;
1311 usb_fill_int_urb(acm->ctrlurb, usb_dev,
1312 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1313 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1314 /* works around buggy devices */
1315 epctrl->bInterval ? epctrl->bInterval : 0xff);
1316 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1317 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1319 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1321 acm_set_control(acm, acm->ctrlout);
1323 acm->line.dwDTERate = cpu_to_le32(9600);
1324 acm->line.bDataBits = 8;
1325 acm_set_line(acm, &acm->line);
1327 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1328 usb_set_intfdata(data_interface, acm);
1330 usb_get_intf(control_interface);
1331 tty_port_register_device(&acm->port, acm_tty_driver, minor,
1332 &control_interface->dev);
1336 for (i = 0; i < ACM_NW; i++)
1337 usb_free_urb(acm->wb[i].urb);
1339 for (i = 0; i < num_rx_buf; i++)
1340 usb_free_urb(acm->read_urbs[i]);
1341 acm_read_buffers_free(acm);
1342 usb_free_urb(acm->ctrlurb);
1344 acm_write_buffers_free(acm);
1346 usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1348 acm_release_minor(acm);
1354 static void stop_data_traffic(struct acm *acm)
1358 dev_dbg(&acm->control->dev, "%s\n", __func__);
1360 usb_kill_urb(acm->ctrlurb);
1361 for (i = 0; i < ACM_NW; i++)
1362 usb_kill_urb(acm->wb[i].urb);
1363 for (i = 0; i < acm->rx_buflimit; i++)
1364 usb_kill_urb(acm->read_urbs[i]);
1366 cancel_work_sync(&acm->work);
1369 static void acm_disconnect(struct usb_interface *intf)
1371 struct acm *acm = usb_get_intfdata(intf);
1372 struct usb_device *usb_dev = interface_to_usbdev(intf);
1373 struct tty_struct *tty;
1376 dev_dbg(&intf->dev, "%s\n", __func__);
1378 /* sibling interface is already cleaning up */
1382 mutex_lock(&acm->mutex);
1383 acm->disconnected = true;
1384 if (acm->country_codes) {
1385 device_remove_file(&acm->control->dev,
1386 &dev_attr_wCountryCodes);
1387 device_remove_file(&acm->control->dev,
1388 &dev_attr_iCountryCodeRelDate);
1390 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1391 usb_set_intfdata(acm->control, NULL);
1392 usb_set_intfdata(acm->data, NULL);
1393 mutex_unlock(&acm->mutex);
1395 tty = tty_port_tty_get(&acm->port);
1401 stop_data_traffic(acm);
1403 usb_free_urb(acm->ctrlurb);
1404 for (i = 0; i < ACM_NW; i++)
1405 usb_free_urb(acm->wb[i].urb);
1406 for (i = 0; i < acm->rx_buflimit; i++)
1407 usb_free_urb(acm->read_urbs[i]);
1408 acm_write_buffers_free(acm);
1409 usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1410 acm_read_buffers_free(acm);
1412 if (!acm->combined_interfaces)
1413 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1414 acm->data : acm->control);
1416 tty_port_put(&acm->port);
1420 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1422 struct acm *acm = usb_get_intfdata(intf);
1425 if (PMSG_IS_AUTO(message)) {
1428 spin_lock_irq(&acm->write_lock);
1429 b = acm->transmitting;
1430 spin_unlock_irq(&acm->write_lock);
1435 spin_lock_irq(&acm->read_lock);
1436 spin_lock(&acm->write_lock);
1437 cnt = acm->susp_count++;
1438 spin_unlock(&acm->write_lock);
1439 spin_unlock_irq(&acm->read_lock);
1444 if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags))
1445 stop_data_traffic(acm);
1450 static int acm_resume(struct usb_interface *intf)
1452 struct acm *acm = usb_get_intfdata(intf);
1457 spin_lock_irq(&acm->read_lock);
1458 acm->susp_count -= 1;
1459 cnt = acm->susp_count;
1460 spin_unlock_irq(&acm->read_lock);
1465 if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) {
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 rv = acm_submit_read_urbs(acm, GFP_NOIO);
1492 static int acm_reset_resume(struct usb_interface *intf)
1494 struct acm *acm = usb_get_intfdata(intf);
1496 if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags))
1497 tty_port_tty_hangup(&acm->port, false);
1499 return acm_resume(intf);
1502 #endif /* CONFIG_PM */
1504 #define NOKIA_PCSUITE_ACM_INFO(x) \
1505 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1506 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1507 USB_CDC_ACM_PROTO_VENDOR)
1509 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1510 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1511 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1512 USB_CDC_ACM_PROTO_VENDOR)
1515 * USB driver structure.
1518 static const struct usb_device_id acm_ids[] = {
1519 /* quirky and broken devices */
1520 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1521 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1523 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1524 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1526 { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1527 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1529 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1530 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1532 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1533 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1535 { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1536 .driver_info = SINGLE_RX_URB,
1538 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1539 .driver_info = SINGLE_RX_URB, /* firmware bug */
1541 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1542 .driver_info = SINGLE_RX_URB, /* firmware bug */
1544 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1545 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1547 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1548 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1550 { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1551 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1553 { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1554 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1556 { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1557 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1559 { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1561 /* Motorola H24 HSPA module: */
1562 { USB_DEVICE(0x22b8, 0x2d91) }, /* modem */
1563 { USB_DEVICE(0x22b8, 0x2d92) }, /* modem + diagnostics */
1564 { USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port */
1565 { USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics */
1566 { USB_DEVICE(0x22b8, 0x2d96) }, /* modem + NMEA */
1567 { USB_DEVICE(0x22b8, 0x2d97) }, /* modem + diagnostics + NMEA */
1568 { USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port + NMEA */
1569 { USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */
1571 { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1572 .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1573 data interface instead of
1574 communications interface.
1575 Maybe we should define a new
1578 { USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1579 .driver_info = NO_UNION_NORMAL,
1581 { USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1582 .driver_info = NO_UNION_NORMAL,
1584 { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1585 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1587 { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1588 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1591 /* Nokia S60 phones expose two ACM channels. The first is
1592 * a modem and is picked up by the standard AT-command
1593 * information below. The second is 'vendor-specific' but
1594 * is treated as a serial device at the S60 end, so we want
1595 * to expose it on Linux too. */
1596 { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1597 { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1598 { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1599 { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1600 { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1601 { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1602 { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1603 { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1604 { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1605 { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1606 { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1607 { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1608 { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1609 { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1610 { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1611 { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1612 { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1613 { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */
1614 { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1615 { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1616 { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1617 { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */
1618 { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1619 { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1620 { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1621 { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1622 { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1623 { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1624 { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1625 { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1626 { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1627 { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */
1628 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1629 { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1630 { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1631 { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1632 { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1633 { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1634 { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1635 { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */
1636 { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1637 { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1638 { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1639 { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1640 { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1641 { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1642 { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1643 { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1644 { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1645 { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1646 { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1647 { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1648 { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1649 { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1650 { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1651 { NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1652 { NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1653 { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1655 /* Support for Owen devices */
1656 { USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1658 /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1660 /* Support Lego NXT using pbLua firmware */
1661 { USB_DEVICE(0x0694, 0xff00),
1662 .driver_info = NOT_A_MODEM,
1665 /* Support for Droids MuIn LCD */
1666 { USB_DEVICE(0x04d8, 0x000b),
1667 .driver_info = NO_DATA_INTERFACE,
1670 /* control interfaces without any protocol set */
1671 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1672 USB_CDC_PROTO_NONE) },
1674 /* control interfaces with various AT-command sets */
1675 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1676 USB_CDC_ACM_PROTO_AT_V25TER) },
1677 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1678 USB_CDC_ACM_PROTO_AT_PCCA101) },
1679 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1680 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1681 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1682 USB_CDC_ACM_PROTO_AT_GSM) },
1683 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1684 USB_CDC_ACM_PROTO_AT_3G) },
1685 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1686 USB_CDC_ACM_PROTO_AT_CDMA) },
1691 MODULE_DEVICE_TABLE(usb, acm_ids);
1693 static struct usb_driver acm_driver = {
1696 .disconnect = acm_disconnect,
1698 .suspend = acm_suspend,
1699 .resume = acm_resume,
1700 .reset_resume = acm_reset_resume,
1702 .id_table = acm_ids,
1704 .supports_autosuspend = 1,
1706 .disable_hub_initiated_lpm = 1,
1710 * TTY driver structures.
1713 static const struct tty_operations acm_ops = {
1714 .install = acm_tty_install,
1715 .open = acm_tty_open,
1716 .close = acm_tty_close,
1717 .cleanup = acm_tty_cleanup,
1718 .hangup = acm_tty_hangup,
1719 .write = acm_tty_write,
1720 .write_room = acm_tty_write_room,
1721 .ioctl = acm_tty_ioctl,
1722 .throttle = acm_tty_throttle,
1723 .unthrottle = acm_tty_unthrottle,
1724 .chars_in_buffer = acm_tty_chars_in_buffer,
1725 .break_ctl = acm_tty_break_ctl,
1726 .set_termios = acm_tty_set_termios,
1727 .tiocmget = acm_tty_tiocmget,
1728 .tiocmset = acm_tty_tiocmset,
1735 static int __init acm_init(void)
1738 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1739 if (!acm_tty_driver)
1741 acm_tty_driver->driver_name = "acm",
1742 acm_tty_driver->name = "ttyACM",
1743 acm_tty_driver->major = ACM_TTY_MAJOR,
1744 acm_tty_driver->minor_start = 0,
1745 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1746 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1747 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1748 acm_tty_driver->init_termios = tty_std_termios;
1749 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1751 tty_set_operations(acm_tty_driver, &acm_ops);
1753 retval = tty_register_driver(acm_tty_driver);
1755 put_tty_driver(acm_tty_driver);
1759 retval = usb_register(&acm_driver);
1761 tty_unregister_driver(acm_tty_driver);
1762 put_tty_driver(acm_tty_driver);
1766 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1771 static void __exit acm_exit(void)
1773 usb_deregister(&acm_driver);
1774 tty_unregister_driver(acm_tty_driver);
1775 put_tty_driver(acm_tty_driver);
1778 module_init(acm_init);
1779 module_exit(acm_exit);
1781 MODULE_AUTHOR(DRIVER_AUTHOR);
1782 MODULE_DESCRIPTION(DRIVER_DESC);
1783 MODULE_LICENSE("GPL");
1784 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);