OLD | NEW |
1 /* | 1 /* |
2 * cdc-acm.c | 2 * cdc-acm.c |
3 * | 3 * |
4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de> | 4 * Copyright (c) 1999 Armin Fuerst <fuerst@in.tum.de> |
5 * Copyright (c) 1999 Pavel Machek <pavel@suse.cz> | 5 * Copyright (c) 1999 Pavel Machek <pavel@suse.cz> |
6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com> | 6 * Copyright (c) 1999 Johannes Erdfelt <johannes@erdfelt.com> |
7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz> | 7 * Copyright (c) 2000 Vojtech Pavlik <vojtech@suse.cz> |
8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name> | 8 * Copyright (c) 2004 Oliver Neukum <oliver@neukum.name> |
9 * Copyright (c) 2005 David Kubicek <dave@awk.cz> | 9 * Copyright (c) 2005 David Kubicek <dave@awk.cz> |
10 * | 10 * |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 dbg("%s - urb shutting down with status: %d", __func__, status); | 290 dbg("%s - urb shutting down with status: %d", __func__, status); |
291 return; | 291 return; |
292 default: | 292 default: |
293 dbg("%s - nonzero urb status received: %d", __func__, status); | 293 dbg("%s - nonzero urb status received: %d", __func__, status); |
294 goto exit; | 294 goto exit; |
295 } | 295 } |
296 | 296 |
297 if (!ACM_READY(acm)) | 297 if (!ACM_READY(acm)) |
298 goto exit; | 298 goto exit; |
299 | 299 |
| 300 usb_mark_last_busy(acm->dev); |
| 301 |
300 data = (unsigned char *)(dr + 1); | 302 data = (unsigned char *)(dr + 1); |
301 switch (dr->bNotificationType) { | 303 switch (dr->bNotificationType) { |
302 case USB_CDC_NOTIFY_NETWORK_CONNECTION: | 304 case USB_CDC_NOTIFY_NETWORK_CONNECTION: |
303 dbg("%s network", dr->wValue ? | 305 dbg("%s network", dr->wValue ? |
304 "connected to" : "disconnected from"); | 306 "connected to" : "disconnected from"); |
305 break; | 307 break; |
306 | 308 |
307 case USB_CDC_NOTIFY_SERIAL_STATE: | 309 case USB_CDC_NOTIFY_SERIAL_STATE: |
308 tty = tty_port_tty_get(&acm->port); | 310 tty = tty_port_tty_get(&acm->port); |
309 newctrl = get_unaligned_le16(data); | 311 newctrl = get_unaligned_le16(data); |
(...skipping 19 matching lines...) Expand all Loading... |
329 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-'); | 331 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-'); |
330 break; | 332 break; |
331 | 333 |
332 default: | 334 default: |
333 dbg("unknown notification %d received: index %d len %d data0 %d
data1 %d", | 335 dbg("unknown notification %d received: index %d len %d data0 %d
data1 %d", |
334 dr->bNotificationType, dr->wIndex, | 336 dr->bNotificationType, dr->wIndex, |
335 dr->wLength, data[0], data[1]); | 337 dr->wLength, data[0], data[1]); |
336 break; | 338 break; |
337 } | 339 } |
338 exit: | 340 exit: |
339 usb_mark_last_busy(acm->dev); | |
340 retval = usb_submit_urb(urb, GFP_ATOMIC); | 341 retval = usb_submit_urb(urb, GFP_ATOMIC); |
341 if (retval) | 342 if (retval) |
342 dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with " | 343 dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with " |
343 "result %d", __func__, retval); | 344 "result %d", __func__, retval); |
344 } | 345 } |
345 | 346 |
346 /* data interface returns incoming bytes, or we got unthrottled */ | 347 /* data interface returns incoming bytes, or we got unthrottled */ |
347 static void acm_read_bulk(struct urb *urb) | 348 static void acm_read_bulk(struct urb *urb) |
348 { | 349 { |
349 struct acm_rb *buf; | 350 struct acm_rb *buf; |
(...skipping 1360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1710 put_tty_driver(acm_tty_driver); | 1711 put_tty_driver(acm_tty_driver); |
1711 } | 1712 } |
1712 | 1713 |
1713 module_init(acm_init); | 1714 module_init(acm_init); |
1714 module_exit(acm_exit); | 1715 module_exit(acm_exit); |
1715 | 1716 |
1716 MODULE_AUTHOR(DRIVER_AUTHOR); | 1717 MODULE_AUTHOR(DRIVER_AUTHOR); |
1717 MODULE_DESCRIPTION(DRIVER_DESC); | 1718 MODULE_DESCRIPTION(DRIVER_DESC); |
1718 MODULE_LICENSE("GPL"); | 1719 MODULE_LICENSE("GPL"); |
1719 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR); | 1720 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR); |
OLD | NEW |