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