diff options
author | David S. Miller <davem@davemloft.net> | 2009-12-11 20:12:17 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-12-11 20:12:17 -0500 |
commit | 501706565b2d4d2d40d0d301d5411ede099b8a6f (patch) | |
tree | 142a18bf1f1e74a09dbfa27540b893ade0fd797d /drivers/usb/class | |
parent | e93737b0f0159a61772894943199fd3b6f315641 (diff) | |
parent | 2fe77b81c77eed92c4c0439f74c8148a295b4a86 (diff) |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts:
include/net/tcp.h
Diffstat (limited to 'drivers/usb/class')
-rw-r--r-- | drivers/usb/class/cdc-acm.c | 58 | ||||
-rw-r--r-- | drivers/usb/class/usbtmc.c | 56 |
2 files changed, 78 insertions, 36 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index e4eca7810bcf..34d4eb98829e 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c | |||
@@ -1461,6 +1461,12 @@ err_out: | |||
1461 | } | 1461 | } |
1462 | 1462 | ||
1463 | #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 | |||
1464 | /* | 1470 | /* |
1465 | * USB driver structure. | 1471 | * USB driver structure. |
1466 | */ | 1472 | */ |
@@ -1519,6 +1525,57 @@ static struct usb_device_id acm_ids[] = { | |||
1519 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ | 1525 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ |
1520 | }, | 1526 | }, |
1521 | 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 | |||
1522 | /* control interfaces with various AT-command sets */ | 1579 | /* control interfaces with various AT-command sets */ |
1523 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1580 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
1524 | USB_CDC_ACM_PROTO_AT_V25TER) }, | 1581 | USB_CDC_ACM_PROTO_AT_V25TER) }, |
@@ -1533,7 +1590,6 @@ static struct usb_device_id acm_ids[] = { | |||
1533 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, | 1590 | { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, |
1534 | USB_CDC_ACM_PROTO_AT_CDMA) }, | 1591 | USB_CDC_ACM_PROTO_AT_CDMA) }, |
1535 | 1592 | ||
1536 | /* NOTE: COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */ | ||
1537 | { } | 1593 | { } |
1538 | }; | 1594 | }; |
1539 | 1595 | ||
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c index 2473cf0c6b1d..7c5f4e32c920 100644 --- a/drivers/usb/class/usbtmc.c +++ b/drivers/usb/class/usbtmc.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /** | 1 | /** |
2 | * drivers/usb/class/usbtmc.c - USB Test & Measurment class driver | 2 | * drivers/usb/class/usbtmc.c - USB Test & Measurement class driver |
3 | * | 3 | * |
4 | * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany | 4 | * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany |
5 | * Copyright (C) 2008 Novell, Inc. | 5 | * Copyright (C) 2008 Novell, Inc. |
@@ -347,13 +347,8 @@ usbtmc_abort_bulk_out_check_status: | |||
347 | goto exit; | 347 | goto exit; |
348 | 348 | ||
349 | usbtmc_abort_bulk_out_clear_halt: | 349 | usbtmc_abort_bulk_out_clear_halt: |
350 | rv = usb_control_msg(data->usb_dev, | 350 | rv = usb_clear_halt(data->usb_dev, |
351 | usb_sndctrlpipe(data->usb_dev, 0), | 351 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
352 | USB_REQ_CLEAR_FEATURE, | ||
353 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
354 | USB_RECIP_ENDPOINT, | ||
355 | USB_ENDPOINT_HALT, data->bulk_out, buffer, | ||
356 | 0, USBTMC_TIMEOUT); | ||
357 | 352 | ||
358 | if (rv < 0) { | 353 | if (rv < 0) { |
359 | dev_err(dev, "usb_control_msg returned %d\n", rv); | 354 | dev_err(dev, "usb_control_msg returned %d\n", rv); |
@@ -562,10 +557,16 @@ static ssize_t usbtmc_write(struct file *filp, const char __user *buf, | |||
562 | n_bytes = roundup(12 + this_part, 4); | 557 | n_bytes = roundup(12 + this_part, 4); |
563 | memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part)); | 558 | memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part)); |
564 | 559 | ||
565 | retval = usb_bulk_msg(data->usb_dev, | 560 | do { |
566 | usb_sndbulkpipe(data->usb_dev, | 561 | retval = usb_bulk_msg(data->usb_dev, |
567 | data->bulk_out), | 562 | usb_sndbulkpipe(data->usb_dev, |
568 | buffer, n_bytes, &actual, USBTMC_TIMEOUT); | 563 | data->bulk_out), |
564 | buffer, n_bytes, | ||
565 | &actual, USBTMC_TIMEOUT); | ||
566 | if (retval != 0) | ||
567 | break; | ||
568 | n_bytes -= actual; | ||
569 | } while (n_bytes); | ||
569 | 570 | ||
570 | data->bTag_last_write = data->bTag; | 571 | data->bTag_last_write = data->bTag; |
571 | data->bTag++; | 572 | data->bTag++; |
@@ -702,14 +703,8 @@ usbtmc_clear_check_status: | |||
702 | 703 | ||
703 | usbtmc_clear_bulk_out_halt: | 704 | usbtmc_clear_bulk_out_halt: |
704 | 705 | ||
705 | rv = usb_control_msg(data->usb_dev, | 706 | rv = usb_clear_halt(data->usb_dev, |
706 | usb_sndctrlpipe(data->usb_dev, 0), | 707 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
707 | USB_REQ_CLEAR_FEATURE, | ||
708 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
709 | USB_RECIP_ENDPOINT, | ||
710 | USB_ENDPOINT_HALT, | ||
711 | data->bulk_out, buffer, 0, | ||
712 | USBTMC_TIMEOUT); | ||
713 | if (rv < 0) { | 708 | if (rv < 0) { |
714 | dev_err(dev, "usb_control_msg returned %d\n", rv); | 709 | dev_err(dev, "usb_control_msg returned %d\n", rv); |
715 | goto exit; | 710 | goto exit; |
@@ -730,13 +725,8 @@ static int usbtmc_ioctl_clear_out_halt(struct usbtmc_device_data *data) | |||
730 | if (!buffer) | 725 | if (!buffer) |
731 | return -ENOMEM; | 726 | return -ENOMEM; |
732 | 727 | ||
733 | rv = usb_control_msg(data->usb_dev, | 728 | rv = usb_clear_halt(data->usb_dev, |
734 | usb_sndctrlpipe(data->usb_dev, 0), | 729 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
735 | USB_REQ_CLEAR_FEATURE, | ||
736 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
737 | USB_RECIP_ENDPOINT, | ||
738 | USB_ENDPOINT_HALT, data->bulk_out, | ||
739 | buffer, 0, USBTMC_TIMEOUT); | ||
740 | 730 | ||
741 | if (rv < 0) { | 731 | if (rv < 0) { |
742 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", | 732 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", |
@@ -759,12 +749,8 @@ static int usbtmc_ioctl_clear_in_halt(struct usbtmc_device_data *data) | |||
759 | if (!buffer) | 749 | if (!buffer) |
760 | return -ENOMEM; | 750 | return -ENOMEM; |
761 | 751 | ||
762 | rv = usb_control_msg(data->usb_dev, usb_sndctrlpipe(data->usb_dev, 0), | 752 | rv = usb_clear_halt(data->usb_dev, |
763 | USB_REQ_CLEAR_FEATURE, | 753 | usb_rcvbulkpipe(data->usb_dev, data->bulk_in)); |
764 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
765 | USB_RECIP_ENDPOINT, | ||
766 | USB_ENDPOINT_HALT, data->bulk_in, buffer, 0, | ||
767 | USBTMC_TIMEOUT); | ||
768 | 754 | ||
769 | if (rv < 0) { | 755 | if (rv < 0) { |
770 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", | 756 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", |
@@ -1109,13 +1095,13 @@ static void usbtmc_disconnect(struct usb_interface *intf) | |||
1109 | kref_put(&data->kref, usbtmc_delete); | 1095 | kref_put(&data->kref, usbtmc_delete); |
1110 | } | 1096 | } |
1111 | 1097 | ||
1112 | static int usbtmc_suspend (struct usb_interface *intf, pm_message_t message) | 1098 | static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message) |
1113 | { | 1099 | { |
1114 | /* this driver does not have pending URBs */ | 1100 | /* this driver does not have pending URBs */ |
1115 | return 0; | 1101 | return 0; |
1116 | } | 1102 | } |
1117 | 1103 | ||
1118 | static int usbtmc_resume (struct usb_interface *intf) | 1104 | static int usbtmc_resume(struct usb_interface *intf) |
1119 | { | 1105 | { |
1120 | return 0; | 1106 | return 0; |
1121 | } | 1107 | } |