瀏覽代碼

musb: use dma mode 1 for TX if transfer size equals maxpacket (v2)

Currently, with Inventra DMA, we use Mode 0 if transfer size is less
than or equal to the endpoint's maxpacket size.  This requires that
we explicitly set TXPKTRDY for that transfer.

However the musb_g_tx code will not set TXPKTRDY twice if the last
transfer is exactly equal to maxpacket, even if request->zero is set.
Using Mode 1 will solve this; a better fix might be in musb_g_tx().

Without this change, musb will not correctly send out a ZLP if the
last transfer is the maxpacket size and request->zero is set.

Signed-off-by: Anand Gadiyar <gadiyar@ti.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Anand Gadiyar 16 年之前
父節點
當前提交
d1043a2697
共有 1 個文件被更改,包括 1 次插入1 次删除
  1. 1 1
      drivers/usb/musb/musb_gadget.c

+ 1 - 1
drivers/usb/musb/musb_gadget.c

@@ -310,7 +310,7 @@ static void txstate(struct musb *musb, struct musb_request *req)
 			/* setup DMA, then program endpoint CSR */
 			/* setup DMA, then program endpoint CSR */
 			request_size = min(request->length,
 			request_size = min(request->length,
 						musb_ep->dma->max_len);
 						musb_ep->dma->max_len);
-			if (request_size <= musb_ep->packet_sz)
+			if (request_size < musb_ep->packet_sz)
 				musb_ep->dma->desired_mode = 0;
 				musb_ep->dma->desired_mode = 0;
 			else
 			else
 				musb_ep->dma->desired_mode = 1;
 				musb_ep->dma->desired_mode = 1;