#
# 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_USB2
	tristate "Samsung USB 2.0 PHY driver"
	depends on HAS_IOMEM
	depends on USB_EHCI_EXYNOS || USB_OHCI_EXYNOS || USB_DWC2
	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_EXYNOS4212 || 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
	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
	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_EXYNOS_USBDRD
	tristate "Exynos SoC series USB DRD PHY driver"
	depends on ARCH_EXYNOS && OF
	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 SoC series.
	  This driver provides PHY interface for USB 3.0 DRD controller
	  present on Exynos SoC series.

config PHY_EXYNOS_USBDRD3
	tristate "Exynos SoC series USB DRD PHY3 & PHY2 driver"
	depends on ARCH_EXYNOS && OF
	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 SoC series.
	  This driver provides PHY interface for USB 3.0 DRD controller
	  present on Exynos SoC series.

config PHY_EXYNOS_DEBUGFS
	tristate "Exynos SoC series USB DRD PHY DebugFS"
	depends on DEBUG_FS
	depends on PHY_EXYNOS_USBDRD || PHY_EXYNOS_USBDRD3
	select GENERIC_PHY
	default y
	help
	  Enable USB DRD PHY DEBUGFS support for Exynos SoC series.
	  This driver provides PHY debugging interface for USBDRD PHY controller
	  present on Exynos SoC series.

config PHY_EXYNOS_DP_DEBUGFS
	tristate "Exynos SoC series USB DRD DP PHY DebugFS"
	depends on DEBUG_FS
	depends on PHY_EXYNOS_DEBUGFS
	select GENERIC_PHY
	default y
	help
	  Enable USB DRD DP PHY DEBUGFS support for Exynos SoC series.
	  This driver provides PHY debugging interface for USBDRD DP PHY controller
	  present on Exynos SoC series.

config PHY_SAMSUNG_USB_CAL
	bool "Samsung USB PHY CAL"
	depends on PHY_EXYNOS_USBDRD || PHY_EXYNOS_USBDRD3
	default y
	help
	  Enable this to support CAL (Chip Abstraction Layer)
	  for Samsung USB PHY controller.

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.

config PHY_EXYNOS8895_MIPI
	tristate "Samsung EXYNOS SoC MIPI CSI/DSI D/C-PHY driver"
	depends on HAS_IOMEM
	depends on ARCH_EXYNOS && OF || COMPILE_TEST
	select GENERIC_PHY
	help
	  Support for MIPI CSI and MIPI DSI DPHY found on Samsung
	  and EXYNOS SoCs.

config PHY_EXYNOS_DISPLAYPORT
	tristate "Samsung EXYNOS SoC DISPLAYPORT PHY driver"
	depends on HAS_IOMEM
	depends on ARCH_EXYNOS && OF || COMPILE_TEST
	select GENERIC_PHY
	help
	  Support for DISPLAYPORT PHY found on Samsung
	  and EXYNOS SoCs.
