diff options
author | Mike Lockwood <lockwood@android.com> | 2011-12-13 01:17:36 +0800 |
---|---|---|
committer | Andy Green <andy.green@linaro.org> | 2011-12-26 15:52:00 +0800 |
commit | ba5aaaad5d612c1f15384f0e9598550110649770 (patch) | |
tree | 2a985d8faa520b4a31a8cbc5f14afdc0760d1d13 /drivers/usb/gadget/composite.c | |
parent | 0921600be388e6e977bc990960d9e8fcde88bd75 (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 598d75d6b1a..0df8abc2977 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -1159,6 +1159,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; |