diff options
author | Mike Lockwood <lockwood@android.com> | 2010-04-16 15:32:15 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:38:06 -0800 |
commit | d2f5669d9d4c9d4fb1226500d4e10f908c808763 (patch) | |
tree | 1a1df76eb8b849f5e8d2df817f7852c1238e5cba /drivers/usb/gadget/composite.c | |
parent | f0dc4ebd035a22b6f6ac01087dc8a4176166ce8a (diff) |
USB: composite: Add support for functions overriding USB_DT_STRING descriptors
Needed for MTP support.
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'drivers/usb/gadget/composite.c')
-rw-r--r-- | drivers/usb/gadget/composite.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 2d0e9ef90f51..f917efb4926c 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1182,6 +1182,21 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) case USB_DT_STRING: value = get_string(cdev, req->buf, w_index, w_value & 0xff); + + /* Allow functions to handle USB_DT_STRING. + * This is required for MTP. + */ + if (value < 0) { + struct usb_configuration *cfg; + list_for_each_entry(cfg, &cdev->configs, list) { + if (cfg && cfg->setup) { + value = cfg->setup(cfg, ctrl); + if (value >= 0) + break; + } + } + } + if (value >= 0) value = min(w_length, (u16) value); break; |