#
# PHY
#

menu "PHY Subsystem"

config GENERIC_PHY
	bool "PHY Core"
	help
	  Generic PHY support.

	  This framework is designed to provide a generic interface for PHY
	  devices present in the kernel. This layer will have the generic
	  API by which phy drivers can create PHY using the phy framework and
	  phy users can obtain reference to the PHY. All the users of this
	  framework should select this config.

config PHY_BCM_NS_USB2
	tristate "Broadcom Northstar USB 2.0 PHY Driver"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	depends on HAS_IOMEM && OF
	select GENERIC_PHY
	help
	  Enable this to support Broadcom USB 2.0 PHY connected to the USB
	  controller on Northstar family.

config PHY_BCM_NS_USB3
	tristate "Broadcom Northstar USB 3.0 PHY Driver"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	depends on HAS_IOMEM && OF
	select GENERIC_PHY
	help
	  Enable this to support Broadcom USB 3.0 PHY connected to the USB
	  controller on Northstar family.

config PHY_BERLIN_USB
	tristate "Marvell Berlin USB PHY Driver"
	depends on ARCH_BERLIN && RESET_CONTROLLER && HAS_IOMEM && OF
	select GENERIC_PHY
	help
	  Enable this to support the USB PHY on Marvell Berlin SoCs.

config PHY_BERLIN_SATA
	tristate "Marvell Berlin SATA PHY driver"
	depends on ARCH_BERLIN && HAS_IOMEM && OF
	select GENERIC_PHY
	help
	  Enable this to support the SATA PHY on Marvell Berlin SoCs.

config ARMADA375_USBCLUSTER_PHY
	def_bool y
	depends on MACH_ARMADA_375 || COMPILE_TEST
	depends on OF && HAS_IOMEM
	select GENERIC_PHY

config PHY_DA8XX_USB
	tristate "TI DA8xx USB PHY Driver"
	depends on ARCH_DAVINCI_DA8XX
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the USB PHY on DA8xx SoCs.

	  This driver controls both the USB 1.1 PHY and the USB 2.0 PHY.

config PHY_DM816X_USB
	tristate "TI dm816x USB PHY driver"
	depends on ARCH_OMAP2PLUS
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_PHY
	help
	  Enable this for dm816x USB to work.

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_LPC18XX_USB_OTG
	tristate "NXP LPC18xx/43xx SoC USB OTG PHY driver"
	depends on OF && (ARCH_LPC18XX || COMPILE_TEST)
	depends on MFD_SYSCON
	select GENERIC_PHY
	help
	  Enable this to support NXP LPC18xx/43xx internal USB OTG PHY.

	  This driver is need for USB0 support on LPC18xx/43xx and takes
	  care of enabling and clock setup.

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_MVEBU_SATA
	def_bool y
	depends on ARCH_DOVE || MACH_DOVE || MACH_KIRKWOOD
	depends on OF
	select GENERIC_PHY

config PHY_MIPHY28LP
	tristate "STMicroelectronics MIPHY28LP PHY driver for STiH407"
	depends on ARCH_STI
	select GENERIC_PHY
	help
	  Enable this to support the miphy transceiver (for SATA/PCIE/USB3)
	  that is part of STMicroelectronics STiH407 SoC.

config PHY_MIPHY365X
	tristate "STMicroelectronics MIPHY365X PHY driver for STiH41x series"
	depends on ARCH_STI
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY
	help
	  Enable this to support the miphy transceiver (for SATA/PCIE)
	  that is part of STMicroelectronics STiH41x SoC series.

config PHY_RCAR_GEN2
	tristate "Renesas R-Car generation 2 USB PHY driver"
	depends on ARCH_RENESAS
	depends on GENERIC_PHY
	help
	  Support for USB PHY found on Renesas R-Car generation 2 SoCs.

config PHY_RCAR_GEN3_USB2
	tristate "Renesas R-Car generation 3 USB 2.0 PHY driver"
	depends on ARCH_RENESAS
	depends on EXTCON
	select GENERIC_PHY
	help
	  Support for USB 2.0 PHY found on Renesas R-Car generation 3 SoCs.

