From aace891ed58b0081b0207debb517567a499b50ed Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Wed, 17 Feb 2010 12:59:29 -0500 Subject: [PATCH] Add USB_ANDROID_RNDIS_WCEIS option. Change-Id: I85973ebfcbfae6b401fb8b402842309c72655149 Signed-off-by: Mike Lockwood --- drivers/usb/gadget/Kconfig | 10 ++++++++++ drivers/usb/gadget/android.c | 4 ++++ drivers/usb/gadget/f_rndis.c | 7 +++++++ 3 files changed, 21 insertions(+) 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 */ }; -- 2.34.1