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