]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
musb_hdrc: Mask tusb interrupts while being handled
authorTony Lindgren <tony@atomide.com>
Mon, 11 Jun 2007 07:48:00 +0000 (00:48 -0700)
committerTony Lindgren <tony@atomide.com>
Mon, 11 Jun 2007 09:59:51 +0000 (02:59 -0700)
This should allow using both edge or level GPIO interrupts.

Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/usb/musb/tusb6010.c

index 21defbb749990934e1440c04ca8c688f484fa1db..0029724c4ee702d82fa1567c0a8c8f30a812759d 100644 (file)
@@ -722,10 +722,14 @@ static irqreturn_t tusb_interrupt(int irq, void *__hci)
        struct musb     *musb = __hci;
        void __iomem    *base = musb->ctrl_base;
        unsigned long   flags;
-       u32             int_src;
+       u32             int_mask, int_src;
 
        spin_lock_irqsave(&musb->Lock, flags);
 
+       /* Mask all interrupts to allow using both edge and level GPIO irq */
+       int_mask = musb_readl(base, TUSB_INT_MASK);
+       musb_writel(base, TUSB_INT_MASK, ~TUSB_INT_MASK_RESERVED_BITS);
+
        int_src = musb_readl(base, TUSB_INT_SRC) & ~TUSB_INT_SRC_RESERVED_BITS;
        DBG(3, "TUSB IRQ %08x\n", int_src);
 
@@ -813,6 +817,8 @@ static irqreturn_t tusb_interrupt(int irq, void *__hci)
                int_src & ~TUSB_INT_MASK_RESERVED_BITS);
 
        musb_platform_try_idle(musb);
+
+       musb_writel(base, TUSB_INT_MASK, int_mask);
        spin_unlock_irqrestore(&musb->Lock, flags);
 
        return IRQ_HANDLED;