#
# 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 && USB_MUSB_OMAP2PLUS
	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 USB_MSM_OTG_72K
	bool "OTG support for Legcay Qualcomm on-chip USB controller"
	depends on ARCH_MSM
	select USB_OTG_UTILS
	default USB_MSM_72K
	help
	  Enable this to support the USB OTG transceiver on MSM chips. It
	  handles PHY initialization, clock management, low power mode and
	  workarounds required after resetting the hardware. This driver is
	  required for even peripheral only or host only mode configuration.
	  Supports SRP and HNP when both gadget and Host are selected.

config MSM_OTG_ENABLE_A_WAIT_BCON_TIMEOUT
	bool "Enable A-device timeout for B-device connection"
	depends on USB_MSM_OTG_72K
	default n
	help
	   OTG specification allows A-device to turn off VBUS if B-device
	   fails to signal connect event before TA_WAIT_BCON (1.1 - 30 sec).
	   SRP detection is enabled and hardware is put into low power mode
	   upon this timeout.

	   If you say yes, VBUS will be turned off if B-device does not signal
	   connect in 30 sec. Otherwise VBUS is not turned off when Micro-A
	   cable is connected. But hardware is put into LPM. Say no if leakage
	   currents in your system are minimum.


config TWL6030_USB
	tristate "TWL6030 USB Transceiver Driver"
	depends on TWL4030_CORE && OMAP_USB2 && USB_MUSB_OMAP2PLUS
	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 USB_MSM_ACA
	bool "Support for Accessory Charger Adapter (ACA)"
	depends on (USB_MSM_OTG || USB_MSM_OTG_72K) && ARCH_MSM
	default n
	help
	  Accesory Charger Adapter is a charger specified in USB Battery
	  Charging Specification(1.1). It enables OTG devices to charge
	  while operating as a host or peripheral at the same time.

config USB_MSM_STANDARD_ACA
	bool "Support for Standard ACA"
	depends on USB_MSM_ACA
	default USB_MSM_OTG_72K
	help
	  A Standard ACA has a Standard-A receptacle on the Accessory Port,
	  and can only be attached to a B-device.  RID_A and RID_GND states
	  are only possible with Standard ACA.  Select this feature if the
	  board is intended to support only Standard ACA.

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

config USB_MXS_PHY
	tristate "Freescale MXS USB PHY support"
	depends on ARCH_MXC || ARCH_MXS
	select STMP_DEVICE
	select USB_OTG_UTILS
	help
	  Enable this to support the Freescale MXS USB PHY.

	  MXS Phy is used by some of the i.MX SoCs, for example imx23/28/6x.

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
