aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class/cdc-acm.c
diff options
context:
space:
mode:
authorAdrian Taylor <aat@realvnc.com>2009-11-19 05:35:33 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2009-12-11 14:55:20 -0500
commitc1479a92cf0a7792298d364e44a781550621cb58 (patch)
tree9d315b860c0476722af199715da700d10bc13b37 /drivers/usb/class/cdc-acm.c
parent85e034fdff2af6befc55904f3ab9cc5aa31be8fe (diff)
USB: Exposing second ACM channel as tty for Nokia S60 phones.
Nokia S60 phones expose two ACM channels. The first is a modem and is picked up by the standard AT-command interface information in the CDC-ACM driver. The second is marked as having a vendor-specific protocol. Normally, we don't expose those as ttys. (On some other devices, they may be claimed by the rndis_host driver and used as a network interface). But on S60 this second ACM channel is the way that third-party S60 application developers are expected to communicate over USB. It acts as a serial device at the S60 end, and so it should on Linux too. The list of devices is largely derived from: http://wiki.forum.nokia.com/index.php/S60_Platform_and_device_identification_codes http://wiki.forum.nokia.com/index.php/Nokia_USB_Product_IDs and includes only the S60 3rd Edition+ devices documented there. There are many devices for which the USB device ID is not documented, including: Nokia 6290 Nokia E63 Nokia 5630 XpressMusic Nokia 5730 XpressMusic Nokia 6710 Navigator Nokia 6720 classic Nokia 6730 Classic Nokia 6760 slide Nokia 6790 slide Nokia 6790 Surge Nokia E52 Nokia E55 Nokia E71x (AT&T) Nokia E72 Nokia E75 Nokia E75 US+LTA variant Nokia N79 Nokia N86 8MP Nokia 5230 (RM-588) Nokia 5230 (RM-594) Nokia 5530 XpressMusic Nokia 5530 XpressMusic (china) Nokia 5800 XM Nokia N97 (RM-506) Nokia N97 mini Nokia X6 It would be good to add those subsequently. Signed-off-by: Adrian Taylor <aat@realvnc.com> Acked-by: Oliver Neukum <oliver@neukum.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
-rw-r--r--drivers/usb/class/cdc-acm.c58
1 files changed, 57 insertions, 1 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