# 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
	default y if TI_CPSW=y || TI_CPSW_SWITCHDEV=y
	depends on TI_CPSW || TI_CPSW_SWITCHDEV || COMPILE_TEST
	select GENERIC_PHY
	select REGMAP
	default m
	help
	  This driver supports configuring of the TI CPSW Port mode depending on
	  the Ethernet PHY connected to the CPSW Port.
