# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Amlogic platforms
#
config PHY_MESON8_HDMI_TX
	tristate "Meson8, Meson8b and Meson8m2 HDMI TX PHY driver"
	depends on (ARCH_MESON && ARM) || COMPILE_TEST
	depends on OF
	select MFD_SYSCON
	help
	  Enable this to support the HDMI TX PHYs found in Meson8,
	  Meson8b and Meson8m2 SoCs.
	  If unsure, say N.

config PHY_MESON8B_USB2
	tristate "Meson8, Meson8b, Meson8m2 and GXBB USB2 PHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	depends on USB_SUPPORT
	select USB_COMMON
	select GENERIC_PHY
	select REGMAP_MMIO
	help
	  Enable this to support the Meson USB2 PHYs found in Meson8,
	  Meson8b and GXBB SoCs.
	  If unsure, say N.

config PHY_MESON_GXL_USB2
	tristate "Meson GXL and GXM USB2 PHY drivers"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	depends on USB_SUPPORT
	select GENERIC_PHY
	select REGMAP_MMIO
	help
	  Enable this to support the Meson USB2 PHYs found in Meson
	  GXL and GXM SoCs.
	  If unsure, say N.

config PHY_MESON_G12A_MIPI_DPHY_ANALOG
	tristate "Meson G12A MIPI Analog DPHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select MFD_SYSCON
	select GENERIC_PHY_MIPI_DPHY
	help
	  Enable this to support the Meson MIPI Analog DPHY found in Meson G12A
	  SoCs.
	  If unsure, say N.

config PHY_MESON_G12A_USB2
	tristate "Meson G12A USB2 PHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select REGMAP_MMIO
	help
	  Enable this to support the Meson USB2 PHYs found in Meson
	  G12A SoCs.
	  If unsure, say N.

config PHY_MESON_G12A_USB3_PCIE
	tristate "Meson G12A USB3+PCIE Combo PHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select REGMAP_MMIO
	help
	  Enable this to support the Meson USB3 + PCIE Combo PHY found
	  in Meson G12A SoCs.
	  If unsure, say N.

config PHY_MESON_AXG_PCIE
	tristate "Meson AXG PCIE PHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select REGMAP_MMIO
	help
	  Enable this to support the Meson MIPI + PCIE PHY found
	  in Meson AXG SoCs.
	  If unsure, say N.

config PHY_MESON_AXG_MIPI_PCIE_ANALOG
	tristate "Meson AXG MIPI + PCIE analog PHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select REGMAP_MMIO
	select GENERIC_PHY_MIPI_DPHY
	help
	  Enable this to support the Meson MIPI + PCIE analog PHY
	  found in Meson AXG SoCs.
	  If unsure, say N.

config PHY_MESON_AXG_MIPI_DPHY
	tristate "Meson AXG MIPI DPHY driver"
	default ARCH_MESON
	depends on OF && (ARCH_MESON || COMPILE_TEST)
	select GENERIC_PHY
	select REGMAP_MMIO
	select GENERIC_PHY_MIPI_DPHY
	help
	  Enable this to support the Meson MIPI DPHY found in Meson AXG
	  SoCs.
	  If unsure, say N.
