Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 151301
b: refs/heads/master
c: 846099a
h: refs/heads/master
i:
  151299: dbcb3f1
v: v3
  • Loading branch information
Sergei Shtylyov authored and Greg Kroah-Hartman committed Jun 16, 2009
1 parent 7cc9e86 commit b5d625c
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 24 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: 37e3ee991091e08d4902e3d2694c723446a89a8d
refs/heads/master: 846099a61cf549f450178f1fb3e27adcbd9dcfc2
35 changes: 12 additions & 23 deletions trunk/drivers/usb/musb/musb_host.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,35 +321,24 @@ __acquires(musb->lock)
spin_lock(&musb->lock);
}

/* for bulk/interrupt endpoints only */
static inline void
musb_save_toggle(struct musb_hw_ep *ep, int is_in, struct urb *urb)
/* For bulk/interrupt endpoints only */
static inline void musb_save_toggle(struct musb_qh *qh, int is_in,
struct urb *urb)
{
struct usb_device *udev = urb->dev;
void __iomem *epio = qh->hw_ep->regs;
u16 csr;
void __iomem *epio = ep->regs;
struct musb_qh *qh;

/* FIXME: the current Mentor DMA code seems to have
/*
* FIXME: the current Mentor DMA code seems to have
* problems getting toggle correct.
*/

if (is_in || ep->is_shared_fifo)
qh = ep->in_qh;
if (is_in)
csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
else
qh = ep->out_qh;
csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;

if (!is_in) {
csr = musb_readw(epio, MUSB_TXCSR);
usb_settoggle(udev, qh->epnum, 1,
(csr & MUSB_TXCSR_H_DATATOGGLE)
? 1 : 0);
} else {
csr = musb_readw(epio, MUSB_RXCSR);
usb_settoggle(udev, qh->epnum, 0,
(csr & MUSB_RXCSR_H_DATATOGGLE)
? 1 : 0);
}
usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0);
}

/* caller owns controller lock, irqs are blocked */
Expand All @@ -365,7 +354,7 @@ musb_giveback(struct musb_qh *qh, struct urb *urb, int status)
switch (qh->type) {
case USB_ENDPOINT_XFER_BULK:
case USB_ENDPOINT_XFER_INT:
musb_save_toggle(ep, is_in, urb);
musb_save_toggle(qh, is_in, urb);
break;
case USB_ENDPOINT_XFER_ISOC:
if (status == 0 && urb->error_count)
Expand Down Expand Up @@ -1427,7 +1416,7 @@ static void musb_bulk_rx_nak_timeout(struct musb *musb, struct musb_hw_ep *ep)
urb->actual_length += dma->actual_len;
dma->actual_len = 0L;
}
musb_save_toggle(ep, 1, urb);
musb_save_toggle(cur_qh, 1, urb);

/* move cur_qh to end of queue */
list_move_tail(&cur_qh->ring, &musb->in_bulk);
Expand Down

0 comments on commit b5d625c

Please sign in to comment.