Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 193ab2a6 authored by Felipe Balbi's avatar Felipe Balbi Committed by Greg Kroah-Hartman
Browse files

usb: gadget: allow multiple gadgets to be built



now that we have the udc class, we can allow
multiple gadget controller drivers to be
compiled as modules. This will allow for
distro-like kernels for embedded devices.

With this patch, I managed to build an x86
kernel with support for many of the controllers
enabled:

CONFIG_USB_FUSB300=m
CONFIG_USB_R8A66597=m
CONFIG_USB_M66592=m
CONFIG_USB_AMD5536UDC=m
CONFIG_USB_CI13XXX_PCI=m
CONFIG_USB_NET2272=m
CONFIG_USB_NET2280=m
CONFIG_USB_GOKU=m
CONFIG_USB_LANGWELL=m
CONFIG_USB_EG20T=m

Also an ARM kernel with support for many controllers:

CONFIG_USB_FUSB300=m
CONFIG_USB_OMAP=m
CONFIG_USB_R8A66597=m
CONFIG_USB_GADGET_MUSB_HDRC=m
CONFIG_USB_M66592=m
CONFIG_USB_NET2272=m
CONFIG_USB_DUMMY_HCD=m

The next step would be to get rid of the
direct access to arch/ and mach/ directories
on some gadget controllers so that we can
build all of them without depending on their
respective ARCH_* symbols.

Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ee34e51a
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -118,8 +118,6 @@ source "drivers/usb/host/Kconfig"

source "drivers/usb/musb/Kconfig"

source "drivers/usb/renesas_usbhs/Kconfig"

source "drivers/usb/class/Kconfig"

source "drivers/usb/storage/Kconfig"
+66 −219
Original line number Diff line number Diff line
@@ -96,9 +96,6 @@ config USB_GADGET_VBUS_DRAW
	   This value will be used except for system-specific gadget
	   drivers that have more specific information.

config	USB_GADGET_SELECTED
	boolean

#
# USB Peripheral Controller Support
#
@@ -122,10 +119,9 @@ choice
# Integrated controllers
#

config USB_GADGET_AT91
	boolean "Atmel AT91 USB Device Port"
config USB_AT91
	tristate "Atmel AT91 USB Device Port"
	depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9 && !ARCH_AT91SAM9G45
	select USB_GADGET_SELECTED
	help
	   Many Atmel AT91 processors (such as the AT91RM2000) have a
	   full speed USB Device Port with support for five configurable
@@ -135,27 +131,16 @@ config USB_GADGET_AT91
	   dynamically linked module called "at91_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_AT91
	tristate
	depends on USB_GADGET_AT91
	default USB_GADGET

config USB_GADGET_ATMEL_USBA
	boolean "Atmel USBA"
config USB_ATMEL_USBA
	tristate "Atmel USBA"
	select USB_GADGET_DUALSPEED
	depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
	help
	  USBA is the integrated high-speed USB Device controller on
	  the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.

config USB_ATMEL_USBA
	tristate
	depends on USB_GADGET_ATMEL_USBA
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_FSL_USB2
	boolean "Freescale Highspeed USB DR Peripheral Controller"
config USB_FSL_USB2
	tristate "Freescale Highspeed USB DR Peripheral Controller"
	depends on FSL_SOC || ARCH_MXC
	select USB_GADGET_DUALSPEED
	select USB_FSL_MPH_DR_OF if OF
@@ -170,26 +155,14 @@ config USB_GADGET_FSL_USB2
	   dynamically linked module called "fsl_usb2_udc" and force
	   all gadget drivers to also be dynamically linked.

config USB_FSL_USB2
	tristate
	depends on USB_GADGET_FSL_USB2
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_FUSB300
	boolean "Faraday FUSB300 USB Peripheral Controller"
config USB_FUSB300
	tristate "Faraday FUSB300 USB Peripheral Controller"
	select USB_GADGET_DUALSPEED
	help
	   Faraday usb device controller FUSB300 driver

config USB_FUSB300
	tristate
	depends on USB_GADGET_FUSB300
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_OMAP
	boolean "OMAP USB Device Controller"
config USB_OMAP
	tristate "OMAP USB Device Controller"
	depends on ARCH_OMAP
	select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3 || MACH_OMAP_H4_OTG
	select USB_OTG_UTILS if ARCH_OMAP
@@ -204,14 +177,8 @@ config USB_GADGET_OMAP
	   dynamically linked module called "omap_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_OMAP
	tristate
	depends on USB_GADGET_OMAP
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_PXA25X
	boolean "PXA 25x or IXP 4xx"
