From 464d4523644137a349f17f7fbad047653694880f Mon Sep 17 00:00:00 2001 From: "T. S., Anil Kumar" Date: Fri, 24 Sep 2010 13:44:09 +0300 Subject: [PATCH] --- yaml --- r: 213598 b: refs/heads/master c: f8afbf7f2bf3cee0f4fff7cb753ecc9f583972c3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/usb/musb/musb_host.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 284639d40fc9..faf21f2b212c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ae9b2ad2eea729b907ef5dd5e25d1ff8443d03fc +refs/heads/master: f8afbf7f2bf3cee0f4fff7cb753ecc9f583972c3 diff --git a/trunk/drivers/usb/musb/musb_host.c b/trunk/drivers/usb/musb/musb_host.c index 62e39fc57211..4d5bcb4e14d2 100644 --- a/trunk/drivers/usb/musb/musb_host.c +++ b/trunk/drivers/usb/musb/musb_host.c @@ -1120,6 +1120,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) u32 status = 0; void __iomem *mbase = musb->mregs; struct dma_channel *dma; + bool transfer_pending = false; musb_ep_select(mbase, epnum); tx_csr = musb_readw(epio, MUSB_TXCSR); @@ -1280,7 +1281,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) offset = d->offset; length = d->length; } - } else if (dma) { + } else if (dma && urb->transfer_buffer_length == qh->offset) { done = true; } else { /* see if we need to send more data, or ZLP */ @@ -1293,6 +1294,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) if (!done) { offset = qh->offset; length = urb->transfer_buffer_length - offset; + transfer_pending = true; } } } @@ -1312,7 +1314,7 @@ void musb_host_tx(struct musb *musb, u8 epnum) urb->actual_length = qh->offset; musb_advance_schedule(musb, urb, hw_ep, USB_DIR_OUT); return; - } else if (usb_pipeisoc(pipe) && dma) { + } else if ((usb_pipeisoc(pipe) || transfer_pending) && dma) { if (musb_tx_dma_program(musb->dma_controller, hw_ep, qh, urb, offset, length)) { if (is_cppi_enabled() || tusb_dma_omap())