diff options
author | jayashree <jayashree.budihal@stericsson.com> | 2011-04-26 16:38:02 +0530 |
---|---|---|
committer | Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | 2011-04-27 13:28:11 +0200 |
commit | a1994398e3b2b1a0e857615c86c0fbffb5094090 (patch) | |
tree | 3bcf1ed797090c88f080f975933374b7d9a8c4bf /drivers | |
parent | 610369274a70529ed6f68a01a43dc94397080725 (diff) |
usb: musb: complete request after data transfer
Complete the current request only if the data transfer is over.
This patch is back ported from 2.6.38 kernel
(http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=comm
itdiff;h=bb27bc2c1133372b54d00f3077ea4acbbf459045;hp=1018b4e44f4f191c
6e3c631c4eee35d0a112d32b).
ST-Ericsson Linux next:NA
ST-Ericsson ID: 332935
ST-Ericsson FOSS-OUT ID:NA
Signed-off-by: jayashree <jayashree.budihal@stericsson.com>
Change-Id: Iece6a3a6e6f6a97221c7b91a0680ecb4eaa2f92e
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/21359
Tested-by: Jayashree Shashidhar BUDIHAL <jayashree.budihal@stericsson.com>
Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/musb/musb_gadget.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index bcabf84716c..9ac40c4bab9 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -585,30 +585,33 @@ void musb_g_tx(struct musb *musb, u8 epnum) } /* ... or if not, then complete it. */ - musb_g_giveback(musb_ep, request, 0); + if (request->actual == request->length) { + musb_g_giveback(musb_ep, request, 0); - /* - * Kickstart next transfer if appropriate; - * the packet that just completed might not - * be transmitted for hours or days. - * REVISIT for double buffering... - * FIXME revisit for stalls too... - */ - musb_ep_select(mbase, epnum); - csr = musb_readw(epio, MUSB_TXCSR); + /* + * Kickstart next transfer if appropriate; + * the packet that just completed might not + * be transmitted for hours or days. + * REVISIT for double buffering... + * FIXME revisit for stalls too... + */ + musb_ep_select(mbase, epnum); + csr = musb_readw(epio, MUSB_TXCSR); #ifdef CONFIG_ARCH_U8500 - if ((csr & MUSB_TXCSR_FIFONOTEMPTY) && - !(musb_ep->hw_ep->tx_double_buffered)) + if ((csr & MUSB_TXCSR_FIFONOTEMPTY) && + !(musb_ep->hw_ep->tx_double_buffered)) #else - if (csr & MUSB_TXCSR_FIFONOTEMPTY) + if (csr & MUSB_TXCSR_FIFONOTEMPTY) #endif - return; + return; - request = musb_ep->desc ? next_request(musb_ep) : NULL; - if (!request) { - DBG(4, "%s idle now\n", - musb_ep->end_point.name); - return; + request = + musb_ep->desc ? next_request(musb_ep) : NULL; + if (!request) { + DBG(4, "%s idle now\n", + musb_ep->end_point.name); + return; + } } } |