On Mon, Jun 06, 2016 at 09:40:33PM +0200, Krzysztof Opasiak wrote:
> 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

If that, what the user will expect if choosing multiple gadgets?
Eg, if he chooses g_ncm and g_mass_storage, will he expect
his udc has both mass_storage and ncm function, but it is
not the fact, only the first gadget function will work.

Peter
> 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 <[email protected]>
> ---
>  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..d6e9af7 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 multi gadget 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 RNDIS 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 = y ||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..827747a 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_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 [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 

Best Regards,
Peter Chen
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to