# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Marvell platforms
#
config ARMADA375_USBCLUSTER_PHY
	def_bool y
	depends on MACH_ARMADA_375 || COMPILE_TEST
	depends on OF && HAS_IOMEM
	select GENERIC_PHY

config PHY_BERLIN_SATA
	tristate "Marvell Berlin SATA PHY driver"
	depends on ARCH_BERLIN || COMPILE_TEST
	depends on OF && HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support the SATA PHY on Marvell Berlin SoCs.

config PHY_BERLIN_USB
	tristate "Marvell Berlin USB PHY Driver"
	depends on ARCH_BERLIN || COMPILE_TEST
	depends on OF && HAS_IOMEM && RESET_CONTROLLER
	select GENERIC_PHY
	help
	  Enable this to support the USB PHY on Marvell Berlin SoCs.

config PHY_MVEBU_A3700_COMPHY
	tristate "Marvell A3700 comphy driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF
	depends on HAVE_ARM_SMCCC
	default y
	select GENERIC_PHY
	help
	  This driver allows to control the comphy, a hardware block providing
	  shared serdes PHYs on Marvell Armada 3700. Its serdes lanes can be
	  used by various controllers: Ethernet, SATA, USB3, PCIe.

config PHY_MVEBU_A3700_UTMI
	tristate "Marvell A3700 UTMI driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF
	default y
	select GENERIC_PHY
	help
	  Enable this to support Marvell A3700 UTMI PHY driver.

config PHY_MVEBU_A38X_COMPHY
	tristate "Marvell Armada 38x comphy driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	help
	  This driver allows to control the comphy, an hardware block providing
	  shared serdes PHYs on Marvell Armada 38x. Its serdes lanes can be
	  used by various controllers (Ethernet, sata, usb, PCIe...).

config PHY_MVEBU_CP110_COMPHY
	tristate "Marvell CP110 comphy driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF
	depends on HAVE_ARM_SMCCC
	select GENERIC_PHY
	help
	  This driver allows to control the comphy, an hardware block providing
	  shared serdes PHYs on Marvell Armada 7k/8k (in the CP110). Its serdes
	  lanes can be used by various controllers (Ethernet, sata, usb,
	  PCIe...).

config PHY_MVEBU_SATA
	def_bool y
	depends on ARCH_DOVE || MACH_DOVE || MACH_KIRKWOOD
	depends on OF
	select GENERIC_PHY

config PHY_PXA_28NM_HSIC
	tristate "Marvell USB HSIC 28nm PHY Driver"
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support Marvell USB HSIC PHY driver for Marvell
	  SoC. This driver will do the PHY initialization and shutdown.
	  The PHY driver will be used by Marvell ehci driver.

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

config PHY_PXA_28NM_USB2
	tristate "Marvell USB 2.0 28nm PHY Driver"
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support Marvell USB 2.0 PHY driver for Marvell
	  SoC. This driver will do the PHY initialization and shutdown.
	  The PHY driver will be used by Marvell udc/ehci/otg driver.

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

config PHY_PXA_USB
	tristate "Marvell PXA USB PHY Driver"
	depends on ARCH_PXA || ARCH_MMP || COMPILE_TEST
	select GENERIC_PHY
	help
	  Enable this to support Marvell PXA USB PHY driver for Marvell
	  SoC. This driver will do the PHY initialization and shutdown.
	  The PHY driver will be used by Marvell udc/ehci/otg driver.

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

config PHY_MMP3_USB
	tristate "Marvell MMP3 USB PHY Driver"
	depends on MACH_MMP3_DT || COMPILE_TEST
	select GENERIC_PHY
	help
	  Enable this to support Marvell MMP3 USB PHY driver for Marvell
	  SoC. This driver will do the PHY initialization and shutdown.
	  The PHY driver will be used by Marvell udc/ehci/otg driver.

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