diff options
| author | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2010-01-04 19:17:33 -0500 |
| commit | 32032df6c2f6c9c6b2ada2ce42322231824f70c2 (patch) | |
| tree | b1ce838a37044bb38dfc128e2116ca35630e629a /drivers/usb/class/cdc-acm.c | |
| parent | 22b737f4c75197372d64afc6ed1bccd58c00e549 (diff) | |
| parent | c5974b835a909ff15c3b7e6cf6789b5eb919f419 (diff) | |
Merge branch 'master' into percpu
Conflicts:
arch/powerpc/platforms/pseries/hvCall.S
include/linux/percpu.h
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
| -rw-r--r-- | drivers/usb/class/cdc-acm.c | 76 |
1 files changed, 69 insertions, 7 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index e3861b21e776..34d4eb98829e 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
| @@ -609,9 +609,9 @@ static int acm_tty_open(struct tty_struct *tty, struct file *filp) | |||
| 609 | 609 | ||
| 610 | acm->throttle = 0; | 610 | acm->throttle = 0; |
| 611 | 611 | ||
| 612 | tasklet_schedule(&acm->urb_task); | ||
| 613 | set_bit(ASYNCB_INITIALIZED, &acm->port.flags); | 612 | set_bit(ASYNCB_INITIALIZED, &acm->port.flags); |
| 614 | rv = tty_port_block_til_ready(&acm->port, tty, filp); | 613 | rv = tty_port_block_til_ready(&acm->port, tty, filp); |
| 614 | tasklet_schedule(&acm->urb_task); | ||
| 615 | done: | 615 | done: |
| 616 | mutex_unlock(&acm->mutex); | 616 | mutex_unlock(&acm->mutex); |
| 617 | err_out: | 617 | err_out: |
| @@ -686,15 +686,21 @@ static void acm_tty_close(struct tty_struct *tty, struct file *filp) | |||
| 686 | 686 | ||
| 687 | /* Perform the closing process and see if we need to do the hardware | 687 | /* Perform the closing process and see if we need to do the hardware |
| 688 | shutdown */ | 688 | shutdown */ |
| 689 | if (!acm || tty_port_close_start(&acm->port, tty, filp) == 0) | 689 | if (!acm) |
| 690 | return; | 690 | return; |
| 691 | if (tty_port_close_start(&acm->port, tty, filp) == 0) { | ||
| 692 | mutex_lock(&open_mutex); | ||
| 693 | if (!acm->dev) { | ||
| 694 | tty_port_tty_set(&acm->port, NULL); | ||
| 695 | acm_tty_unregister(acm); | ||
| 696 | tty->driver_data = NULL; | ||
| 697 | } | ||
| 698 | mutex_unlock(&open_mutex); | ||
| 699 | return; | ||
| 700 | } | ||
| 691 | acm_port_down(acm, 0); | 701 | acm_port_down(acm, 0); |
| 692 | tty_port_close_end(&acm->port, tty); | 702 | tty_port_close_end(&acm->port, tty); |
| 693 | mutex_lock(&open_mutex); | ||
| 694 | tty_port_tty_set(&acm->port, NULL); | 703 | tty_port_tty_set(&acm->port, NULL); |
| 695 | if (!acm->dev) | ||
| 696 | acm_tty_unregister(acm); | ||
| 697 | mutex_unlock(&open_mutex); | ||
| 698 | } | 704 | } |
| 699 | 705 | ||
| 700 | static int acm_tty_write(struct tty_struct *tty, | 706 | static int acm_tty_write(struct tty_struct *tty, |
| @@ -1455,6 +1461,12 @@ err_out: | |||
| 1455 | } | 1461 | } |
| 1456 | 1462 | ||
| 1457 | #endif /* CONFIG_PM */ | 1463 | #endif /* CONFIG_PM */ |
| 1464 | |||
| 1465 | #define NOKIA_PCSUITE_ACM_INFO(x) \ | ||
| 1466 | USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \ | ||
| 1467 | USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \ | ||
| 1468 | USB_CDC_ACM_PROTO_VENDOR) | ||
| 1469 | |||
| 1458 | /* | 1470 | /* |
| 1459 | * USB driver structure. | 1471 | * USB driver structure. |
| 1460 | */ | 1472 | */ |
| @@ -1513,6 +1525,57 @@ static struct usb_device_id acm_ids[] = { | |||
| 1513 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ | 1525 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ |
| 1514 | }, | 1526 | }, |
| 1515 | 1527 | ||
| 1528 | /* Nokia S60 phones expose two ACM channels. The first is | ||
| 1529 | * a modem and is picked up by the standard AT-command | ||
| 1530 | * information below. The second is 'vendor-specific' but | ||
| 1531 | * is treated as a serial device at the S60 end, so we want | ||
| 1532 | * to expose it on Linux too. */ | ||
| 1533 | { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */ | ||
| 1534 | { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */ | ||
| 1535 | { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */ | ||
| 1536 | { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */ | ||
| 1537 | { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */ | ||
| 1538 | { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */ | ||
| 1539 | { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */ | ||
| 1540 | { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */ | ||
| 1541 | { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */ | ||
| 1542 | { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */ | ||
| 1543 | { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */ | ||
| 1544 | { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */ | ||
| 1545 | { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */ | ||
| 1546 | { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */ | ||
| 1547 | { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */ | ||
| 1548 | { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */ | ||
| 1549 | { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */ | ||
| 1550 | { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i */ | ||
| 1551 | { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */ | ||
| 1552 | { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */ | ||
| 1553 | { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */ | ||
| 1554 | { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic & */ | ||
| 1555 | { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */ | ||
| 1556 | { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */ | ||
| 1557 | { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */ | ||
| 1558 | { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */ | ||
| 1559 | { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */ | ||
| 1560 | { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */ | ||
| 1561 | { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */ | ||
| 1562 | { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */ | ||
| 1563 | { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */ | ||
| 1564 | { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB */ | ||
| 1565 | { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */ | ||
| 1566 | { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */ | ||
| 1567 | { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */ | ||
| 1568 | { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */ | ||
| 1569 | { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */ | ||
| 1570 | { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */ | ||
| 1571 | { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */ | ||
| 1572 | { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3 */ | ||
| 1573 | { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */ | ||
| 1574 | { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */ | ||
| 1575 | { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */ | ||
| 1576 | |||
| 1577 | /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */ | ||
| 1578 | |||
| 1516 | /* control interfaces with various AT-command sets */ | 1579 | /* control interfaces with various AT-command sets */ |
| 1517 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1580 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
| 1518 | USB_CDC_ACM_PROTO_AT_V25TER) }, | 1581 | USB_CDC_ACM_PROTO_AT_V25TER) }, |
| @@ -1527,7 +1590,6 @@ static struct usb_device_id acm_ids[] = { | |||
| 1527 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1590 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
| 1528 | USB_CDC_ACM_PROTO_AT_CDMA) }, | 1591 | USB_CDC_ACM_PROTO_AT_CDMA) }, |
| 1529 | 1592 | ||
| 1530 | /* NOTE: COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */ | ||
| 1531 | { } | 1593 | { } |
| 1532 | }; | 1594 | }; |
| 1533 | 1595 | ||
