diff options
author | Sebastian Bauer <mail@sebastianbauer.info> | 2011-07-21 09:40:07 -0400 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2011-08-12 04:52:37 -0400 |
commit | 71964b9a0c06f2804be3b6ff47fab07a9468ecb4 (patch) | |
tree | 94bb6b6d9513419bcab7ea0abd76f7cda9a0988d /drivers/usb | |
parent | 26e5c3e227d15a44402e1c9ab817fe48142b4b99 (diff) |
usb: gadget: hid: don't STALL when processing a HID Descriptor request
This is a patch to fix an issue with the HID gadget which, at the moment,
returns STALL on a HID descriptor request. Essentially, the patch changes
the hid gadget such that a request for the HID descriptor is handled by
copying the descriptor into the response buffer, rather than falling
through the default case, in which the request is answered by a STALL.
Signed-off-by: Sebastian Bauer <mail@sebastianbauer.info>
Acked-by: Peter Korsgaard <peter.korsgaard@barco.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/f_hid.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/gadget/f_hid.c b/drivers/usb/gadget/f_hid.c index 403a48bcf560..83a266bdb40e 100644 --- a/drivers/usb/gadget/f_hid.c +++ b/drivers/usb/gadget/f_hid.c | |||
@@ -367,6 +367,13 @@ static int hidg_setup(struct usb_function *f, | |||
367 | case ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8 | 367 | case ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8 |
368 | | USB_REQ_GET_DESCRIPTOR): | 368 | | USB_REQ_GET_DESCRIPTOR): |
369 | switch (value >> 8) { | 369 | switch (value >> 8) { |
370 | case HID_DT_HID: | ||
371 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: HID\n"); | ||
372 | length = min_t(unsigned short, length, | ||
373 | hidg_desc.bLength); | ||
374 | memcpy(req->buf, &hidg_desc, length); | ||
375 | goto respond; | ||
376 | break; | ||
370 | case HID_DT_REPORT: | 377 | case HID_DT_REPORT: |
371 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n"); | 378 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n"); |
372 | length = min_t(unsigned short, length, | 379 | length = min_t(unsigned short, length, |