#
# PHY Layer Configuration
#

menuconfig MDIO_DEVICE
	tristate "MDIO bus device drivers"
	help
	  MDIO devices and driver infrastructure code.

if MDIO_DEVICE

config MDIO_BUS
	tristate
	default m if PHYLIB=m
	default MDIO_DEVICE
	help
	  This internal symbol is used for link time dependencies and it
	  reflects whether the mdio_bus/mdio_device code is built as a
	  loadable module or built-in.

if MDIO_BUS

config MDIO_BCM_IPROC
	tristate "Broadcom iProc MDIO bus controller"
	depends on ARCH_BCM_IPROC || COMPILE_TEST
	depends on HAS_IOMEM && OF_MDIO
	help
	  This module provides a driver for the MDIO busses found in the
	  Broadcom iProc SoC's.

config MDIO_BCM_UNIMAC
	tristate "Broadcom UniMAC MDIO bus controller"
	depends on HAS_IOMEM
	help
	  This module provides a driver for the Broadcom UniMAC MDIO busses.
	  This hardware can be found in the Broadcom GENET Ethernet MAC
	  controllers as well as some Broadcom Ethernet switches such as the
	  Starfighter 2 switches.

config MDIO_BITBANG
	tristate "Bitbanged MDIO buses"
	help
	  This module implements the MDIO bus protocol in software,
	  for use by low level drivers that export the ability to
	  drive the relevant pins.

	  If in doubt, say N.

config MDIO_BUS_MUX
	tristate
	depends on OF_MDIO
	help
	  This module provides a driver framework for MDIO bus
	  multiplexers which connect one of several child MDIO busses
	  to a parent bus.  Switching between child busses is done by
	  device specific drivers.

config MDIO_BUS_MUX_BCM_IPROC
	tristate "Broadcom iProc based MDIO bus multiplexers"
	depends on OF && OF_MDIO && (ARCH_BCM_IPROC || COMPILE_TEST)
	select MDIO_BUS_MUX
	default ARCH_BCM_IPROC
	help
	  This module provides a driver for MDIO bus multiplexers found in
	  iProc based Broadcom SoCs. This multiplexer connects one of several
	  child MDIO bus to a parent bus. Buses could be internal as well as
	  external and selection logic lies inside the same multiplexer.

config MDIO_BUS_MUX_GPIO
	tristate "GPIO controlled MDIO bus multiplexers"
	depends on OF_GPIO && OF_MDIO
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexers that
	  are controlled via GPIO lines.  The multiplexer connects one of
	  several child MDIO busses to a parent bus.  Child bus
	  selection is under the control of GPIO lines.

config MDIO_BUS_MUX_MMIOREG
	tristate "MMIO device-controlled MDIO bus multiplexers"
	depends on OF_MDIO && HAS_IOMEM
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexers that
	  are controlled via a simple memory-mapped device, like an FPGA.
	  The multiplexer connects one of several child MDIO busses to a
	  parent bus.  Child bus selection is under the control of one of
	  the FPGA's registers.

	  Currently, only 8/16/32 bits registers are supported.

config MDIO_BUS_MUX_MULTIPLEXER
	tristate "MDIO bus multiplexer using kernel multiplexer subsystem"
	depends on OF_MDIO
	select MULTIPLEXER
	select MDIO_BUS_MUX
	help
	  This module provides a driver for MDIO bus multiplexer
	  that is controlled via the kernel multiplexer subsystem. The
	  bus multiplexer connects one of several child MDIO busses to
	  a parent bus.  Child bus selection is under the control of
	  the kernel multiplexer subsystem.

config MDIO_CAVIUM
	tristate

config MDIO_GPIO
	tristate "GPIO lib-based bitbanged MDIO buses"
	depends on MDIO_BITBANG
	depends on GPIOLIB || COMPILE_TEST
	---help---
	  Supports GPIO lib-based MDIO busses.

	  To compile this driver as a module, choose M here: the module
	  will be called mdio-gpio.

config MDIO_HISI_FEMAC
	tristate "Hisilicon FEMAC MDIO bus controller"
	depends on HAS_IOMEM && OF_MDIO
	help
	  This module provides a driver for the MDIO busses found in the
	  Hisilicon SoC that have an Fast Ethernet MAC.

config MDIO_I2C
	tristate
	depends on I2C
	help
	  Support I2C based PHYs.  This provides a MDIO bus bridged
	  to I2C to allow PHYs connected in I2C mode to be accessed
	  using the existing infrastructure.

	  This is library mode.

config MDIO_MOXART
	tristate "MOXA ART MDIO interface support"
	depends on ARCH_MOXART || COMPILE_TEST
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the MOXA ART SoC

config MDIO_MSCC_MIIM
	tristate "Microsemi MIIM interface support"
	depends on HAS_IOMEM
	help
	  This driver supports the MIIM (MDIO) interface found in the network
	  switches of the Microsemi SoCs

