# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Allwinner platforms
#
config PHY_SUN4I_USB
	tristate "Allwinner sunxi SoC USB PHY driver"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HAS_IOMEM
	depends on RESET_CONTROLLER
	depends on EXTCON
	depends on POWER_SUPPLY
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_COMMON
	help
	  Enable this to support the transceiver that is part of Allwinner
	  sunxi SoCs.

	  This driver controls the entire USB PHY block, both the USB OTG
	  parts, as well as the 2 regular USB 2 host PHYs.

config PHY_SUN6I_MIPI_DPHY
	tristate "Allwinner A31 MIPI D-PHY Support"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HAS_IOMEM
	depends on RESET_CONTROLLER
	select GENERIC_PHY
	select GENERIC_PHY_MIPI_DPHY
	select REGMAP_MMIO
	help
	  Choose this option if you have an Allwinner SoC with
	  MIPI-DSI support. If M is selected, the module will be
	  called sun6i_mipi_dphy.

config PHY_SUN9I_USB
	tristate "Allwinner sun9i SoC USB PHY driver"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HAS_IOMEM
	depends on RESET_CONTROLLER
	depends on USB_SUPPORT
	select USB_COMMON
	select GENERIC_PHY
	help
	  Enable this to support the transceiver that is part of Allwinner
	  sun9i SoCs.

	  This driver controls each individual USB 2 host PHY.

config PHY_SUN50I_USB3
	tristate "Allwinner H6 SoC USB3 PHY driver"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on HAS_IOMEM && OF
	depends on RESET_CONTROLLER
	select GENERIC_PHY
	help
	  Enable this to support the USB3.0-capable transceiver that is
	  part of Allwinner H6 SoC.

	  This driver controls each individual USB 2+3 host PHY combo.
