Currently it is possible to build in some subset of usb functions *OR* some gadget module. This is limited only by Kconfig not any functionality. This patch removes this limitation. With this patch it is possible to set up all build combinations: 1) Multiple gadgets build in 2) Part of functions build in, part of functions as a modules 3) Some gadgets build in and some part of functions build in/modules etc. As this patch makes Kconfig quite complicated let me clarify how it works: USB_F_<func name> - used in makefile for compilation USB_CONFIGFS_F_<func name> - Chosen by user in function menu USB_G_<gadget name>_REQ_F_<func name> - set up by gadget to mark that this particular gadget requires this func to work USB_F_<func name>_SELECTOR - helper config which is used to determine if function should be build in or compiled as a module The rules are quite simple: 1) If any of USB_CONFIGFS_F_<func name>, USB_G_*_REQ_F_<func name> equals y, then USB_F_<func name> is set to y and function is build in 2) If none of USB_CONFIGFS_F_<func name>, USB_G_*_REQ_F_<func name> equals y, but any of them equals m then USB_F_<func name> is set to m and function is compiled as a module Signed-off-by: Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx> --- Changes since v1: - fix bugs reported by kbuild - fix copy-paste errors in comments --- drivers/usb/gadget/Kconfig | 674 ++++++++++++++++++++++++++++++------- drivers/usb/gadget/legacy/Kconfig | 126 ++++--- 2 files changed, 610 insertions(+), 190 deletions(-) diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 2057add..bf2e0ab 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -142,174 +142,627 @@ source "drivers/usb/gadget/udc/Kconfig" # composite based drivers config USB_LIBCOMPOSITE - tristate + tristate "USB Gadget Drivers" select CONFIGFS_FS depends on USB_GADGET config USB_F_ACM tristate +# Just a dummy config which indicates that serial gadget requires ACM in particular state +config USB_G_SERIAL_REQ_F_ACM + tristate + +# Just a dummy config which indicates that cdc gadget requires ACM in particular state +config USB_G_CDC_COMPOSITE_REQ_F_ACM + tristate + +# Just a dummy config which indicates that nokia gadget requires ACM in particular state +config USB_G_NOKIA_REQ_F_ACM + tristate + +# Just a dummy config which indicates that acm ms gadget requires ACM in particular state +config USB_G_ACM_MS_REQ_F_ACM + tristate + +# Just a dummy config which indicates that gadget multi requires ACM in particular state +config USB_G_MULTI_REQ_F_ACM + tristate + +if USB_CONFIGFS_F_ACM = y || USB_G_SERIAL_REQ_F_ACM = y || USB_G_CDC_COMPOSITE_REQ_F_ACM = y || USB_G_NOKIA_REQ_F_ACM = y || USB_G_ACM_MS_REQ_F_ACM = y || USB_G_MULTI_REQ_F_ACM = y +config USB_F_ACM_SELECTOR + tristate + default y + select USB_F_ACM + select USB_F_ACM_REQ_U_SERIAL +endif + +if !(USB_CONFIGFS_F_ACM = y || USB_G_SERIAL_REQ_F_ACM = y || USB_G_CDC_COMPOSITE_REQ_F_ACM = y || USB_G_NOKIA_REQ_F_ACM = y || USB_G_ACM_MS_REQ_F_ACM = y || USB_G_MULTI_REQ_F_ACM = y) && (USB_CONFIGFS_F_ACM = m || USB_G_SERIAL_REQ_F_ACM = m || USB_G_CDC_COMPOSITE_REQ_F_ACM = m || USB_G_NOKIA_REQ_F_ACM = m || USB_G_ACM_MS_REQ_F_ACM = m || USB_G_MULTI_REQ_F_ACM = m) +config USB_F_ACM_SELECTOR + tristate + default m + select USB_F_ACM + select USB_F_ACM_REQ_U_SERIAL +endif + config USB_F_SS_LB tristate +# Just a dummy config which indicates that gadget zero requires SS and LB in particular state +config USB_G_ZERO_REQ_F_SS_LB + tristate + +if USB_CONFIGFS_F_SS_LB = y || USB_G_ZERO_REQ_F_SS_LB = y +config USB_F_SS_LB_SELECTOR + tristate + default y + select USB_F_SS_LB +endif + +if !(USB_CONFIGFS_F_SS_LB = y || USB_G_ZERO_REQ_F_SS_LB = y) && (USB_CONFIGFS_F_SS_LB = m || USB_G_ZERO_REQ_F_SS_LB = m) +config USB_F_SS_LB_SELECTOR + tristate + default m + select USB_F_SS_LB +endif + config USB_U_SERIAL tristate +# Just a dummy config which indicates that F_ACM requires U_SERIAL in particular state +config USB_F_ACM_REQ_U_SERIAL + tristate + +# Just a dummy config which indicates that F_SERIAL requires U_SERIAL in particular state +config USB_F_SERIAL_REQ_U_SERIAL + tristate + +# Just a dummy config which indicates that F_OBEX requires U_SERIAL in particular state +config USB_F_OBEX_REQ_U_SERIAL + tristate + +# Just a dummy config which indicates that dbg gadget requires U_SERIAL in particular state +config USB_G_DBG_REQ_U_SERIAL + tristate + +if USB_F_ACM_REQ_U_SERIAL = y || USB_F_SERIAL_REQ_U_SERIAL = y || USB_F_OBEX_REQ_U_SERIAL = y || USB_G_DBG_REQ_U_SERIAL = y +config USB_U_SERIAL_SELECTOR + tristate + default y + select USB_U_SERIAL +endif + +if !(USB_F_ACM_REQ_U_SERIAL = y || USB_F_SERIAL_REQ_U_SERIAL = y || USB_F_OBEX_REQ_U_SERIAL = y || USB_G_DBG_REQ_U_SERIAL = y) && (USB_F_ACM_REQ_U_SERIAL = m || USB_F_SERIAL_REQ_U_SERIAL = m || USB_F_OBEX_REQ_U_SERIAL = m || USB_G_DBG_REQ_U_SERIAL = m) +config USB_U_SERIAL_SELECTOR + tristate + default m + select USB_U_SERIAL +endif + config USB_U_ETHER tristate +# Just a dummy config which indicates that F_NCM requires U_ETHER in particular state +config USB_F_NCM_REQ_U_ETHER + tristate + +# Just a dummy config which indicates that F_ECM requires U_ETHER in particular state +config USB_F_ECM_REQ_U_ETHER + tristate + +# Just a dummy config which indicates that F_SUBSET requires U_ETHER in particular state +config USB_F_SUBSET_REQ_U_ETHER + tristate + +# Just a dummy config which indicates that F_RNDIS requires U_ETHER in particular state +config USB_F_RNDIS_REQ_U_ETHER + tristate + +# Just a dummy config which indicates that F_EEM requires U_ETHER in particular state +config USB_F_EEM_REQ_U_ETHER + tristate + +# Just a dummy config which indicates that F_PHONET requires U_ETHER in particular state +config USB_F_PHONET_REQ_U_ETHER + tristate + +if USB_F_NCM_REQ_U_ETHER = y || USB_F_ECM_REQ_U_ETHER = y || USB_F_SUBSET_REQ_U_ETHER = y || USB_F_RNDIS_REQ_U_ETHER = y || USB_F_EEM_REQ_U_ETHER = y || USB_F_PHONET_REQ_U_ETHER = y +config USB_U_ETHER_SELECTOR + tristate + default y + select USB_U_ETHER +endif + +if !(USB_F_NCM_REQ_U_ETHER = y || USB_F_ECM_REQ_U_ETHER = y || USB_F_SUBSET_REQ_U_ETHER = y || USB_F_RNDIS_REQ_U_ETHER = y || USB_F_EEM_REQ_U_ETHER = y || USB_F_PHONET_REQ_U_ETHER = y) && (USB_F_NCM_REQ_U_ETHER = m || USB_F_ECM_REQ_U_ETHER = m || USB_F_SUBSET_REQ_U_ETHER = m || USB_F_RNDIS_REQ_U_ETHER = m || USB_F_EEM_REQ_U_ETHER = m || USB_F_PHONET_REQ_U_ETHER = m) +config USB_U_ETHER_SELECTOR + tristate + default m + select USB_U_ETHER +endif + config USB_F_SERIAL tristate +# Just a dummy config which indicates that serial gadget requires SERIAL in particular state +config USB_G_SERIAL_REQ_F_SERIAL + tristate + +if USB_CONFIGFS_F_SERIAL = y || USB_G_SERIAL_REQ_F_SERIAL = y +config USB_F_SERIAL_SELECTOR + tristate + default y + select USB_F_SERIAL + select USB_F_SERIAL_REQ_U_SERIAL +endif + +if !(USB_CONFIGFS_F_SERIAL = y || USB_G_SERIAL_REQ_F_SERIAL = y) && (USB_CONFIGFS_F_SERIAL = m || USB_G_SERIAL_REQ_F_SERIAL = m) +config USB_F_SERIAL_SELECTOR + tristate + default m + select USB_F_SERIAL + select USB_F_SERIAL_REQ_U_SERIAL +endif + config USB_F_OBEX tristate +# Just a dummy config which indicates that serial gadget requires OBEX in particular state +config USB_G_SERIAL_REQ_F_OBEX + tristate + +# Just a dummy config which indicates that nokia gadget requires OBEX in particular state +config USB_G_NOKIA_REQ_F_OBEX + tristate + +if USB_CONFIGFS_F_OBEX = y || USB_G_SERIAL_REQ_F_OBEX = y || USB_G_NOKIA_REQ_F_OBEX = y +config USB_F_OBEX_SELECTOR + tristate + default y + select USB_F_OBEX + select USB_F_OBEX_REQ_U_SERIAL +endif + +if !(USB_CONFIGFS_F_OBEX = y || USB_G_SERIAL_REQ_F_OBEX = y || USB_G_NOKIA_REQ_F_OBEX = y) && (USB_CONFIGFS_F_OBEX = m || USB_G_SERIAL_REQ_F_OBEX = m || USB_G_NOKIA_REQ_F_OBEX = m) +config USB_F_OBEX_SELECTOR + tristate + default m + select USB_F_OBEX + select USB_F_OBEX_REQ_U_SERIAL +endif + config USB_F_NCM tristate +# Just a dummy config which indicates that ncm gadget requires NCM in particular state +config USB_G_NCM_REQ_F_NCM + tristate + +if USB_CONFIGFS_F_NCM = y || USB_G_NCM_REQ_F_NCM = y +config USB_F_NCM_SELECTOR + tristate + default y + select USB_F_NCM + select USB_F_NCM_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_NCM = y || USB_G_NCM_REQ_F_NCM = y) && (USB_CONFIGFS_F_NCM = m || USB_G_NCM_REQ_F_NCM = m) +config USB_F_NCM_SELECTOR + tristate + default m + select USB_F_NCM + select USB_F_NCM_REQ_U_ETHER +endif + config USB_F_ECM tristate +# Just a dummy config which indicates that eth gadget requires ECM in particular state +config USB_G_ETH_REQ_F_ECM + tristate + +# Just a dummy config which indicates that cdc gadget requires ECM in particular state +config USB_G_CDC_COMPOSITE_REQ_F_ECM + tristate + +# Just a dummy config which indicates that nokia gadget requires ECM in particular state +config USB_G_NOKIA_REQ_F_ECM + tristate + +# Just a dummy config which indicates that functionfs gadget requires ECM in particular state +config USB_G_FUNCTIONFS_REQ_F_ECM + tristate + +# Just a dummy config which indicates that multi gadget requires ECM in particular state +config USB_G_MULTI_REQ_F_ECM + tristate + +if USB_CONFIGFS_F_ECM = y || USB_G_ETH_REQ_F_ECM = y || USB_G_CDC_COMPOSITE_REQ_F_ECM = y || USB_G_NOKIA_REQ_F_ECM = y || USB_G_FUNCTIONFS_REQ_F_ECM = y || USB_G_MULTI_REQ_F_ECM = y +config USB_F_ECM_SELECTOR + tristate + default y + select USB_F_ECM + select USB_F_ECM_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_ECM = y || USB_G_ETH_REQ_F_ECM = y || USB_G_CDC_COMPOSITE_REQ_F_ECM = y || USB_G_NOKIA_REQ_F_ECM = y || USB_G_FUNCTIONFS_REQ_F_ECM = y || USB_G_MULTI_REQ_F_ECM = y) && (USB_CONFIGFS_F_ECM = m || USB_G_ETH_REQ_F_ECM = m || USB_G_CDC_COMPOSITE_REQ_F_ECM = m || USB_G_NOKIA_REQ_F_ECM = m || USB_G_FUNCTIONFS_REQ_F_ECM = m || USB_G_MULTI_REQ_F_ECM = m) +config USB_F_ECM_SELECTOR + tristate + default m + select USB_F_ECM + select USB_F_ECM_REQ_U_ETHER +endif + config USB_F_PHONET tristate +# Just a dummy config which indicates that nokia gadget requires PHONET in particular state +config USB_G_NOKIA_REQ_F_PHONET + tristate + +if USB_CONFIGFS_F_PHONET = y || USB_G_NOKIA_REQ_F_PHONET = y +config USB_F_PHONET_SELECTOR + tristate + default y + select USB_F_PHONET + select USB_F_PHONET_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_PHONET = y || USB_G_NOKIA_REQ_F_PHONET = y) && (USB_CONFIGFS_F_PHONET = m || USB_G_NOKIA_REQ_F_PHONET = m) +config USB_F_PHONET_SELECTOR + tristate + default m + select USB_F_PHONET + select USB_F_PHONET_REQ_U_ETHER +endif + config USB_F_EEM tristate +# Just a dummy config which indicates that eth gadget requires EEM in particular state +config USB_G_ETH_REQ_F_EEM + tristate + +if USB_CONFIGFS_F_EEM = y || USB_G_ETH_REQ_F_EEM = y +config USB_F_EEM_SELECTOR + tristate + default y + select USB_F_EEM + select USB_F_EEM_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_EEM = y || USB_G_ETH_REQ_F_EEM = y) && (USB_CONFIGFS_F_EEM = m || USB_G_ETH_REQ_F_EEM = m) +config USB_F_EEM_SELECTOR + tristate + default m + select USB_F_EEM + select USB_F_EEM_REQ_U_ETHER +endif + config USB_F_SUBSET tristate +# Just a dummy config which indicates that eth gadget requires SUBSET in particular state +config USB_G_ETH_REQ_F_SUBSET + tristate + +# Just a dummy config which indicates that functionfs gadget requires SUBSET in particular state +config USB_G_FUNCTIONFS_REQ_F_SUBSET + tristate + +if USB_CONFIGFS_F_SUBSET = y || USB_G_ETH_REQ_F_SUBSET = y || USB_G_FUNCTIONFS_REQ_F_SUBSET = y +config USB_F_SUBSET_SELECTOR + tristate + default y + select USB_F_SUBSET + select USB_F_SUBSET_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_SUBSET = y || USB_G_ETH_REQ_F_SUBSET = y || USB_G_FUNCTIONFS_REQ_F_SUBSET = y) && (USB_CONFIGFS_F_SUBSET = m || USB_G_ETH_REQ_F_SUBSET = m || USB_G_FUNCTIONFS_REQ_F_SUBSET = m) +config USB_F_SUBSET_SELECTOR + tristate + default m + select USB_F_SUBSET + select USB_F_SUBSET_REQ_U_ETHER +endif + config USB_F_RNDIS tristate +# Just a dummy config which indicates that eth gadget requires RNDIS in particular state +config USB_G_ETH_REQ_F_RNDIS + tristate + +# Just a dummy config which indicates that functionfs gadget requires RNDIS in particular state +config USB_G_FUNCTIONFS_REQ_F_RNDIS + tristate + +# Just a dummy config which indicates that multi gadget requires RNDIS in particular state +config USB_G_MULTI_REQ_F_RNDIS + tristate + +if USB_CONFIGFS_F_RNDIS = y || USB_G_ETH_REQ_F_RNDIS = y || USB_G_FUNCTIONFS_REQ_F_RNDIS = y || USB_G_MULTI_REQ_F_RNDIS = y +config USB_F_RNDIS_SELECTOR + tristate + default y + select USB_F_RNDIS + select USB_F_RNDIS_REQ_U_ETHER +endif + +if !(USB_CONFIGFS_F_RNDIS = y || USB_G_ETH_REQ_F_RNDIS = y || USB_G_FUNCTIONFS_REQ_F_RNDIS = y || USB_G_MULTI_REQ_F_RNDIS = y) && (USB_CONFIGFS_F_RNDIS = m || USB_G_ETH_REQ_F_RNDIS = m || USB_G_FUNCTIONFS_REQ_F_RNDIS = m || USB_G_MULTI_REQ_F_RNDIS = m) +config USB_F_RNDIS_SELECTOR + tristate + default m + select USB_F_RNDIS + select USB_F_RNDIS_REQ_U_ETHER +endif + config USB_F_MASS_STORAGE tristate +# Just a dummy config which indicates that mass storage gadget requires MASS_STORAGE in particular state +config USB_G_MASS_STORAGE_REQ_F_MASS_STORAGE + tristate + +# Just a dummy config which indicates that nokia gadget requires MASS_STORAGE in particular state +config USB_G_NOKIA_REQ_F_MASS_STORAGE + tristate + +# Just a dummy config which indicates that acm ms gadget requires MASS_STORAGE in particular state +config USB_G_ACM_MS_REQ_F_MASS_STORAGE + tristate + +# Just a dummy config which indicates that multi gadget requires MASS_STORAGE in particular state +config USB_G_MULTI_REQ_F_MASS_STORAGE + tristate + +if USB_CONFIGFS_F_MASS_STORAGE = y || USB_G_MASS_STORAGE_REQ_F_MASS_STORAGE = y || USB_G_NOKIA_REQ_F_MASS_STORAGE = y || USB_G_ACM_MS_REQ_F_MASS_STORAGE = y|| USB_G_MULTI_REQ_F_MASS_STORAGE = y +config USB_F_MASS_STORAGE_SELECTOR + tristate + default y + select USB_F_MASS_STORAGE +endif + +if !(USB_CONFIGFS_F_MASS_STORAGE = y || USB_G_MASS_STORAGE_REQ_F_MASS_STORAGE = y || USB_G_NOKIA_REQ_F_MASS_STORAGE = y || USB_G_ACM_MS_REQ_F_MASS_STORAGE = y || USB_G_MULTI_REQ_F_MASS_STORAGE = y) && (USB_CONFIGFS_F_MASS_STORAGE = m || USB_G_MASS_STORAGE_REQ_F_MASS_STORAGE = m || USB_G_NOKIA_REQ_F_MASS_STORAGE = m || USB_G_ACM_MS_REQ_F_MASS_STORAGE = m ||USB_G_MULTI_REQ_F_MASS_STORAGE = m) +config USB_F_MASS_STORAGE_SELECTOR + tristate + default m + select USB_F_MASS_STORAGE +endif + config USB_F_FS tristate +# Just a dummy config which indicates that functionfs gadget requires F_FS in particular state +config USB_G_FUNCTIONFS_REQ_F_FS + tristate + +if USB_CONFIGFS_F_FS = y || USB_G_FUNCTIONFS_REQ_F_FS = y +config USB_F_FS_SELECTOR + tristate + default y + select USB_F_FS +endif + +if !(USB_CONFIGFS_F_FS = y || USB_G_FUNCTIONFS_REQ_F_FS = y) && (USB_CONFIGFS_F_FS = m || USB_G_FUNCTIONFS_REQ_F_FS = m) +config USB_F_FS_SELECTOR + tristate + default m + select USB_F_FS +endif + config USB_F_UAC1 tristate +# Just a dummy config which indicates that audio gadget requires UAC1 in particular state +config USB_G_AUDIO_REQ_F_UAC1 + tristate + +if USB_CONFIGFS_F_UAC1 = y || USB_G_AUDIO_REQ_F_UAC1 = y +config USB_F_UAC1_SELECTOR + tristate + default y + select USB_F_UAC1 + select SND_PCM +endif + +if !(USB_CONFIGFS_F_UAC1 = y || USB_G_AUDIO_REQ_F_UAC1 = y) && (USB_CONFIGFS_F_UAC1 = m || USB_G_AUDIO_REQ_F_UAC1 = m) +config USB_F_UAC1_SELECTOR + tristate + default m + select USB_F_UAC1 + select SND_PCM +endif + config USB_F_UAC2 tristate +# Just a dummy config which indicates that audio gadget requires UAC2 in particular state +config USB_G_AUDIO_REQ_F_UAC2 + tristate + +if USB_CONFIGFS_F_UAC2 = y || USB_G_AUDIO_REQ_F_UAC2 = y +config USB_F_UAC2_SELECTOR + tristate + default y + select USB_F_UAC2 + select SND_PCM +endif + +if !(USB_CONFIGFS_F_UAC2 = y || USB_G_AUDIO_REQ_F_UAC2 = y) && (USB_CONFIGFS_F_UAC2 = m || USB_G_AUDIO_REQ_F_UAC2 = m) +config USB_F_UAC2_SELECTOR + tristate + default m + select USB_F_UAC2 + select SND_PCM +endif + config USB_F_UVC tristate +# Just a dummy config which indicates that webcam gadget requires UVC in particular state +config USB_G_WEBCAM_REQ_F_UVC + tristate + +if USB_CONFIGFS_F_UVC = y || USB_G_WEBCAM_REQ_F_UVC = y +config USB_F_UVC_SELECTOR + tristate + default y + select USB_F_UVC + select VIDEOBUF2_VMALLOC +endif + +if !(USB_CONFIGFS_F_UVC = y || USB_G_WEBCAM_REQ_F_UVC = y) && (USB_CONFIGFS_F_UVC = m || USB_G_WEBCAM_REQ_F_UVC = m) +config USB_F_UVC_SELECTOR + tristate + default m + select USB_F_UVC + select VIDEOBUF2_VMALLOC +endif + config USB_F_MIDI tristate +# Just a dummy config which indicates that midi gadget requires MIDI in particular state +config USB_G_MIDI_REQ_F_MIDI + tristate + +if USB_CONFIGFS_F_MIDI = y || USB_G_MIDI_REQ_F_MIDI = y +config USB_F_MIDI_SELECTOR + tristate + default y + select USB_F_MIDI + select SND_RAWMIDI +endif + +if !(USB_CONFIGFS_F_MIDI = y || USB_G_MIDI_REQ_F_MIDI = y) && (USB_CONFIGFS_F_MIDI = m || USB_G_MIDI_REQ_F_MIDI = m) +config USB_F_MIDI_SELECTOR + tristate + default m + select USB_F_MIDI + select SND_RAWMIDI +endif + config USB_F_HID tristate +# Just a dummy config which indicates that hid gadget requires HID in particular state +config USB_G_HID_REQ_F_HID + tristate + +if USB_CONFIGFS_F_HID = y || USB_G_HID_REQ_F_HID = y +config USB_F_HID_SELECTOR + tristate + default y + select USB_F_HID +endif + +if !(USB_CONFIGFS_F_HID = y || USB_G_HID_REQ_F_HID = y) && (USB_CONFIGFS_F_HID = m || USB_G_HID_REQ_F_HID = m) +config USB_F_HID_SELECTOR + tristate + default m + select USB_F_HID +endif + config USB_F_PRINTER tristate +# Just a dummy config which indicates that printer gadget requires PRINTER in particular state +config USB_G_PRINTER_REQ_F_PRINTER + tristate + +if USB_CONFIGFS_F_PRINTER = y || USB_G_PRINTER_REQ_F_PRINTER = y +config USB_F_PRINTER_SELECTOR + tristate + default y + select USB_F_PRINTER +endif + +if !(USB_CONFIGFS_F_PRINTER = y || USB_G_PRINTER_REQ_F_PRINTER = y) && (USB_CONFIGFS_F_PRINTER = m || USB_G_PRINTER_REQ_F_PRINTER = m) +config USB_F_PRINTER_SELECTOR + tristate + default m + select USB_F_PRINTER +endif + config USB_F_TCM tristate -choice - tristate "USB Gadget Drivers" - default USB_ETH - help - A Linux "Gadget Driver" talks to the USB Peripheral Controller - driver through the abstract "gadget" API. Some other operating - systems call these "client" drivers, of which "class drivers" - are a subset (implementing a USB device class specification). - A gadget driver implements one or more USB functions using - the peripheral hardware. - - Gadget drivers are hardware-neutral, or "platform independent", - except that they sometimes must understand quirks or limitations - of the particular controllers they work with. For example, when - a controller doesn't support alternate configurations or provide - enough of the right types of endpoints, the gadget driver might - not be able work with that controller, or might need to implement - a less common variant of a device class protocol. - -# this first set of drivers all depend on bulk-capable hardware. - -config USB_CONFIGFS - tristate "USB functions configurable through configfs" - select USB_LIBCOMPOSITE - help - A Linux USB "gadget" can be set up through configfs. - If this is the case, the USB functions (which from the host's - perspective are seen as interfaces) and configurations are - specified simply by creating appropriate directories in configfs. - Associating functions with configurations is done by creating - appropriate symbolic links. - For more information see Documentation/usb/gadget_configfs.txt. - -config USB_CONFIGFS_SERIAL - bool "Generic serial bulk in/out" - depends on USB_CONFIGFS +# Just a dummy config which indicates that tcm gadget requires TCM in particular state +config USB_G_TCM_REQ_F_TCM + tristate + +if USB_CONFIGFS_F_TCM = y || USB_G_TCM_REQ_F_TCM = y +config USB_F_TCM_SELECTOR + tristate + default y + select USB_F_TCM +endif + +if !(USB_CONFIGFS_F_TCM = y || USB_G_TCM_REQ_F_TCM = y) && (USB_CONFIGFS_F_TCM = m || USB_G_TCM_REQ_F_TCM = m) +config USB_F_TCM_SELECTOR + tristate + default m + select USB_F_TCM +endif + +if USB_LIBCOMPOSITE + +menu "USB Functions" + +config USB_CONFIGFS_F_SERIAL + tristate "Generic serial bulk in/out" + depends on USB_LIBCOMPOSITE depends on TTY - select USB_U_SERIAL - select USB_F_SERIAL help The function talks to the Linux-USB generic serial driver. -config USB_CONFIGFS_ACM - bool "Abstract Control Model (CDC ACM)" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_ACM + tristate "Abstract Control Model (CDC ACM)" + depends on USB_LIBCOMPOSITE depends on TTY - select USB_U_SERIAL - select USB_F_ACM help ACM serial link. This function can be used to interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm" driver. -config USB_CONFIGFS_OBEX - bool "Object Exchange Model (CDC OBEX)" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_OBEX + tristate "Object Exchange Model (CDC OBEX)" + depends on USB_LIBCOMPOSITE depends on TTY - select USB_U_SERIAL - select USB_F_OBEX help You will need a user space OBEX server talking to /dev/ttyGS*, since the kernel itself doesn't implement the OBEX protocol. -config USB_CONFIGFS_NCM - bool "Network Control Model (CDC NCM)" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_NCM + tristate "Network Control Model (CDC NCM)" + depends on USB_LIBCOMPOSITE depends on NET - select USB_U_ETHER - select USB_F_NCM help NCM is an advanced protocol for Ethernet encapsulation, allows grouping of several ethernet frames into one USB transfer and different alignment possibilities. -config USB_CONFIGFS_ECM - bool "Ethernet Control Model (CDC ECM)" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_ECM + tristate "Ethernet Control Model (CDC ECM)" + depends on USB_LIBCOMPOSITE depends on NET - select USB_U_ETHER - select USB_F_ECM help The "Communication Device Class" (CDC) Ethernet Control Model. That protocol is often avoided with pure Ethernet adapters, in favor of simpler vendor-specific hardware, but is widely supported by firmware for smart network devices. -config USB_CONFIGFS_ECM_SUBSET - bool "Ethernet Control Model (CDC ECM) subset" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_SUBSET + tristate "Ethernet Control Model (CDC ECM) subset" + depends on USB_LIBCOMPOSITE depends on NET - select USB_U_ETHER - select USB_F_SUBSET help On hardware that can't implement the full protocol, a simple CDC subset is used, placing fewer demands on USB. -config USB_CONFIGFS_RNDIS - bool "RNDIS" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_RNDIS + tristate "RNDIS" + depends on USB_LIBCOMPOSITE depends on NET - select USB_U_ETHER - select USB_F_RNDIS help Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, and Microsoft provides redistributable binary RNDIS drivers for @@ -320,12 +773,10 @@ config USB_CONFIGFS_RNDIS XP, you'll need to download drivers from Microsoft's website; a URL is given in comments found in that info file. -config USB_CONFIGFS_EEM - bool "Ethernet Emulation Model (EEM)" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_EEM + tristate "Ethernet Emulation Model (EEM)" + depends on USB_LIBCOMPOSITE depends on NET - select USB_U_ETHER - select USB_F_EEM help CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM and therefore can be supported by more hardware. Technically ECM and @@ -335,31 +786,27 @@ config USB_CONFIGFS_EEM ethernet over USB. For Linux gadgets, however, the interface with the host is the same (a usbX device), so the differences are minimal. -config USB_CONFIGFS_PHONET - bool "Phonet protocol" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_PHONET + tristate "Phonet protocol" + depends on USB_LIBCOMPOSITE depends on NET depends on PHONET - select USB_U_ETHER - select USB_F_PHONET help The Phonet protocol implementation for USB device. -config USB_CONFIGFS_MASS_STORAGE - bool "Mass storage" - depends on USB_CONFIGFS +config USB_CONFIGFS_F_MASS_STORAGE + tristate "Mass storage" + depends on USB_LIBCOMPOSITE depends on BLOCK - select USB_F_MASS_STORAGE help The Mass Storage Gadget acts as a USB Mass Storage disk drive. As its storage repository it can use a regular file or a block device (in much the same way as the "loop" device driver), specified as a module parameter or sysfs option. -config USB_CONFIGFS_F_LB_SS - bool "Loopback and sourcesink function (for testing)" - depends on USB_CONFIGFS - select USB_F_SS_LB +config USB_CONFIGFS_F_SS_LB + tristate "Loopback and sourcesink function (for testing)" + depends on USB_LIBCOMPOSITE help Loopback function loops back a configurable number of transfers. Sourcesink function either sinks and sources bulk data. @@ -370,9 +817,8 @@ config USB_CONFIGFS_F_LB_SS and its driver through a basic set of functional tests. config USB_CONFIGFS_F_FS - bool "Function filesystem (FunctionFS)" - depends on USB_CONFIGFS - select USB_F_FS + tristate "Function filesystem (FunctionFS)" + depends on USB_LIBCOMPOSITE help The Function Filesystem (FunctionFS) lets one create USB composite functions in user space in the same way GadgetFS @@ -382,12 +828,9 @@ config USB_CONFIGFS_F_FS mass storage) and other are implemented in user space. config USB_CONFIGFS_F_UAC1 - bool "Audio Class 1.0" - depends on USB_CONFIGFS + tristate "Audio Class 1.0" + depends on USB_LIBCOMPOSITE depends on SND - select USB_LIBCOMPOSITE - select SND_PCM - select USB_F_UAC1 help This Audio function implements 1 AudioControl interface, 1 AudioStreaming Interface each for USB-OUT and USB-IN. @@ -395,12 +838,9 @@ config USB_CONFIGFS_F_UAC1 on the device. config USB_CONFIGFS_F_UAC2 - bool "Audio Class 2.0" - depends on USB_CONFIGFS + tristate "Audio Class 2.0" + depends on USB_LIBCOMPOSITE depends on SND - select USB_LIBCOMPOSITE - select SND_PCM - select USB_F_UAC2 help This Audio function is compatible with USB Audio Class specification 2.0. It implements 1 AudioControl interface, @@ -413,12 +853,9 @@ config USB_CONFIGFS_F_UAC2 wants as audio data to the USB Host. config USB_CONFIGFS_F_MIDI - bool "MIDI function" - depends on USB_CONFIGFS + tristate "MIDI function" + depends on USB_LIBCOMPOSITE depends on SND - select USB_LIBCOMPOSITE - select SND_RAWMIDI - select USB_F_MIDI help The MIDI Function acts as a USB Audio device, with one MIDI input and one MIDI output. These MIDI jacks appear as @@ -427,9 +864,8 @@ config USB_CONFIGFS_F_MIDI ALSA's aconnect utility etc. config USB_CONFIGFS_F_HID - bool "HID function" - depends on USB_CONFIGFS - select USB_F_HID + tristate "HID function" + depends on USB_LIBCOMPOSITE help The HID function driver provides generic emulation of USB Human Interface Devices (HID). @@ -437,20 +873,17 @@ config USB_CONFIGFS_F_HID For more information, see Documentation/usb/gadget_hid.txt. config USB_CONFIGFS_F_UVC - bool "USB Webcam function" - depends on USB_CONFIGFS + tristate "USB Webcam function" + depends on USB_LIBCOMPOSITE depends on VIDEO_DEV - select VIDEOBUF2_VMALLOC - select USB_F_UVC help The Webcam function acts as a composite USB Audio and Video Class device. It provides a userspace API to process UVC control requests and stream video data to the host. config USB_CONFIGFS_F_PRINTER - bool "Printer function" - select USB_F_PRINTER - depends on USB_CONFIGFS + tristate "Printer function" + depends on USB_LIBCOMPOSITE help The Printer function channels data between the USB host and a userspace program driving the print engine. The user space @@ -462,11 +895,9 @@ config USB_CONFIGFS_F_PRINTER which includes sample code for accessing the device file. config USB_CONFIGFS_F_TCM - bool "USB Gadget Target Fabric" + tristate "USB Gadget Target Fabric" + depends on USB_LIBCOMPOSITE depends on TARGET_CORE - depends on USB_CONFIGFS - select USB_LIBCOMPOSITE - select USB_F_TCM help This fabric is a USB gadget component. Two USB protocols are supported that is BBB or BOT (Bulk Only Transport) and UAS @@ -475,8 +906,9 @@ config USB_CONFIGFS_F_TCM Both protocols can work on USB2.0 and USB3.0. UAS utilizes the USB 3.0 feature called streams support. -source "drivers/usb/gadget/legacy/Kconfig" +endmenu -endchoice +source "drivers/usb/gadget/legacy/Kconfig" +endif # USB_LIBCOMPOSITE endif # USB_GADGET diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig index 0b36878..d9346dd 100644 --- a/drivers/usb/gadget/legacy/Kconfig +++ b/drivers/usb/gadget/legacy/Kconfig @@ -13,10 +13,12 @@ # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG). # +menu "Legacy USB Gadget Drivers" + config USB_ZERO tristate "Gadget Zero (DEVELOPMENT)" - select USB_LIBCOMPOSITE - select USB_F_SS_LB + depends on USB_LIBCOMPOSITE + select USB_G_ZERO_REQ_F_SS_LB help Gadget Zero is a two-configuration device. It either sinks and sources bulk data; or it loops back a configurable number of @@ -52,10 +54,9 @@ config USB_ZERO_HNPTEST config USB_AUDIO tristate "Audio Gadget" depends on SND - select USB_LIBCOMPOSITE - select SND_PCM - select USB_F_UAC1 if GADGET_UAC1 - select USB_F_UAC2 if !GADGET_UAC1 + depends on USB_LIBCOMPOSITE + select USB_G_AUDIO_REQ_F_UAC1 if GADGET_UAC1 + select USB_G_AUDIO_REQ_F_UAC2 if !GADGET_UAC1 help This Gadget Audio driver is compatible with USB Audio Class specification 2.0. It implements 1 AudioControl interface, @@ -83,10 +84,9 @@ config GADGET_UAC1 config USB_ETH tristate "Ethernet Gadget (with CDC Ethernet support)" depends on NET - select USB_LIBCOMPOSITE - select USB_U_ETHER - select USB_F_ECM - select USB_F_SUBSET + depends on USB_LIBCOMPOSITE + select USB_G_ETH_REQ_F_ECM + select USB_G_ETH_REQ_F_SUBSET select CRC32 help This driver implements Ethernet style communication, in one of @@ -121,8 +121,8 @@ config USB_ETH config USB_ETH_RNDIS bool "RNDIS support" depends on USB_ETH - select USB_LIBCOMPOSITE - select USB_F_RNDIS + depends on USB_LIBCOMPOSITE + select USB_G_ETH_REQ_F_RNDIS default y help Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol, @@ -141,8 +141,8 @@ config USB_ETH_RNDIS config USB_ETH_EEM bool "Ethernet Emulation Model (EEM) support" depends on USB_ETH - select USB_LIBCOMPOSITE - select USB_F_EEM + depends on USB_LIBCOMPOSITE + select USB_G_ETH_REQ_F_EEM default n help CDC EEM is a newer USB standard that is somewhat simpler than CDC ECM @@ -159,9 +159,8 @@ config USB_ETH_EEM config USB_G_NCM tristate "Network Control Model (NCM) support" depends on NET - select USB_LIBCOMPOSITE - select USB_U_ETHER - select USB_F_NCM + depends on USB_LIBCOMPOSITE + select USB_G_NCM_REQ_F_NCM select CRC32 help This driver implements USB CDC NCM subclass standard. NCM is @@ -186,8 +185,8 @@ config USB_GADGETFS config USB_FUNCTIONFS tristate "Function Filesystem" - select USB_LIBCOMPOSITE - select USB_F_FS + depends on USB_LIBCOMPOSITE + select USB_G_FUNCTIONFS_REQ_F_FS select USB_FUNCTIONFS_GENERIC if !(USB_FUNCTIONFS_ETH || USB_FUNCTIONFS_RNDIS) help The Function Filesystem (FunctionFS) lets one create USB @@ -206,9 +205,8 @@ config USB_FUNCTIONFS config USB_FUNCTIONFS_ETH bool "Include configuration with CDC ECM (Ethernet)" depends on USB_FUNCTIONFS && NET - select USB_U_ETHER - select USB_F_ECM - select USB_F_SUBSET + select USB_G_FUNCTIONFS_REQ_F_ECM + select USB_G_FUNCTIONFS_REQ_F_SUBSET help Include a configuration with CDC ECM function (Ethernet) and the Function Filesystem. @@ -216,8 +214,7 @@ config USB_FUNCTIONFS_ETH config USB_FUNCTIONFS_RNDIS bool "Include configuration with RNDIS (Ethernet)" depends on USB_FUNCTIONFS && NET - select USB_U_ETHER - select USB_F_RNDIS + select USB_G_FUNCTIONFS_REQ_F_RNDIS help Include a configuration with RNDIS function (Ethernet) and the Filesystem. @@ -231,8 +228,8 @@ config USB_FUNCTIONFS_GENERIC config USB_MASS_STORAGE tristate "Mass Storage Gadget" depends on BLOCK - select USB_LIBCOMPOSITE - select USB_F_MASS_STORAGE + depends on USB_LIBCOMPOSITE + select USB_G_MASS_STORAGE_REQ_F_MASS_STORAGE help The Mass Storage Gadget acts as a USB Mass Storage disk drive. As its storage repository it can use a regular file or a block @@ -248,8 +245,8 @@ config USB_MASS_STORAGE config USB_GADGET_TARGET tristate "USB Gadget Target Fabric Module" depends on TARGET_CORE - select USB_LIBCOMPOSITE - select USB_F_TCM + depends on USB_LIBCOMPOSITE + select USB_G_TCM_REQ_F_TCM help This fabric is an USB gadget. Two USB protocols are supported that is BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is @@ -260,11 +257,10 @@ config USB_GADGET_TARGET config USB_G_SERIAL tristate "Serial Gadget (with CDC ACM and CDC OBEX support)" depends on TTY - select USB_U_SERIAL - select USB_F_ACM - select USB_F_SERIAL - select USB_F_OBEX - select USB_LIBCOMPOSITE + select USB_G_SERIAL_REQ_F_ACM + select USB_G_SERIAL_REQ_F_SERIAL + select USB_G_SERIAL_REQ_F_OBEX + depends on USB_LIBCOMPOSITE help The Serial Gadget talks to the Linux-USB generic serial driver. This driver supports a CDC-ACM module option, which can be used @@ -285,9 +281,8 @@ config USB_G_SERIAL config USB_MIDI_GADGET tristate "MIDI Gadget" depends on SND - select USB_LIBCOMPOSITE - select SND_RAWMIDI - select USB_F_MIDI + depends on USB_LIBCOMPOSITE + select USB_G_MIDI_REQ_F_MIDI help The MIDI Gadget acts as a USB Audio device, with one MIDI input and one MIDI output. These MIDI jacks appear as @@ -300,8 +295,8 @@ config USB_MIDI_GADGET config USB_G_PRINTER tristate "Printer Gadget" - select USB_LIBCOMPOSITE - select USB_F_PRINTER + depends on USB_LIBCOMPOSITE + select USB_G_PRINTER_REQ_F_PRINTER help The Printer Gadget channels data between the USB host and a userspace program driving the print engine. The user space @@ -320,11 +315,9 @@ if TTY config USB_CDC_COMPOSITE tristate "CDC Composite Device (Ethernet and ACM)" depends on NET - select USB_LIBCOMPOSITE - select USB_U_SERIAL - select USB_U_ETHER - select USB_F_ACM - select USB_F_ECM + depends on USB_LIBCOMPOSITE + select USB_G_CDC_COMPOSITE_REQ_F_ACM + select USB_G_CDC_COMPOSITE_REQ_F_ECM help This driver provides two functions in one configuration: a CDC Ethernet (ECM) link, and a CDC ACM (serial port) link. @@ -340,14 +333,12 @@ config USB_G_NOKIA tristate "Nokia composite gadget" depends on PHONET depends on BLOCK - select USB_LIBCOMPOSITE - select USB_U_SERIAL - select USB_U_ETHER - select USB_F_ACM - select USB_F_OBEX - select USB_F_PHONET - select USB_F_ECM - select USB_F_MASS_STORAGE + depends on USB_LIBCOMPOSITE + select USB_G_NOKIA_REQ_F_ACM + select USB_G_NOKIA_REQ_F_OBEX + select USB_G_NOKIA_REQ_F_PHONET + select USB_G_NOKIA_REQ_F_ECM + select USB_G_NOKIA_REQ_F_MASS_STORAGE help The Nokia composite gadget provides support for acm, obex and phonet in only one composite gadget driver. @@ -358,10 +349,9 @@ config USB_G_NOKIA config USB_G_ACM_MS tristate "CDC Composite Device (ACM and mass storage)" depends on BLOCK - select USB_LIBCOMPOSITE - select USB_U_SERIAL - select USB_F_ACM - select USB_F_MASS_STORAGE + depends on USB_LIBCOMPOSITE + select USB_G_ACM_MS_REQ_F_ACM + select USB_G_ACM_MS_REQ_F_MASS_STORAGE help This driver provides two functions in one configuration: a mass storage, and a CDC ACM (serial port) link. @@ -373,11 +363,9 @@ config USB_G_MULTI tristate "Multifunction Composite Gadget" depends on BLOCK && NET select USB_G_MULTI_CDC if !USB_G_MULTI_RNDIS - select USB_LIBCOMPOSITE - select USB_U_SERIAL - select USB_U_ETHER - select USB_F_ACM - select USB_F_MASS_STORAGE + depends on USB_LIBCOMPOSITE + select USB_G_MULTI_REQ_F_ACM + select USB_G_MULTI_REQ_F_MASS_STORAGE help The Multifunction Composite Gadget provides Ethernet (RNDIS and/or CDC Ethernet), mass storage and ACM serial link @@ -396,7 +384,7 @@ config USB_G_MULTI config USB_G_MULTI_RNDIS bool "RNDIS + CDC Serial + Storage configuration" depends on USB_G_MULTI - select USB_F_RNDIS + select USB_G_MULTI_REQ_F_RNDIS default y help This option enables a configuration with RNDIS, CDC Serial and @@ -410,7 +398,7 @@ config USB_G_MULTI_CDC bool "CDC Ethernet + CDC Serial + Storage configuration" depends on USB_G_MULTI default n - select USB_F_ECM + select USB_G_MULTI_REQ_F_ECM help This option enables a configuration with CDC Ethernet (ECM), CDC Serial and Mass Storage functions available in the Multifunction @@ -422,8 +410,8 @@ endif # TTY config USB_G_HID tristate "HID Gadget" - select USB_LIBCOMPOSITE - select USB_F_HID + depends on USB_LIBCOMPOSITE + select USB_G_HID_REQ_F_HID help The HID gadget driver provides generic emulation of USB Human Interface Devices (HID). @@ -438,7 +426,7 @@ config USB_G_HID config USB_G_DBGP tristate "EHCI Debug Device Gadget" depends on TTY - select USB_LIBCOMPOSITE + depends on USB_LIBCOMPOSITE help This gadget emulates an EHCI Debug device. This is useful when you want to interact with an EHCI Debug Port. @@ -459,7 +447,7 @@ config USB_G_DBGP_PRINTK config USB_G_DBGP_SERIAL depends on USB_G_DBGP - select USB_U_SERIAL + select USB_G_DBG_REQ_U_SERIAL bool "serial" help Userland can interact using /dev/ttyGSxxx. @@ -471,9 +459,8 @@ endif config USB_G_WEBCAM tristate "USB Webcam Gadget" depends on VIDEO_DEV - select USB_LIBCOMPOSITE - select VIDEOBUF2_VMALLOC - select USB_F_UVC + depends on USB_LIBCOMPOSITE + select USB_G_WEBCAM_REQ_F_UVC help The Webcam Gadget acts as a composite USB Audio and Video Class device. It provides a userspace API to process UVC control requests @@ -481,3 +468,4 @@ config USB_G_WEBCAM Say "y" to link the driver statically, or "m" to build a dynamically linked module called "g_webcam". +endmenu -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html