#
# USB OTG infrastructure may be needed for peripheral-only, host-only,
# or OTG-capable configurations when OTG transceivers or controllers
# are used.
#

comment "OTG and related infrastructure"

config USB_OTG_UTILS
	bool
	help
	  Select this to make sure the build includes objects from
	  the OTG infrastructure directory.

if USB || USB_GADGET

#
# USB Transceiver Drivers
#
config USB_GPIO_VBUS
	tristate "GPIO based peripheral-only VBUS sensing 'transceiver'"
	depends on GENERIC_GPIO
	select USB_OTG_UTILS
	help
	  Provides simple GPIO VBUS sensing for controllers with an
	  internal transceiver via the otg_transceiver interface, and
	  optionally control of a D+ pullup GPIO as well as a VBUS
	  current limit regulator.

config ISP1301_OMAP
	tristate "Philips ISP1301 with OMAP OTG"
	depends on I2C && ARCH_OMAP_OTG
	select USB_OTG_UTILS
	help
	  If you say yes here you get support for the Philips ISP1301
	  USB-On-The-Go transceiver working with the OMAP OTG controller.
	  The ISP1301 is a full speed USB  transceiver which is used in
	  products including H2, H3, and H4 development boards for Texas
	  Instruments OMAP processors.

	  This driver can also be built as a module.  If so, the module
	  will be called isp1301_omap.

config USB_ULPI
	bool "Generic ULPI Transceiver Driver"
	depends on ARM
	select USB_OTG_UTILS
	help
	  Enable this to support ULPI connected USB OTG transceivers which
	  are likely found on embedded boards.

config TWL4030_USB
	tristate "TWL4030 USB Transceiver Driver"
	depends on TWL4030_CORE && REGULATOR_TWL4030
	select USB_OTG_UTILS
	help
	  Enable this to support the USB OTG transceiver on TWL4030
	  family chips (including the TWL5030 and TPS659x0 devices).
	  This transceiver supports high and full speed devices plus,
	  in host mode, low speed.

config NOP_USB_XCEIV
	tristate "NOP USB Transceiver Driver"
	select USB_OTG_UTILS
	help
	 this driver is to be used by all the usb transceiver which are either
	 built-in with usb ip or which are autonomous and doesn't require any
	 phy programming such as ISP1x04 etc.

config USB_LANGWELL_OTG
	tristate "Intel Langwell USB OTG dual-role support"
	depends on USB && PCI && INTEL_SCU_IPC
	select USB_OTG
	select USB_OTG_UTILS
	help
	  Say Y here if you want to build Intel Langwell USB OTG
	  transciever driver in kernel. This driver implements role
	  switch between EHCI host driver and Langwell USB OTG
	  client driver.

	  To compile this driver as a module, choose M here: the
	  module will be called langwell_otg.

endif # USB || OTG
