Thread (1 message) 1 message, 1 author, 2011-03-17

Re: [PATCH 1/1] fsl_qe_udc: send ZLP when zero flag and length % maxpacket == 0

From: Sergei Shtylyov <hidden>
Date: 2011-03-17 12:49:09

Hello.

On 17-03-2011 13:30, Valentin Longchamp wrote:
The driver did not take the zero flag in the USB request. If the
request length is the same as the endpoint's maxpacket, an additional
ZLP with no data has to be transmitted.
The method used here is inspired to what is done in fsl_udc_core.c
(and pxa27x_udc.c and at91_udc.c) where this is supported.
This is the first version of the patch, it may still contain mistakes,
but I send it as a RFC since there already was a discussion about this
topic with people from Keymile:
http://thread.gmane.org/gmane.linux.usb.general/38951
Signed-off-by: Valentin Longchamp<redacted>
---
  drivers/usb/gadget/fsl_qe_udc.c |   28 +++++++++++++++++++++++-----
  1 files changed, 23 insertions(+), 5 deletions(-)
quoted hunk
diff --git a/drivers/usb/gadget/fsl_qe_udc.c b/drivers/usb/gadget/fsl_qe_udc.c
index 8dc15da..08538f5 100644
--- a/drivers/usb/gadget/fsl_qe_udc.c
+++ b/drivers/usb/gadget/fsl_qe_udc.c
[...]
quoted hunk
@@ -1158,13 +1164,24 @@ static int txcomplete(struct qe_ep *ep, unsigned char restart)
  			ep->last = 0;
  		}

+		/* zlp needed when req->re.zero is set */
+		if (req->req.zero) {
+			if (last_len == 0 ||
+				(req->req.length % ep->ep.maxpacket) != 0)
+				zlp = 0;
+			else
+				zlp = 1;
+		} else
+			zlp = 0;
+
  		/* a request already were transmitted completely */
  		if ((ep->tx_req->req.length - ep->sent) <= 0) {
-			ep->tx_req->req.actual = (unsigned int)ep->sent;
-			done(ep, ep->tx_req, 0);
-			ep->tx_req = NULL;
-			ep->last = 0;
-			ep->sent = 0;
+			if (!zlp) {
   This *if* could be collapsed into previous *if*, and so the subsequest indentation level not changed.
quoted hunk
+				done(ep, ep->tx_req, 0);
+				ep->tx_req = NULL;
+				ep->last = 0;
+				ep->sent = 0;
+			}
  		}
  	}
WBR, Sergei
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help