# 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_PANEL_BRIDGE if DRM
	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_SNPS_EUSB2
	tristate "Qualcomm SNPS eUSB2 PHY Driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable support for the USB high-speed SNPS eUSB2 phy on Qualcomm
	  chipsets. The PHY is paired with a Synopsys DWC3 USB controller
	  on Qualcomm SOCs.

config PHY_QCOM_EUSB2_REPEATER
	tristate "Qualcomm SNPS eUSB2 Repeater Driver"
	depends on OF && (ARCH_QCOM || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable support for the USB high-speed SNPS eUSB2 repeater on Qualcomm
	  PMICs. The repeater is paired with a Synopsys 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_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.
