#
# Physical Layer USB driver configuration
#
menuconfig USB_PHY
	bool "USB Physical Layer drivers"
	help
	  USB controllers (those which are host, device or DRD) need a
	  device to handle the physical layer signalling, commonly called
	  a PHY.

	  The following drivers add support for such PHY devices.

if USB_PHY

#
# USB Transceiver Drivers
#
config AB8500_USB
	tristate "AB8500 USB Transceiver Driver"
	depends on AB8500_CORE
	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 && PM_RUNTIME
	select USB_OTG
	help
	  Enable this to support Freescale USB OTG transceiver.

config ISP1301_OMAP
	tristate "Philips ISP1301 with OMAP OTG"
	depends on I2C && ARCH_OMAP_OTG
	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 MV_U3D_PHY
	bool "Marvell USB 3.0 PHY controller Driver"
	depends on CPU_MMP3
	help
	  Enable this to support Marvell USB 3.0 phy controller for Marvell
	  SoC.

config NOP_USB_XCEIV
	tristate "NOP USB Transceiver Driver"
	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 OMAP_CONTROL_USB
	tristate "OMAP CONTROL USB Driver"
	help
	  Enable this to add support for the USB part present in the control
	  module. This driver has API to power on the USB2 PHY and to write to
	  the mailbox. The mailbox is present only in omap4 and the register to
	  power on the USB2 PHY is present in OMAP4 and OMAP5. OMAP5 has an
	  additional register to power on USB3 PHY.

config OMAP_USB2
	tristate "OMAP USB2 PHY Driver"
	depends on ARCH_OMAP2PLUS
	select OMAP_CONTROL_USB
	help
	  Enable this to support the transceiver that is part of SOC. This
	  driver takes care of all the PHY functionality apart from comparator.
	  The USB OTG controller communicates with the comparator using this
	  driver.

config OMAP_USB3
	tristate "OMAP USB3 PHY Driver"
	select OMAP_CONTROL_USB
	help
	  Enable this to support the USB3 PHY that is part of SOC. This
	  driver takes care of all the PHY functionality apart from comparator.
	  This driver interacts with the "OMAP Control USB Driver" to power
	  on/off the PHY.

config SAMSUNG_USBPHY
	tristate "Samsung USB PHY Driver"
	help
	  Enable this to support Samsung USB phy helper driver for Samsung SoCs.
	  This driver provides common interface to interact, for Samsung USB 2.0 PHY
	  driver and later for Samsung USB 3.0 PHY driver.

config SAMSUNG_USB2PHY
	tristate "Samsung USB 2.0 PHY controller Driver"
	select SAMSUNG_USBPHY
	help
	  Enable this to support Samsung USB 2.0 (High Speed) PHY controller
	  driver for Samsung SoCs.

config SAMSUNG_USB3PHY
	tristate "Samsung USB 3.0 PHY controller Driver"
	select SAMSUNG_USBPHY
	help
	  Enable this to support Samsung USB 3.0 (Super Speed) phy controller
	  for samsung SoCs.

config TWL4030_USB
	tristate "TWL4030 USB Transceiver Driver"
	depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
	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 && OMAP_USB2 && USB_MUSB_OMAP2PLUS
	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 USB_GPIO_VBUS
	tristate "GPIO based peripheral-only VBUS sensing 'transceiver'"
	depends on GPIOLIB
	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 USB_ISP1301
	tristate "NXP ISP1301 USB transceiver support"
	depends on USB || USB_GADGET
	depends on I2C
	help
	  Say Y here to add support for the NXP ISP1301 USB transceiver driver.
	  This chip is typically used as USB transceiver for USB host, gadget
	  and OTG drivers (to be selected separately).

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

config USB_MSM_OTG
	tristate "OTG support for Qualcomm on-chip USB controller"
	depends on (USB || USB_GADGET) && ARCH_MSM
	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_MV_OTG
	tristate "Marvell USB OTG support"
	depends on USB_EHCI_MV && USB_MV_UDC && PM_RUNTIME
	select USB_OTG
	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.

config USB_MXS_PHY
	tristate "Freescale MXS USB PHY support"
	depends on ARCH_MXC || ARCH_MXS
	select STMP_DEVICE
	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_RCAR_PHY
	tristate "Renesas R-Car USB phy support"
	depends on USB || USB_GADGET
	help
	  Say Y here to add support for the Renesas R-Car USB phy driver.
	  This chip is typically used as USB phy for USB host, gadget.
	  This driver supports: R8A7779

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

config USB_ULPI
	bool "Generic ULPI Transceiver Driver"
	depends on ARM
	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).

endif # USB_PHY
