OSDN Git Service

USB: gadget: android: Fix special case for RNDIS ethernet function
authorMike Lockwood <lockwood@android.com>
Sat, 13 Feb 2010 21:37:16 +0000 (16:37 -0500)
committerBrian Swetland <swetland@google.com>
Tue, 29 Mar 2011 20:57:42 +0000 (13:57 -0700)
Only set device descriptor bDeviceClass field to USB_CLASS_COMM when
the RNDIS function is actually enabled.

Signed-off-by: Mike Lockwood <lockwood@android.com>
drivers/usb/gadget/android.c

index 73fc4b4..77ff19e 100644 (file)
@@ -100,14 +100,7 @@ static struct usb_device_descriptor device_desc = {
        .bLength              = sizeof(device_desc),
        .bDescriptorType      = USB_DT_DEVICE,
        .bcdUSB               = __constant_cpu_to_le16(0x0200),
-#ifdef CONFIG_USB_ANDROID_RNDIS
-       /* we need to specify the class in the device descriptor
-        * if we are using RNDIS.
-        */
-       .bDeviceClass         = USB_CLASS_COMM,
-#else
        .bDeviceClass         = USB_CLASS_PER_INTERFACE,
-#endif
        .idVendor             = __constant_cpu_to_le16(VENDOR_ID),
        .idProduct            = __constant_cpu_to_le16(PRODUCT_ID),
        .bcdDevice            = __constant_cpu_to_le16(0xffff),
@@ -337,6 +330,18 @@ void android_enable_function(struct usb_function *f, int enable)
                if (dev->cdev)
                        dev->cdev->desc.idProduct = device_desc.idProduct;
 
+#ifdef CONFIG_USB_ANDROID_RNDIS
+               /* We need to specify the COMM class in the device descriptor
+               * if we are using RNDIS.
+               */
+               if (!strcmp(f->name, "rndis")) {
+                       if (enable)
+                               dev->cdev->desc.bDeviceClass = USB_CLASS_COMM;
+                       else
+                               dev->cdev->desc.bDeviceClass = USB_CLASS_PER_INTERFACE;
+               }
+#endif
+
                /* force reenumeration */
                if (dev->cdev && dev->cdev->gadget &&
                                dev->cdev->gadget->speed != USB_SPEED_UNKNOWN) {