diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 15:16:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-04-29 15:16:17 -0400 |
commit | 507ffe4f3840ac24890a8123c702cf1b7fe4d33c (patch) | |
tree | 1046888f9db00f268a0056d7f6e427e21502f84c /drivers/usb/class/cdc-acm.c | |
parent | fdc719b63ae35d6a2d8a2a2c76eed813294664bf (diff) | |
parent | 45efcb2d32d35f6509543e477568842d8467035d (diff) |
Merge tag 'tty-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial driver update from Greg Kroah-Hartman:
"Here's the big tty/serial driver merge request for 3.10-rc1
Once again, Jiri has a number of TTY driver fixes and cleanups, and
Peter Hurley came through with a bunch of ldisc fixes that resolve a
number of reported issues. There are some other serial driver
cleanups as well.
All of these have been in the linux-next tree for a while"
* tag 'tty-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (117 commits)
tty/serial/sirf: fix MODULE_DEVICE_TABLE
serial: mxs: drop superfluous {get|put}_device
serial: mxs: fix buffer overflow
ARM: PL011: add support for extended FIFO-size of PL011-r1p5
serial_core.c: add put_device() after device_find_child()
tty: Fix unsafe bit ops in tty_throttle_safe/unthrottle_safe
serial: sccnxp: Replace pdata.init/exit with regulator API
serial: sccnxp: Do not override device name
TTY: pty, fix compilation warning
TTY: rocket, fix compilation warning
TTY: ircomm: fix DTR being raised on hang up
TTY: synclinkmp: fix DTR being raised on hang up
TTY: synclink_gt: fix DTR being raised on hang up
TTY: synclink: fix DTR being raised on hang up
serial: 8250_dw: Fix the stub for dw8250_probe_acpi()
serial: 8250_dw: Convert to devm_ioremap()
serial: 8250_dw: Set port capabilities based on CPR register
serial: 8250_dw: Let ACPI code extract the DMA client info
serial: 8250_dw: Support clk framework also with ACPI
serial: 8250_dw: Enable runtime PM
...
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
-rw-r--r-- | drivers/usb/class/cdc-acm.c | 31 |
1 files changed, 7 insertions, 24 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 387dc6c8ad25..c77f7ae48f1c 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -292,7 +292,6 @@ static void acm_ctrl_irq(struct urb *urb) | |||
292 | { | 292 | { |
293 | struct acm *acm = urb->context; | 293 | struct acm *acm = urb->context; |
294 | struct usb_cdc_notification *dr = urb->transfer_buffer; | 294 | struct usb_cdc_notification *dr = urb->transfer_buffer; |
295 | struct tty_struct *tty; | ||
296 | unsigned char *data; | 295 | unsigned char *data; |
297 | int newctrl; | 296 | int newctrl; |
298 | int retval; | 297 | int retval; |
@@ -327,17 +326,12 @@ static void acm_ctrl_irq(struct urb *urb) | |||
327 | break; | 326 | break; |
328 | 327 | ||
329 | case USB_CDC_NOTIFY_SERIAL_STATE: | 328 | case USB_CDC_NOTIFY_SERIAL_STATE: |
330 | tty = tty_port_tty_get(&acm->port); | ||
331 | newctrl = get_unaligned_le16(data); | 329 | newctrl = get_unaligned_le16(data); |
332 | 330 | ||
333 | if (tty) { | 331 | if (!acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) { |
334 | if (!acm->clocal && | 332 | dev_dbg(&acm->control->dev, "%s - calling hangup\n", |
335 | (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) { | 333 | __func__); |
336 | dev_dbg(&acm->control->dev, | 334 | tty_port_tty_hangup(&acm->port, false); |
337 | "%s - calling hangup\n", __func__); | ||
338 | tty_hangup(tty); | ||
339 | } | ||
340 | tty_kref_put(tty); | ||
341 | } | 335 | } |
342 | 336 | ||
343 | acm->ctrlin = newctrl; | 337 | acm->ctrlin = newctrl; |
@@ -475,15 +469,10 @@ static void acm_write_bulk(struct urb *urb) | |||
475 | static void acm_softint(struct work_struct *work) | 469 | static void acm_softint(struct work_struct *work) |
476 | { | 470 | { |
477 | struct acm *acm = container_of(work, struct acm, work); | 471 | struct acm *acm = container_of(work, struct acm, work); |
478 | struct tty_struct *tty; | ||
479 | 472 | ||
480 | dev_vdbg(&acm->data->dev, "%s\n", __func__); | 473 | dev_vdbg(&acm->data->dev, "%s\n", __func__); |
481 | 474 | ||
482 | tty = tty_port_tty_get(&acm->port); | 475 | tty_port_tty_wakeup(&acm->port); |
483 | if (!tty) | ||
484 | return; | ||
485 | tty_wakeup(tty); | ||
486 | tty_kref_put(tty); | ||
487 | } | 476 | } |
488 | 477 | ||
489 | /* | 478 | /* |
@@ -1519,15 +1508,9 @@ err_out: | |||
1519 | static int acm_reset_resume(struct usb_interface *intf) | 1508 | static int acm_reset_resume(struct usb_interface *intf) |
1520 | { | 1509 | { |
1521 | struct acm *acm = usb_get_intfdata(intf); | 1510 | struct acm *acm = usb_get_intfdata(intf); |
1522 | struct tty_struct *tty; | ||
1523 | 1511 | ||
1524 | if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) { | 1512 | if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) |
1525 | tty = tty_port_tty_get(&acm->port); | 1513 | tty_port_tty_hangup(&acm->port, false); |
1526 | if (tty) { | ||
1527 | tty_hangup(tty); | ||
1528 | tty_kref_put(tty); | ||
1529 | } | ||
1530 | } | ||
1531 | 1514 | ||
1532 | return acm_resume(intf); | 1515 | return acm_resume(intf); |
1533 | } | 1516 | } |