# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Qualcomm and Atheros platforms
#
config PHY_ATH79_USB
	tristate "Atheros AR71XX/9XXX USB PHY driver"
	depends on OF && (ATH79 || COMPILE_TEST)
	default y if USB_EHCI_HCD_PLATFORM || USB_OHCI_HCD_PLATFORM
	select RESET_CONTROLLER
	select GENERIC_PHY
	help
	  Enable this to support the USB PHY on Atheros AR71XX/9XXX SoCs.

config PHY_QCOM_APQ8064_SATA
	tristate "Qualcomm APQ8064 SATA SerDes/PHY driver"
	depends on ARCH_QCOM
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY

config PHY_QCOM_EDP
	tristate "Qualcomm eDP PHY driver"
	depends on ARCH_QCOM || COMPILE_TEST
	depends on OF
	depends on COMMON_CLK
	select GENERIC_PHY
	help
	  Enable this driver to support the Qualcomm eDP PHY found in various
	  Qualcomm chipsets.

config PHY_QCOM_IPQ4019_USB
	tristate "Qualcomm IPQ4019 USB PHY driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Support for the USB PHY-s on Qualcomm IPQ40xx SoC-s.

config PHY_QCOM_IPQ806X_SATA
	tristate "Qualcomm IPQ806x SATA SerDes/PHY driver"
	depends on ARCH_QCOM
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY

config PHY_QCOM_PCIE2
	tristate "Qualcomm PCIe Gen2 PHY Driver"
	depends on OF && COMMON_CLK && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable this to support the Qualcomm PCIe PHY, used with the Synopsys
	  based PCIe controller.

menuconfig PHY_QCOM_QMP
	tristate "Qualcomm QMP PHY Drivers"
	depends on OF && COMMON_CLK && (ARCH_QCOM || COMPILE_TEST)

if PHY_QCOM_QMP

config PHY_QCOM_QMP_COMBO
	tristate "Qualcomm QMP Combo PHY Driver"
	default PHY_QCOM_QMP
	depends on TYPEC || TYPEC=n
	depends on DRM || DRM=n
	select GENERIC_PHY
	select MFD_SYSCON
	select DRM_AUX_BRIDGE if DRM_BRIDGE
	help
	  Enable this to support the QMP Combo PHY transceiver that is used
	  with USB3 and DisplayPort controllers on Qualcomm chips.

config PHY_QCOM_QMP_PCIE
	tristate "Qualcomm QMP PCIe PHY Driver"
	depends on PCI || COMPILE_TEST
	select GENERIC_PHY
	default PHY_QCOM_QMP
	help
	  Enable this to support the QMP PCIe PHY transceiver that is used
	  with PCIe controllers on Qualcomm chips.

config PHY_QCOM_QMP_PCIE_8996
	tristate "Qualcomm QMP PCIe 8996 PHY Driver"
	depends on PCI || COMPILE_TEST
	select GENERIC_PHY
	default PHY_QCOM_QMP
	help
	  Enable this to support the QMP PCIe PHY transceiver that is used
	  with PCIe controllers on Qualcomm msm8996 chips.

config PHY_QCOM_QMP_UFS
	tristate "Qualcomm QMP UFS PHY Driver"
	select GENERIC_PHY
	default PHY_QCOM_QMP
	help
	  Enable this to support the QMP UFS PHY transceiver that is used
	  with UFS controllers on Qualcomm chips.

config PHY_QCOM_QMP_USB
	tristate "Qualcomm QMP USB PHY Driver"
	select GENERIC_PHY
	default PHY_QCOM_QMP
	help
	  Enable this to support the QMP USB PHY transceiver that is used
	  with USB3 controllers on Qualcomm chips.

config PHY_QCOM_QMP_USB_LEGACY
	tristate "Qualcomm QMP legacy USB PHY Driver"
	select GENERIC_PHY
	default n
	help
	  Enable this legacy driver to support the QMP USB+DisplayPort Combo
	  PHY transceivers working only in USB3 mode on Qualcomm chips. This
	  driver exists only for compatibility with older device trees,
	  existing users have been migrated to PHY_QCOM_QMP_COMBO driver.

endif # PHY_QCOM_QMP

