aboutsummaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorPraveena Nadahally <praveen.nadahally@stericsson.com>2011-03-05 15:31:14 +0530
committerSrinidhi KASAGAR <srinidhi.kasagar@stericsson.com>2011-03-08 05:37:51 +0100
commit0508cc6567bb6f51f7b557a072fc8a6ab9cd8b2a (patch)
treebc1778b0d2880f7e47d4a920d9533627892fae20 /drivers/usb
parente673258842da76577b81903ac2dad10a81b782ff (diff)
ux8500: USB: Full speed bulk split
In case of full speed mode with double buffering, bulk split does not work as defined. Hence in case of FS, return the EP size instead of EP FIFO size. ST-Ericsson ID: ER 323543 Change-Id: I29e107d6de298d5563a91d562e931759db543b84 Signed-off-by: Praveena Nadahally <praveen.nadahally@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/17674
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/musb/musb_gadget.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index e394676d5dd..b3e4f95ea1b 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -148,7 +148,8 @@ __acquires(ep->musb->lock)
#endif
#ifdef CONFIG_USB_U8500_DMA
if (is_dma_capable() && !(req->request.actual < ep->packet_sz)
- && musb_gadget_use_dma(ep->hw_ep->epnum)) {
+ && musb_gadget_use_dma(ep->hw_ep->epnum)
+ && (ep->packet_sz >= DMA_PACKET_THRESHOLD)) {
#else
if (is_dma_capable()) {
#endif
@@ -241,7 +242,20 @@ static void nuke(struct musb_ep *ep, const int status)
static inline int max_ep_writesize(struct musb *musb, struct musb_ep *ep)
{
+#ifdef CONFIG_USB_U8500_DMA
+ /*
+ * In case of full speed mode with double buffering, bulk split
+ * does not work as defined. Hence in case of FS, return the EP
+ * size instead of EP FIFO size.
+ */
+ u8 power;
+
+ power = musb_readb(musb->mregs, MUSB_POWER);
+
+ if (can_bulk_split(musb, ep->type) && (power & MUSB_POWER_HSMODE))
+#else
if (can_bulk_split(musb, ep->type))
+#endif
return ep->hw_ep->max_packet_sz_tx;
else
return ep->packet_sz;
@@ -344,8 +358,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
use_dma = (request->dma != DMA_ADDR_INVALID);
#ifdef CONFIG_USB_U8500_DMA
- if (request->length >= musb_ep->packet_sz) {
-
+ if (request->length >= DMA_PACKET_THRESHOLD) {
csr |= (MUSB_TXCSR_AUTOSET|
MUSB_TXCSR_DMAENAB
| MUSB_TXCSR_DMAMODE