| From e6c7f8a29d45054727c7f9334c4a42729af436cd Mon Sep 17 00:00:00 2001 |
| From: David Brownell <dbrownell@users.sourceforge.net> |
| Date: Thu, 26 Mar 2009 18:25:12 +0000 |
| Subject: USB: gadget: fix rndis regression |
| |
| From: David Brownell <dbrownell@users.sourceforge.net> |
| |
| upstream commit: 090b90118207e786d2990310d063fda5d52cce6e |
| |
| Restore some code that was wrongly dropped from the RNDIS |
| driver, and caused interop problems observed with OpenMoko. |
| |
| The issue is with hardware which needs help conforming to part |
| of the USB 2.0 spec (section 8.5.3.2); some can automagically |
| send a ZLP in response to an unexpected IN, but not all chips |
| will do that. We don't need to check the packet length ourselves |
| the way earlier code did, since the UDC must already check it. |
| But we do need to tell the UDC when it must force a short packet |
| termination of the data stage. |
| |
| (Based on a patch from Aric D. Blumer <aric at sdgsystems.com>) |
| |
| Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> |
| Cc: stable <stable@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| Signed-off-by: Chris Wright <chrisw@sous-sol.org> |
| --- |
| drivers/usb/gadget/f_rndis.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/usb/gadget/f_rndis.c |
| +++ b/drivers/usb/gadget/f_rndis.c |
| @@ -437,7 +437,7 @@ invalid: |
| DBG(cdev, "rndis req%02x.%02x v%04x i%04x l%d\n", |
| ctrl->bRequestType, ctrl->bRequest, |
| w_value, w_index, w_length); |
| - req->zero = 0; |
| + req->zero = (value < w_length); |
| req->length = value; |
| value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC); |
| if (value < 0) |