--- zzzz-none-000/linux-2.6.28.10/drivers/usb/musb/tusb6010.c 2009-05-02 18:54:43.000000000 +0000 +++ puma5-6360-529/linux-2.6.28.10/drivers/usb/musb/tusb6010.c 2010-03-30 18:41:51.000000000 +0000 @@ -605,7 +605,7 @@ if (musb->board_mode != MUSB_OTG) { ERR("Changing mode currently only supported in OTG mode\n"); - return -EINVAL; + return; } otg_stat = musb_readl(tbase, TUSB_DEV_OTG_STAT); @@ -740,7 +740,7 @@ break; case OTG_STATE_A_WAIT_VFALL: /* REVISIT this irq triggers during short - * spikes caused by enumeration ... + * spikes causet by enumeration ... */ if (musb->vbuserr_retry) { musb->vbuserr_retry--; @@ -803,7 +803,7 @@ return idle_timeout; } -static irqreturn_t tusb_interrupt(int irq, void *__hci) +static irqreturn_t tusb_interrupt(int irq, void *__hci, struct pt_regs *r) { struct musb *musb = __hci; void __iomem *tbase = musb->ctrl_base; @@ -819,6 +819,7 @@ int_src = musb_readl(tbase, TUSB_INT_SRC) & ~TUSB_INT_SRC_RESERVED_BITS; DBG(3, "TUSB IRQ %08x\n", int_src); + musb->int_regs = r; musb->int_usb = (u8) int_src; /* Acknowledge wake-up source interrupts */ @@ -888,17 +889,15 @@ musb_writel(tbase, TUSB_DMA_INT_CLEAR, dma_src); } - /* EP interrupts. In OCP mode tusb6010 mirrors the MUSB interrupts */ + /* EP interrupts. In OCP mode tusb6010 mirrors the MUSB * interrupts */ if (int_src & (TUSB_INT_SRC_USB_IP_TX | TUSB_INT_SRC_USB_IP_RX)) { u32 musb_src = musb_readl(tbase, TUSB_USBIP_INT_SRC); musb_writel(tbase, TUSB_USBIP_INT_CLEAR, musb_src); musb->int_rx = (((musb_src >> 16) & 0xffff) << 1); musb->int_tx = (musb_src & 0xffff); - } else { - musb->int_rx = 0; - musb->int_tx = 0; - } + } else + musb->int_rx = musb->int_tx = 0; if (int_src & (TUSB_INT_SRC_USB_IP_TX | TUSB_INT_SRC_USB_IP_RX | 0xff)) musb_interrupt(musb); @@ -907,6 +906,8 @@ musb_writel(tbase, TUSB_INT_SRC_CLEAR, int_src & ~TUSB_INT_MASK_RESERVED_BITS); + musb->int_regs = NULL; + musb_platform_try_idle(musb, idle_timeout); musb_writel(tbase, TUSB_INT_MASK, int_mask); @@ -974,7 +975,7 @@ /* disable all IRQs */ musb_writel(tbase, TUSB_INT_MASK, ~TUSB_INT_MASK_RESERVED_BITS); - musb_writel(tbase, TUSB_USBIP_INT_MASK, 0x7fffffff); + musb_writel(tbase, TUSB_USBIP_INT_MASK, 0); musb_writel(tbase, TUSB_DMA_INT_MASK, 0x7fffffff); musb_writel(tbase, TUSB_GPIO_INT_MASK, 0x1ff);