config USB_PXA25X
	tristate "PXA 25x or IXP 4xx"
	depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
	select USB_OTG_UTILS
	help
@@ -226,24 +193,18 @@ config USB_GADGET_PXA25X
	   dynamically linked module called "pxa25x_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA25X
	tristate
	depends on USB_GADGET_PXA25X
	default USB_GADGET
	select USB_GADGET_SELECTED

# if there's only one gadget driver, using only two bulk endpoints,
# don't waste memory for the other endpoints
config USB_PXA25X_SMALL
	depends on USB_GADGET_PXA25X
	depends on USB_PXA25X
	bool
	default n if USB_ETH_RNDIS
	default y if USB_ZERO
	default y if USB_ETH
	default y if USB_G_SERIAL

config USB_GADGET_R8A66597
	boolean "Renesas R8A66597 USB Peripheral Controller"
config USB_R8A66597
	tristate "Renesas R8A66597 USB Peripheral Controller"
	select USB_GADGET_DUALSPEED
	help
	   R8A66597 is a discrete USB host and peripheral controller chip that
@@ -254,32 +215,20 @@ config USB_GADGET_R8A66597
	   dynamically linked module called "r8a66597_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_R8A66597
	tristate
	depends on USB_GADGET_R8A66597
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_RENESAS_USBHS
	boolean "Renesas USBHS"
	depends on USB_RENESAS_USBHS
	select USB_GADGET_DUALSPEED
config USB_RENESAS_USBHS
	tristate 'Renesas USBHS controller'
	depends on SUPERH || ARCH_SHMOBILE
	help
	   Renesas USBHS is a discrete USB host and peripheral controller
	   chip that supports both full and high speed USB 2.0 data transfers.
	   platform is able to configure endpoint (pipe) style

	   Say "y" to enable the gadget specific portion of the USBHS driver.
	   Renesas USBHS is a discrete USB host and peripheral controller chip
	   that supports both full and high speed USB 2.0 data transfers.
	   It has nine or more configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "renesas_usbhs" and force all
	   gadget drivers to also be dynamically linked.

config USB_RENESAS_USBHS_UDC
	tristate
	depends on USB_GADGET_RENESAS_USBHS
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_PXA27X
	boolean "PXA 27x"
config USB_PXA27X
	tristate "PXA 27x"
	depends on ARCH_PXA && (PXA27x || PXA3xx)
	select USB_OTG_UTILS
	help
@@ -293,14 +242,8 @@ config USB_GADGET_PXA27X
	   dynamically linked module called "pxa27x_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_PXA27X
	tristate
	depends on USB_GADGET_PXA27X
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_S3C_HSOTG
	boolean "S3C HS/OtG USB Device controller"
config USB_S3C_HSOTG
	tristate "S3C HS/OtG USB Device controller"
	depends on S3C_DEV_USB_HSOTG
	select USB_GADGET_S3C_HSOTG_PIO
	select USB_GADGET_DUALSPEED
@@ -308,14 +251,8 @@ config USB_GADGET_S3C_HSOTG
	  The Samsung S3C64XX USB2.0 high-speed gadget controller
	  integrated into the S3C64XX series SoC.

config USB_S3C_HSOTG
	tristate
	depends on USB_GADGET_S3C_HSOTG
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_IMX
	boolean "Freescale IMX USB Peripheral Controller"
config USB_IMX
	tristate "Freescale IMX USB Peripheral Controller"
	depends on ARCH_MX1
	help
	   Freescale's IMX series include an integrated full speed
@@ -329,14 +266,8 @@ config USB_GADGET_IMX
	   dynamically linked module called "imx_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_IMX
	tristate
	depends on USB_GADGET_IMX
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_S3C2410
	boolean "S3C2410 USB Device Controller"
config USB_S3C2410
	tristate "S3C2410 USB Device Controller"
	depends on ARCH_S3C2410
	help
	  Samsung's S3C2410 is an ARM-4 processor with an integrated
@@ -346,18 +277,12 @@ config USB_GADGET_S3C2410
	  This driver has been tested on the S3C2410, S3C2412, and
	  S3C2440 processors.

config USB_S3C2410
	tristate
	depends on USB_GADGET_S3C2410
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_S3C2410_DEBUG
	boolean "S3C2410 udc debug messages"
	depends on USB_GADGET_S3C2410
	depends on USB_S3C2410

config USB_GADGET_S3C_HSUDC
	boolean "S3C2416, S3C2443 and S3C2450 USB Device Controller"
