linux/drivers/usb/musb
Sergei Shtylyov 6b6e97107f USB: musb: fix isochronous TXDMA (take 2)
Multi-frame isochronous TX URBs transfers in DMA mode never
complete with CPPI DMA because musb_host_tx() doesn't restart
DMA on the second frame, only emitting a debug message.
With Inventra DMA they complete, but in PIO mode.  To fix:

 - Factor out programming of the DMA transfer from
   musb_ep_program() into musb_tx_dma_program();

 - Reorder the code at the end of musb_host_tx() to
   facilitate the fallback to PIO iff DMA fails;

 - Handle the buffer offset consistently for both
   PIO and DMA modes;

 - Add an argument to musb_ep_program() for the same
   reason (it only worked correctly with non-zero
   offset of the first frame in PIO mode);

 - Set the completed isochronous frame descriptor's
   'actual_length' and 'status' fields correctly in
   DMA mode.

Also, since CPPI reportedly doesn't like sending isochronous
packets in the RNDIS mode, change the criterion for this
mode to be used only for multi-packet transfers.  (There's
no need for that mode in the single-packet case anyway.)

[ dbrownell@users.sourceforge.net: split comment paragraph
into bullet list, shrink patch delta, style tweaks ]

Signed-off-by: Pavel Kiryukhin <pkiryukhin@ru.mvista.com>
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-04-17 10:50:26 -07:00
..
blackfin.c USB: musb: Kill some compiling warning in musb Blackfin part 2009-01-07 10:00:08 -08:00
blackfin.h USB: musb: add Blackfin driver to MUSB framework (v2) 2009-01-07 10:00:07 -08:00
cppi_dma.c USB: musb: fix isochronous TXDMA (take 2) 2009-04-17 10:50:26 -07:00
cppi_dma.h usb: musb_hdrc build fixes 2008-10-17 14:40:59 -07:00
davinci.c USB: musb: partial DaVinci dm355 support 2009-03-24 16:20:36 -07:00
davinci.h USB: musb: partial DaVinci dm355 support 2009-03-24 16:20:36 -07:00
Kconfig USB: musb: partial DaVinci dm355 support 2009-03-24 16:20:36 -07:00
Makefile USB: musb: add Blackfin Kconfig options and Makefile 2009-01-07 10:00:08 -08:00
musb_core.c USB: musb: only turn off vbus in OTG hosts 2009-03-24 16:20:36 -07:00
musb_core.h USB: musb: fix init oops crash with static FIFO config 2009-03-24 16:20:36 -07:00
musb_debug.h usb: musb: fix debug global variable name 2008-11-13 14:45:01 -08:00
musb_dma.h USB: Add MUSB and TUSB support 2008-08-13 17:33:00 -07:00
musb_gadget_ep0.c usb: musb: do not mess up count number and CSR0 register value 2008-10-17 14:40:59 -07:00
musb_gadget.c USB: musb: sanitize clearing TXCSR DMA bits (take 2) 2009-04-17 10:50:25 -07:00
musb_gadget.h USB: Add MUSB and TUSB support 2008-08-13 17:33:00 -07:00
musb_host.c USB: musb: fix isochronous TXDMA (take 2) 2009-04-17 10:50:26 -07:00
musb_host.h usb: musb: fix BULK request on different available endpoints 2008-11-13 14:45:01 -08:00
musb_io.h USB: musb: Blackfin provides read/write I/O accessor in header files 2009-01-07 10:00:08 -08:00
musb_regs.h USB: musb: add Blackfin specific configuration to MUSB 2009-01-07 10:00:07 -08:00
musb_virthub.c USB: replace uses of __constant_{endian} 2009-03-24 16:20:33 -07:00
musbhsdma.c USB: musb: sanitize clearing TXCSR DMA bits (take 2) 2009-04-17 10:50:25 -07:00
musbhsdma.h USB: musb: enable low level DMA operation for Blackfin 2009-01-07 10:00:07 -08:00
omap2430.c USB: musb: minor locking fix 2009-01-07 09:59:59 -08:00
omap2430.h usb: musb: fix include path 2008-09-23 13:58:08 -07:00
tusb6010_omap.c USB: musb: tusb6010 buildfix 2009-01-27 16:15:33 -08:00
tusb6010.c USB: musb: sysfs mode updates 2009-01-07 09:59:58 -08:00
tusb6010.h usb: musb: pass configuration specifics via pdata 2008-08-13 17:33:01 -07:00