# SPDX-License-Identifier: GPL-2.0-only
#
# Phy drivers for Samsung platforms
#
config PHY_EXYNOS_DP_VIDEO
	tristate "Exynos SoC series Display Port PHY driver"
	depends on OF
	depends on ARCH_EXYNOS || COMPILE_TEST
	default ARCH_EXYNOS
	select GENERIC_PHY
	help
	  Support for Display Port PHY found on Samsung Exynos SoCs.

config PHY_EXYNOS_MIPI_VIDEO
	tristate "S5P/Exynos SoC series MIPI CSI-2/DSI PHY driver"
	depends on HAS_IOMEM
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	select GENERIC_PHY
	default y if ARCH_S5PV210 || ARCH_EXYNOS
	help
	  Support for MIPI CSI-2 and MIPI DSI DPHY found on Samsung S5P
	  and Exynos SoCs.

config PHY_EXYNOS_PCIE
	bool "Exynos PCIe PHY driver"
	depends on OF && (ARCH_EXYNOS || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable PCIe PHY support for Exynos SoC series.
	  This driver provides PHY interface for Exynos PCIe controller.

config PHY_SAMSUNG_UFS
	tristate "SAMSUNG SoC series UFS PHY driver"
	depends on OF && (ARCH_EXYNOS || COMPILE_TEST)
	select GENERIC_PHY
	help
	  Enable this to support the Samsung UFS PHY driver for
	  Samsung SoCs. This driver provides the interface for UFS
	  host controller to do PHY related programming.

config PHY_SAMSUNG_USB2
	tristate "Samsung USB 2.0 PHY driver"
	depends on HAS_IOMEM
	depends on USB_EHCI_EXYNOS || USB_OHCI_EXYNOS || USB_DWC2 || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	default ARCH_EXYNOS
	help
	  Enable this to support the Samsung USB 2.0 PHY driver for Samsung
	  SoCs. This driver provides the interface for USB 2.0 PHY. Support
	  for particular PHYs will be enabled based on the SoC type in addition
	  to this driver.

config PHY_EXYNOS4210_USB2
	bool
	depends on PHY_SAMSUNG_USB2
	default CPU_EXYNOS4210

config PHY_EXYNOS4X12_USB2
	bool
	depends on PHY_SAMSUNG_USB2
	default SOC_EXYNOS3250 || SOC_EXYNOS4412

config PHY_EXYNOS5250_USB2
	bool
	depends on PHY_SAMSUNG_USB2
	default SOC_EXYNOS5250 || SOC_EXYNOS5420

config PHY_S5PV210_USB2
	bool "Support for S5PV210"
	depends on PHY_SAMSUNG_USB2
	depends on ARCH_S5PV210 || COMPILE_TEST
	help
	  Enable USB PHY support for S5PV210. This option requires that Samsung
	  USB 2.0 PHY driver is enabled and means that support for this
	  particular SoC is compiled in the driver. In case of S5PV210 two phys
	  are available - device and host.

config PHY_EXYNOS5_USBDRD
	tristate "Exynos5 SoC series USB DRD PHY driver"
	depends on (ARCH_EXYNOS && OF) || COMPILE_TEST
	depends on HAS_IOMEM
	depends on USB_DWC3_EXYNOS
	select GENERIC_PHY
	select MFD_SYSCON
	default y
	help
	  Enable USB DRD PHY support for Exynos 5 SoC series.
	  This driver provides PHY interface for USB 3.0 DRD controller
	  present on Exynos5 SoC series.

config PHY_EXYNOS5250_SATA
	tristate "Exynos5250 Sata SerDes/PHY driver"
	depends on SOC_EXYNOS5250
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY
	select I2C
	select I2C_S3C2410
	select MFD_SYSCON
	help
	  Enable this to support SATA SerDes/Phy found on Samsung's
	  Exynos5250 based SoCs.This SerDes/Phy supports SATA 1.5 Gb/s,
	  SATA 3.0 Gb/s, SATA 6.0 Gb/s speeds. It supports one SATA host
	  port to accept one SATA device.