config USB_S3C_HSUDC
	tristate "S3C2416, S3C2443 and S3C2450 USB Device Controller"
	depends on ARCH_S3C2410
	select USB_GADGET_DUALSPEED
	help
@@ -367,41 +292,29 @@ config USB_GADGET_S3C_HSUDC

	  This driver has been tested on S3C2416 and S3C2450 processors.

config USB_S3C_HSUDC
	tristate
	depends on USB_GADGET_S3C_HSUDC
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_PXA_U2O
	boolean "PXA9xx Processor USB2.0 controller"
config USB_PXA_U2O
	tristate "PXA9xx Processor USB2.0 controller"
	depends on ARCH_MMP
	select USB_GADGET_DUALSPEED
	help
	  PXA9xx Processor series include a high speed USB2.0 device
	  controller, which support high speed and full speed USB peripheral.

config USB_PXA_U2O
	tristate
	depends on USB_GADGET_PXA_U2O
	default USB_GADGET
	select USB_GADGET_SELECTED

#
# Controllers available in both integrated and discrete versions
#

# musb builds in ../musb along with host support
config USB_GADGET_MUSB_HDRC
	boolean "Inventra HDRC USB Peripheral (TI, ADI, ...)"
	tristate "Inventra HDRC USB Peripheral (TI, ADI, ...)"
	depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG)
	select USB_GADGET_DUALSPEED
	select USB_GADGET_SELECTED
	help
	  This OTG-capable silicon IP is used in dual designs including
	  the TI DaVinci, OMAP 243x, OMAP 343x, TUSB 6010, and ADI Blackfin

config USB_GADGET_M66592
	boolean "Renesas M66592 USB Peripheral Controller"
config USB_M66592
	tristate "Renesas M66592 USB Peripheral Controller"
	select USB_GADGET_DUALSPEED
	help
	   M66592 is a discrete USB peripheral controller chip that
@@ -412,18 +325,12 @@ config USB_GADGET_M66592
	   dynamically linked module called "m66592_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_M66592
	tristate
	depends on USB_GADGET_M66592
	default USB_GADGET
	select USB_GADGET_SELECTED

#
# Controllers available only in discrete form (and all PCI controllers)
#

config USB_GADGET_AMD5536UDC
	boolean "AMD5536 UDC"
config USB_AMD5536UDC
	tristate "AMD5536 UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
@@ -437,14 +344,8 @@ config USB_GADGET_AMD5536UDC
	   dynamically linked module called "amd5536udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_AMD5536UDC
	tristate
	depends on USB_GADGET_AMD5536UDC
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_FSL_QE
	boolean "Freescale QE/CPM USB Device Controller"
config USB_FSL_QE
	tristate "Freescale QE/CPM USB Device Controller"
	depends on FSL_SOC && (QUICC_ENGINE || CPM)
	help
	   Some of Freescale PowerPC processors have a Full Speed
@@ -456,14 +357,8 @@ config USB_GADGET_FSL_QE
	   Set CONFIG_USB_GADGET to "m" to build this driver as a
	   dynamically linked module called "fsl_qe_udc".

config USB_FSL_QE
	tristate
	depends on USB_GADGET_FSL_QE
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_CI13XXX_PCI
	boolean "MIPS USB CI13xxx PCI UDC"
config USB_CI13XXX_PCI
	tristate "MIPS USB CI13xxx PCI UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
@@ -474,14 +369,8 @@ config USB_GADGET_CI13XXX_PCI
	  dynamically linked module called "ci13xxx_udc" and force all
	  gadget drivers to also be dynamically linked.

config USB_CI13XXX_PCI
	tristate
	depends on USB_GADGET_CI13XXX_PCI
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_NET2272
	boolean "PLX NET2272"
config USB_NET2272
	tristate "PLX NET2272"
	select USB_GADGET_DUALSPEED
	help
	  PLX NET2272 is a USB peripheral controller which supports
@@ -493,9 +382,9 @@ config USB_GADGET_NET2272
	  dynamically linked module called "net2272" and force all
	  gadget drivers to also be dynamically linked.

config USB_GADGET_NET2272_DMA
config USB_NET2272_DMA
	boolean "Support external DMA controller"
	depends on USB_GADGET_NET2272
	depends on USB_NET2272
	help
	  The NET2272 part can optionally support an external DMA
	  controller, but your board has to have support in the
@@ -503,14 +392,8 @@ config USB_GADGET_NET2272_DMA

	  If unsure, say "N" here.  The driver works fine in PIO mode.

