Skip to content

Commit

Permalink
USB: imx_udc: Fix IMX UDC gadget ep0 irq handling
Browse files Browse the repository at this point in the history
Fix ep0 interrupt handling in IMX UDC Gadget.

Signed-off-by: Darius Augulis <augulis.darius@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Darius Augulis authored and Greg Kroah-Hartman committed Mar 24, 2009
1 parent 593bef6 commit d24921a
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/usb/gadget/imx_udc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1133,6 +1133,7 @@ static irqreturn_t imx_udc_irq(int irq, void *dev)
static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
{
struct imx_udc_struct *imx_usb = dev;
struct imx_ep_struct *imx_ep = &imx_usb->imx_ep[0];
int intr = __raw_readl(imx_usb->base + USB_EP_INTR(0));

dump_ep_intr(__func__, 0, intr, imx_usb->dev);
Expand All @@ -1142,16 +1143,15 @@ static irqreturn_t imx_udc_ctrl_irq(int irq, void *dev)
return IRQ_HANDLED;
}

/* DEVREQ IRQ has highest priority */
/* DEVREQ has highest priority */
if (intr & (EPINTR_DEVREQ | EPINTR_MDEVREQ))
handle_ep0_devreq(imx_usb);
/* Seem i.MX is missing EOF interrupt sometimes.
* Therefore we monitor both EOF and FIFO_EMPTY interrups
* when transmiting, and both EOF and FIFO_FULL when
* receiving data.
* Therefore we don't monitor EOF.
* We call handle_ep0() only if a request is queued for ep0.
*/
else if (intr & (EPINTR_EOF | EPINTR_FIFO_EMPTY | EPINTR_FIFO_FULL))
handle_ep0(&imx_usb->imx_ep[0]);
else if (!list_empty(&imx_ep->queue))
handle_ep0(imx_ep);

__raw_writel(intr, imx_usb->base + USB_EP_INTR(0));

Expand Down

0 comments on commit d24921a

Please sign in to comment.