#
# PHY Layer Configuration
#

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

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
	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

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
