# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Hisilicon platforms
#
config PHY_HI6220_USB
	tristate "hi6220 USB PHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	depends on HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HISILICON HI6220 USB PHY.

	  To compile this driver as a module, choose M here.

config PHY_HI3660_USB
	tristate "hi3660 USB PHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HISILICON HI3660 USB PHY.

	  To compile this driver as a module, choose M here.

config PHY_HI3670_USB
	tristate "hi3670 USB PHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HISILICON HI3670 USB PHY.

	  To compile this driver as a module, choose M here.

config PHY_HI3670_PCIE
	tristate "hi3670 PCIe PHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HiSilicon hi3670 PCIe PHY.

	  To compile this driver as a module, choose M here.

config PHY_HISTB_COMBPHY
	tristate "HiSilicon STB SoCs COMBPHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HISILICON STB SoCs COMBPHY.
	  If unsure, say N.

config PHY_HISI_INNO_USB2
	tristate "HiSilicon INNO USB2 PHY support"
	depends on ARCH_HISI || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Support for INNO USB2 PHY on HiSilicon SoCs. This Phy supports
	  USB 1.5Mb/s, USB 12Mb/s, USB 480Mb/s speeds. It supports one
	  USB host port to accept one USB device.

config PHY_HIX5HD2_SATA
	tristate "HIX5HD2 SATA PHY Driver"
	depends on ARCH_HIX5HD2 && OF && HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Support for SATA PHY on Hisilicon hix5hd2 Soc.
