# 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
	depends on HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	select RATIONAL
	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.

config PHY_ROCKCHIP_USBDP
	tristate "Rockchip USBDP COMBO PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	depends on TYPEC
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip USB3.0/DP combo PHY with
	  Samsung IP block. This is required for USB3 support on RK3588.

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