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