# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for TI platforms
#
config PHY_DA8XX_USB
	tristate "TI DA8xx USB PHY Driver"
	depends on ARCH_DAVINCI_DA8XX || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the USB PHY on DA8xx SoCs.

	  This driver controls both the USB 1.1 PHY and the USB 2.0 PHY.

config PHY_DM816X_USB
	tristate "TI dm816x USB PHY driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_PHY
	help
	  Enable this for dm816x USB to work.

config PHY_AM654_SERDES
	tristate "TI AM654 SERDES support"
	depends on OF && (ARCH_K3 || COMPILE_TEST)
	depends on COMMON_CLK
	select GENERIC_PHY
	select MULTIPLEXER
	select REGMAP_MMIO
	select MUX_MMIO
	help
	  This option enables support for TI AM654 SerDes PHY used for
	  PCIe.

config PHY_J721E_WIZ
	tristate "TI J721E WIZ (SERDES Wrapper) support"
	depends on OF && (ARCH_K3 || COMPILE_TEST)
	depends on HAS_IOMEM && OF_ADDRESS
	depends on COMMON_CLK
	select GENERIC_PHY
	select MULTIPLEXER
	select REGMAP_MMIO
	select MUX_MMIO
	help
	  This option enables support for WIZ module present in TI's J721E
	  SoC. WIZ is a serdes wrapper used to configure some of the input
	  signals to the SERDES (Sierra/Torrent). This driver configures
	  three clock selects (pll0, pll1, dig) and resets for each of the
	  lanes.

config OMAP_CONTROL_PHY
	tristate "OMAP CONTROL PHY Driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	help
	  Enable this to add support for the PHY 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/SATA PHY/PCIE PHY
	  (PIPE3 PHY).

config OMAP_USB2
	tristate "OMAP USB2 PHY Driver"
	depends on ARCH_OMAP2PLUS || ARCH_K3
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_PHY
	select OMAP_CONTROL_PHY if ARCH_OMAP2PLUS || COMPILE_TEST
	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 TI_PIPE3
	tristate "TI PIPE3 PHY Driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	select GENERIC_PHY
	select OMAP_CONTROL_PHY
	help
	  Enable this to support the PIPE3 PHY that is part of TI SOCs. This
	  driver takes care of all the PHY functionality apart from comparator.
	  This driver interacts with the "OMAP Control PHY Driver" to power
	  on/off the PHY.

config PHY_TUSB1210
	tristate "TI TUSB1210 ULPI PHY module"
	depends on USB_ULPI_BUS
	select GENERIC_PHY
	help
	  Support for TI TUSB1210 USB ULPI PHY.

config TWL4030_USB
	tristate "TWL4030 USB Transceiver Driver"
	depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
	depends on USB_SUPPORT
	depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't 'y'
	select GENERIC_PHY
	select USB_PHY
	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 PHY_TI_GMII_SEL
	tristate
	select GENERIC_PHY
	select REGMAP
	help
	  This driver supports configuring of the TI CPSW Port mode depending on
	  the Ethernet PHY connected to the CPSW Port.