config OMAP_CONTROL_PHY
	tristate "OMAP CONTROL PHY Driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	help
	  Enable this to add support for the PHY part present in the control
	  module. This driver has API to power on the USB2 PHY and to write to
	  the mailbox. The mailbox is present only in omap4 and the register to
	  power on the USB2 PHY is present in OMAP4 and OMAP5. OMAP5 has an
	  additional register to power on USB3 PHY/SATA PHY/PCIE PHY
	  (PIPE3 PHY).

config OMAP_USB2
	tristate "OMAP USB2 PHY Driver"
	depends on ARCH_OMAP2PLUS
	depends on USB_SUPPORT
	select GENERIC_PHY
	select USB_PHY
	select OMAP_CONTROL_PHY
	depends on OMAP_OCP2SCP
	help
	  Enable this to support the transceiver that is part of SOC. This
	  driver takes care of all the PHY functionality apart from comparator.
	  The USB OTG controller communicates with the comparator using this
	  driver.

config TI_PIPE3
	tristate "TI PIPE3 PHY Driver"
	depends on ARCH_OMAP2PLUS || COMPILE_TEST
	select GENERIC_PHY
	select OMAP_CONTROL_PHY
	depends on OMAP_OCP2SCP
	help
	  Enable this to support the PIPE3 PHY that is part of TI SOCs. This
	  driver takes care of all the PHY functionality apart from comparator.
	  This driver interacts with the "OMAP Control PHY Driver" to power
	  on/off the PHY.

config TWL4030_USB
	tristate "TWL4030 USB Transceiver Driver"
	depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
	depends on USB_SUPPORT
	depends on USB_GADGET || !USB_GADGET # if USB_GADGET=m, this can't 'y'
	select GENERIC_PHY
	select USB_PHY
	help
	  Enable this to support the USB OTG transceiver on TWL4030
	  family chips (including the TWL5030 and TPS659x0 devices).
	  This transceiver supports high and full speed devices plus,
	  in host mode, low speed.

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 BCM_KONA_USB2_PHY
	tristate "Broadcom Kona USB2 PHY Driver"
	depends on HAS_IOMEM
	select GENERIC_PHY
	help
	  Enable this to support the Broadcom Kona USB 2.0 PHY.

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_HIX5HD2_SATA
	tristate "HIX5HD2 SATA PHY Driver"
	depends on ARCH_HIX5HD2 && OF && HAS_IOMEM
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Support for SATA PHY on Hisilicon hix5hd2 Soc.

config PHY_MT65XX_USB3
	tristate "Mediatek USB3.0 PHY Driver"
	depends on ARCH_MEDIATEK && OF
	select GENERIC_PHY
	help
	  Say 'Y' here to add support for Mediatek USB3.0 PHY driver,
	  it supports multiple usb2.0 and usb3.0 ports.

config PHY_HI6220_USB
	tristate "hi6220 USB PHY support"
	depends on (ARCH_HISI && ARM64) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the HISILICON HI6220 USB PHY.

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

config PHY_SUN4I_USB
	tristate "Allwinner sunxi SoC USB PHY driver"
	depends on ARCH_SUNXI && HAS_IOMEM && OF
	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_SUN9I_USB
	tristate "Allwinner sun9i SoC USB PHY driver"
	depends on ARCH_SUNXI && HAS_IOMEM && OF
	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_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_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_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_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_PISTACHIO_USB
	tristate "IMG Pistachio USB2.0 PHY driver"
	depends on MACH_PISTACHIO
	select GENERIC_PHY
	help
	  Enable this to support the USB2.0 PHY on the IMG Pistachio SoC.

config PHY_QCOM_APQ8064_SATA
	tristate "Qualcomm APQ8064 SATA SerDes/PHY driver"
	depends on ARCH_QCOM
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY

config PHY_QCOM_IPQ806X_SATA
	tristate "Qualcomm IPQ806x SATA SerDes/PHY driver"
	depends on ARCH_QCOM
	depends on HAS_IOMEM
	depends on OF
	select GENERIC_PHY

config PHY_ROCKCHIP_USB
	tristate "Rockchip USB2 PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip USB 2.0 PHY.

config PHY_ROCKCHIP_INNO_USB2
	tristate "Rockchip INNO USB2PHY Driver"
	depends on (ARCH_ROCKCHIP || COMPILE_TEST) && OF
	depends on COMMON_CLK
	select GENERIC_PHY
	help
	  Support for Rockchip USB2.0 PHY with Innosilicon IP block.

