#
# 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.

config USB_OTG_WAKELOCK
	bool "Hold a wakelock when USB connected"
	depends on WAKELOCK
	select USB_OTG_UTILS
	help
	  Select this to automatically hold a wakelock when USB is
	  connected, preventing suspend.

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 usb_phy 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 USB_ULPI_VIEWPORT
	bool
	depends on USB_ULPI
	help
	  Provides read/write operations to the ULPI phy register set for
	  controllers with a viewport register (e.g. Chipidea/ARC controllers).

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 TWL6030_USB
	tristate "TWL6030 USB Transceiver Driver"
	depends on TWL4030_CORE
	select USB_OTG_UTILS
	help
	  Enable this to support the USB OTG transceiver on TWL6030
	  family chips. This TWL6030 transceiver has the VBUS and ID GND
	  and OTG SRP events capabilities. For all other transceiver functionality
	  UTMI PHY is embedded in OMAP4430. The internal PHY configurations APIs
	  are hooked to this driver through platform_data structure.
	  The definition of internal PHY APIs are in the mach-omap2 layer.

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_MSM_OTG
	tristate "OTG support for Qualcomm on-chip USB controller"
	depends on (USB || USB_GADGET) && ARCH_MSM
	select USB_OTG_UTILS
	help
	  Enable this to support the USB OTG transceiver on MSM chips. It
	  handles PHY initialization, clock management, and workarounds
	  required after resetting the hardware and power management.
	  This driver is required even for peripheral only or host only
	  mode configurations.
	  This driver is not supported on boards like trout which
	  has an external PHY.

config AB8500_USB
	tristate "AB8500 USB Transceiver Driver"
	depends on AB8500_CORE
	select USB_OTG_UTILS
	help
	  Enable this to support the USB OTG transceiver in AB8500 chip.
	  This transceiver supports high and full speed devices plus,
	  in host mode, low speed.

config FSL_USB2_OTG
	bool "Freescale USB OTG Transceiver Driver"
	depends on USB_EHCI_FSL && USB_GADGET_FSL_USB2 && USB_SUSPEND
	select USB_OTG
	select USB_OTG_UTILS
	help
	  Enable this to support Freescale USB OTG transceiver.

config USB_MV_OTG
	tristate "Marvell USB OTG support"
	depends on USB_EHCI_MV && USB_MV_UDC && USB_SUSPEND
	select USB_OTG
	select USB_OTG_UTILS
	help
	  Say Y here if you want to build Marvell USB OTG transciever
	  driver in kernel (including PXA and MMP series). This driver
	  implements role switch between EHCI host driver and gadget driver.

	  To compile this driver as a module, choose M here.

endif # USB || OTG
