fotg210-udc: Fix EP0 IN requests bigger than two packets
authorFabian Vogt <fabian@ritter-vogt.de>
Wed, 24 Mar 2021 14:11:10 +0000 (15:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Mar 2021 13:43:47 +0000 (14:43 +0100)
For a 134 Byte packet, it sends the first two 64 Byte packets just fine,
but then notice that less than a packet is remaining and call fotg210_done
without actually sending the rest.

Fixes: b84a8dee23fd ("usb: gadget: add Faraday fotg210_udc driver")
Signed-off-by: Fabian Vogt <fabian@ritter-vogt.de>
Link: https://lore.kernel.org/r/20210324141115.9384-3-fabian@ritter-vogt.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/udc/fotg210-udc.c

index 3926000..345827c 100644 (file)
@@ -820,7 +820,7 @@ static void fotg210_ep0in(struct fotg210_udc *fotg210)
                if (req->req.length)
                        fotg210_start_dma(ep, req);
 
-               if ((req->req.length - req->req.actual) < ep->ep.maxpacket)
+               if (req->req.actual == req->req.length)
                        fotg210_done(ep, req, 0);
        } else {
                fotg210_set_cxdone(fotg210);