aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/net2280.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/usb/gadget/net2280.c b/drivers/usb/gadget/net2280.c
index 6a4b93ad1082..0b9293493957 100644
--- a/drivers/usb/gadget/net2280.c
+++ b/drivers/usb/gadget/net2280.c
@@ -2166,7 +2166,7 @@ static void handle_ep_small (struct net2280_ep *ep)
2166 ep->stopped = 1; 2166 ep->stopped = 1;
2167 set_halt (ep); 2167 set_halt (ep);
2168 mode = 2; 2168 mode = 2;
2169 } else if (!req && ep->stopped) 2169 } else if (!req && !ep->stopped)
2170 write_fifo (ep, NULL); 2170 write_fifo (ep, NULL);
2171 } 2171 }
2172 } else { 2172 } else {
@@ -2280,9 +2280,7 @@ static void handle_ep_small (struct net2280_ep *ep)
2280 /* if we wrote it all, we're usually done */ 2280 /* if we wrote it all, we're usually done */
2281 if (req->req.actual == req->req.length) { 2281 if (req->req.actual == req->req.length) {
2282 if (ep->num == 0) { 2282 if (ep->num == 0) {
2283 /* wait for control status */ 2283 /* send zlps until the status stage */
2284 if (mode != 2)
2285 req = NULL;
2286 } else if (!req->req.zero || len != ep->ep.maxpacket) 2284 } else if (!req->req.zero || len != ep->ep.maxpacket)
2287 mode = 2; 2285 mode = 2;
2288 } 2286 }
@@ -2744,6 +2742,10 @@ static irqreturn_t net2280_irq (int irq, void *_dev, struct pt_regs * r)
2744{ 2742{
2745 struct net2280 *dev = _dev; 2743 struct net2280 *dev = _dev;
2746 2744
2745 /* shared interrupt, not ours */
2746 if (!(readl(&dev->regs->irqstat0) & (1 << INTA_ASSERTED)))
2747 return IRQ_NONE;
2748
2747 spin_lock (&dev->lock); 2749 spin_lock (&dev->lock);
2748 2750
2749 /* handle disconnect, dma, and more */ 2751 /* handle disconnect, dma, and more */
@@ -2831,13 +2833,13 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2831 } 2833 }
2832 2834
2833 /* alloc, and start init */ 2835 /* alloc, and start init */
2834 dev = kmalloc (sizeof *dev, SLAB_KERNEL); 2836 dev = kzalloc (sizeof *dev, SLAB_KERNEL);
2835 if (dev == NULL){ 2837 if (dev == NULL){
2836 retval = -ENOMEM; 2838 retval = -ENOMEM;
2837 goto done; 2839 goto done;
2838 } 2840 }
2839 2841
2840 memset (dev, 0, sizeof *dev); 2842 pci_set_drvdata (pdev, dev);
2841 spin_lock_init (&dev->lock); 2843 spin_lock_init (&dev->lock);
2842 dev->pdev = pdev; 2844 dev->pdev = pdev;
2843 dev->gadget.ops = &net2280_ops; 2845 dev->gadget.ops = &net2280_ops;
@@ -2950,7 +2952,6 @@ static int net2280_probe (struct pci_dev *pdev, const struct pci_device_id *id)
2950 dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; 2952 dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff;
2951 2953
2952 /* done */ 2954 /* done */
2953 pci_set_drvdata (pdev, dev);
2954 INFO (dev, "%s\n", driver_desc); 2955 INFO (dev, "%s\n", driver_desc);
2955 INFO (dev, "irq %s, pci mem %p, chip rev %04x\n", 2956 INFO (dev, "irq %s, pci mem %p, chip rev %04x\n",
2956 bufp, base, dev->chiprev); 2957 bufp, base, dev->chiprev);