config USB_NET2272
	tristate
	depends on USB_GADGET_NET2272
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_NET2280
	boolean "NetChip 228x"
config USB_NET2280
	tristate "NetChip 228x"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
@@ -525,14 +408,8 @@ config USB_GADGET_NET2280
	   dynamically linked module called "net2280" and force all
	   gadget drivers to also be dynamically linked.

config USB_NET2280
	tristate
	depends on USB_GADGET_NET2280
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_GOKU
	boolean "Toshiba TC86C001 'Goku-S'"
config USB_GOKU
	tristate "Toshiba TC86C001 'Goku-S'"
	depends on PCI
	help
	   The Toshiba TC86C001 is a PCI device which includes controllers
@@ -545,14 +422,8 @@ config USB_GADGET_GOKU
	   dynamically linked module called "goku_udc" and to force all
	   gadget drivers to also be dynamically linked.

config USB_GOKU
	tristate
	depends on USB_GADGET_GOKU
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_LANGWELL
	boolean "Intel Langwell USB Device Controller"
config USB_LANGWELL
	tristate "Intel Langwell USB Device Controller"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
@@ -566,14 +437,8 @@ config USB_GADGET_LANGWELL
	   dynamically linked module called "langwell_udc" and force all
	   gadget drivers to also be dynamically linked.

config USB_LANGWELL
	tristate
	depends on USB_GADGET_LANGWELL
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_EG20T
	boolean "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH UDC"
config USB_EG20T
	tristate "Intel EG20T PCH/OKI SEMICONDUCTOR ML7213 IOH UDC"
	depends on PCI
	select USB_GADGET_DUALSPEED
	help
@@ -594,14 +459,8 @@ config USB_GADGET_EG20T
	  ML7213 is companion chip for Intel Atom E6xx series.
	  ML7213 is completely compatible for Intel EG20T PCH.

config USB_EG20T
	tristate
	depends on USB_GADGET_EG20T
	default USB_GADGET
	select USB_GADGET_SELECTED

config USB_GADGET_CI13XXX_MSM
	boolean "MIPS USB CI13xxx for MSM"
config USB_CI13XXX_MSM
	tristate "MIPS USB CI13xxx for MSM"
	depends on ARCH_MSM
	select USB_GADGET_DUALSPEED
	select USB_MSM_OTG
@@ -617,18 +476,12 @@ config USB_GADGET_CI13XXX_MSM
	  dynamically linked module called "ci13xxx_msm" and force all
	  gadget drivers to also be dynamically linked.

config USB_CI13XXX_MSM
	tristate
	depends on USB_GADGET_CI13XXX_MSM
	default USB_GADGET
	select USB_GADGET_SELECTED

#
# LAST -- dummy/emulated controller
#

config USB_GADGET_DUMMY_HCD
	boolean "Dummy HCD (DEVELOPMENT)"
config USB_DUMMY_HCD
	tristate "Dummy HCD (DEVELOPMENT)"
	depends on USB=y || (USB=m && USB_GADGET=m)
	select USB_GADGET_DUALSPEED
	select USB_GADGET_SUPERSPEED
@@ -651,12 +504,6 @@ config USB_GADGET_DUMMY_HCD
	  dynamically linked module called "dummy_hcd" and force all
	  gadget drivers to also be dynamically linked.

config USB_DUMMY_HCD
	tristate
	depends on USB_GADGET_DUMMY_HCD
	default USB_GADGET
	select USB_GADGET_SELECTED

# NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
# first and will be selected by default.

@@ -678,7 +525,7 @@ config USB_GADGET_SUPERSPEED
#
choice
	tristate "USB Gadget Drivers"
	depends on USB_GADGET && USB_GADGET_SELECTED
	depends on USB_GADGET
	default USB_ETH
	help
	  A Linux "Gadget Driver" talks to the USB Peripheral Controller

drivers/usb/renesas_usbhs/Kconfig

deleted100644 → 0
+0 −16
Original line number Diff line number Diff line
#
# Renesas USB Controller Drivers
#

config USB_RENESAS_USBHS
	tristate 'Renesas USBHS controller'
	depends on SUPERH || ARCH_SHMOBILE
	default n
	help
	   Renesas USBHS is a discrete USB host and peripheral controller chip
	   that supports both full and high speed USB 2.0 data transfers.
	   It has nine or more configurable endpoints, and endpoint zero.

	   Say "y" to link the driver statically, or "m" to build a
	   dynamically linked module called "renesas_usbhs" and force all
	   gadget drivers to also be dynamically linked.