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

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
	select USB_OTG
	select USB_OTG_UTILS
	help
	  Enable this to support Freescale USB OTG transceiver.

endif # USB || OTG
