]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
usb: musb: use a Kconfig choice to pick the right DMA method
authorArnd Bergmann <arnd@arndb.de>
Sun, 2 Oct 2011 14:45:45 +0000 (16:45 +0200)
committerFelipe Balbi <balbi@ti.com>
Mon, 12 Dec 2011 09:51:41 +0000 (11:51 +0200)
The logic to allow only one DMA driver in MUSB is currently
flawed, because it also allows picking no DMA driver at all
and also not selecting PIO mode.

Using a choice statement makes this foolproof for now and
also simplifies the Makefile.

Unfortunately, we will have to revisit this when we start
supporting multiple ARM platforms in a single kernel binary,
because at that point we will actually need to select
multiple DMA drivers and pick the right one at run-time.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Felipe Balbi <balbi@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/Kconfig
drivers/usb/musb/Makefile

index 07a03460a598c3bcea675494a2a9009312b5d57b..b1c8a839799cf1a3167f18bbf7c72c0309979b37 100644 (file)
@@ -65,46 +65,57 @@ config USB_MUSB_UX500
 
 endchoice
 
-config MUSB_PIO_ONLY
-       bool 'Disable DMA (always use PIO)'
-       depends on USB_MUSB_HDRC
-       default USB_MUSB_TUSB6010 || USB_MUSB_DA8XX || USB_MUSB_AM35X
+choice
+       prompt 'MUSB DMA mode'
+       default USB_UX500_DMA if USB_MUSB_UX500
+       default USB_INVENTRA_DMA if USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN
+       default USB_TI_CPPI_DMA if USB_MUSB_DAVINCI
+       default USB_TUSB_OMAP_DMA if USB_MUSB_TUSB6010
+       default MUSB_PIO_ONLY if USB_MUSB_TUSB6010 || USB_MUSB_DA8XX || USB_MUSB_AM35X
        help
-         All data is copied between memory and FIFO by the CPU.
-         DMA controllers are ignored.
-
-         Do not select 'n' here unless DMA support for your SOC or board
-         is unavailable (or unstable).  When DMA is enabled at compile time,
-         you can still disable it at run time using the "use_dma=n" module
-         parameter.
+         Unfortunately, only one option can be enabled here. Ideally one
+         should be able to build all these drivers into one kernel to
+         allow using DMA on multiplatform kernels.
 
 config USB_UX500_DMA
-       bool
-       depends on USB_MUSB_HDRC && !MUSB_PIO_ONLY
-       default USB_MUSB_UX500
+       bool 'ST Ericsson U8500 and U5500'
+       depends on USB_MUSB_HDRC
+       depends on USB_MUSB_UX500
        help
          Enable DMA transfers on UX500 platforms.
 
 config USB_INVENTRA_DMA
-       bool
-       depends on USB_MUSB_HDRC && !MUSB_PIO_ONLY
-       default USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN
+       bool 'Inventra'
+       depends on USB_MUSB_HDRC
+       depends on USB_MUSB_OMAP2PLUS || USB_MUSB_BLACKFIN
        help
          Enable DMA transfers using Mentor's engine.
 
 config USB_TI_CPPI_DMA
-       bool
-       depends on USB_MUSB_HDRC && !MUSB_PIO_ONLY
-       default USB_MUSB_DAVINCI
+       bool 'TI CPPI (Davinci)'
+       depends on USB_MUSB_HDRC
+       depends on USB_MUSB_DAVINCI
        help
          Enable DMA transfers when TI CPPI DMA is available.
 
 config USB_TUSB_OMAP_DMA
-       bool
-       depends on USB_MUSB_HDRC && !MUSB_PIO_ONLY
+       bool 'TUSB 6010'
+       depends on USB_MUSB_HDRC
        depends on USB_MUSB_TUSB6010
        depends on ARCH_OMAP
-       default y
        help
          Enable DMA transfers on TUSB 6010 when OMAP DMA is available.
 
+config MUSB_PIO_ONLY
+       bool 'Disable DMA (always use PIO)'
+       depends on USB_MUSB_HDRC
+       help
+         All data is copied between memory and FIFO by the CPU.
+         DMA controllers are ignored.
+
+         Do not choose this unless DMA support for your SOC or board
+         is unavailable (or unstable).  When DMA is enabled at compile time,
+         you can still disable it at run time using the "use_dma=n" module
+         parameter.
+
+endchoice
index d8fd9d092dec55a4691e9c41124f60e08b540c9c..88bfb9dee4bf95bd4c808f6d48b690f635c5afda 100644 (file)
@@ -24,25 +24,7 @@ obj-$(CONFIG_USB_MUSB_UX500)                 += ux500.o
 # PIO only, or DMA (several potential schemes).
 # though PIO is always there to back up DMA, and for ep0
 
-ifneq ($(CONFIG_MUSB_PIO_ONLY),y)
-
-  ifeq ($(CONFIG_USB_INVENTRA_DMA),y)
-    musb_hdrc-y                        += musbhsdma.o
-
-  else
-    ifeq ($(CONFIG_USB_TI_CPPI_DMA),y)
-      musb_hdrc-y              += cppi_dma.o
-
-    else
-      ifeq ($(CONFIG_USB_TUSB_OMAP_DMA),y)
-       musb_hdrc-y             += tusb6010_omap.o
-
-      else
-        ifeq ($(CONFIG_USB_UX500_DMA),y)
-         musb_hdrc-y           += ux500_dma.o
-
-        endif
-      endif
-    endif
-  endif
-endif
+musb_hdrc-$(CONFIG_USB_INVENTRA_DMA)           += musbhsdma.o
+musb_hdrc-$(CONFIG_USB_TI_CPPI_DMA)            += cppi_dma.o
+musb_hdrc-$(CONFIG_USB_TUSB_OMAP_DMA)          += tusb6010_omap.o
+musb_hdrc-$(CONFIG_USB_UX500_DMA)              += ux500_dma.o