config PHY_QCOM_QUSB2
	tristate "Qualcomm QUSB2 PHY Driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on NVMEM || !NVMEM
	select GENERIC_PHY
	help
	  Enable this to support the HighSpeed QUSB2 PHY transceiver for USB
	  controllers on Qualcomm chips. This driver supports the high-speed
	  PHY which is usually paired with either the ChipIdea or Synopsys DWC3
	  USB IPs on MSM SOCs.

config PHY_QCOM_EUSB2_REPEATER
	tristate "Qualcomm PMIC eUSB2 Repeater Driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable support for the USB high-speed eUSB2 repeater on Qualcomm
	  PMICs. The repeater is paired with a Synopsys or M31 eUSB2 Phy
	  on Qualcomm SOCs.

config PHY_QCOM_M31_USB
	tristate "Qualcomm M31 HS PHY driver support"
	depends on USB && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable this to support M31 HS PHY transceivers on Qualcomm chips
	  with DWC3 USB core. It handles PHY initialization, clock
	  management required after resetting the hardware and power
	  management. This driver is required even for peripheral only or
	  host only mode configurations.

config PHY_QCOM_UNIPHY_PCIE_28LP
	bool "PCIE UNIPHY 28LP PHY driver"
	depends on ARCH_QCOM
	depends on COMMON_CLK
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY
	help
	  Enable this to support the PCIe UNIPHY 28LP phy transceiver that
	  is used with PCIe controllers on Qualcomm IPQ5332 chips. It
	  handles PHY initialization, clock management required after
	  resetting the hardware and power management.

config PHY_QCOM_M31_EUSB
	tristate "Qualcomm M31 eUSB2 PHY driver support"
	depends on USB && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable this to support M31 EUSB2 PHY transceivers on Qualcomm
	  chips with DWC3 USB core. It supports initializing and cleaning
	  up of the associated USB repeater that is paired with the eUSB2
	  PHY.

config PHY_QCOM_USB_HS
	tristate "Qualcomm USB HS PHY module"
	depends on USB_ULPI_BUS
	depends on EXTCON || !EXTCON # if EXTCON=m, this cannot be built-in
	select GENERIC_PHY
	help
	  Support for the USB high-speed ULPI compliant phy on Qualcomm
	  chipsets.

config PHY_QCOM_USB_SNPS_FEMTO_V2
	tristate "Qualcomm SNPS FEMTO USB HS PHY V2 module"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable support for the USB high-speed SNPS Femto phy on Qualcomm
	  chipsets.  This PHY has differences in the register map compared
	  to the V1 variants.  The PHY is paired with a Synopsys DWC3 USB
	  controller on Qualcomm SOCs.

config PHY_QCOM_USB_HSIC
	tristate "Qualcomm USB HSIC ULPI PHY module"
	depends on USB_ULPI_BUS
	select GENERIC_PHY
	help
	  Support for the USB HSIC ULPI compliant PHY on QCOM chipsets.

config PHY_QCOM_USB_HS_28NM
	tristate "Qualcomm 28nm High-Speed PHY"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on EXTCON || !EXTCON # if EXTCON=m, this cannot be built-in
	select GENERIC_PHY
	help
	  Enable this to support the Qualcomm Synopsys DesignWare Core 28nm
	  High-Speed PHY driver. This driver supports the Hi-Speed PHY which
	  is usually paired with either the ChipIdea or Synopsys DWC3 USB
	  IPs on MSM SOCs.

config PHY_QCOM_USB_SS
	tristate "Qualcomm USB Super-Speed PHY driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on EXTCON || !EXTCON # if EXTCON=m, this cannot be built-in
	select GENERIC_PHY
	help
	  Enable this to support the Super-Speed USB transceiver on various
	  Qualcomm chipsets.

config PHY_QCOM_IPQ806X_USB
	tristate "Qualcomm IPQ806x DWC3 USB PHY driver"
	depends on HAS_IOMEM
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  This option enables support for the Synopsis PHYs present inside the
	  Qualcomm USB3.0 DWC3 controller on ipq806x SoC. This driver supports
	  both HS and SS PHY controllers.

config PHY_QCOM_SGMII_ETH
	tristate "Qualcomm DWMAC SGMII SerDes/PHY driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support the internal SerDes/SGMII PHY on various
	  Qualcomm chipsets.
