USB: s3c-hsotg: Only load packet per fifo write
authorBen Dooks <ben-linux@fluff.org>
Mon, 19 Jul 2010 08:40:45 +0000 (09:40 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 10 Aug 2010 21:35:42 +0000 (14:35 -0700)
Limit the IN FIFO write to a single packet per attempt at writing,
as per the specifications and ensure that we don't return fifo-full
so that we can continue writing packets if we have the space.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/s3c-hsotg.c

index 4196e376a346d8459879a5da5d36619ab873703d..df6a39d6270f0ba6b4ad304af725c43d8a402d81 100644 (file)
@@ -538,6 +538,17 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
        if (can_write > 512)
                can_write = 512;
 
+       /* limit the write to one max-packet size worth of data, but allow
+        * the transfer to return that it did not run out of fifo space
+        * doing it. */
+       if (to_write > hs_ep->ep.maxpacket) {
+               to_write = hs_ep->ep.maxpacket;
+
+               s3c_hsotg_en_gsint(hsotg,
+                                  periodic ? S3C_GINTSTS_PTxFEmp :
+                                  S3C_GINTSTS_NPTxFEmp);
+       }
+
        /* see if we can write data */
 
        if (to_write > can_write) {