From: Felipe Balbi Date: Wed, 22 Jun 2011 14:28:10 +0000 (+0300) Subject: usb: gadget: allow multiple gadgets to be built X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=193ab2a6070039e7ee2b9b9bebea754a7c52fd1b;p=linux-beck.git 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: Felipe Balbi Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index 48f1781352f1..8cd999a217b6 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -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" diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 86f64caeafc1..46a253adde31 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -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. -config USB_RENESAS_USBHS_UDC - tristate - depends on USB_GADGET_RENESAS_USBHS - default USB_GADGET - select USB_GADGET_SELECTED + 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_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 @@ -638,11 +491,11 @@ config USB_GADGET_DUMMY_HCD side is the master; the gadget side is the slave. Gadget drivers can be high, full, or low speed; and they have access to endpoints like those from NET2280, PXA2xx, or SA1100 hardware. - + This may help in some stages of creating a driver to embed in a Linux device, since it lets you debug several parts of the gadget driver without its hardware or drivers being involved. - + Since such a gadget side driver needs to interoperate with a host side Linux-USB device driver, this may help to debug both sides of a USB protocol stack. @@ -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 diff --git a/drivers/usb/renesas_usbhs/Kconfig b/drivers/usb/renesas_usbhs/Kconfig deleted file mode 100644 index b2e64918884c..000000000000 --- a/drivers/usb/renesas_usbhs/Kconfig +++ /dev/null @@ -1,16 +0,0 @@ -# -# 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.