# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Rockchip platforms
#
config PHY_ROCKCHIP_DP
	tristate "Rockchip Display Port PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip Display Port PHY.

config PHY_ROCKCHIP_DPHY_RX0
	tristate "Rockchip MIPI Synopsys DPHY RX0 driver"
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	select GENERIC_PHY_MIPI_DPHY
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip MIPI Synopsys DPHY RX0
	  associated to the Rockchip ISP module present in RK3399 SoCs.

	  To compile this driver as a module, choose M here: the module
	  will be called phy-rockchip-dphy-rx0.

config PHY_ROCKCHIP_EMMC
	tristate "Rockchip EMMC PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip EMMC PHY.

config PHY_ROCKCHIP_INNO_HDMI
	tristate "Rockchip INNO HDMI PHY Driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	depends on COMMON_CLK
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip Innosilicon HDMI PHY.

config PHY_ROCKCHIP_INNO_USB2
	tristate "Rockchip INNO USB2PHY Driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	depends on COMMON_CLK
	depends on EXTCON
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_COMMON
	help
	  Support for Rockchip USB2.0 PHY with Innosilicon IP block.

config PHY_ROCKCHIP_INNO_CSIDPHY
	tristate "Rockchip Innosilicon MIPI CSI PHY driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	select GENERIC_PHY
	select GENERIC_PHY_MIPI_DPHY
	help
	  Enable this to support the Rockchip MIPI CSI PHY with
	  Innosilicon IP block.

config PHY_ROCKCHIP_INNO_DSIDPHY
	tristate "Rockchip Innosilicon MIPI/LVDS/TTL PHY driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	select GENERIC_PHY
	select GENERIC_PHY_MIPI_DPHY
	help
	  Enable this to support the Rockchip MIPI/LVDS/TTL PHY with
	  Innosilicon IP block.

config PHY_ROCKCHIP_NANENG_COMBO_PHY
	tristate "Rockchip NANENG COMBO PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip PCIe/USB3.0/SATA/QSGMII
	  combo PHY with NaNeng IP block.

config PHY_ROCKCHIP_PCIE
	tristate "Rockchip PCIe PHY Driver"
	depends on (ARCH_ROCKCHIP && OF) || COMPILE_TEST
	depends on HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the Rockchip PCIe PHY.

config PHY_ROCKCHIP_SAMSUNG_HDPTX
	tristate "Rockchip Samsung HDMI/eDP Combo PHY driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip HDMI/eDP Combo PHY
	  with Samsung IP block.

config PHY_ROCKCHIP_SNPS_PCIE3
	tristate "Rockchip Snps PCIe3 PHY Driver"
	depends on (ARCH_ROCKCHIP && OF) || COMPILE_TEST
	depends on HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the Rockchip snps PCIe3 PHY.

config PHY_ROCKCHIP_TYPEC
	tristate "Rockchip TYPEC PHY Driver"
	depends on OF && (ARCH_ROCKCHIP || COMPILE_TEST)
	select EXTCON
	select GENERIC_PHY
	select RESET_CONTROLLER
	help
	  Enable this to support the Rockchip USB TYPEC PHY.

config PHY_ROCKCHIP_USB
	tristate "Rockchip USB2 PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip USB 2.0 PHY.
