| From eb132ccbdec5df46e29c9814adf76075ce83576b Mon Sep 17 00:00:00 2001 |
| From: Andrzej Pietrasiewicz <andrzej.p@samsung.com> |
| Date: Tue, 3 Mar 2015 10:52:05 +0100 |
| Subject: usb: gadget: printer: enqueue printer's response for setup request |
| |
| From: Andrzej Pietrasiewicz <andrzej.p@samsung.com> |
| |
| commit eb132ccbdec5df46e29c9814adf76075ce83576b upstream. |
| |
| Function-specific setup requests should be handled in such a way, that |
| apart from filling in the data buffer, the requests are also actually |
| enqueued: if function-specific setup is called from composte_setup(), |
| the "usb_ep_queue()" block of code in composite_setup() is skipped. |
| |
| The printer function lacks this part and it results in e.g. get device id |
| requests failing: the host expects some response, the device prepares it |
| but does not equeue it for sending to the host, so the host finally asserts |
| timeout. |
| |
| This patch adds enqueueing the prepared responses. |
| |
| Fixes: 2e87edf49227: "usb: gadget: make g_printer use composite" |
| Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@samsung.com> |
| Signed-off-by: Felipe Balbi <balbi@ti.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/gadget/legacy/printer.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| --- a/drivers/usb/gadget/legacy/printer.c |
| +++ b/drivers/usb/gadget/legacy/printer.c |
| @@ -1031,6 +1031,15 @@ unknown: |
| break; |
| } |
| /* host either stalls (value < 0) or reports success */ |
| + if (value >= 0) { |
| + req->length = value; |
| + req->zero = value < wLength; |
| + value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC); |
| + if (value < 0) { |
| + ERROR(dev, "%s:%d Error!\n", __func__, __LINE__); |
| + req->status = 0; |
| + } |
| + } |
| return value; |
| } |
| |