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