X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=drivers%2Fusb%2Fmusb%2Fmusb_core.c;h=b7e37a5534fb8ef2b0fe9d9c38a29c743f390b32;hp=650a18bc2650081b47bff47675bc618787dafc69;hb=a2a97a039aec50399f02311d742fc3bf8ab7d449;hpb=621367ef474da0e2ec390abbb2251ba192e2312c diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 650a18bc2650..b7e37a5534fb 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1518,17 +1518,22 @@ static irqreturn_t generic_interrupt(int irq, void *__hci) unsigned long flags; irqreturn_t retval = IRQ_NONE; struct musb *musb = __hci; + int i; spin_lock_irqsave(&musb->lock, flags); - musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); - /* SOF is not enabled, but status is still often set */ - musb->int_usb &= ~MUSB_INTR_SOF; - musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); - musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); + for (i = 0; i < 8; i++) { + musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); + /* SOF is not enabled, but status is still often set */ + musb->int_usb &= ~MUSB_INTR_SOF; + musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX); + musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX); - if (musb->int_usb || musb->int_tx || musb->int_rx) - retval = musb_interrupt(musb); + if (musb->int_usb || musb->int_tx || musb->int_rx) + retval = musb_interrupt(musb); + else + break; + } spin_unlock_irqrestore(&musb->lock, flags);