From 00bc4089eff55f9c2024186937546c8e8d6cccb0 Mon Sep 17 00:00:00 2001 From: John Michelau Date: Fri, 10 Dec 2010 13:51:19 -0600 Subject: [PATCH] USB: gadget: acm,rndis: IAD class, subclass & prot should match 1st iface Microsoft recommends that the class and subclass fields of an IAD match the same fields from the first interface in the collection that the IAD is grouping. In practice, we are also finding that the protocol fields should also match. Without this change, the default Microsoft composite driver may not group interfaces properly, which is what allows child function drivers with IAD's to load correctly. Signed-off-by: Mike Lockwood --- drivers/usb/gadget/f_rndis.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c index 54d18304500d..64faf659cafa 100644 --- a/drivers/usb/gadget/f_rndis.c +++ b/drivers/usb/gadget/f_rndis.c @@ -133,8 +133,8 @@ static struct usb_interface_descriptor rndis_control_intf = { #ifdef CONFIG_USB_ANDROID_RNDIS_WCEIS /* "Wireless" RNDIS; auto-detected by Windows */ .bInterfaceClass = USB_CLASS_WIRELESS_CONTROLLER, - .bInterfaceSubClass = 1, - .bInterfaceProtocol = 3, + .bInterfaceSubClass = 0x01, + .bInterfaceProtocol = 0x03, #else .bInterfaceClass = USB_CLASS_COMM, .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM, @@ -198,9 +198,16 @@ rndis_iad_descriptor = { .bFirstInterface = 0, /* XXX, hardcoded */ .bInterfaceCount = 2, // control + data +#ifdef CONFIG_USB_ANDROID_RNDIS_WCEIS + /* "Wireless" RNDIS; auto-detected by Windows */ + .bFunctionClass = USB_CLASS_WIRELESS_CONTROLLER, + .bFunctionSubClass = 0x01, + .bFunctionProtocol = 0x03, +#else .bFunctionClass = USB_CLASS_COMM, .bFunctionSubClass = USB_CDC_SUBCLASS_ETHERNET, - .bFunctionProtocol = USB_CDC_PROTO_NONE, + .bFunctionProtocol = USB_CDC_ACM_PROTO_VENDOR, +#endif /* .iFunction = DYNAMIC */ }; -- 2.34.1