usb: musb: unmap dma buffer when switching to PIO
authorHema Kalliguddi <hemahk@ti.com>
Mon, 15 Nov 2010 10:24:01 +0000 (04:24 -0600)
committerFelipe Balbi <balbi@ti.com>
Mon, 22 Nov 2010 10:36:48 +0000 (12:36 +0200)
commit92d2711f5dc15bf956546923a5718e74853f9912
tree40d27b4757171130ccc03106b579f5a4d3425871
parent3561d43fd289f590fdae672e5eb831b8d5cf0bf6
usb: musb: unmap dma buffer when switching to PIO

Buffer is mapped to dma when dma channel is
allocated. If, for some reason, dma channel
programming fails, musb code will fallback
to PIO mode to transfer that request. In
that case, we need to unmap the buffer
back to CPU.

MUSB RTL1.8 and above cannot handle buffers
which are not 32bit aligned. That happens to
every request sent by g_ether gadget
driver. Since the buffer sent was unaligned,
we need to fallback to PIO.

Because of that, g_ether was failing due
to missing buffer unmapping.

With this patch and [1] g_ether works fine
with all MUSB revisions.

Verified with OMAP3630 board, which has
MUSB RTL1.8 using g_ether and g_zero.

[1] http://www.spinics.net/lists/linux-usb/msg38400.html

Signed-off-by: Hema HK <hemahk@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_gadget.c