# Copyright (c) 2023 PHOENIX CONTACT Electronics GmbH
# SPDX-License-Identifier: Apache-2.0

menuconfig ETH_ADIN2111
	bool "ADIN2111 2-port 10BASE-T1L Controller"
	default y
	depends on DT_HAS_ADI_ADIN2111_ENABLED
	select SPI
	select MDIO
	help
	  The ADIN2111 is a low power, 2-port 10BASE-T1L transceiver
	  designed for industrial Ethernet applications, and is compliant with
	  the IEEE® 802.3cg-2019™ Ethernet standard for long reach, 10
	  Mbps single pair Ethernet (SPE).

	  Featuring an integrated media access control (MAC) and a switch,
	  the ADIN2111 enables direct connectivity with a variety of controllers
	  via a serial peripheral inter-face (SPI).

if ETH_ADIN2111

config ETH_ADIN2111_INIT_PRIORITY
	int "ADIN2111 driver init priority"
	default 72
	help
	  ADIN2111 device driver initialization priority.
	  Must be initialized after SPI, but before MDIO
	  and ports.

	  Both ports use ETH_INIT_PRIORITY initialization priority.

config ETH_ADIN2111_IRQ_THREAD_STACK_SIZE
	int "Stack size for a thread that processes ADIN IRQ"
	default 2048
	help
	  Size of the stack used for internal thread which is ran to
	  process raised INT IRQ.

config ETH_ADIN2111_IRQ_THREAD_PRIO
	int "Priority for internal incoming packet handler"
	default 2
	help
	  Priority level for internal thread which is ran for ADIN
	  INT IRQ processing.

config ETH_ADIN2111_TIMEOUT
	int "IP buffer timeout"
	default 100
	help
	  Given timeout in milliseconds. Maximum amount of time
	  that the driver will wait from the IP stack to get
	  a memory buffer before the Ethernet frame is dropped.

config ETH_ADIN2111_SPI_CFG0
	bool "SPI_CFG0"
	default y
	help
	  Must be set when ADIN uses 8-bit CRC (Generic SPI)
	  or Protection Mode (OPEN Alliance) on the SPI Host Interface.

config ETH_ADIN2111_BUFFER_SIZE
	int "Buffer size in bytes use for frame transmission"
	default 1524
	help
	  Transmission and reception buffer size.

endif # ETH_ADIN2111
