# 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 || 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_CP110_UTMI
	tristate "Marvell CP110 UTMI driver"
	depends on ARCH_MVEBU || COMPILE_TEST
	depends on OF && USB_COMMON
	select GENERIC_PHY
	help
	  Enable this to support Marvell CP110 UTMI PHY driver.

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.

config PHY_MMP3_HSIC
	tristate "Marvell MMP3 USB HSIC PHY Driver"
	depends on MACH_MMP3_DT || COMPILE_TEST
	select GENERIC_PHY
	help
	  Enable this to support Marvell MMP3 USB HSIC PHY driver for
	  Marvell MMP3 SoC. This driver will be used my the Marvell EHCI
	  driver to initialize the interface to internal USB HSIC
	  components on MMP3-based boards.

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