[PATCH] USB: net2280: check for shared IRQs
[pandora-kernel.git] / drivers / usb / gadget / net2280.c
index 6a4b93a..b2d507f 100644 (file)
@@ -2166,7 +2166,7 @@ static void handle_ep_small (struct net2280_ep *ep)
                                        ep->stopped = 1;
                                        set_halt (ep);
                                        mode = 2;
-                               } else if (!req && ep->stopped)
+                               } else if (!req && !ep->stopped)
                                        write_fifo (ep, NULL);
                        }
                } else {
@@ -2280,9 +2280,7 @@ static void handle_ep_small (struct net2280_ep *ep)
                /* if we wrote it all, we're usually done */
                if (req->req.actual == req->req.length) {
                        if (ep->num == 0) {
-                               /* wait for control status */
-                               if (mode != 2)
-                                       req = NULL;
+                               /* send zlps until the status stage */
                        } else if (!req->req.zero || len != ep->ep.maxpacket)
                                mode = 2;
                }
@@ -2744,6 +2742,10 @@ static irqreturn_t net2280_irq (int irq, void *_dev, struct pt_regs * r)
 {
        struct net2280          *dev = _dev;
 
+       /* shared interrupt, not ours */
+       if (!(readl(&dev->regs->irqstat0) & (1 << INTA_ASSERTED)))
+               return IRQ_NONE;
+
        spin_lock (&dev->lock);
 
        /* handle disconnect, dma, and more */