config MDIO_OCTEON
	tristate "Octeon and some ThunderX SOCs MDIO buses"
	depends on 64BIT
	depends on HAS_IOMEM && OF_MDIO
	select MDIO_CAVIUM
	help
	  This module provides a driver for the Octeon and ThunderX MDIO
	  buses. It is required by the Octeon and ThunderX ethernet device
	  drivers on some systems.

config MDIO_SUN4I
	tristate "Allwinner sun4i MDIO interface support"
	depends on ARCH_SUNXI || COMPILE_TEST
	help
	  This driver supports the MDIO interface found in the network
	  interface units of the Allwinner SoC that have an EMAC (A10,
	  A12, A10s, etc.)

config MDIO_THUNDER
	tristate "ThunderX SOCs MDIO buses"
	depends on 64BIT
	depends on PCI
	select MDIO_CAVIUM
	help
	  This driver supports the MDIO interfaces found on Cavium
	  ThunderX SoCs when the MDIO bus device appears as a PCI
	  device.

config MDIO_XGENE
	tristate "APM X-Gene SoC MDIO bus controller"
	depends on ARCH_XGENE || COMPILE_TEST
	help
	  This module provides a driver for the MDIO busses found in the
	  APM X-Gene SoC's.

endif
endif

config PHYLINK
	tristate
	depends on NETDEVICES
	select PHYLIB
	select SWPHY
	help
	  PHYlink models the link between the PHY and MAC, allowing fixed
	  configuration links, PHYs, and Serdes links with MAC level
	  autonegotiation modes.

menuconfig PHYLIB
	tristate "PHY Device support and infrastructure"
	depends on NETDEVICES
	select MDIO_DEVICE
	help
	  Ethernet controllers are usually attached to PHY
	  devices.  This option provides infrastructure for
	  managing PHY devices.

if PHYLIB

config SWPHY
	bool

config LED_TRIGGER_PHY
	bool "Support LED triggers for tracking link state"
	depends on LEDS_TRIGGERS
	---help---
	  Adds support for a set of LED trigger events per-PHY.  Link
	  state change will trigger the events, for consumption by an
	  LED class driver.  There are triggers for each link speed currently
	  supported by the PHY and also a one common "link" trigger as a
	  logical-or of all the link speed ones.
	  All these triggers are named according to the following pattern:
	      <mii bus id>:<phy>:<speed>

	  Where speed is in the form:
		<Speed in megabits>Mbps OR <Speed in gigabits>Gbps OR link
		for any speed known to the PHY.


comment "MII PHY device drivers"

config SFP
	tristate "SFP cage support"
	depends on I2C && PHYLINK
	depends on HWMON || HWMON=n
	select MDIO_I2C

config AMD_PHY
	tristate "AMD PHYs"
	---help---
	  Currently supports the am79c874

config AQUANTIA_PHY
	tristate "Aquantia PHYs"
	---help---
	  Currently supports the Aquantia AQ1202, AQ2104, AQR105, AQR405

config ASIX_PHY
	tristate "Asix PHYs"
	help
	  Currently supports the Asix Electronics PHY found in the X-Surf 100
	  AX88796B package.

config AT803X_PHY
	tristate "AT803X PHYs"
	---help---
	  Currently supports the AT8030 and AT8035 model

config BCM63XX_PHY
	tristate "Broadcom 63xx SOCs internal PHY"
	depends on BCM63XX || COMPILE_TEST
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the 6348 and 6358 PHYs.

config BCM7XXX_PHY
	tristate "Broadcom 7xxx SOCs internal PHYs"
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the BCM7366, BCM7439, BCM7445, and
	  40nm and 65nm generation of BCM7xxx Set Top Box SoCs.

config BCM87XX_PHY
	tristate "Broadcom BCM8706 and BCM8727 PHYs"
	help
	  Currently supports the BCM8706 and BCM8727 10G Ethernet PHYs.

config BCM_CYGNUS_PHY
	tristate "Broadcom Cygnus SoC internal PHY"
	depends on ARCH_BCM_CYGNUS || COMPILE_TEST
	depends on MDIO_BCM_IPROC
	select BCM_NET_PHYLIB
	---help---
	  This PHY driver is for the 1G internal PHYs of the Broadcom
	  Cygnus Family SoC.

	  Currently supports internal PHY's used in the BCM11300,
	  BCM11320, BCM11350, BCM11360, BCM58300, BCM58302,
	  BCM58303 & BCM58305 Broadcom Cygnus SoCs.

config BCM_NET_PHYLIB
	tristate

config BROADCOM_PHY
	tristate "Broadcom PHYs"
	select BCM_NET_PHYLIB
	---help---
	  Currently supports the BCM5411, BCM5421, BCM5461, BCM54616S, BCM5464,
	  BCM5481, BCM54810 and BCM5482 PHYs.

config CICADA_PHY
	tristate "Cicada PHYs"
	---help---
	  Currently supports the cis8204

