# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Mediatek devices
#
config PHY_MTK_PCIE
	tristate "MediaTek PCIe-PHY Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  Say 'Y' here to add support for MediaTek PCIe PHY driver.
	  This driver create the basic PHY instance and provides initialize
	  callback for PCIe GEN3 port, it supports software efuse
	  initialization.

config PHY_MTK_XFI_TPHY
	tristate "MediaTek 10GE SerDes XFI T-PHY driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  Say 'Y' here to add support for MediaTek XFI T-PHY driver.
	  The driver provides access to the Ethernet SerDes T-PHY supporting
	  1GE and 2.5GE modes via the LynxI PCS, and 5GE and 10GE modes
	  via the USXGMII PCS found in MediaTek SoCs with 10G Ethernet.

config PHY_MTK_TPHY
	tristate "MediaTek T-PHY Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF && OF_ADDRESS
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Say 'Y' here to add support for MediaTek T-PHY driver,
	  it supports multiple usb2.0, usb3.0 ports, PCIe and
	  SATA, and meanwhile supports two version T-PHY which have
	  different banks layout, the T-PHY with shared banks between
	  multi-ports is first version, otherwise is second version,
	  so you can easily distinguish them by banks layout.

config PHY_MTK_UFS
	tristate "MediaTek UFS M-PHY driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  Support for UFS M-PHY on MediaTek chipsets.
	  Enable this to provide vendor-specific probing,
	  initialization, power on and power off flow of
	  specified M-PHYs.

config PHY_MTK_XSPHY
	tristate "MediaTek XS-PHY Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF && OF_ADDRESS
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support the SuperSpeedPlus XS-PHY transceiver for
	  USB3.1 GEN2 controllers on MediaTek chips. The driver supports
	  multiple USB2.0, USB3.1 GEN2 ports.

config PHY_MTK_HDMI
	tristate "MediaTek HDMI-PHY Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on COMMON_CLK
	depends on OF
	depends on REGULATOR
	select GENERIC_PHY
	help
	  Support HDMI PHY for Mediatek SoCs.

config PHY_MTK_MIPI_CSI_0_5
	tristate "MediaTek MIPI CSI CD-PHY v0.5 Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  Enable this to support the MIPI CSI CD-PHY receiver version 0.5.
	  The driver supports multiple CSI cdphy ports simultaneously.

	  To compile this driver as a module, choose M here: the
	  module will be called phy-mtk-mipi-csi-0-5.

config PHY_MTK_MIPI_DSI
	tristate "MediaTek MIPI-DSI Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on COMMON_CLK
	depends on OF
	select GENERIC_PHY
	help
	  Support MIPI DSI for Mediatek SoCs.

config PHY_MTK_DP
	tristate "MediaTek DP-PHY Driver"
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  Support DisplayPort PHY for MediaTek SoCs.
