OSDN Git Service

USB: composite: Allow configurations to handle unhandled setup requests
authorJoe Swantek <joseph.swantek@motorola.com>
Tue, 15 Dec 2009 12:17:40 +0000 (07:17 -0500)
committerIliyan Malchev <malchev@google.com>
Mon, 23 May 2011 22:43:13 +0000 (15:43 -0700)
Signed-off-by: Mike Lockwood <lockwood@android.com>
drivers/usb/gadget/composite.c

index e7dab4a..43d45bf 100644 (file)
@@ -964,6 +964,25 @@ unknown:
                                value = c->setup(c, ctrl);
                }
 
+               /* If the vendor request is not processed (value < 0),
+                * call all device registered configure setup callbacks
+                * to process it.
+                * This is used to handle the following cases:
+                * - vendor request is for the device and arrives before
+                * setconfiguration.
+                * - Some devices are required to handle vendor request before
+                * setconfiguration such as MTP, USBNET.
+                */
+
+               if (value < 0) {
+                       struct usb_configuration        *cfg;
+
+                       list_for_each_entry(cfg, &cdev->configs, list) {
+                       if (cfg && cfg->setup)
+                               value = cfg->setup(cfg, ctrl);
+                       }
+               }
+
                goto done;
        }