|
@@ -756,7 +756,13 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
|
|
|
/* general endpoint setup */
|
|
|
if (epnum) {
|
|
|
/* flush all old state, set default */
|
|
|
- musb_h_tx_flush_fifo(hw_ep);
|
|
|
+ /*
|
|
|
+ * We could be flushing valid
|
|
|
+ * packets in double buffering
|
|
|
+ * case
|
|
|
+ */
|
|
|
+ if (!hw_ep->tx_double_buffered)
|
|
|
+ musb_h_tx_flush_fifo(hw_ep);
|
|
|
|
|
|
/*
|
|
|
* We must not clear the DMAMODE bit before or in
|
|
@@ -773,11 +779,13 @@ static void musb_ep_program(struct musb *musb, u8 epnum,
|
|
|
);
|
|
|
csr |= MUSB_TXCSR_MODE;
|
|
|
|
|
|
- if (usb_gettoggle(urb->dev, qh->epnum, 1))
|
|
|
- csr |= MUSB_TXCSR_H_WR_DATATOGGLE
|
|
|
- | MUSB_TXCSR_H_DATATOGGLE;
|
|
|
- else
|
|
|
- csr |= MUSB_TXCSR_CLRDATATOG;
|
|
|
+ if (!hw_ep->tx_double_buffered) {
|
|
|
+ if (usb_gettoggle(urb->dev, qh->epnum, 1))
|
|
|
+ csr |= MUSB_TXCSR_H_WR_DATATOGGLE
|
|
|
+ | MUSB_TXCSR_H_DATATOGGLE;
|
|
|
+ else
|
|
|
+ csr |= MUSB_TXCSR_CLRDATATOG;
|
|
|
+ }
|
|
|
|
|
|
musb_writew(epio, MUSB_TXCSR, csr);
|
|
|
/* REVISIT may need to clear FLUSHFIFO ... */
|