config CORTINA_PHY
	tristate "Cortina EDC CDR 10G Ethernet PHY"
	---help---
	  Currently supports the CS4340 phy.

config DAVICOM_PHY
	tristate "Davicom PHYs"
	---help---
	  Currently supports dm9161e and dm9131

config DP83822_PHY
	tristate "Texas Instruments DP83822 PHY"
	---help---
	  Supports the DP83822 PHY.

config DP83TC811_PHY
	tristate "Texas Instruments DP83TC822 PHY"
	---help---
	  Supports the DP83TC822 PHY.

config DP83848_PHY
	tristate "Texas Instruments DP83848 PHY"
	---help---
	  Supports the DP83848 PHY.

config DP83867_PHY
	tristate "Texas Instruments DP83867 Gigabit PHY"
	---help---
	  Currently supports the DP83867 PHY.

config FIXED_PHY
	tristate "MDIO Bus/PHY emulation with fixed speed/link PHYs"
	depends on PHYLIB
	select SWPHY
	---help---
	  Adds the platform "fixed" MDIO Bus to cover the boards that use
	  PHYs that are not connected to the real MDIO bus.

	  Currently tested with mpc866ads and mpc8349e-mitx.

config ICPLUS_PHY
	tristate "ICPlus PHYs"
	---help---
	  Currently supports the IP175C and IP1001 PHYs.

config INTEL_XWAY_PHY
	tristate "Intel XWAY PHYs"
	---help---
	  Supports the Intel XWAY (former Lantiq) 11G and 22E PHYs.
	  These PHYs are marked as standalone chips under the names
	  PEF 7061, PEF 7071 and PEF 7072 or integrated into the Intel
	  SoCs xRX200, xRX300, xRX330, xRX350 and xRX550.

config LSI_ET1011C_PHY
	tristate "LSI ET1011C PHY"
	---help---
	  Supports the LSI ET1011C PHY.

config LXT_PHY
	tristate "Intel LXT PHYs"
	---help---
	  Currently supports the lxt970, lxt971

config MARVELL_PHY
	tristate "Marvell PHYs"
	---help---
	  Currently has a driver for the 88E1011S

config MARVELL_10G_PHY
	tristate "Marvell Alaska 10Gbit PHYs"
	---help---
	  Support for the Marvell Alaska MV88X3310 and compatible PHYs.

config MESON_GXL_PHY
	tristate "Amlogic Meson GXL Internal PHY"
	depends on ARCH_MESON || COMPILE_TEST
	---help---
	  Currently has a driver for the Amlogic Meson GXL Internal PHY

config MICREL_PHY
	tristate "Micrel PHYs"
	---help---
	  Supports the KSZ9021, VSC8201, KS8001 PHYs.

config MICROCHIP_PHY
	tristate "Microchip PHYs"
	help
	  Supports the LAN88XX PHYs.

config MICROCHIP_T1_PHY
	tristate "Microchip T1 PHYs"
	---help---
	  Supports the LAN87XX PHYs.

config MICROSEMI_PHY
	tristate "Microsemi PHYs"
	---help---
	  Currently supports VSC8530, VSC8531, VSC8540 and VSC8541 PHYs

config NATIONAL_PHY
	tristate "National Semiconductor PHYs"
	---help---
	  Currently supports the DP83865 PHY.

config QSEMI_PHY
	tristate "Quality Semiconductor PHYs"
	---help---
	  Currently supports the qs6612

config REALTEK_PHY
	tristate "Realtek PHYs"
	---help---
	  Supports the Realtek 821x PHY.

config RENESAS_PHY
	tristate "Driver for Renesas PHYs"
	---help---
	  Supports the Renesas PHYs uPD60620 and uPD60620A.

config ROCKCHIP_PHY
        tristate "Driver for Rockchip Ethernet PHYs"
        ---help---
          Currently supports the integrated Ethernet PHY.

config SMSC_PHY
	tristate "SMSC PHYs"
	---help---
	  Currently supports the LAN83C185, LAN8187 and LAN8700 PHYs

config STE10XP
	tristate "STMicroelectronics STe10Xp PHYs"
	---help---
	  This is the driver for the STe100p and STe101p PHYs.

config TERANETICS_PHY
	tristate "Teranetics PHYs"
	---help---
	  Currently supports the Teranetics TN2020

config VITESSE_PHY
	tristate "Vitesse PHYs"
	---help---
	  Currently supports the vsc8244

config XILINX_GMII2RGMII
	tristate "Xilinx GMII2RGMII converter driver"
	---help---
	  This driver support xilinx GMII to RGMII IP core it provides
	  the Reduced Gigabit Media Independent Interface(RGMII) between
	  Ethernet physical media devices and the Gigabit Ethernet controller.

endif # PHYLIB

config MICREL_KS8995MA
	tristate "Micrel KS8995MA 5-ports 10/100 managed Ethernet switch"
	depends on SPI