config PHY_ROCKCHIP_EMMC
	tristate "Rockchip EMMC PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip EMMC PHY.

config PHY_ROCKCHIP_DP
	tristate "Rockchip Display Port PHY Driver"
	depends on ARCH_ROCKCHIP && OF
	select GENERIC_PHY
	help
	  Enable this to support the Rockchip Display Port PHY.

config PHY_ROCKCHIP_PCIE
	tristate "Rockchip PCIe PHY Driver"
	depends on (ARCH_ROCKCHIP && OF) || COMPILE_TEST
	select GENERIC_PHY
	select MFD_SYSCON
	help
	  Enable this to support the Rockchip PCIe PHY.

config PHY_ROCKCHIP_TYPEC
	tristate "Rockchip TYPEC PHY Driver"
	depends on OF && (ARCH_ROCKCHIP || COMPILE_TEST)
	select EXTCON
	select GENERIC_PHY
	select RESET_CONTROLLER
	help
	  Enable this to support the Rockchip USB TYPEC PHY.

config PHY_ST_SPEAR1310_MIPHY
	tristate "ST SPEAR1310-MIPHY driver"
	select GENERIC_PHY
	depends on MACH_SPEAR1310 || COMPILE_TEST
	help
	  Support for ST SPEAr1310 MIPHY which can be used for PCIe and SATA.

config PHY_ST_SPEAR1340_MIPHY
	tristate "ST SPEAR1340-MIPHY driver"
	select GENERIC_PHY
	depends on MACH_SPEAR1340 || COMPILE_TEST
	help
	  Support for ST SPEAr1340 MIPHY which can be used for PCIe and SATA.

config PHY_XGENE
	tristate "APM X-Gene 15Gbps PHY support"
	depends on HAS_IOMEM && OF && (ARM64 || COMPILE_TEST)
	select GENERIC_PHY
	help
	  This option enables support for APM X-Gene SoC multi-purpose PHY.

config PHY_STIH407_USB
	tristate "STMicroelectronics USB2 picoPHY driver for STiH407 family"
	depends on RESET_CONTROLLER
	depends on ARCH_STI || COMPILE_TEST
	select GENERIC_PHY
	help
	  Enable this support to enable the picoPHY device used by USB2
	  and USB3 controllers on STMicroelectronics STiH407 SoC families.

config PHY_STIH41X_USB
	tristate "STMicroelectronics USB2 PHY driver for STiH41x series"
	depends on ARCH_STI
	select GENERIC_PHY
	help
	  Enable this to support the USB transceiver that is part of
	  STMicroelectronics STiH41x SoC series.

config PHY_QCOM_UFS
	tristate "Qualcomm UFS PHY driver"
	depends on OF && ARCH_QCOM
	select GENERIC_PHY
	help
	  Support for UFS PHY on QCOM chipsets.

config PHY_TUSB1210
	tristate "TI TUSB1210 ULPI PHY module"
	depends on USB_ULPI_BUS
	select GENERIC_PHY
	help
	  Support for TI TUSB1210 USB ULPI PHY.

config PHY_BRCM_SATA
	tristate "Broadcom SATA PHY driver"
	depends on ARCH_BRCMSTB || ARCH_BCM_IPROC || BMIPS_GENERIC || COMPILE_TEST
	depends on OF
	select GENERIC_PHY
	default ARCH_BCM_IPROC
	help
	  Enable this to support the Broadcom SATA PHY.
	  If unsure, say N.

config PHY_CYGNUS_PCIE
	tristate "Broadcom Cygnus PCIe PHY driver"
	depends on OF && (ARCH_BCM_CYGNUS || COMPILE_TEST)
	select GENERIC_PHY
	default ARCH_BCM_CYGNUS
	help
	  Enable this to support the Broadcom Cygnus PCIe PHY.
	  If unsure, say N.

source "drivers/phy/tegra/Kconfig"

config PHY_NS2_PCIE
	tristate "Broadcom Northstar2 PCIe PHY driver"
	depends on OF && MDIO_BUS_MUX_BCM_IPROC
	select GENERIC_PHY
	default ARCH_BCM_IPROC
	help
	  Enable this to support the Broadcom Northstar2 PCIe PHY.
	  If unsure, say N.
endmenu
