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)
committermgross <mark.gross@intel.com>
Wed, 9 Nov 2011 20:02:41 +0000 (12:02 -0800)
Signed-off-by: Mike Lockwood <lockwood@android.com>
drivers/usb/gadget/composite.c

index 134d3d5..3b210de 100644 (file)
@@ -983,6 +983,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;
        }