# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Marvell platforms
#
config ARMADA375_USBCLUSTER_PHY
	bool "Armada 375 USB cluster PHY support" if COMPILE_TEST
	default y if MACH_ARMADA_375
	depends on OF && HAS_IOMEM
	select GENERIC_PHY

config PHY_BERLIN_SATA
	tristate "Marvell Berlin SATA PHY driver"
	depends on ARCH_BERLIN && HAS_IOMEM && OF
	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 && RESET_CONTROLLER && HAS_IOMEM && OF
	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
	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.
