summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Kondik <shade@discord.hmsinc.com>2010-02-17 12:59:29 -0500
committerMike Lockwood <lockwood@android.com>2010-02-17 13:44:27 -0500
commitaace891ed58b0081b0207debb517567a499b50ed (patch)
tree853ac39e742eb67670849b9c6ca4ccbc6a21f646
parent0a39ec04c518d367d599db2edf1273edb5e2125e (diff)
Add USB_ANDROID_RNDIS_WCEIS option.
Change-Id: I85973ebfcbfae6b401fb8b402842309c72655149 Signed-off-by: Mike Lockwood <lockwood@android.com>
-rw-r--r--drivers/usb/gadget/Kconfig10
-rw-r--r--drivers/usb/gadget/android.c4
-rw-r--r--drivers/usb/gadget/f_rndis.c7
3 files changed, 21 insertions, 0 deletions
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 9f9ea9e84d8e..717e17f7b6f1 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -812,6 +812,16 @@ config USB_ANDROID_RNDIS
help
Provides RNDIS ethernet function for android gadget driver.
+config USB_ANDROID_RNDIS_WCEIS
+ boolean "Use Windows Internet Sharing Class/SubClass/Protocol"
+ depends on USB_ANDROID_RNDIS
+ help
+ Causes the driver to look like a Windows-compatible Internet
+ Sharing device, so Windows auto-detects it.
+
+ If you enable this option, the device is no longer CDC ethernet
+ compatible.
+
config USB_CDC_COMPOSITE
tristate "CDC Composite Device (Ethernet and ACM)"
depends on NET
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c
index 77ff19eebbfa..e1ea22fe0e61 100644
--- a/drivers/usb/gadget/android.c
+++ b/drivers/usb/gadget/android.c
@@ -336,7 +336,11 @@ void android_enable_function(struct usb_function *f, int enable)
*/
if (!strcmp(f->name, "rndis")) {
if (enable)
+#ifdef CONFIG_USB_ANDROID_RNDIS_WCEIS
+ dev->cdev->desc.bDeviceClass = USB_CLASS_WIRELESS_CONTROLLER;
+#else
dev->cdev->desc.bDeviceClass = USB_CLASS_COMM;
+#endif
else
dev->cdev->desc.bDeviceClass = USB_CLASS_PER_INTERFACE;
}
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
index 67a923fce6f0..21bf50f5bbb8 100644
--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -127,9 +127,16 @@ static struct usb_interface_descriptor rndis_control_intf __initdata = {
/* .bInterfaceNumber = DYNAMIC */
/* status endpoint is optional; this could be patched later */
.bNumEndpoints = 1,
+#ifdef CONFIG_USB_ANDROID_RNDIS_WCEIS
+ /* "Wireless" RNDIS; auto-detected by Windows */
+ .bInterfaceClass = USB_CLASS_WIRELESS_CONTROLLER,
+ .bInterfaceSubClass = 1,
+ .bInterfaceProtocol = 3,
+#else
.bInterfaceClass = USB_CLASS_COMM,
.bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
.bInterfaceProtocol = USB_CDC_ACM_PROTO_VENDOR,
+#endif
/* .iInterface = DYNAMIC */
};