> On Tue, Jun 30, 2015 at 12:33 AM, Steve Calfee <stevecalfee@xxxxxxxxx> > wrote: > > On Mon, Jun 29, 2015 at 7:16 AM, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > wrote: > >> On Mon, 29 Jun 2015, Peter Chen wrote: > >> > >>> Just like Steve pointed, it should be a ZLT problem, do you have > >>> below patch in your tree, and the host may not send zlt, but you may > >>> queue an zero-length request, the f_hid does not set req->zero flag > >>> either. > >>> > >>> commit 953c66469735aed8d2ada639a72b150f01dae605 > >>> Author: Abbas Raza <Abbas_Raza@xxxxxxxxxx> > >>> Date: Thu Jul 17 19:34:31 2014 +0800 > >>> > >>> usb: chipidea: udc: Disable auto ZLP generation on ep0 > >>> > >>> > >>> If it still has problem, send me apps if possible (with needed > >>> kernel patches). > >> > >> Note that a UDC should _never_ queue an extra zero-length packet for > >> an OUT transfer, no matter how req->zero is set. In other words, > >> req->zero is supposed to affect only IN transfers. > >> > > Yes UDC gadgets receive packets sent by the host on OUT transfers. If > > ZLT transfers are needed for the protocol, a short transfer is needed > > to end an OUT sequence and it must be sent by the sender, in this case > > the host. The UDC should detect receiving a zero length EP0 OUT and > > that signals the end of the 64 byte transfer from host to gadget. > > > > Regards, Steve > > Thanks Alan, Peter and Steve for your help and quick response. > > In fact, today I tested with a similar patch i.e. have QH_IOS and QH_ZLT set for > control endpoint in udc.c. The 64 byte transfer appears to work fine. > > I am not sure whether this is the ideal solution, Testing some more to ensure > that there are no regressions. I will send out an update in about a day. > The most probably is the QH_ZLT bit, your tree may not the patch I mentioned above. The QH_IOS only affects a setup being received. Peter ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