xref: /linux/drivers/usb/class/cdc-acm.c (revision f850548ef88e5ff9e40bae9e1a7140bef0653e6b)
1 /*
2  * cdc-acm.c
3  *
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  *
11  * USB Abstract Control Model driver for USB modems and ISDN adapters
12  *
13  * Sponsored by SuSE
14  *
15  * ChangeLog:
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
20  *		kmalloced
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
36  */
37 
38 /*
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.
43  *
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.
48  *
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
52  */
53 
54 #undef DEBUG
55 #undef VERBOSE_DEBUG
56 
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>
73 
74 #include "cdc-acm.h"
75 
76 
77 #define ACM_CLOSE_TIMEOUT	15	/* seconds to let writes drain */
78 
79 /*
80  * Version Information
81  */
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"
85 
86 static struct usb_driver acm_driver;
87 static struct tty_driver *acm_tty_driver;
88 static struct acm *acm_table[ACM_TTY_MINORS];
89 
90 static DEFINE_MUTEX(open_mutex);
91 
92 #define ACM_READY(acm)	(acm && acm->dev && acm->port.count)
93 
94 static const struct tty_port_operations acm_port_ops = {
95 };
96 
97 #ifdef VERBOSE_DEBUG
98 #define verbose	1
99 #else
100 #define verbose	0
101 #endif
102 
103 /*
104  * Functions for ACM control messages.
105  */
106 
107 static int acm_ctrl_msg(struct acm *acm, int request, int value,
108 							void *buf, int len)
109 {
110 	int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
111 		request, USB_RT_ACM, value,
112 		acm->control->altsetting[0].desc.bInterfaceNumber,
113 		buf, len, 5000);
114 	dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d",
115 						request, value, len, retval);
116 	return retval < 0 ? retval : 0;
117 }
118 
119 /* devices aren't required to support these requests.
120  * the cdc acm descriptor tells whether they do...
121  */
122 #define acm_set_control(acm, control) \
123 	acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
124 #define acm_set_line(acm, line) \
125 	acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
126 #define acm_send_break(acm, ms) \
127 	acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
128 
129 /*
130  * Write buffer management.
131  * All of these assume proper locks taken by the caller.
132  */
133 
134 static int acm_wb_alloc(struct acm *acm)
135 {
136 	int i, wbn;
137 	struct acm_wb *wb;
138 
139 	wbn = 0;
140 	i = 0;
141 	for (;;) {
142 		wb = &acm->wb[wbn];
143 		if (!wb->use) {
144 			wb->use = 1;
145 			return wbn;
146 		}
147 		wbn = (wbn + 1) % ACM_NW;
148 		if (++i >= ACM_NW)
149 			return -1;
150 	}
151 }
152 
153 static int acm_wb_is_avail(struct acm *acm)
154 {
155 	int i, n;
156 	unsigned long flags;
157 
158 	n = ACM_NW;
159 	spin_lock_irqsave(&acm->write_lock, flags);
160 	for (i = 0; i < ACM_NW; i++)
161 		n -= acm->wb[i].use;
162 	spin_unlock_irqrestore(&acm->write_lock, flags);
163 	return n;
164 }
165 
166 /*
167  * Finish write. Caller must hold acm->write_lock
168  */
169 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
170 {
171 	wb->use = 0;
172 	acm->transmitting--;
173 	usb_autopm_put_interface_async(acm->control);
174 }
175 
176 /*
177  * Poke write.
178  *
179  * the caller is responsible for locking
180  */
181 
182 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
183 {
184 	int rc;
185 
186 	acm->transmitting++;
187 
188 	wb->urb->transfer_buffer = wb->buf;
189 	wb->urb->transfer_dma = wb->dmah;
190 	wb->urb->transfer_buffer_length = wb->len;
191 	wb->urb->dev = acm->dev;
192 
193 	rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
194 	if (rc < 0) {
195 		dbg("usb_submit_urb(write bulk) failed: %d", rc);
196 		acm_write_done(acm, wb);
197 	}
198 	return rc;
199 }
200 
201 static int acm_write_start(struct acm *acm, int wbn)
202 {
203 	unsigned long flags;
204 	struct acm_wb *wb = &acm->wb[wbn];
205 	int rc;
206 
207 	spin_lock_irqsave(&acm->write_lock, flags);
208 	if (!acm->dev) {
209 		wb->use = 0;
210 		spin_unlock_irqrestore(&acm->write_lock, flags);
211 		return -ENODEV;
212 	}
213 
214 	dbg("%s susp_count: %d", __func__, acm->susp_count);
215 	usb_autopm_get_interface_async(acm->control);
216 	if (acm->susp_count) {
217 		if (!acm->delayed_wb)
218 			acm->delayed_wb = wb;
219 		else
220 			usb_autopm_put_interface_async(acm->control);
221 		spin_unlock_irqrestore(&acm->write_lock, flags);
222 		return 0;	/* A white lie */
223 	}
224 	usb_mark_last_busy(acm->dev);
225 
226 	rc = acm_start_wb(acm, wb);
227 	spin_unlock_irqrestore(&acm->write_lock, flags);
228 
229 	return rc;
230 
231 }
232 /*
233  * attributes exported through sysfs
234  */
235 static ssize_t show_caps
236 (struct device *dev, struct device_attribute *attr, char *buf)
237 {
238 	struct usb_interface *intf = to_usb_interface(dev);
239 	struct acm *acm = usb_get_intfdata(intf);
240 
241 	return sprintf(buf, "%d", acm->ctrl_caps);
242 }
243 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
244 
245 static ssize_t show_country_codes
246 (struct device *dev, struct device_attribute *attr, char *buf)
247 {
248 	struct usb_interface *intf = to_usb_interface(dev);
249 	struct acm *acm = usb_get_intfdata(intf);
250 
251 	memcpy(buf, acm->country_codes, acm->country_code_size);
252 	return acm->country_code_size;
253 }
254 
255 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
256 
257 static ssize_t show_country_rel_date
258 (struct device *dev, struct device_attribute *attr, char *buf)
259 {
260 	struct usb_interface *intf = to_usb_interface(dev);
261 	struct acm *acm = usb_get_intfdata(intf);
262 
263 	return sprintf(buf, "%d", acm->country_rel_date);
264 }
265 
266 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
267 /*
268  * Interrupt handlers for various ACM device responses
269  */
270 
271 /* control interface reports status changes with "interrupt" transfers */
272 static void acm_ctrl_irq(struct urb *urb)
273 {
274 	struct acm *acm = urb->context;
275 	struct usb_cdc_notification *dr = urb->transfer_buffer;
276 	struct tty_struct *tty;
277 	unsigned char *data;
278 	int newctrl;
279 	int retval;
280 	int status = urb->status;
281 
282 	switch (status) {
283 	case 0:
284 		/* success */
285 		break;
286 	case -ECONNRESET:
287 	case -ENOENT:
288 	case -ESHUTDOWN:
289 		/* this urb is terminated, clean up */
290 		dbg("%s - urb shutting down with status: %d", __func__, status);
291 		return;
292 	default:
293 		dbg("%s - nonzero urb status received: %d", __func__, status);
294 		goto exit;
295 	}
296 
297 	if (!ACM_READY(acm))
298 		goto exit;
299 
300 	usb_mark_last_busy(acm->dev);
301 
302 	data = (unsigned char *)(dr + 1);
303 	switch (dr->bNotificationType) {
304 	case USB_CDC_NOTIFY_NETWORK_CONNECTION:
305 		dbg("%s network", dr->wValue ?
306 					"connected to" : "disconnected from");
307 		break;
308 
309 	case USB_CDC_NOTIFY_SERIAL_STATE:
310 		tty = tty_port_tty_get(&acm->port);
311 		newctrl = get_unaligned_le16(data);
312 
313 		if (tty) {
314 			if (!acm->clocal &&
315 				(acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
316 				dbg("calling hangup");
317 				tty_hangup(tty);
318 			}
319 			tty_kref_put(tty);
320 		}
321 
322 		acm->ctrlin = newctrl;
323 
324 		dbg("input control lines: dcd%c dsr%c break%c ring%c framing%c parity%c overrun%c",
325 			acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
326 			acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
327 			acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
328 			acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',
329 			acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
330 			acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
331 			acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
332 			break;
333 
334 	default:
335 		dbg("unknown notification %d received: index %d len %d data0 %d data1 %d",
336 			dr->bNotificationType, dr->wIndex,
337 			dr->wLength, data[0], data[1]);
338 		break;
339 	}
340 exit:
341 	retval = usb_submit_urb(urb, GFP_ATOMIC);
342 	if (retval)
343 		dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with "
344 			"result %d", __func__, retval);
345 }
346 
347 /* data interface returns incoming bytes, or we got unthrottled */
348 static void acm_read_bulk(struct urb *urb)
349 {
350 	struct acm_rb *buf;
351 	struct acm_ru *rcv = urb->context;
352 	struct acm *acm = rcv->instance;
353 	int status = urb->status;
354 
355 	dbg("Entering acm_read_bulk with status %d", status);
356 
357 	if (!ACM_READY(acm)) {
358 		dev_dbg(&acm->data->dev, "Aborting, acm not ready");
359 		return;
360 	}
361 	usb_mark_last_busy(acm->dev);
362 
363 	if (status)
364 		dev_dbg(&acm->data->dev, "bulk rx status %d\n", status);
365 
366 	buf = rcv->buffer;
367 	buf->size = urb->actual_length;
368 
369 	if (likely(status == 0)) {
370 		spin_lock(&acm->read_lock);
371 		acm->processing++;
372 		list_add_tail(&rcv->list, &acm->spare_read_urbs);
373 		list_add_tail(&buf->list, &acm->filled_read_bufs);
374 		spin_unlock(&acm->read_lock);
375 	} else {
376 		/* we drop the buffer due to an error */
377 		spin_lock(&acm->read_lock);
378 		list_add_tail(&rcv->list, &acm->spare_read_urbs);
379 		list_add(&buf->list, &acm->spare_read_bufs);
380 		spin_unlock(&acm->read_lock);
381 		/* nevertheless the tasklet must be kicked unconditionally
382 		so the queue cannot dry up */
383 	}
384 	if (likely(!acm->susp_count))
385 		tasklet_schedule(&acm->urb_task);
386 }
387 
388 static void acm_rx_tasklet(unsigned long _acm)
389 {
390 	struct acm *acm = (void *)_acm;
391 	struct acm_rb *buf;
392 	struct tty_struct *tty;
393 	struct acm_ru *rcv;
394 	unsigned long flags;
395 	unsigned char throttled;
396 
397 	dbg("Entering acm_rx_tasklet");
398 
399 	if (!ACM_READY(acm)) {
400 		dbg("acm_rx_tasklet: ACM not ready");
401 		return;
402 	}
403 
404 	spin_lock_irqsave(&acm->throttle_lock, flags);
405 	throttled = acm->throttle;
406 	spin_unlock_irqrestore(&acm->throttle_lock, flags);
407 	if (throttled) {
408 		dbg("acm_rx_tasklet: throttled");
409 		return;
410 	}
411 
412 	tty = tty_port_tty_get(&acm->port);
413 
414 next_buffer:
415 	spin_lock_irqsave(&acm->read_lock, flags);
416 	if (list_empty(&acm->filled_read_bufs)) {
417 		spin_unlock_irqrestore(&acm->read_lock, flags);
418 		goto urbs;
419 	}
420 	buf = list_entry(acm->filled_read_bufs.next,
421 			 struct acm_rb, list);
422 	list_del(&buf->list);
423 	spin_unlock_irqrestore(&acm->read_lock, flags);
424 
425 	dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
426 
427 	if (tty) {
428 		spin_lock_irqsave(&acm->throttle_lock, flags);
429 		throttled = acm->throttle;
430 		spin_unlock_irqrestore(&acm->throttle_lock, flags);
431 		if (!throttled) {
432 			tty_insert_flip_string(tty, buf->base, buf->size);
433 			tty_flip_buffer_push(tty);
434 		} else {
435 			tty_kref_put(tty);
436 			dbg("Throttling noticed");
437 			spin_lock_irqsave(&acm->read_lock, flags);
438 			list_add(&buf->list, &acm->filled_read_bufs);
439 			spin_unlock_irqrestore(&acm->read_lock, flags);
440 			return;
441 		}
442 	}
443 
444 	spin_lock_irqsave(&acm->read_lock, flags);
445 	list_add(&buf->list, &acm->spare_read_bufs);
446 	spin_unlock_irqrestore(&acm->read_lock, flags);
447 	goto next_buffer;
448 
449 urbs:
450 	tty_kref_put(tty);
451 
452 	while (!list_empty(&acm->spare_read_bufs)) {
453 		spin_lock_irqsave(&acm->read_lock, flags);
454 		if (list_empty(&acm->spare_read_urbs)) {
455 			acm->processing = 0;
456 			spin_unlock_irqrestore(&acm->read_lock, flags);
457 			return;
458 		}
459 		rcv = list_entry(acm->spare_read_urbs.next,
460 				 struct acm_ru, list);
461 		list_del(&rcv->list);
462 		spin_unlock_irqrestore(&acm->read_lock, flags);
463 
464 		buf = list_entry(acm->spare_read_bufs.next,
465 				 struct acm_rb, list);
466 		list_del(&buf->list);
467 
468 		rcv->buffer = buf;
469 
470 		if (acm->is_int_ep)
471 			usb_fill_int_urb(rcv->urb, acm->dev,
472 					 acm->rx_endpoint,
473 					 buf->base,
474 					 acm->readsize,
475 					 acm_read_bulk, rcv, acm->bInterval);
476 		else
477 			usb_fill_bulk_urb(rcv->urb, acm->dev,
478 					  acm->rx_endpoint,
479 					  buf->base,
480 					  acm->readsize,
481 					  acm_read_bulk, rcv);
482 		rcv->urb->transfer_dma = buf->dma;
483 		rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
484 
485 		/* This shouldn't kill the driver as unsuccessful URBs are
486 		   returned to the free-urbs-pool and resubmited ASAP */
487 		spin_lock_irqsave(&acm->read_lock, flags);
488 		if (acm->susp_count ||
489 				usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
490 			list_add(&buf->list, &acm->spare_read_bufs);
491 			list_add(&rcv->list, &acm->spare_read_urbs);
492 			acm->processing = 0;
493 			spin_unlock_irqrestore(&acm->read_lock, flags);
494 			return;
495 		} else {
496 			spin_unlock_irqrestore(&acm->read_lock, flags);
497 			dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
498 		}
499 	}
500 	spin_lock_irqsave(&acm->read_lock, flags);
501 	acm->processing = 0;
502 	spin_unlock_irqrestore(&acm->read_lock, flags);
503 }
504 
505 /* data interface wrote those outgoing bytes */
506 static void acm_write_bulk(struct urb *urb)
507 {
508 	struct acm_wb *wb = urb->context;
509 	struct acm *acm = wb->instance;
510 	unsigned long flags;
511 
512 	if (verbose || urb->status
513 			|| (urb->actual_length != urb->transfer_buffer_length))
514 		dev_dbg(&acm->data->dev, "tx %d/%d bytes -- > %d\n",
515 			urb->actual_length,
516 			urb->transfer_buffer_length,
517 			urb->status);
518 
519 	spin_lock_irqsave(&acm->write_lock, flags);
520 	acm_write_done(acm, wb);
521 	spin_unlock_irqrestore(&acm->write_lock, flags);
522 	if (ACM_READY(acm))
523 		schedule_work(&acm->work);
524 	else
525 		wake_up_interruptible(&acm->drain_wait);
526 }
527 
528 static void acm_softint(struct work_struct *work)
529 {
530 	struct acm *acm = container_of(work, struct acm, work);
531 	struct tty_struct *tty;
532 
533 	dev_vdbg(&acm->data->dev, "tx work\n");
534 	if (!ACM_READY(acm))
535 		return;
536 	tty = tty_port_tty_get(&acm->port);
537 	if (!tty)
538 		return;
539 	tty_wakeup(tty);
540 	tty_kref_put(tty);
541 }
542 
543 /*
544  * TTY handlers
545  */
546 
547 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
548 {
549 	struct acm *acm;
550 	int rv = -ENODEV;
551 	int i;
552 	dbg("Entering acm_tty_open.");
553 
554 	mutex_lock(&open_mutex);
555 
556 	acm = acm_table[tty->index];
557 	if (!acm || !acm->dev)
558 		goto out;
559 	else
560 		rv = 0;
561 
562 	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
563 
564 	tty->driver_data = acm;
565 	tty_port_tty_set(&acm->port, tty);
566 
567 	if (usb_autopm_get_interface(acm->control) < 0)
568 		goto early_bail;
569 	else
570 		acm->control->needs_remote_wakeup = 1;
571 
572 	mutex_lock(&acm->mutex);
573 	if (acm->port.count++) {
574 		mutex_unlock(&acm->mutex);
575 		usb_autopm_put_interface(acm->control);
576 		goto out;
577 	}
578 
579 	acm->ctrlurb->dev = acm->dev;
580 	if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
581 		dbg("usb_submit_urb(ctrl irq) failed");
582 		goto bail_out;
583 	}
584 
585 	if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
586 	    (acm->ctrl_caps & USB_CDC_CAP_LINE))
587 		goto full_bailout;
588 
589 	usb_autopm_put_interface(acm->control);
590 
591 	INIT_LIST_HEAD(&acm->spare_read_urbs);
592 	INIT_LIST_HEAD(&acm->spare_read_bufs);
593 	INIT_LIST_HEAD(&acm->filled_read_bufs);
594 
595 	for (i = 0; i < acm->rx_buflimit; i++)
596 		list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
597 	for (i = 0; i < acm->rx_buflimit; i++)
598 		list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
599 
600 	acm->throttle = 0;
601 
602 	set_bit(ASYNCB_INITIALIZED, &acm->port.flags);
603 	rv = tty_port_block_til_ready(&acm->port, tty, filp);
604 	tasklet_schedule(&acm->urb_task);
605 
606 	mutex_unlock(&acm->mutex);
607 out:
608 	mutex_unlock(&open_mutex);
609 	return rv;
610 
611 full_bailout:
612 	usb_kill_urb(acm->ctrlurb);
613 bail_out:
614 	acm->port.count--;
615 	mutex_unlock(&acm->mutex);
616 	usb_autopm_put_interface(acm->control);
617 early_bail:
618 	mutex_unlock(&open_mutex);
619 	tty_port_tty_set(&acm->port, NULL);
620 	return -EIO;
621 }
622 
623 static void acm_tty_unregister(struct acm *acm)
624 {
625 	int i, nr;
626 
627 	nr = acm->rx_buflimit;
628 	tty_unregister_device(acm_tty_driver, acm->minor);
629 	usb_put_intf(acm->control);
630 	acm_table[acm->minor] = NULL;
631 	usb_free_urb(acm->ctrlurb);
632 	for (i = 0; i < ACM_NW; i++)
633 		usb_free_urb(acm->wb[i].urb);
634 	for (i = 0; i < nr; i++)
635 		usb_free_urb(acm->ru[i].urb);
636 	kfree(acm->country_codes);
637 	kfree(acm);
638 }
639 
640 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
641 
642 static void acm_port_down(struct acm *acm)
643 {
644 	int i, nr = acm->rx_buflimit;
645 	mutex_lock(&open_mutex);
646 	if (acm->dev) {
647 		usb_autopm_get_interface(acm->control);
648 		acm_set_control(acm, acm->ctrlout = 0);
649 		usb_kill_urb(acm->ctrlurb);
650 		for (i = 0; i < ACM_NW; i++)
651 			usb_kill_urb(acm->wb[i].urb);
652 		tasklet_disable(&acm->urb_task);
653 		for (i = 0; i < nr; i++)
654 			usb_kill_urb(acm->ru[i].urb);
655 		tasklet_enable(&acm->urb_task);
656 		acm->control->needs_remote_wakeup = 0;
657 		usb_autopm_put_interface(acm->control);
658 	}
659 	mutex_unlock(&open_mutex);
660 }
661 
662 static void acm_tty_hangup(struct tty_struct *tty)
663 {
664 	struct acm *acm = tty->driver_data;
665 	tty_port_hangup(&acm->port);
666 	acm_port_down(acm);
667 }
668 
669 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
670 {
671 	struct acm *acm = tty->driver_data;
672 
673 	/* Perform the closing process and see if we need to do the hardware
674 	   shutdown */
675 	if (!acm)
676 		return;
677 	if (tty_port_close_start(&acm->port, tty, filp) == 0) {
678 		mutex_lock(&open_mutex);
679 		if (!acm->dev) {
680 			tty_port_tty_set(&acm->port, NULL);
681 			acm_tty_unregister(acm);
682 			tty->driver_data = NULL;
683 		}
684 		mutex_unlock(&open_mutex);
685 		return;
686 	}
687 	acm_port_down(acm);
688 	tty_port_close_end(&acm->port, tty);
689 	tty_port_tty_set(&acm->port, NULL);
690 }
691 
692 static int acm_tty_write(struct tty_struct *tty,
693 					const unsigned char *buf, int count)
694 {
695 	struct acm *acm = tty->driver_data;
696 	int stat;
697 	unsigned long flags;
698 	int wbn;
699 	struct acm_wb *wb;
700 
701 	dbg("Entering acm_tty_write to write %d bytes,", count);
702 
703 	if (!ACM_READY(acm))
704 		return -EINVAL;
705 	if (!count)
706 		return 0;
707 
708 	spin_lock_irqsave(&acm->write_lock, flags);
709 	wbn = acm_wb_alloc(acm);
710 	if (wbn < 0) {
711 		spin_unlock_irqrestore(&acm->write_lock, flags);
712 		return 0;
713 	}
714 	wb = &acm->wb[wbn];
715 
716 	count = (count > acm->writesize) ? acm->writesize : count;
717 	dbg("Get %d bytes...", count);
718 	memcpy(wb->buf, buf, count);
719 	wb->len = count;
720 	spin_unlock_irqrestore(&acm->write_lock, flags);
721 
722 	stat = acm_write_start(acm, wbn);
723 	if (stat < 0)
724 		return stat;
725 	return count;
726 }
727 
728 static int acm_tty_write_room(struct tty_struct *tty)
729 {
730 	struct acm *acm = tty->driver_data;
731 	if (!ACM_READY(acm))
732 		return -EINVAL;
733 	/*
734 	 * Do not let the line discipline to know that we have a reserve,
735 	 * or it might get too enthusiastic.
736 	 */
737 	return acm_wb_is_avail(acm) ? acm->writesize : 0;
738 }
739 
740 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
741 {
742 	struct acm *acm = tty->driver_data;
743 	if (!ACM_READY(acm))
744 		return 0;
745 	/*
746 	 * This is inaccurate (overcounts), but it works.
747 	 */
748 	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
749 }
750 
751 static void acm_tty_throttle(struct tty_struct *tty)
752 {
753 	struct acm *acm = tty->driver_data;
754 	if (!ACM_READY(acm))
755 		return;
756 	spin_lock_bh(&acm->throttle_lock);
757 	acm->throttle = 1;
758 	spin_unlock_bh(&acm->throttle_lock);
759 }
760 
761 static void acm_tty_unthrottle(struct tty_struct *tty)
762 {
763 	struct acm *acm = tty->driver_data;
764 	if (!ACM_READY(acm))
765 		return;
766 	spin_lock_bh(&acm->throttle_lock);
767 	acm->throttle = 0;
768 	spin_unlock_bh(&acm->throttle_lock);
769 	tasklet_schedule(&acm->urb_task);
770 }
771 
772 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
773 {
774 	struct acm *acm = tty->driver_data;
775 	int retval;
776 	if (!ACM_READY(acm))
777 		return -EINVAL;
778 	retval = acm_send_break(acm, state ? 0xffff : 0);
779 	if (retval < 0)
780 		dbg("send break failed");
781 	return retval;
782 }
783 
784 static int acm_tty_tiocmget(struct tty_struct *tty)
785 {
786 	struct acm *acm = tty->driver_data;
787 
788 	if (!ACM_READY(acm))
789 		return -EINVAL;
790 
791 	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
792 	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
793 	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
794 	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
795 	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
796 	       TIOCM_CTS;
797 }
798 
799 static int acm_tty_tiocmset(struct tty_struct *tty,
800 			    unsigned int set, unsigned int clear)
801 {
802 	struct acm *acm = tty->driver_data;
803 	unsigned int newctrl;
804 
805 	if (!ACM_READY(acm))
806 		return -EINVAL;
807 
808 	newctrl = acm->ctrlout;
809 	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
810 					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
811 	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
812 					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
813 
814 	newctrl = (newctrl & ~clear) | set;
815 
816 	if (acm->ctrlout == newctrl)
817 		return 0;
818 	return acm_set_control(acm, acm->ctrlout = newctrl);
819 }
820 
821 static int acm_tty_ioctl(struct tty_struct *tty,
822 					unsigned int cmd, unsigned long arg)
823 {
824 	struct acm *acm = tty->driver_data;
825 
826 	if (!ACM_READY(acm))
827 		return -EINVAL;
828 
829 	return -ENOIOCTLCMD;
830 }
831 
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
838 };
839 
840 static const __u8 acm_tty_size[] = {
841 	5, 6, 7, 8
842 };
843 
844 static void acm_tty_set_termios(struct tty_struct *tty,
845 						struct ktermios *termios_old)
846 {
847 	struct acm *acm = tty->driver_data;
848 	struct ktermios *termios = tty->termios;
849 	struct usb_cdc_line_coding newline;
850 	int newctrl = acm->ctrlout;
851 
852 	if (!ACM_READY(acm))
853 		return;
854 
855 	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
856 	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
857 	newline.bParityType = termios->c_cflag & PARENB ?
858 				(termios->c_cflag & PARODD ? 1 : 2) +
859 				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
860 	newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
861 	/* FIXME: Needs to clear unsupported bits in the termios */
862 	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
863 
864 	if (!newline.dwDTERate) {
865 		newline.dwDTERate = acm->line.dwDTERate;
866 		newctrl &= ~ACM_CTRL_DTR;
867 	} else
868 		newctrl |=  ACM_CTRL_DTR;
869 
870 	if (newctrl != acm->ctrlout)
871 		acm_set_control(acm, acm->ctrlout = newctrl);
872 
873 	if (memcmp(&acm->line, &newline, sizeof newline)) {
874 		memcpy(&acm->line, &newline, sizeof newline);
875 		dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
876 			newline.bCharFormat, newline.bParityType,
877 			newline.bDataBits);
878 		acm_set_line(acm, &acm->line);
879 	}
880 }
881 
882 /*
883  * USB probe and disconnect routines.
884  */
885 
886 /* Little helpers: write/read buffers free */
887 static void acm_write_buffers_free(struct acm *acm)
888 {
889 	int i;
890 	struct acm_wb *wb;
891 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
892 
893 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
894 		usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
895 }
896 
897 static void acm_read_buffers_free(struct acm *acm)
898 {
899 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
900 	int i, n = acm->rx_buflimit;
901 
902 	for (i = 0; i < n; i++)
903 		usb_free_coherent(usb_dev, acm->readsize,
904 				  acm->rb[i].base, acm->rb[i].dma);
905 }
906 
907 /* Little helper: write buffers allocate */
908 static int acm_write_buffers_alloc(struct acm *acm)
909 {
910 	int i;
911 	struct acm_wb *wb;
912 
913 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
914 		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
915 		    &wb->dmah);
916 		if (!wb->buf) {
917 			while (i != 0) {
918 				--i;
919 				--wb;
920 				usb_free_coherent(acm->dev, acm->writesize,
921 				    wb->buf, wb->dmah);
922 			}
923 			return -ENOMEM;
924 		}
925 	}
926 	return 0;
927 }
928 
929 static int acm_probe(struct usb_interface *intf,
930 		     const struct usb_device_id *id)
931 {
932 	struct usb_cdc_union_desc *union_header = NULL;
933 	struct usb_cdc_country_functional_desc *cfd = NULL;
934 	unsigned char *buffer = intf->altsetting->extra;
935 	int buflen = intf->altsetting->extralen;
936 	struct usb_interface *control_interface;
937 	struct usb_interface *data_interface;
938 	struct usb_endpoint_descriptor *epctrl = NULL;
939 	struct usb_endpoint_descriptor *epread = NULL;
940 	struct usb_endpoint_descriptor *epwrite = NULL;
941 	struct usb_device *usb_dev = interface_to_usbdev(intf);
942 	struct acm *acm;
943 	int minor;
944 	int ctrlsize, readsize;
945 	u8 *buf;
946 	u8 ac_management_function = 0;
947 	u8 call_management_function = 0;
948 	int call_interface_num = -1;
949 	int data_interface_num;
950 	unsigned long quirks;
951 	int num_rx_buf;
952 	int i;
953 	int combined_interfaces = 0;
954 
955 	/* normal quirks */
956 	quirks = (unsigned long)id->driver_info;
957 	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
958 
959 	/* handle quirks deadly to normal probing*/
960 	if (quirks == NO_UNION_NORMAL) {
961 		data_interface = usb_ifnum_to_if(usb_dev, 1);
962 		control_interface = usb_ifnum_to_if(usb_dev, 0);
963 		goto skip_normal_probe;
964 	}
965 
966 	/* normal probing*/
967 	if (!buffer) {
968 		dev_err(&intf->dev, "Weird descriptor references\n");
969 		return -EINVAL;
970 	}
971 
972 	if (!buflen) {
973 		if (intf->cur_altsetting->endpoint &&
974 				intf->cur_altsetting->endpoint->extralen &&
975 				intf->cur_altsetting->endpoint->extra) {
976 			dev_dbg(&intf->dev,
977 				"Seeking extra descriptors on endpoint\n");
978 			buflen = intf->cur_altsetting->endpoint->extralen;
979 			buffer = intf->cur_altsetting->endpoint->extra;
980 		} else {
981 			dev_err(&intf->dev,
982 				"Zero length descriptor references\n");
983 			return -EINVAL;
984 		}
985 	}
986 
987 	while (buflen > 0) {
988 		if (buffer[1] != USB_DT_CS_INTERFACE) {
989 			dev_err(&intf->dev, "skipping garbage\n");
990 			goto next_desc;
991 		}
992 
993 		switch (buffer[2]) {
994 		case USB_CDC_UNION_TYPE: /* we've found it */
995 			if (union_header) {
996 				dev_err(&intf->dev, "More than one "
997 					"union descriptor, skipping ...\n");
998 				goto next_desc;
999 			}
1000 			union_header = (struct usb_cdc_union_desc *)buffer;
1001 			break;
1002 		case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1003 			cfd = (struct usb_cdc_country_functional_desc *)buffer;
1004 			break;
1005 		case USB_CDC_HEADER_TYPE: /* maybe check version */
1006 			break; /* for now we ignore it */
1007 		case USB_CDC_ACM_TYPE:
1008 			ac_management_function = buffer[3];
1009 			break;
1010 		case USB_CDC_CALL_MANAGEMENT_TYPE:
1011 			call_management_function = buffer[3];
1012 			call_interface_num = buffer[4];
1013 			if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1014 				dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1015 			break;
1016 		default:
1017 			/* there are LOTS more CDC descriptors that
1018 			 * could legitimately be found here.
1019 			 */
1020 			dev_dbg(&intf->dev, "Ignoring descriptor: "
1021 					"type %02x, length %d\n",
1022 					buffer[2], buffer[0]);
1023 			break;
1024 		}
1025 next_desc:
1026 		buflen -= buffer[0];
1027 		buffer += buffer[0];
1028 	}
1029 
1030 	if (!union_header) {
1031 		if (call_interface_num > 0) {
1032 			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1033 			data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1034 			control_interface = intf;
1035 		} else {
1036 			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1037 				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1038 				return -ENODEV;
1039 			} else {
1040 				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1041 				combined_interfaces = 1;
1042 				control_interface = data_interface = intf;
1043 				goto look_for_collapsed_interface;
1044 			}
1045 		}
1046 	} else {
1047 		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1048 		data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1049 		if (!control_interface || !data_interface) {
1050 			dev_dbg(&intf->dev, "no interfaces\n");
1051 			return -ENODEV;
1052 		}
1053 	}
1054 
1055 	if (data_interface_num != call_interface_num)
1056 		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1057 
1058 	if (control_interface == data_interface) {
1059 		/* some broken devices designed for windows work this way */
1060 		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1061 		combined_interfaces = 1;
1062 		/* a popular other OS doesn't use it */
1063 		quirks |= NO_CAP_LINE;
1064 		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1065 			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1066 			return -EINVAL;
1067 		}
1068 look_for_collapsed_interface:
1069 		for (i = 0; i < 3; i++) {
1070 			struct usb_endpoint_descriptor *ep;
1071 			ep = &data_interface->cur_altsetting->endpoint[i].desc;
1072 
1073 			if (usb_endpoint_is_int_in(ep))
1074 				epctrl = ep;
1075 			else if (usb_endpoint_is_bulk_out(ep))
1076 				epwrite = ep;
1077 			else if (usb_endpoint_is_bulk_in(ep))
1078 				epread = ep;
1079 			else
1080 				return -EINVAL;
1081 		}
1082 		if (!epctrl || !epread || !epwrite)
1083 			return -ENODEV;
1084 		else
1085 			goto made_compressed_probe;
1086 	}
1087 
1088 skip_normal_probe:
1089 
1090 	/*workaround for switched interfaces */
1091 	if (data_interface->cur_altsetting->desc.bInterfaceClass
1092 						!= CDC_DATA_INTERFACE_TYPE) {
1093 		if (control_interface->cur_altsetting->desc.bInterfaceClass
1094 						== CDC_DATA_INTERFACE_TYPE) {
1095 			struct usb_interface *t;
1096 			dev_dbg(&intf->dev,
1097 				"Your device has switched interfaces.\n");
1098 			t = control_interface;
1099 			control_interface = data_interface;
1100 			data_interface = t;
1101 		} else {
1102 			return -EINVAL;
1103 		}
1104 	}
1105 
1106 	/* Accept probe requests only for the control interface */
1107 	if (!combined_interfaces && intf != control_interface)
1108 		return -ENODEV;
1109 
1110 	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1111 		/* valid in this context */
1112 		dev_dbg(&intf->dev, "The data interface isn't available\n");
1113 		return -EBUSY;
1114 	}
1115 
1116 
1117 	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1118 		return -EINVAL;
1119 
1120 	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1121 	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1122 	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1123 
1124 
1125 	/* workaround for switched endpoints */
1126 	if (!usb_endpoint_dir_in(epread)) {
1127 		/* descriptors are swapped */
1128 		struct usb_endpoint_descriptor *t;
1129 		dev_dbg(&intf->dev,
1130 			"The data interface has switched endpoints\n");
1131 		t = epread;
1132 		epread = epwrite;
1133 		epwrite = t;
1134 	}
1135 made_compressed_probe:
1136 	dbg("interfaces are valid");
1137 	for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1138 
1139 	if (minor == ACM_TTY_MINORS) {
1140 		dev_err(&intf->dev, "no more free acm devices\n");
1141 		return -ENODEV;
1142 	}
1143 
1144 	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1145 	if (acm == NULL) {
1146 		dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1147 		goto alloc_fail;
1148 	}
1149 
1150 	ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1151 	readsize = le16_to_cpu(epread->wMaxPacketSize) *
1152 				(quirks == SINGLE_RX_URB ? 1 : 2);
1153 	acm->combined_interfaces = combined_interfaces;
1154 	acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1155 	acm->control = control_interface;
1156 	acm->data = data_interface;
1157 	acm->minor = minor;
1158 	acm->dev = usb_dev;
1159 	acm->ctrl_caps = ac_management_function;
1160 	if (quirks & NO_CAP_LINE)
1161 		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1162 	acm->ctrlsize = ctrlsize;
1163 	acm->readsize = readsize;
1164 	acm->rx_buflimit = num_rx_buf;
1165 	acm->urb_task.func = acm_rx_tasklet;
1166 	acm->urb_task.data = (unsigned long) acm;
1167 	INIT_WORK(&acm->work, acm_softint);
1168 	init_waitqueue_head(&acm->drain_wait);
1169 	spin_lock_init(&acm->throttle_lock);
1170 	spin_lock_init(&acm->write_lock);
1171 	spin_lock_init(&acm->read_lock);
1172 	mutex_init(&acm->mutex);
1173 	acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1174 	acm->is_int_ep = usb_endpoint_xfer_int(epread);
1175 	if (acm->is_int_ep)
1176 		acm->bInterval = epread->bInterval;
1177 	tty_port_init(&acm->port);
1178 	acm->port.ops = &acm_port_ops;
1179 
1180 	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1181 	if (!buf) {
1182 		dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1183 		goto alloc_fail2;
1184 	}
1185 	acm->ctrl_buffer = buf;
1186 
1187 	if (acm_write_buffers_alloc(acm) < 0) {
1188 		dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n");
1189 		goto alloc_fail4;
1190 	}
1191 
1192 	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1193 	if (!acm->ctrlurb) {
1194 		dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1195 		goto alloc_fail5;
1196 	}
1197 	for (i = 0; i < num_rx_buf; i++) {
1198 		struct acm_ru *rcv = &(acm->ru[i]);
1199 
1200 		rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1201 		if (rcv->urb == NULL) {
1202 			dev_dbg(&intf->dev,
1203 				"out of memory (read urbs usb_alloc_urb)\n");
1204 			goto alloc_fail6;
1205 		}
1206 
1207 		rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1208 		rcv->instance = acm;
1209 	}
1210 	for (i = 0; i < num_rx_buf; i++) {
1211 		struct acm_rb *rb = &(acm->rb[i]);
1212 
1213 		rb->base = usb_alloc_coherent(acm->dev, readsize,
1214 				GFP_KERNEL, &rb->dma);
1215 		if (!rb->base) {
1216 			dev_dbg(&intf->dev,
1217 				"out of memory (read bufs usb_alloc_coherent)\n");
1218 			goto alloc_fail7;
1219 		}
1220 	}
1221 	for (i = 0; i < ACM_NW; i++) {
1222 		struct acm_wb *snd = &(acm->wb[i]);
1223 
1224 		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1225 		if (snd->urb == NULL) {
1226 			dev_dbg(&intf->dev,
1227 				"out of memory (write urbs usb_alloc_urb)");
1228 			goto alloc_fail8;
1229 		}
1230 
1231 		if (usb_endpoint_xfer_int(epwrite))
1232 			usb_fill_int_urb(snd->urb, usb_dev,
1233 				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1234 				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1235 		else
1236 			usb_fill_bulk_urb(snd->urb, usb_dev,
1237 				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1238 				NULL, acm->writesize, acm_write_bulk, snd);
1239 		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1240 		snd->instance = acm;
1241 	}
1242 
1243 	usb_set_intfdata(intf, acm);
1244 
1245 	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1246 	if (i < 0)
1247 		goto alloc_fail8;
1248 
1249 	if (cfd) { /* export the country data */
1250 		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1251 		if (!acm->country_codes)
1252 			goto skip_countries;
1253 		acm->country_code_size = cfd->bLength - 4;
1254 		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1255 							cfd->bLength - 4);
1256 		acm->country_rel_date = cfd->iCountryCodeRelDate;
1257 
1258 		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1259 		if (i < 0) {
1260 			kfree(acm->country_codes);
1261 			goto skip_countries;
1262 		}
1263 
1264 		i = device_create_file(&intf->dev,
1265 						&dev_attr_iCountryCodeRelDate);
1266 		if (i < 0) {
1267 			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1268 			kfree(acm->country_codes);
1269 			goto skip_countries;
1270 		}
1271 	}
1272 
1273 skip_countries:
1274 	usb_fill_int_urb(acm->ctrlurb, usb_dev,
1275 			 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1276 			 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1277 			 /* works around buggy devices */
1278 			 epctrl->bInterval ? epctrl->bInterval : 0xff);
1279 	acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1280 	acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1281 
1282 	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1283 
1284 	acm_set_control(acm, acm->ctrlout);
1285 
1286 	acm->line.dwDTERate = cpu_to_le32(9600);
1287 	acm->line.bDataBits = 8;
1288 	acm_set_line(acm, &acm->line);
1289 
1290 	usb_driver_claim_interface(&acm_driver, data_interface, acm);
1291 	usb_set_intfdata(data_interface, acm);
1292 
1293 	usb_get_intf(control_interface);
1294 	tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1295 
1296 	acm_table[minor] = acm;
1297 
1298 	return 0;
1299 alloc_fail8:
1300 	for (i = 0; i < ACM_NW; i++)
1301 		usb_free_urb(acm->wb[i].urb);
1302 alloc_fail7:
1303 	acm_read_buffers_free(acm);
1304 alloc_fail6:
1305 	for (i = 0; i < num_rx_buf; i++)
1306 		usb_free_urb(acm->ru[i].urb);
1307 	usb_free_urb(acm->ctrlurb);
1308 alloc_fail5:
1309 	acm_write_buffers_free(acm);
1310 alloc_fail4:
1311 	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1312 alloc_fail2:
1313 	kfree(acm);
1314 alloc_fail:
1315 	return -ENOMEM;
1316 }
1317 
1318 static void stop_data_traffic(struct acm *acm)
1319 {
1320 	int i;
1321 	dbg("Entering stop_data_traffic");
1322 
1323 	tasklet_disable(&acm->urb_task);
1324 
1325 	usb_kill_urb(acm->ctrlurb);
1326 	for (i = 0; i < ACM_NW; i++)
1327 		usb_kill_urb(acm->wb[i].urb);
1328 	for (i = 0; i < acm->rx_buflimit; i++)
1329 		usb_kill_urb(acm->ru[i].urb);
1330 
1331 	tasklet_enable(&acm->urb_task);
1332 
1333 	cancel_work_sync(&acm->work);
1334 }
1335 
1336 static void acm_disconnect(struct usb_interface *intf)
1337 {
1338 	struct acm *acm = usb_get_intfdata(intf);
1339 	struct usb_device *usb_dev = interface_to_usbdev(intf);
1340 	struct tty_struct *tty;
1341 
1342 	/* sibling interface is already cleaning up */
1343 	if (!acm)
1344 		return;
1345 
1346 	mutex_lock(&open_mutex);
1347 	if (acm->country_codes) {
1348 		device_remove_file(&acm->control->dev,
1349 				&dev_attr_wCountryCodes);
1350 		device_remove_file(&acm->control->dev,
1351 				&dev_attr_iCountryCodeRelDate);
1352 	}
1353 	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1354 	acm->dev = NULL;
1355 	usb_set_intfdata(acm->control, NULL);
1356 	usb_set_intfdata(acm->data, NULL);
1357 
1358 	stop_data_traffic(acm);
1359 
1360 	acm_write_buffers_free(acm);
1361 	usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1362 			  acm->ctrl_dma);
1363 	acm_read_buffers_free(acm);
1364 
1365 	if (!acm->combined_interfaces)
1366 		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1367 					acm->data : acm->control);
1368 
1369 	if (acm->port.count == 0) {
1370 		acm_tty_unregister(acm);
1371 		mutex_unlock(&open_mutex);
1372 		return;
1373 	}
1374 
1375 	mutex_unlock(&open_mutex);
1376 	tty = tty_port_tty_get(&acm->port);
1377 	if (tty) {
1378 		tty_hangup(tty);
1379 		tty_kref_put(tty);
1380 	}
1381 }
1382 
1383 #ifdef CONFIG_PM
1384 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1385 {
1386 	struct acm *acm = usb_get_intfdata(intf);
1387 	int cnt;
1388 
1389 	if (message.event & PM_EVENT_AUTO) {
1390 		int b;
1391 
1392 		spin_lock_irq(&acm->read_lock);
1393 		spin_lock(&acm->write_lock);
1394 		b = acm->processing + acm->transmitting;
1395 		spin_unlock(&acm->write_lock);
1396 		spin_unlock_irq(&acm->read_lock);
1397 		if (b)
1398 			return -EBUSY;
1399 	}
1400 
1401 	spin_lock_irq(&acm->read_lock);
1402 	spin_lock(&acm->write_lock);
1403 	cnt = acm->susp_count++;
1404 	spin_unlock(&acm->write_lock);
1405 	spin_unlock_irq(&acm->read_lock);
1406 
1407 	if (cnt)
1408 		return 0;
1409 	/*
1410 	we treat opened interfaces differently,
1411 	we must guard against open
1412 	*/
1413 	mutex_lock(&acm->mutex);
1414 
1415 	if (acm->port.count)
1416 		stop_data_traffic(acm);
1417 
1418 	mutex_unlock(&acm->mutex);
1419 	return 0;
1420 }
1421 
1422 static int acm_resume(struct usb_interface *intf)
1423 {
1424 	struct acm *acm = usb_get_intfdata(intf);
1425 	struct acm_wb *wb;
1426 	int rv = 0;
1427 	int cnt;
1428 
1429 	spin_lock_irq(&acm->read_lock);
1430 	acm->susp_count -= 1;
1431 	cnt = acm->susp_count;
1432 	spin_unlock_irq(&acm->read_lock);
1433 
1434 	if (cnt)
1435 		return 0;
1436 
1437 	mutex_lock(&acm->mutex);
1438 	if (acm->port.count) {
1439 		rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1440 
1441 		spin_lock_irq(&acm->write_lock);
1442 		if (acm->delayed_wb) {
1443 			wb = acm->delayed_wb;
1444 			acm->delayed_wb = NULL;
1445 			spin_unlock_irq(&acm->write_lock);
1446 			acm_start_wb(acm, wb);
1447 		} else {
1448 			spin_unlock_irq(&acm->write_lock);
1449 		}
1450 
1451 		/*
1452 		 * delayed error checking because we must
1453 		 * do the write path at all cost
1454 		 */
1455 		if (rv < 0)
1456 			goto err_out;
1457 
1458 		tasklet_schedule(&acm->urb_task);
1459 	}
1460 
1461 err_out:
1462 	mutex_unlock(&acm->mutex);
1463 	return rv;
1464 }
1465 
1466 static int acm_reset_resume(struct usb_interface *intf)
1467 {
1468 	struct acm *acm = usb_get_intfdata(intf);
1469 	struct tty_struct *tty;
1470 
1471 	mutex_lock(&acm->mutex);
1472 	if (acm->port.count) {
1473 		tty = tty_port_tty_get(&acm->port);
1474 		if (tty) {
1475 			tty_hangup(tty);
1476 			tty_kref_put(tty);
1477 		}
1478 	}
1479 	mutex_unlock(&acm->mutex);
1480 	return acm_resume(intf);
1481 }
1482 
1483 #endif /* CONFIG_PM */
1484 
1485 #define NOKIA_PCSUITE_ACM_INFO(x) \
1486 		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1487 		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1488 		USB_CDC_ACM_PROTO_VENDOR)
1489 
1490 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1491 		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1492 		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1493 		USB_CDC_ACM_PROTO_VENDOR)
1494 
1495 /*
1496  * USB driver structure.
1497  */
1498 
1499 static const struct usb_device_id acm_ids[] = {
1500 	/* quirky and broken devices */
1501 	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1502 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1503 	},
1504 	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1505 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1506 	},
1507 	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1508 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1509 	},
1510 	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1511 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1512 	},
1513 	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1514 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1515 	},
1516 	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1517 	.driver_info = SINGLE_RX_URB,
1518 	},
1519 	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1520 	.driver_info = SINGLE_RX_URB, /* firmware bug */
1521 	},
1522 	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1523 	.driver_info = SINGLE_RX_URB, /* firmware bug */
1524 	},
1525 	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1526 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1527 	},
1528 	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1529 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1530 	},
1531 	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1532 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1533 	},
1534 	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1535 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1536 	},
1537 	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1538 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1539 	},
1540 	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1541 	},
1542 	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1543 	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1544 					   data interface instead of
1545 					   communications interface.
1546 					   Maybe we should define a new
1547 					   quirk for this. */
1548 	},
1549 	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1550 	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1551 	},
1552 	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1553 	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1554 	},
1555 
1556 	/* Nokia S60 phones expose two ACM channels. The first is
1557 	 * a modem and is picked up by the standard AT-command
1558 	 * information below. The second is 'vendor-specific' but
1559 	 * is treated as a serial device at the S60 end, so we want
1560 	 * to expose it on Linux too. */
1561 	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1562 	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1563 	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1564 	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1565 	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1566 	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1567 	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1568 	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1569 	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1570 	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1571 	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1572 	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1573 	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1574 	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1575 	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1576 	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1577 	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1578 	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1579 	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1580 	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1581 	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1582 	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1583 	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1584 	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1585 	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1586 	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1587 	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1588 	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1589 	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1590 	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1591 	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1592 	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1593 	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1594 	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1595 	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1596 	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1597 	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1598 	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1599 	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1600 	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1601 	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1602 	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1603 	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1604 	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1605 	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1606 	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1607 	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1608 	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1609 	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1610 	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1611 	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1612 	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1613 	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1614 	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1615 	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1616 	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1617 
1618 	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1619 
1620 	/* Support Lego NXT using pbLua firmware */
1621 	{ USB_DEVICE(0x0694, 0xff00),
1622 	.driver_info = NOT_A_MODEM,
1623 	},
1624 
1625 	/* control interfaces without any protocol set */
1626 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1627 		USB_CDC_PROTO_NONE) },
1628 
1629 	/* control interfaces with various AT-command sets */
1630 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1631 		USB_CDC_ACM_PROTO_AT_V25TER) },
1632 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1633 		USB_CDC_ACM_PROTO_AT_PCCA101) },
1634 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1635 		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1636 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1637 		USB_CDC_ACM_PROTO_AT_GSM) },
1638 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1639 		USB_CDC_ACM_PROTO_AT_3G) },
1640 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1641 		USB_CDC_ACM_PROTO_AT_CDMA) },
1642 
1643 	{ }
1644 };
1645 
1646 MODULE_DEVICE_TABLE(usb, acm_ids);
1647 
1648 static struct usb_driver acm_driver = {
1649 	.name =		"cdc_acm",
1650 	.probe =	acm_probe,
1651 	.disconnect =	acm_disconnect,
1652 #ifdef CONFIG_PM
1653 	.suspend =	acm_suspend,
1654 	.resume =	acm_resume,
1655 	.reset_resume =	acm_reset_resume,
1656 #endif
1657 	.id_table =	acm_ids,
1658 #ifdef CONFIG_PM
1659 	.supports_autosuspend = 1,
1660 #endif
1661 };
1662 
1663 /*
1664  * TTY driver structures.
1665  */
1666 
1667 static const struct tty_operations acm_ops = {
1668 	.open =			acm_tty_open,
1669 	.close =		acm_tty_close,
1670 	.hangup =		acm_tty_hangup,
1671 	.write =		acm_tty_write,
1672 	.write_room =		acm_tty_write_room,
1673 	.ioctl =		acm_tty_ioctl,
1674 	.throttle =		acm_tty_throttle,
1675 	.unthrottle =		acm_tty_unthrottle,
1676 	.chars_in_buffer =	acm_tty_chars_in_buffer,
1677 	.break_ctl =		acm_tty_break_ctl,
1678 	.set_termios =		acm_tty_set_termios,
1679 	.tiocmget =		acm_tty_tiocmget,
1680 	.tiocmset =		acm_tty_tiocmset,
1681 };
1682 
1683 /*
1684  * Init / exit.
1685  */
1686 
1687 static int __init acm_init(void)
1688 {
1689 	int retval;
1690 	acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1691 	if (!acm_tty_driver)
1692 		return -ENOMEM;
1693 	acm_tty_driver->owner = THIS_MODULE,
1694 	acm_tty_driver->driver_name = "acm",
1695 	acm_tty_driver->name = "ttyACM",
1696 	acm_tty_driver->major = ACM_TTY_MAJOR,
1697 	acm_tty_driver->minor_start = 0,
1698 	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1699 	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1700 	acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1701 	acm_tty_driver->init_termios = tty_std_termios;
1702 	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1703 								HUPCL | CLOCAL;
1704 	tty_set_operations(acm_tty_driver, &acm_ops);
1705 
1706 	retval = tty_register_driver(acm_tty_driver);
1707 	if (retval) {
1708 		put_tty_driver(acm_tty_driver);
1709 		return retval;
1710 	}
1711 
1712 	retval = usb_register(&acm_driver);
1713 	if (retval) {
1714 		tty_unregister_driver(acm_tty_driver);
1715 		put_tty_driver(acm_tty_driver);
1716 		return retval;
1717 	}
1718 
1719 	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1720 	       DRIVER_DESC "\n");
1721 
1722 	return 0;
1723 }
1724 
1725 static void __exit acm_exit(void)
1726 {
1727 	usb_deregister(&acm_driver);
1728 	tty_unregister_driver(acm_tty_driver);
1729 	put_tty_driver(acm_tty_driver);
1730 }
1731 
1732 module_init(acm_init);
1733 module_exit(acm_exit);
1734 
1735 MODULE_AUTHOR(DRIVER_AUTHOR);
1736 MODULE_DESCRIPTION(DRIVER_DESC);
1737 MODULE_LICENSE("GPL");
1738 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);
1739