Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 265122
b: refs/heads/master
c: 0c70840
h: refs/heads/master
v: v3
  • Loading branch information
Neil Zhang authored and Felipe Balbi committed Oct 13, 2011
1 parent eecd565 commit 906c5d5
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 28 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 615268b05f6c719f5151c351022aa79ab73a0898
refs/heads/master: 0c70840b22d9f3b762f21a28bface1a42c0c5ba2
45 changes: 18 additions & 27 deletions trunk/drivers/usb/gadget/mv_udc_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,37 +681,28 @@ static void mv_ep_fifo_flush(struct usb_ep *_ep)
{
struct mv_udc *udc;
u32 bit_pos, direction;
struct mv_ep *ep = container_of(_ep, struct mv_ep, ep);
struct mv_ep *ep;
unsigned int loops;

if (!_ep)
return;

ep = container_of(_ep, struct mv_ep, ep);
if (!ep->desc)
return;

udc = ep->udc;
direction = ep_dir(ep);
bit_pos = 1 << ((direction == EP_DIR_OUT ? 0 : 16) + ep->ep_num);
/*
* Flushing will halt the pipe
* Write 1 to the Flush register
*/
writel(bit_pos, &udc->op_regs->epflush);

/* Wait until flushing completed */
loops = LOOPS(FLUSH_TIMEOUT);
while (readl(&udc->op_regs->epflush) & bit_pos) {
/*
* ENDPTFLUSH bit should be cleared to indicate this
* operation is complete
*/
if (loops == 0) {
dev_err(&udc->dev->dev,
"TIMEOUT for ENDPTFLUSH=0x%x, bit_pos=0x%x\n",
(unsigned)readl(&udc->op_regs->epflush),
(unsigned)bit_pos);
return;
}
loops--;
udelay(LOOPS_USEC);
}
if (ep->ep_num == 0)
bit_pos = (1 << 16) | 1;
else if (direction == EP_DIR_OUT)
bit_pos = 1 << ep->ep_num;
else
bit_pos = 1 << (16 + ep->ep_num);

loops = LOOPS(EPSTATUS_TIMEOUT);
while (readl(&udc->op_regs->epstatus) & bit_pos) {
do {
unsigned int inter_loops;

if (loops == 0) {
Expand All @@ -726,7 +717,7 @@ static void mv_ep_fifo_flush(struct usb_ep *_ep)

/* Wait until flushing completed */
inter_loops = LOOPS(FLUSH_TIMEOUT);
while (readl(&udc->op_regs->epflush) & bit_pos) {
while (readl(&udc->op_regs->epflush)) {
/*
* ENDPTFLUSH bit should be cleared to indicate this
* operation is complete
Expand All @@ -743,7 +734,7 @@ static void mv_ep_fifo_flush(struct usb_ep *_ep)
udelay(LOOPS_USEC);
}
loops--;
}
} while (readl(&udc->op_regs->epstatus) & bit_pos);
}

/* queues (submits) an I/O request to an endpoint */
Expand Down

0 comments on commit 906c5d5

Please sign in to comment.