diff options
author | Mike Lockwood <lockwood@android.com> | 2010-04-16 15:32:15 -0400 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-06-14 09:09:07 -0700 |
commit | fb52b002c2d20205d01598f0440dc89ece98ba2d (patch) | |
tree | b9e371f59e1f3e3bd1f2964bc48b773a287b1066 /drivers | |
parent | e2dc503c4220b7d86815283f7d18c0b14af64470 (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')
-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 e15c0b6a584..03b02876ba1 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -931,6 +931,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; |