# Ethernet PHY drivers configuration options

# Copyright (c) 2021 IP-Logix Inc.
# SPDX-License-Identifier: Apache-2.0

menuconfig ETH_PHY_DRIVER
	bool "Ethernet PHY drivers"
	default y if NET_L2_ETHERNET || ETH_DRIVER

if ETH_PHY_DRIVER

module = PHY
module-dep = LOG
module-str = Log level for Ethernet PHY driver
module-help = Sets log level for Ethernet PHY Device Drivers.
source "subsys/net/Kconfig.template.log_config.net"
source "drivers/ethernet/phy/Kconfig.tja1103"

config PHY_INIT_PRIORITY
	int "Ethernet PHY driver init priority"
	default 70
	help
	  Ethernet PHY device driver initialization priority.
	  Do not mess with it unless you know what you are doing.
	  Note that the priority needs to be lower than the net stack
	  so that it can start before the networking sub-system.

config PHY_GENERIC_MII
	bool "Generic MII PHY Driver"
	default y if DT_HAS_ETHERNET_PHY_ENABLED
	depends on MDIO
	help
	  This is a generic MII PHY interface that communicates with the
	  PHY using the MDIO bus.

config PHY_ADIN2111
	bool "ADIN2111 PHY driver"
	default y
	depends on DT_HAS_ADI_ADIN2111_PHY_ENABLED || DT_HAS_ADI_ADIN1100_PHY_ENABLED
	help
	  Enable ADIN2111 PHY driver.

config PHY_MICROCHIP_KSZ8081
	bool "Microchip KSZ8081 PHY Driver"
	default y
	depends on DT_HAS_MICROCHIP_KSZ8081_ENABLED
	depends on MDIO
	depends on GPIO
	help
	  Enable Microchip KSZ8081 Ethernet PHY Driver

config PHY_TI_DP83825
	bool "TI DP83825 PHY Driver"
	default y
	depends on DT_HAS_TI_DP83825_ENABLED
	depends on MDIO
	depends on GPIO
	help
	  Enable TI DP83825 Ethernet PHY Driver

config PHY_REALTEK_RTL8211F
	bool "Realtek RTL8211F PHY Driver"
	default y
	depends on DT_HAS_REALTEK_RTL8211F_ENABLED
	depends on MDIO
	depends on GPIO || (!$(dt_compat_any_has_prop,$(DT_COMPAT_REALTEK_RTL8211F),reset-gpios) && \
			    !$(dt_compat_any_has_prop,$(DT_COMPAT_REALTEK_RTL8211F),int-gpios))
	help
	  Enable Realtek RTL8211F Ethernet PHY Driver

config PHY_QUALCOMM_AR8031
	bool "Qualcomm Atheros AR8031 Ethernet PHY Driver"
	default y
	depends on DT_HAS_QCA_AR8031_ENABLED
	depends on MDIO
	help
	  Enable Qualcomm Atheros AR8031 Ethernet PHY Driver

config PHY_AUTONEG_TIMEOUT_MS
	int "Auto-negotiation timeout value in milliseconds"
	default 4000
	help
	  Maximum duration of auto-negotiation sequence in milliseconds
	  before the process fails

config PHY_MONITOR_PERIOD
	int "Monitor task execution period"
	default 500
	help
	  Monitor task execution period in milliseconds. The monitor task is
	  periodically executed to detect and report any changes in the
	  PHY link status to the operating system.

endif # "Ethernet PHY Drivers"
