]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/usb/musb/ux500.c
usb: musb: remove generic_interrupt
[karo-tx-linux.git] / drivers / usb / musb / ux500.c
index 5e9053eb4298332a789b06c4ab58f81ffe165b72..286f1be6594acd8c56a5e55e010c69e853adab6a 100644 (file)
@@ -36,6 +36,26 @@ struct ux500_glue {
 };
 #define glue_to_musb(g)        platform_get_drvdata(g->musb)
 
+static irqreturn_t ux500_musb_interrupt(int irq, void *__hci)
+{
+       unsigned long   flags;
+       irqreturn_t     retval = IRQ_NONE;
+       struct musb     *musb = __hci;
+
+       spin_lock_irqsave(&musb->lock, flags);
+
+       musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB);
+       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);
+
+       spin_unlock_irqrestore(&musb->lock, flags);
+
+       return retval;
+}
+
 static int ux500_musb_init(struct musb *musb)
 {
        musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
@@ -44,6 +64,8 @@ static int ux500_musb_init(struct musb *musb)
                return -ENODEV;
        }
 
+       musb->isr = ux500_musb_interrupt;
+
        return 0;
 }