config ESP_RMT
	bool "Remote Control Module (RMT)"
	default n
	depends on RMT
	---help---
		The RMT (Remote Control Transceiver) peripheral was designed to act as
		an infrared transceiver. However, due to the flexibility of its data
		format, RMT can be extended to a versatile and general-purpose
		transceiver, transmitting or receiving many other types of signals.

config ESP_MCPWM
	bool "Motor Control PWM (MCPWM)"
	default n
	depends on ARCH_CHIP_ESP32 || ARCH_CHIP_ESP32S3
	---help---
		Enable support for timer capture and motor control using
		the Motor Control PWM peripheral.

config ESP_PCNT
	bool "Pulse Counter (PCNT / QE) Module"
	default n
	select CAPTURE

config ESPRESSIF_ADC
	bool "Analog-to-digital converter (ADC)"
	default n
	select ANALOG
	select ADC
	---help---
		Enable support for analog-to-digital converter (ADC) peripheral.

if ESPRESSIF_ADC

config ESPRESSIF_ADC_1
	default y
	bool "Enable SAR ADC 1"

config ESPRESSIF_ADC_2
	default n
	bool "Enable SAR ADC 2"

endif # ESPRESSIF_ADC

config ESPRESSIF_EFUSE
	bool "EFUSE support"
	default n
	select EFUSE
	---help---
		Enable efuse support.

config ESPRESSIF_EFUSE_VIRTUAL
	bool "Virtual EFUSE support"
	depends on ESPRESSIF_EFUSE
	default n
	---help---
		Enable virtual efuse support to simulate eFuse operations in RAM, changes will be reverted each reboot

config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH
	bool "Keep E-Fuses in flash"
	depends on ESPRESSIF_EFUSE_VIRTUAL
	---help---
		In addition to the "Virtual E-Fuses support" option, this option just adds
		a feature to keep E-Fuses after reboots in flash memory.

		During startup, the E-Fuses are copied from flash or,
		in case if flash is empty, from real E-Fuse to RAM and then update flash.
		This mode is useful when need to keep changes after reboot (testing secure_boot,
		flash_encryption or using MCUBoot + encryption).

if ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH

config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_OFFSET
	hex "E-Fuses offset in flash"
	depends on ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH
	default 0x250000
	---help---
		Offset in flash where the E-Fuses will be stored when using the "E-Fuses size to keep in flash" option.

config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH_SIZE
	hex "E-Fuses size to keep in flash"
	depends on ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH
	default 0x2000
	---help---
		Size of E-Fuse region to keep in flash.

endif # ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH

config ESPRESSIF_TEMP
	bool "Internal Temperature Sensor"
	default n
	depends on ARCH_CHIP_ESP32S2 || ARCH_CHIP_ESP32S3
	---help---
		A built-in sensor used to measure the chip's internal temperature.

config ESP_SDM
	bool "Sigma-Delta Modulation (SDM) Module"
	default n
	select ANALOG
	select DAC

config ESPRESSIF_LEDC
	bool "LEDC (PWM)"
	default n
	depends on ARCH_CHIP_ESP32S2 || ARCH_CHIP_ESP32S3
	select PWM
	select ARCH_HAVE_PWM_MULTICHAN

config ESPRESSIF_SHA_ACCELERATOR
	bool "SHA Accelerator"
	depends on !ARCH_CHIP_ESP32
	default n
	---help---
		Enable SHA accelerator support.

config ESPRESSIF_I2S
	bool
	default n

config ESPRESSIF_I2S0
	bool "I2S 0"
	default n
	select ESPRESSIF_I2S
	select I2S
	select ESP32S3_DMA if ARCH_CHIP_ESP32S3
	select ESP32S3_GPIO_IRQ if ARCH_CHIP_ESP32S3
	select ESP32S2_GPIO_IRQ if ARCH_CHIP_ESP32S2
	select ESP32_GPIO_IRQ if ARCH_CHIP_ESP32
	select SCHED_HPWORK
	select ARCH_DMA

config ESPRESSIF_I2S1
	bool "I2S 1"
	depends on !ARCH_CHIP_ESP32S2
	default n
	select ESPRESSIF_I2S
	select I2S
	select ESP32S3_DMA if ARCH_CHIP_ESP32S3
	select ESP32S3_GPIO_IRQ if ARCH_CHIP_ESP32S3
	select ESP32_GPIO_IRQ if ARCH_CHIP_ESP32
	select SCHED_HPWORK
	select ARCH_DMA

config ESPRESSIF_I2C_PERIPH_MASTER_MODE
	bool
	depends on (ESP32S3_I2C_PERIPH_MASTER_MODE || ESP32S2_I2C_PERIPH_MASTER_MODE || ESP32_I2C_PERIPH_MASTER_MODE)
	default n

config ESPRESSIF_I2C_PERIPH_SLAVE_MODE
	bool
	depends on (ESP32S3_I2C_PERIPH_SLAVE_MODE || ESP32S2_I2C_PERIPH_SLAVE_MODE || ESP32_I2C_PERIPH_SLAVE_MODE)
	default n

config ESPRESSIF_I2C0_SLAVE
	bool
	depends on (ESP32S3_I2C0_SLAVE_MODE || ESP32S2_I2C0_SLAVE_MODE || ESP32_I2C0_SLAVE_MODE)
	default n

config ESPRESSIF_I2C1_SLAVE
	bool
	depends on (ESP32S3_I2C1_SLAVE_MODE || ESP32S2_I2C1_SLAVE_MODE || ESP32_I2C1_SLAVE_MODE)
	default n

config ESPRESSIF_I2C_BITBANG
	bool "I2C Bitbang"
	default n
	select I2C_BITBANG
	select ESP32S3_I2C if ARCH_CHIP_ESP32S3
	select ESP32S2_I2C if ARCH_CHIP_ESP32S2
	select ESP32_I2C if ARCH_CHIP_ESP32
	select I2C
	select I2C_BITBANG
	---help---
		Software implemented I2C peripheral with GPIOs. Suggested to use if I2C peripherals are already in use.

config ESPRESSIF_SPI_PERIPH
	bool
	depends on (ESP32S3_SPI2 || ESP32S3_SPI3) || (ESP32_SPI2 || ESP32_SPI3) || (ESP32S2_SPI2 || ESP32S2_SPI3)
	default n

config ESPRESSIF_SPI_BITBANG
	bool "SPI Bitbang"
	default n
	select ESP32_SPI if ARCH_CHIP_ESP32
	select ESP32S2_SPI if ARCH_CHIP_ESP32S2
	select ESP32S3_SPI if ARCH_CHIP_ESP32S3
	select SPI
	select SPI_BITBANG
	---help---
		Software implemented SPI peripheral with GPIOs. Suggested to use if SPI peripherals are already in use.

config ESPRESSIF_SPIFLASH
	bool "SPI Flash"
	depends on ARCH_CHIP_ESP32S2
	default n

config ESPRESSIF_DEDICATED_GPIO
	bool "Dedicated GPIO"
	depends on !ARCH_CHIP_ESP32
	default n
	---help---
		Enable dedicated GPIO support for faster response time.
		Dedicated GPIO is suitable for faster response times required
		applications like simulate serial/parallel interfaces in a bit-banging way.
		It can work as pin grouping and you can use any pin up to 8 pins for
		input and 8 pins for output for dedicated gpio in total.

config ESPRESSIF_DEDICATED_GPIO_IRQ
	bool "Dedicated GPIO IRQ"
	depends on ESPRESSIF_DEDICATED_GPIO && ARCH_CHIP_ESP32S2
	default n
	---help---
		Enable dedicated GPIO IRQ support

menu "LEDC configuration"
	depends on ESPRESSIF_LEDC

config ESPRESSIF_LEDC_HPOINT
	hex "LEDC hpoint value"
	default 0x0000
	range 0x0 1048575
	---help---
		This value sets the start point of the pulse within each timer period,
		measured in timer ticks. It allows adjusting the phase of the signal.

menuconfig ESPRESSIF_LEDC_TIMER0
	bool "Timer 0"
	default n

if ESPRESSIF_LEDC_TIMER0

config ESPRESSIF_LEDC_TIMER0_CHANNELS
	int "Number of Timer 0 channels"
	default 2 if PWM_MULTICHAN && PWM_NCHANNELS > 1
	default 1 if !PWM_MULTICHAN || PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER0_RESOLUTION
	int "Timer 0 resolution"
	default 12
	range 1 14
	---help---
		Timer resolution in bits. The resolution is the number of bits used to by the timer
		counter to generate the PWM signal. The duty cycle provided by the upper layers
		will be scaled to fit the resolution.

endif # ESPRESSIF_LEDC_TIMER0

menuconfig ESPRESSIF_LEDC_TIMER1
	bool "Timer 1"
	default n

if ESPRESSIF_LEDC_TIMER1

config ESPRESSIF_LEDC_TIMER1_CHANNELS
	int "Number of Timer 1 channels"
	default 2 if PWM_MULTICHAN && PWM_NCHANNELS > 1
	default 1 if !PWM_MULTICHAN || PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER1_RESOLUTION
	int "Timer 1 resolution"
	default 12
	range 1 14
	---help---
		Timer resolution in bits. The resolution is the number of bits used to by the timer
		counter to generate the PWM signal. The duty cycle provided by the upper layers
		will be scaled to fit the resolution.

endif # ESPRESSIF_LEDC_TIMER1

menuconfig ESPRESSIF_LEDC_TIMER2
	bool "Timer 2"
	default n

if ESPRESSIF_LEDC_TIMER2

config ESPRESSIF_LEDC_TIMER2_CHANNELS
	int "Number of Timer 2 channels"
	default 2 if PWM_MULTICHAN && PWM_NCHANNELS > 1
	default 1 if !PWM_MULTICHAN || PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER2_RESOLUTION
	int "Timer 2 resolution"
	default 12
	range 1 14
	---help---
		Timer resolution in bits. The resolution is the number of bits used to by the timer
		counter to generate the PWM signal. The duty cycle provided by the upper layers
		will be scaled to fit the resolution.

endif # ESPRESSIF_LEDC_TIMER2

menuconfig ESPRESSIF_LEDC_TIMER3
	bool "Timer 3"
	default n

if ESPRESSIF_LEDC_TIMER3

config ESPRESSIF_LEDC_TIMER3_CHANNELS
	int "Number of Timer 3 channels"
	default 2 if PWM_MULTICHAN && PWM_NCHANNELS > 1
	default 1 if !PWM_MULTICHAN || PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER3_RESOLUTION
	int "Timer 3 resolution"
	default 12
	range 1 14
	---help---
		Timer resolution in bits. The resolution is the number of bits used to by the timer
		counter to generate the PWM signal. The duty cycle provided by the upper layers
		will be scaled to fit the resolution.

endif # ESPRESSIF_LEDC_TIMER3

if !ESP32S2_LEDC && !ESP32S3_LEDC

config ESPRESSIF_LEDC_CHANNEL0_PIN
	int "Channel 0 pin"
	default 2
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL1_PIN
	int "Channel 1 pin"
	default 3
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL2_PIN
	int "Channel 2 pin"
	default 4
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL3_PIN
	int "Channel 3 pin"
	default 5
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

if PWM_MULTICHAN && PWM_NCHANNELS > 1

config ESPRESSIF_LEDC_CHANNEL4_PIN
	int "Channel 4 pin"
	default 6
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL5_PIN
	int "Channel 5 pin"
	default 7
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL6_PIN
	int "Channel 6 pin"
	default 8
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

config ESPRESSIF_LEDC_CHANNEL7_PIN
	int "Channel 7 pin"
	default 9
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 46 if ARCH_CHIP_ESP32S2

endif # PWM_MULTICHAN && PWM_NCHANNELS > 1

endif # !ESP32_LEDC && !ESP32S2_LEDC && !ESP32S3_LEDC

endmenu # LEDC configuration

menu "Bootloader and Image Configuration"

config ESPRESSIF_BOOTLOADER_MCUBOOT
	bool
	---help---
		Enables the Espressif port of MCUboot to be used as 2nd stage bootloader.

endmenu # Bootloader and Image Configuration

menu "Pulse Counter (PCNT) Configuration"
	depends on ESP_PCNT

config ESP_PCNT_TEST_MODE
	bool "Pulse Counter character driver loopback test mode (for testing only)"
	default n
	---help---
		This enables a loopback test mode that attaches the transmitter
		to the receiver internally, being able to test the PCNT
		peripheral without any external connection.

config ESP_PCNT_HIGH_LIMIT
	int "PCNT high limit value"
	default 1024
	range 1 32767
	---help---
		This sets thr_h_lim value for all units. When pulse_cnt reaches
		this value, the counter will be cleared.

config ESP_PCNT_LOW_LIMIT
	int "PCNT low limit value"
	default -1024
	range -32768 -1
	---help---
		This sets thr_l_lim value for all units. When pulse_cnt reaches
		this value, the counter will be cleared.

config ESP_PCNT_AS_QE
	bool
	default n
	select SENSORS
	select SENSORS_QENCODER

config ESP_PCNT_U0
	bool "Enable PCNT Unit 0"
	default n

if ESP_PCNT_U0

config ESP_PCNT_U0_QE
	bool "Use this PCNT Unit as Quadrature Encoder"
	default n
	select ESP_PCNT_AS_QE

config ESP_PCNT_U0_CH0_EDGE_PIN
	int "PCNT_U0 CH0 Edge/Pulse Pin Number"
	default 0
	range -1 39

config ESP_PCNT_U0_CH0_LEVEL_PIN
	int "PCNT_U0 CH0 Level/Control Pin Number"
	default 4
	range -1 39
	depends on !ESP_PCNT_U0_QE

config ESP_PCNT_U0_CH1_EDGE_PIN
	int "PCNT_U0 CH1 Edge/Pulse Pin Number"
	default 0
	range -1 39
	depends on !ESP_PCNT_U0_QE

config ESP_PCNT_U0_CH1_LEVEL_PIN
	int "PCNT_U0 CH1 Level/Control Pin Number"
	default 4
	range -1 39

config ESP_PCNT_U0_FILTER_EN
	bool "Enable Glitch Filter for this PCNT Unit"
	default n

if ESP_PCNT_U0_FILTER_EN

config ESP_PCNT_U0_FILTER_THRES
	int "PCNT_U0 Filter Threshold value"
	default 5
	---help---
		If a pulse is shorter than this number of APB_CLK clock cycles
		then it will not be considered as a valid pulse.

endif # ESP_PCNT_U0_FILTER_EN

endif # ESP_PCNT_U0

config ESP_PCNT_U1
	bool "Enable PCNT Unit 1"
	depends on ESP_PCNT_U0
	default n

if ESP_PCNT_U1

config ESP_PCNT_U1_QE
	bool "Use this PCNT Unit as Quadrature Encoder"
	default n
	select ESP_PCNT_AS_QE

config ESP_PCNT_U1_CH0_EDGE_PIN
	int "PCNT_U1 CH0 Edge/Pulse Pin Number"
	default 0
	range -1 39

config ESP_PCNT_U1_CH0_LEVEL_PIN
	int "PCNT_U1 CH0 Level/Control Pin Number"
	default 4
	range -1 39
	depends on !ESP_PCNT_U1_QE

config ESP_PCNT_U1_CH1_EDGE_PIN
	int "PCNT_U1 CH1 Edge/Pulse Pin Number"
	default 0
	range -1 39
	depends on !ESP_PCNT_U1_QE

config ESP_PCNT_U1_CH1_LEVEL_PIN
	int "PCNT_U1 CH1 Level/Control Pin Number"
	default 4
	range -1 39

config ESP_PCNT_U1_FILTER_EN
	bool "Enable Glitch Filter for this PCNT Unit"
	default n

if ESP_PCNT_U1_FILTER_EN

config ESP_PCNT_U1_FILTER_THRES
	int "PCNT_U1 Filter Threshold value"
	default 5
	---help---
		If a pulse is shorter than this number of APB_CLK clock cycles
		then it will not be considered as a valid pulse.

endif # ESP_PCNT_U1_FILTER_EN

endif # ESP_PCNT_U1

config ESP_PCNT_U2
	bool "Enable PCNT Unit 2"
	depends on ESP_PCNT_U1
	default n

if ESP_PCNT_U2

config ESP_PCNT_U2_QE
	bool "Use this PCNT Unit as Quadrature Encoder"
	default n
	select ESP_PCNT_AS_QE

config ESP_PCNT_U2_CH0_EDGE_PIN
	int "PCNT_U2 CH0 Edge/Pulse Pin Number"
	default 0
	range -1 39

config ESP_PCNT_U2_CH0_LEVEL_PIN
	int "PCNT_U2 CH0 Level/Control Pin Number"
	default 4
	range -1 39
	depends on !ESP_PCNT_U2_QE

config ESP_PCNT_U2_CH1_EDGE_PIN
	int "PCNT_U2 CH1 Edge/Pulse Pin Number"
	default 0
	range -1 39
	depends on !ESP_PCNT_U2_QE

config ESP_PCNT_U2_CH1_LEVEL_PIN
	int "PCNT_U2 CH1 Level/Control Pin Number"
	default 4
	range -1 39

config ESP_PCNT_U2_FILTER_EN
	bool "Enable Glitch Filter for this PCNT Unit"
	default n

if ESP_PCNT_U2_FILTER_EN

config ESP_PCNT_U2_FILTER_THRES
	int "PCNT_U2 Filter Threshold value"
	default 5
	---help---
		If a pulse is shorter than this number of APB_CLK clock cycles
		then it will not be considered as a valid pulse.

endif # ESP_PCNT_U2_FILTER_EN

endif # ESP_PCNT_U2

config ESP_PCNT_U3
	bool "Enable PCNT Unit 3"
	depends on ESP_PCNT_U2
	default n

if ESP_PCNT_U3

config ESP_PCNT_U3_QE
	bool "Use this PCNT Unit as Quadrature Encoder"
	default n
	select ESP_PCNT_AS_QE

config ESP_PCNT_U3_CH0_EDGE_PIN
	int "PCNT_U3 CH0 Edge/Pulse Pin Number"
	default 0
	range -1 39

config ESP_PCNT_U3_CH0_LEVEL_PIN
	int "PCNT_U3 CH0 Level/Control Pin Number"
	default 4
	range -1 39
	depends on !ESP_PCNT_U3_QE

config ESP_PCNT_U3_CH1_EDGE_PIN
	int "PCNT_U3 CH1 Edge/Pulse Pin Number"
	default 0
	range -1 39
	depends on !ESP_PCNT_U3_QE

config ESP_PCNT_U3_CH1_LEVEL_PIN
	int "PCNT_U3 CH1 Level/Control Pin Number"
	default 4
	range -1 39

config ESP_PCNT_U3_FILTER_EN
	bool "Enable Glitch Filter for this PCNT Unit"
	default n

if ESP_PCNT_U3_FILTER_EN

config ESP_PCNT_U3_FILTER_THRES
	int "PCNT_U3 Filter Threshold value"
	default 5
	---help---
		If a pulse is shorter than this number of APB_CLK clock cycles
		then it will not be considered as a valid pulse.

endif # ESP_PCNT_U3_FILTER_EN

endif # ESP_PCNT_U3

endmenu # ESP_PCNT

menu "Internal Temperature Sensor Configuration"
	depends on ESPRESSIF_TEMP

config ESPRESSIF_TEMP_UORB
	bool "Internal Temperature Sensor UORB Interface"
	default n
	---help---
		Enables work with the UORB or Character Device interface.
		If not set, the Character Device is used by default.

config ESPRESSIF_TEMP_PATH
	string "Internal Temperature Sensor Path"
	depends on !ESPRESSIF_TEMP_UORB
	default "dev/temp"

config ESPRESSIF_TEMP_PATH_DEVNO
	int "Internal Temperature Sensor Path Device Number"
	depends on ESPRESSIF_TEMP_UORB
	default 0

config ESPRESSIF_TEMP_UORB_POLL
	bool "Enables polling sensor data"
	depends on ESPRESSIF_TEMP_UORB
	default n
	---help---
		Enables polling of sensor.

config ESPRESSIF_TEMP_UORB_POLL_INTERVAL
	int "Polling interval in microseconds, default 1 sec"
	depends on ESPRESSIF_TEMP_UORB_POLL
	default 1000000
	range 0 4294967295
	---help---
		The interval until a new sensor measurement will be triggered.

config ESPRESSIF_TEMP_THREAD_STACKSIZE
	int "Worker thread stack size"
	depends on ESPRESSIF_TEMP_UORB_POLL
	default 1024
	---help---
		The stack size for the worker thread.

endmenu # ESPRESSIF_TEMP

menu "I2S Configuration"
	depends on ESPRESSIF_I2S

config ESPRESSIF_I2S_MAXINFLIGHT
	int "I2S queue size"
	default ESP32S3_I2S_MAXINFLIGHT if ESP32S3_I2S
	default 4
	---help---
		This is the total number of transfers, both RX and TX, that can be
		enqueued before the caller is required to wait.  This setting
		determines the number certain queue data structures that will be
		pre-allocated.

if ESPRESSIF_I2S0

config ESPRESSIF_I2S0_RX
	bool "Enable I2S receiver"
	default ESP32_I2S0_RX if ESP32_I2S0
	default ESP32S2_I2S_RX if ESP32S2_I2S
	default ESP32S3_I2S0_RX if ESP32S3_I2S0
	default y
	---help---
		Enable I2S receiver (port 0)

config ESPRESSIF_I2S0_TX
	bool "Enable I2S transmitter"
	default ESP32_I2S0_TX if ESP32_I2S0
	default ESP32S2_I2S_TX if ESP32S2_I2S
	default ESP32S3_I2S0_TX if ESP32S3_I2S0
	default y
	---help---
		Enable I2S transmitter (port 0)

choice ESPRESSIF_I2S0_ROLE
	prompt "I2S0 role"
	default ESPRESSIF_I2S0_ROLE_MASTER if (ESP32_I2S0_ROLE_MASTER || ESP32S2_I2S_ROLE_MASTER || ESP32S3_I2S0_ROLE_MASTER)
	default ESPRESSIF_I2S0_ROLE_SLAVE if (ESP32_I2S0_ROLE_SLAVE || ESP32S2_I2S_ROLE_SLAVE || ESP32S3_I2S0_ROLE_SLAVE)
	default ESPRESSIF_I2S0_ROLE_MASTER
	---help---
		Selects the operation role of the I2S0.

config ESPRESSIF_I2S0_ROLE_MASTER
	bool "Master"

config ESPRESSIF_I2S0_ROLE_SLAVE
	bool "Slave"

endchoice # I2S0 role

choice ESPRESSIF_I2S0_DATA_BIT_WIDTH
	prompt "Bit width"
	default ESPRESSIF_I2S0_DATA_BIT_WIDTH_8BIT if (ESP32_I2S0_DATA_BIT_WIDTH_8BIT || ESP32S2_I2S_DATA_BIT_WIDTH_8BIT || ESP32S3_I2S0_DATA_BIT_WIDTH_8BIT)
	default ESPRESSIF_I2S0_DATA_BIT_WIDTH_16BIT if (ESP32_I2S0_DATA_BIT_WIDTH_16BIT || ESP32S2_I2S_DATA_BIT_WIDTH_16BIT || ESP32S3_I2S0_DATA_BIT_WIDTH_16BIT)
	default ESPRESSIF_I2S0_DATA_BIT_WIDTH_24BIT if (ESP32_I2S0_DATA_BIT_WIDTH_24BIT || ESP32S2_I2S_DATA_BIT_WIDTH_24BIT || ESP32S3_I2S0_DATA_BIT_WIDTH_24BIT)
	default ESPRESSIF_I2S0_DATA_BIT_WIDTH_32BIT if (ESP32_I2S0_DATA_BIT_WIDTH_32BIT || ESP32S2_I2S_DATA_BIT_WIDTH_32BIT || ESP32S3_I2S0_DATA_BIT_WIDTH_32BIT)
	default ESPRESSIF_I2S0_DATA_BIT_WIDTH_16BIT
	---help---
		Selects the valid data bits per sample.
		Note that this option may be overwritten by the audio
		according to the bit width of the file being played

config ESPRESSIF_I2S0_DATA_BIT_WIDTH_8BIT
	bool "8 bits"

config ESPRESSIF_I2S0_DATA_BIT_WIDTH_16BIT
	bool "16 bits"

config ESPRESSIF_I2S0_DATA_BIT_WIDTH_24BIT
	bool "24 bits"

config ESPRESSIF_I2S0_DATA_BIT_WIDTH_32BIT
	bool "32 bits"

endchoice # Bit width

config ESPRESSIF_I2S0_SAMPLE_RATE
	int "I2S0 sample rate"
	default ESP32_I2S0_SAMPLE_RATE if ESP32_I2S
	default ESP32S2_I2S_SAMPLE_RATE if ESP32S2_I2S
	default ESP32S3_I2S0_SAMPLE_RATE if ESP32S3_I2S
	default 44100
	range 8000 48000
	---help---
		Selects the sample rate.
		Note that this option may be overwritten by the audio
		according to the bit width of the file being played

config ESPRESSIF_I2S0_BCLKPIN
	int "I2S0 BCLK pin"
	default ESP32_I2S0_BCLKPIN if ESP32_I2S
	default ESP32S2_I2S_BCLKPIN if ESP32S2_I2S
	default ESP32S3_I2S0_BCLKPIN if ESP32S3_I2S
	default 4 if ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	default 35 if ARCH_CHIP_ESP32S2
	range 0 45 if (ARCH_CHIP_ESP32S2 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 46 if (ARCH_CHIP_ESP32S2 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 33 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 39 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S0_WSPIN
	int "I2S0 WS pin"
	default ESP32_I2S0_WSPIN if ESP32_I2S
	default ESP32S2_I2S_WSPIN if ESP32S2_I2S
	default ESP32S3_I2S0_WSPIN if ESP32S3_I2S
	default 5 if ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	default 34 if ARCH_CHIP_ESP32S2
	range 0 45 if (ARCH_CHIP_ESP32S2 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 46 if (ARCH_CHIP_ESP32S2 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 33 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 39 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S0_DINPIN
	int "I2S0 DIN pin"
	depends on ESPRESSIF_I2S0_RX
	default ESP32_I2S0_DINPIN if ESP32_I2S0_RX
	default ESP32S2_I2S_DINPIN if ESP32S2_I2S_RX
	default ESP32S3_I2S0_DINPIN if ESP32S3_I2S0_RX
	default 37 if ARCH_CHIP_ESP32S2
	default 19 if ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	range 0 46 if ARCH_CHIP_ESP32S2
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 39 if ARCH_CHIP_ESP32

config ESPRESSIF_I2S0_DOUTPIN
	int "I2S0 DOUT pin"
	depends on ESPRESSIF_I2S0_TX
	default ESP32_I2S0_DOUTPIN if ESP32_I2S0_TX
	default ESP32S2_I2S_DOUTPIN if ESP32S2_I2S_TX
	default ESP32S3_I2S0_DOUTPIN if ESP32S3_I2S0_TX
	default 18 if ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	default 36 if ARCH_CHIP_ESP32S2
	range 0 46 if ARCH_CHIP_ESP32S2
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 33 if ARCH_CHIP_ESP32

config ESPRESSIF_I2S0_MCLK
	bool "Enable I2S Master Clock"
	depends on ESPRESSIF_I2S0_ROLE_MASTER
	default ESP32_I2S0_MCLK if ESP32_I2S0
	default ESP32S2_I2S_MCLK if ESP32S2_I2S
	default ESP32S3_I2S0_MCLK if ESP32S3_I2S0
	default n
	---help---
		Enable I2S master clock

config ESPRESSIF_I2S0_MCLKPIN
	int "I2S MCLK pin"
	depends on ESPRESSIF_I2S0_MCLK
	default ESP32_I2S0_MCLKPIN if ESP32_I2S0_MCLK
	default ESP32S2_I2S_MCLKPIN if ESP32S2_I2S_MCLK
	default ESP32S3_I2S0_MCLKPIN if ESP32S3_I2S0_MCLK
	default 0 if ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	default 33 if ARCH_CHIP_ESP32S2
	range 0 45 if ARCH_CHIP_ESP32S2
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 3 if ARCH_CHIP_ESP32

endif # ESPRESSIF_I2S0

if ESPRESSIF_I2S1

config ESPRESSIF_I2S1_RX
	bool "Enable I2S receiver"
	default ESP32_I2S1_RX if ESP32_I2S1
	default ESP32S3_I2S1_RX if ESP32S3_I2S1
	default y
	---help---
		Enable I2S receiver (port 1)

config ESPRESSIF_I2S1_TX
	bool "Enable I2S transmitter"
	default ESP32_I2S1_TX if ESP32_I2S1
	default ESP32S3_I2S1_TX if ESP32S3_I2S1
	default y
	---help---
		Enable I2S transmitter (port 1)

choice ESPRESSIF_I2S1_ROLE
	prompt "I2S1 role"
	default ESPRESSIF_I2S1_ROLE_MASTER if (ESP32_I2S1_ROLE_MASTER || ESP32S3_I2S1_ROLE_MASTER)
	default ESPRESSIF_I2S1_ROLE_SLAVE if (ESP32_I2S1_ROLE_SLAVE || ESP32S3_I2S1_ROLE_SLAVE)
	default ESPRESSIF_I2S1_ROLE_MASTER
	---help---
		Selects the operation role of the I2S0.

config ESPRESSIF_I2S1_ROLE_MASTER
	bool "Master"

config ESPRESSIF_I2S1_ROLE_SLAVE
	bool "Slave"

endchoice # I2S1 role

choice ESPRESSIF_I2S1_DATA_BIT_WIDTH
	prompt "Bit width"
	default ESPRESSIF_I2S1_DATA_BIT_WIDTH_8BIT if (ESP32_I2S1_DATA_BIT_WIDTH_8BIT || ESP32S3_I2S1_DATA_BIT_WIDTH_8BIT)
	default ESPRESSIF_I2S1_DATA_BIT_WIDTH_16BIT if (ESP32_I2S1_DATA_BIT_WIDTH_16BIT || ESP32S3_I2S1_DATA_BIT_WIDTH_16BIT)
	default ESPRESSIF_I2S1_DATA_BIT_WIDTH_24BIT if (ESP32_I2S1_DATA_BIT_WIDTH_24BIT || ESP32S3_I2S1_DATA_BIT_WIDTH_24BIT)
	default ESPRESSIF_I2S1_DATA_BIT_WIDTH_32BIT if (ESP32_I2S1_DATA_BIT_WIDTH_32BIT || ESP32S3_I2S1_DATA_BIT_WIDTH_32BIT)
	default ESPRESSIF_I2S1_DATA_BIT_WIDTH_16BIT
	---help---
		Selects the valid data bits per sample.
		Note that this option may be overwritten by the audio
		according to the bit width of the file being played

config ESPRESSIF_I2S1_DATA_BIT_WIDTH_8BIT
	bool "8 bits"

config ESPRESSIF_I2S1_DATA_BIT_WIDTH_16BIT
	bool "16 bits"

config ESPRESSIF_I2S1_DATA_BIT_WIDTH_24BIT
	bool "24 bits"

config ESPRESSIF_I2S1_DATA_BIT_WIDTH_32BIT
	bool "32 bits"

endchoice # Bit width

config ESPRESSIF_I2S1_SAMPLE_RATE
	int "I2S1 sample rate"
	default ESP32_I2S1_SAMPLE_RATE if ESP32_I2S
	default ESP32S3_I2S1_SAMPLE_RATE if ESP32S3_I2S
	default 44100
	range 8000 48000
	---help---
		Selects the sample rate.
		Note that this option may be overwritten by the audio
		according to the bit width of the file being played

config ESPRESSIF_I2S1_BCLKPIN
	int "I2S1 BCLK pin"
	default ESP32_I2S1_BCLKPIN if ESP32_I2S
	default ESP32S3_I2S1_BCLKPIN if ESP32S3_I2S
	default 22
	range 0 33 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 39 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S1_WSPIN
	int "I2S1 WS pin"
	default ESP32_I2S1_WSPIN if ESP32_I2S
	default ESP32S3_I2S1_WSPIN if ESP32S3_I2S
	default 23
	range 0 33 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_MASTER)
	range 0 39 if (ARCH_CHIP_ESP32 && ESPRESSIF_I2S0_ROLE_SLAVE)
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S1_DINPIN
	int "I2S1 DIN pin"
	depends on ESPRESSIF_I2S1_RX
	default ESP32_I2S1_DINPIN if ESP32_I2S1_RX
	default ESP32S3_I2S1_DINPIN if ESP32S3_I2S1_RX
	default 26
	default ESP32_I2S1_DINPIN if ESP32_I2S1_RX
	range 0 39 if ARCH_CHIP_ESP32
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S1_DOUTPIN
	int "I2S1 DOUT pin"
	depends on ESPRESSIF_I2S1_TX
	default ESP32_I2S1_DOUTPIN if ESP32_I2S1_TX
	default ESP32S3_I2S1_DOUTPIN if ESP32S3_I2S1_TX
	default 25
	range 0 39 if ARCH_CHIP_ESP32
	range 0 48 if ARCH_CHIP_ESP32S3

config ESPRESSIF_I2S1_MCLK
	bool "Enable I2S Master Clock"
	depends on ESPRESSIF_I2S1_ROLE_MASTER
	default ESP32_I2S1_MCLK if ESP32_I2S1
	default ESP32S3_I2S1_MCLK if ESP32S3_I2S1
	default n
	---help---
		Enable I2S master clock

config ESPRESSIF_I2S1_MCLKPIN
	int "I2S1 MCLK pin"
	depends on ESPRESSIF_I2S1_MCLK
	default ESP32_I2S1_MCLKPIN if ESP32_I2S1_MCLK
	default ESP32S3_I2S1_MCLKPIN if ESP32S3_I2S1_MCLK
	default 1 if ARCH_CHIP_ESP32S3
	default 0 if ARCH_CHIP_ESP32
	range 0 48 if ARCH_CHIP_ESP32S3
	range 0 3 if ARCH_CHIP_ESP32

endif # ESPRESSIF_I2S1

config I2S_DMADESC_NUM
	int "I2S DMA maximum number of descriptors"
	default 2
	---help---
		Configure the maximum number of out-link/in-link descriptors to
		be chained for a I2S DMA transfer.

endmenu # I2S configuration

menu "I2C bitbang configuration"
	depends on ESPRESSIF_I2C_BITBANG

config ESPRESSIF_I2C_BITBANG_SCLPIN
	int "I2C Bitbang SCL Pin"
	default 0
	range 0 21

config ESPRESSIF_I2C_BITBANG_SDAPIN
	int "I2C Bitbang SDA Pin"
	default 1
	range 0 21

endmenu # I2C bitbang configuration

menu "SPI bitbang configuration"
	depends on ESPRESSIF_SPI_BITBANG

config ESPRESSIF_SPI_BITBANG_CSPIN
	int "SPI Bitbang CS Pin"
	default 0
	range 0 21

config ESPRESSIF_SPI_BITBANG_CLKPIN
	int "SPI Bitbang CLK Pin"
	default 1
	range 0 21

config ESPRESSIF_SPI_BITBANG_MOSIPIN
	int "SPI Bitbang MOSI Pin"
	default 2
	range 0 21

config ESPRESSIF_SPI_BITBANG_MISOPIN
	int "SPI Bitbang MISO Pin"
	default 3
	range 0 21

choice ESPRESSIF_SPI_BITBANG_MODE
	prompt "SPI Bitbang mode"
	default ESPRESSIF_SPI_BITBANG_MODE0

config ESPRESSIF_SPI_BITBANG_MODE0
	bool "SPI MODE0"

config ESPRESSIF_SPI_BITBANG_MODE1
	bool "SPI MODE1"

config ESPRESSIF_SPI_BITBANG_MODE2
	bool "SPI MODE2"

config ESPRESSIF_SPI_BITBANG_MODE3
	bool "SPI MODE3"

endchoice # ESPRESSIF_SPI_BITBANG_MODE

endmenu # SPI bitbang configuration

config ESPRESSIF_HAVE_OTA_PARTITION
	bool
	default n

menu "SPI Flash Configuration"

choice ESPRESSIF_FLASH_MODE
	prompt "SPI Flash mode"
	default ESPRESSIF_FLASH_MODE_DIO
	---help---
		These options control how many I/O pins are used for communication
		with the attached SPI Flash chip.
		The option selected here is then used by esptool when flashing.

config ESPRESSIF_FLASH_MODE_DIO
	bool "Dual IO (DIO)"

config ESPRESSIF_FLASH_MODE_DOUT
	bool "Dual Output (DOUT)"

config ESPRESSIF_FLASH_MODE_QIO
	bool "Quad IO (QIO)"

config ESPRESSIF_FLASH_MODE_QOUT
	bool "Quad Output (QOUT)"

endchoice # ESPRESSIF_FLASH_MODE

choice ESPRESSIF_FLASH_FREQ
	prompt "SPI Flash frequency"
	default ESPRESSIF_FLASH_FREQ_120M if ESP32S3_FLASH_FREQ_120M
	default ESPRESSIF_FLASH_FREQ_80M if ESP32_FLASH_FREQ_80M || ARCH_CHIP_ESP32S2 || ESP32S3_FLASH_FREQ_80M
	default ESPRESSIF_FLASH_FREQ_40M if ESP32_FLASH_FREQ_40M || ESP32S3_FLASH_FREQ_40M
	default ESPRESSIF_FLASH_FREQ_26M if ESP32_FLASH_FREQ_26M
	default ESPRESSIF_FLASH_FREQ_20M if ESP32_FLASH_FREQ_20M || ESP32S3_FLASH_FREQ_20M
	default ESPRESSIF_FLASH_FREQ_20M
	---help---
		SPI Flash frequency.

config ESPRESSIF_FLASH_FREQ_120M
	bool "120 MHz"
	depends on ESP32S3_FLASH_FREQ_120M

config ESPRESSIF_FLASH_FREQ_80M
	bool "80 MHz"
	depends on ESP32_FLASH_FREQ_80M || ARCH_CHIP_ESP32S2 || ESP32S3_FLASH_FREQ_80M

config ESPRESSIF_FLASH_FREQ_40M
	bool "40 MHz"
	depends on ESP32_FLASH_FREQ_40M || ARCH_CHIP_ESP32S2 || ESP32S3_FLASH_FREQ_40M

config ESPRESSIF_FLASH_FREQ_26M
	bool "26 MHz"
	depends on ESP32_FLASH_FREQ_26M || ARCH_CHIP_ESP32S2

config ESPRESSIF_FLASH_FREQ_20M
	bool "20 MHz"
	depends on ESP32_FLASH_FREQ_20M || ARCH_CHIP_ESP32S2 || ESP32S3_FLASH_FREQ_20M

endchoice # ESPRESSIF_FLASH_FREQ

config ESPRESSIF_FLASH_FREQ
	string
	# On some of the ESP chips, max boot frequency would be equal to (or even lower than) 80m.
	# We currently define this to `80m`.
	default '80m' if ESPRESSIF_FLASH_FREQ_120M
	default '80m' if ESPRESSIF_FLASH_FREQ_80M
	default '60m' if ESPRESSIF_FLASH_FREQ_60M
	default '48m' if ESPRESSIF_FLASH_FREQ_64M
	default '48m' if ESPRESSIF_FLASH_FREQ_48M
	default '24m' if ESPRESSIF_FLASH_FREQ_32M
	default '30m' if ESPRESSIF_FLASH_FREQ_30M
	default '24m' if ESPRESSIF_FLASH_FREQ_24M
	default '40m' if ESPRESSIF_FLASH_FREQ_40M
	default '26m' if ESPRESSIF_FLASH_FREQ_26M
	default '20m' if ESPRESSIF_FLASH_FREQ_20M
	default '12m' if ESPRESSIF_FLASH_FREQ_16M
	default '20m' # if no clock can match in bin headers, go with minimal.

if ESPRESSIF_HAVE_OTA_PARTITION

comment "Application Image OTA Update support"

config ESPRESSIF_OTA_PRIMARY_SLOT_OFFSET
	hex "Application image primary slot offset"
	default 0x10000

config ESPRESSIF_OTA_PRIMARY_SLOT_DEVPATH
	string "Application image primary slot device path"
	default "/dev/ota0"

config ESPRESSIF_OTA_SECONDARY_SLOT_OFFSET
	hex "Application image secondary slot offset"
	default 0x110000

config ESPRESSIF_OTA_SECONDARY_SLOT_DEVPATH
	string "Application image secondary slot device path"
	default "/dev/ota1"

config ESPRESSIF_OTA_SLOT_SIZE
	hex "Application image slot size (in bytes)"
	default 0x100000

config ESPRESSIF_OTA_SCRATCH_OFFSET
	hex "Scratch partition offset"
	default 0x210000

config ESPRESSIF_OTA_SCRATCH_SIZE
	hex "Scratch partition size"
	default 0x40000

config ESPRESSIF_OTA_SCRATCH_DEVPATH
	string "Scratch partition device path"
	default "/dev/otascratch"

endif

if ESPRESSIF_SPIFLASH

comment "General storage MTD configuration"

config ESPRESSIF_MTD
	bool "MTD driver"
	default y
	select MTD
	select MTD_BYTE_WRITE
	select MTD_PARTITION
	---help---
		Initialize an MTD driver for the ESP32-S2 SPI Flash, which will
		add an entry at /dev for application access from userspace.

config ESPRESSIF_SPIFLASH_MTD_BLKSIZE
	int "Storage MTD block size"
	default 64
	depends on ESPRESSIF_MTD

config ESPRESSIF_STORAGE_MTD_DEBUG
	bool "Storage MTD Debug"
	default n
	depends on ESPRESSIF_MTD && DEBUG_FS_INFO
	---help---
		If this option is enabled, Storage MTD driver read and write functions
		will output input parameters and return values (if applicable).

endif # ESPRESSIF_SPIFLASH

endmenu # SPI Flash Configuration

config ESPRESSIF_WIRELESS
	bool
	default n
	select NET
	select ARCH_PHY_INTERRUPT
	select ESP32S2_RNG if ARCH_CHIP_ESP32S2
	select ESP32S2_RT_TIMER if ARCH_CHIP_ESP32S2
	select ESP32S2_TIMER0 if ARCH_CHIP_ESP32S2
	select ESP32S3_RNG if ARCH_CHIP_ESP32S3
	select ESP32S3_RT_TIMER if ARCH_CHIP_ESP32S3
	select ESP32S3_TIMER0 if ARCH_CHIP_ESP32S3
	select ESP32_RNG if ARCH_CHIP_ESP32
	select ESP32_RT_TIMER if ARCH_CHIP_ESP32
	select ESP32_TIMER0 if ARCH_CHIP_ESP32
	---help---
		Enable Wireless support

config ESPRESSIF_WIFI
	bool "Wi-Fi"
	default n
	select ESPRESSIF_WIRELESS
	---help---
		Enable Wi-Fi support

config ESPRESSIF_BLE
	bool "BLE"
	depends on ARCH_CHIP_ESP32S3 || ARCH_CHIP_ESP32
	default n
	select ESPRESSIF_WIRELESS
	select BLUETOOTH_TXCMD_PINNED_TO_CORE if SMP && ARCH_CHIP_ESP32
	select BLUETOOTH_CNTRL_HOST_FLOW_DISABLE if ARCH_CHIP_ESP32
	---help---
		Enable BLE support.

config ESP_COEX_SW_COEXIST_ENABLE
	bool "Software WiFi/Bluetooth/IEEE 802.15.4 coexistence"
	depends on (ESPRESSIF_WIFI && ESPRESSIF_BLE)
	default y
	---help---
		If enabled, WiFi & Bluetooth coexistence is controlled by software rather than hardware.
		Recommended for heavy traffic scenarios. Both coexistence configuration options are
		automatically managed, no user intervention is required.
		If only Bluetooth is used, it is recommended to disable this option to reduce binary file
		size.

menuconfig ESPRESSIF_WIFI_BT_COEXIST
	bool "Wi-Fi and BT coexist"
	default y if ESPRESSIF_WIFI && ESPRESSIF_BLE
	default n
	depends on ESPRESSIF_WIFI && ESPRESSIF_BLE
	select ESPRESSIF_WIFI_STA_DISCONNECT_PM

menu "Wi-Fi Configuration"
	depends on ESPRESSIF_WIFI

menu "ESP WPA-Supplicant"

config WPA_WAPI_PSK
	bool "Enable WAPI PSK support"
	default n
	---help---
		Select this option to enable WAPI-PSK
		which is a Chinese National Standard Encryption for Wireless LANs (GB 15629.11-2003).

config WPA_SUITE_B_192
	bool "Enable NSA suite B support with 192-bit key"
	default n
	select ESPRESSIF_WIFI_GCMP_SUPPORT
	select ESPRESSIF_WIFI_GMAC_SUPPORT
	---help---
		Select this option to enable 192-bit NSA suite-B.
		This is necessary to support WPA3 192-bit security.

config ESP_WPA_DEBUG_PRINT
	bool "Print debug messages from Espressif's WPA Supplicant"
	default n
	---help---
		Select this option to print logging information from WPA supplicant,
		this includes handshake information and key hex dumps depending
		on the project logging level.

		Enabling this could increase the build size ~60kb
		depending on the project logging level.

endmenu # ESP WPA-Supplicant

choice ESPRESSIF_WIFI_MODE
	prompt "ESP Wi-Fi mode"
	default ESPRESSIF_WIFI_STATION

config ESPRESSIF_WIFI_STATION
	bool "Station mode"

config ESPRESSIF_WIFI_SOFTAP
	bool "SoftAP mode"

config ESPRESSIF_WIFI_STATION_SOFTAP
	bool "Station + SoftAP"

endchoice # ESPRESSIF_WIFI_MODE

menu "SoftAP Configuration"
	depends on ESPRESSIF_WIFI_SOFTAP || ESPRESSIF_WIFI_STATION_SOFTAP

config ESPRESSIF_WIFI_SOFTAP_DEFAULT_SSID
	string "SoftAP default SSID"
	default "NuttX"
	---help---
		Represents the default SSID configured for the SoftAP when the device is started.

config ESPRESSIF_WIFI_SOFTAP_DEFAULT_PASSWORD
	string "SoftAP default password"
	default "nuttx12345"
	---help---
		Represents the default password configured for the SoftAP when the device is started.

config ESPRESSIF_WIFI_SOFTAP_MAX_CONNECTIONS
	int "SoftAP max connections"
	default 3
	---help---
		Maximum number of stations connected to the SoftAP.

config ESPRESSIF_WIFI_SOFTAP_CHANNEL
	int "SoftAP channel"
	default 1
	---help---
		Channel number for the SoftAP.

endmenu # SoftAP Configuration

config ESPRESSIF_WIFI_ENABLE_WPA3_SAE
	bool "Enable WPA3-Personal"
	default y
	---help---
		Select this option to allow the device to establish a WPA3-Personal connection with eligible AP's.
		PMF (Protected Management Frames) is a prerequisite feature for a WPA3 connection, it needs to be
		explicitly configured before attempting connection. Please refer to the Wi-Fi Driver API Guide for details.

config ESPRESSIF_WIFI_ENABLE_SAE_PK
	bool "Enable SAE-PK"
	depends on ESPRESSIF_WIFI_ENABLE_WPA3_SAE
	default y
	---help---
		Select this option to enable SAE-PK

config ESPRESSIF_WIFI_ENABLE_SAE_H2E
	bool "Enable SAE-H2E"
	default y
	---help---
		Select this option to enable SAE-H2E

config ESPRESSIF_WIFI_SOFTAP_SAE_SUPPORT
	bool "Enable WPA3 Personal(SAE) SoftAP"
	default y
	depends on ESPRESSIF_WIFI_ENABLE_WPA3_SAE
	depends on ESPRESSIF_WIFI_SOFTAP || ESPRESSIF_WIFI_STATION_SOFTAP
	---help---
		Select this option to enable SAE support in softAP mode.

config ESPRESSIF_WIFI_ENABLE_WPA3_OWE_STA
	bool "Enable OWE STA"
	default y
	---help---
		Select this option to allow the device to establish OWE connection with eligible AP's.
		PMF (Protected Management Frames) is a prerequisite feature for a WPA3 connection, it needs to be
		explicitly configured before attempting connection. Please refer to the Wi-Fi Driver API Guide for details.

choice ESPRESSIF_WIFI_MGMT_RX_BUFFER
	prompt "Type of WiFi RX MGMT buffers"
	default ESPRESSIF_WIFI_STATIC_RX_MGMT_BUFFER
	---help---
		Select type of WiFi RX MGMT buffers:

		If "Static" is selected, WiFi RX MGMT buffers are allocated when WiFi is initialized and released
		when WiFi is de-initialized. The size of each static RX MGMT buffer is fixed to about 500 Bytes.

		If "Dynamic" is selected, each WiFi RX MGMT buffer is allocated as needed when a MGMT data frame is
		received. The MGMT buffer is freed after the MGMT data frame has been processed by the WiFi driver.

config ESPRESSIF_WIFI_STATIC_RX_MGMT_BUFFER
	bool "Static"
config ESPRESSIF_WIFI_DYNAMIC_RX_MGMT_BUFFER
	bool "Dynamic"
endchoice

config ESPRESSIF_WIFI_DYNAMIC_RX_MGMT_BUFFER_TYPE
	int
	default 0 if ESPRESSIF_WIFI_STATIC_RX_MGMT_BUFFER
	default 1 if ESPRESSIF_WIFI_DYNAMIC_RX_MGMT_BUFFER

config ESPRESSIF_WIFI_STATIC_RX_BUFFER_NUM
	int "Max number of WiFi static RX buffers"
	range 2 25
	default 10
	---help---
		Set the number of WiFi static RX buffers. Each buffer takes approximately 1.6KB of RAM.
		The static rx buffers are allocated when esp_wifi_init is called, they are not freed
		until esp_wifi_deinit is called.

		WiFi hardware use these buffers to receive all 802.11 frames.
		A higher number may allow higher throughput but increases memory use. If ESPRESSIF_WIFI_AMPDU_RX_ENABLED
		is enabled, this value is recommended to set equal or bigger than ESPRESSIF_WIFI_RX_BA_WIN in order to
		achieve better throughput and compatibility with both stations and APs.

config ESPRESSIF_WIFI_DYNAMIC_RX_BUFFER_NUM
	int "Max number of WiFi dynamic RX buffers"
	default 32
	---help---
		Set the number of WiFi dynamic RX buffers, 0 means unlimited RX buffers will be allocated
		(provided sufficient free RAM). The size of each dynamic RX buffer depends on the size of
		the received data frame.

		For each received data frame, the WiFi driver makes a copy to an RX buffer and then delivers
		it to the high layer TCP/IP stack. The dynamic RX buffer is freed after the higher layer has
		successfully received the data frame.

		For some applications, WiFi data frames may be received faster than the application can
		process them. In these cases we may run out of memory if RX buffer number is unlimited (0).

		If a dynamic RX buffer limit is set, it should be at least the number of static RX buffers.

choice ESPRESSIF_WIFI_TX_BUFFER
	prompt "Type of WiFi TX buffers"
	default ESPRESSIF_WIFI_DYNAMIC_TX_BUFFER
	---help---
		Select type of WiFi TX buffers:

		If "Static" is selected, WiFi TX buffers are allocated when WiFi is initialized and released
		when WiFi is de-initialized. The size of each static TX buffer is fixed to about 1.6KB.

		If "Dynamic" is selected, each WiFi TX buffer is allocated as needed when a data frame is
		delivered to the Wifi driver from the TCP/IP stack. The buffer is freed after the data frame
		has been sent by the WiFi driver. The size of each dynamic TX buffer depends on the length
		of each data frame sent by the TCP/IP layer.

		If PSRAM is enabled, "Static" should be selected to guarantee enough WiFi TX buffers.
		If PSRAM is disabled, "Dynamic" should be selected to improve the utilization of RAM.

		TODO: There is a special dependency for Dynamic if SPIRAM is enabled.

config ESPRESSIF_WIFI_STATIC_TX_BUFFER
	bool "Static"
config ESPRESSIF_WIFI_DYNAMIC_TX_BUFFER
	bool "Dynamic"
endchoice

config ESPRESSIF_WIFI_TX_BUFFER_TYPE
	int
	default 0 if ESPRESSIF_WIFI_STATIC_TX_BUFFER
	default 1 if ESPRESSIF_WIFI_DYNAMIC_TX_BUFFER

config ESPRESSIF_WIFI_STATIC_TX_BUFFER_NUM
	int "Max number of WiFi static TX buffers"
	range 2 64
	default 16
	---help---
		Set the number of WiFi static TX buffers. Each buffer takes approximately 1.6KB of RAM.
		The static RX buffers are allocated when esp_wifi_init() is called, they are not released
		until esp_wifi_deinit() is called.

		This value might be reduced to save memory if the application does not need to send
		frames at a high rate.

		For each transmitted data frame from the higher layer TCP/IP stack, the WiFi driver makes a
		copy of it in a TX buffer.  For some applications especially UDP applications, the upper
		layer can deliver frames faster than WiFi layer can transmit. In these cases, we may run out
		of TX buffers.

config ESPRESSIF_WIFI_DYNAMIC_TX_BUFFER_NUM
	int "Max number of WiFi dynamic TX buffers"
	range 1 128
	default 32
	---help---
		Set the number of WiFi dynamic TX buffers. The size of each dynamic TX buffer is not fixed,
		it depends on the size of each transmitted data frame.

		For each transmitted frame from the higher layer TCP/IP stack, the WiFi driver makes a copy
		of it in a TX buffer. For some applications, especially UDP applications, the upper layer
		can deliver frames faster than WiFi layer can transmit. In these cases, we may run out of TX
		buffers.

config ESPRESSIF_WIFI_RX_MGMT_BUF_NUM_DEF
	int "Max number of WiFi RX MGMT buffers"
	range 1 10
	default 5
	---help---
		Set the number of WiFi RX_MGMT buffers.
		For Management buffers, the number of dynamic and static management buffers is the same.

config ESPRESSIF_WIFI_AMPDU_TX_ENABLED
	bool "Wi-Fi TX AMPDU"
	default y
	---help---
		Select this option to enable AMPDU TX feature

config ESPRESSIF_WIFI_TX_BA_WIN
	int "WiFi AMPDU TX BA window size"
	depends on ESPRESSIF_WIFI_AMPDU_TX_ENABLED
	range 2 32
	default 6

config ESPRESSIF_WIFI_AMPDU_RX_ENABLED
	bool "WiFi AMPDU RX"
	default y
	---help---
		Select this option to enable AMPDU RX feature

config ESPRESSIF_WIFI_RX_BA_WIN
	int "WiFi AMPDU RX BA window size"
	depends on ESPRESSIF_WIFI_AMPDU_RX_ENABLED
	range 2 32
	default 6
	---help---
		Set the size of WiFi Block Ack RX window. Generally a bigger value means higher throughput and better
		compatibility but more memory. Most of time we should NOT change the default value unless special
		reason, e.g. test the maximum UDP RX throughput with iperf etc. For iperf test in shieldbox, the
		recommended value is 9~12. If PSRAM is used and WiFi memory is preferred to allocate in PSRAM first,
		the default and minimum value should be 16 to achieve better throughput and compatibility with both
		stations and APs.

config ESPRESSIF_WIFI_GCMP_SUPPORT
	bool "WiFi GCMP Support(GCMP128 and GCMP256)"
	default n
	---help---
		Select this option to enable GCMP support. GCMP support is compulsory for WiFi Suite-B support.

config ESPRESSIF_WIFI_GMAC_SUPPORT
	bool "WiFi GMAC Support(GMAC128 and GMAC256)"
	default n
	---help---
		Select this option to enable GMAC support. GMAC support is compulsory for WiFi 192-bit certification.

config ESPRESSIF_WIFI_CONNECT_TIMEOUT
	int "Connect timeout in second"
	default 10
	---help---
		Max waiting time of connecting to AP.

config ESPRESSIF_WIFI_SCAN_RESULT_SIZE
	int "Scan result buffer"
	default 4096
	---help---
		Maximum scan result buffer size.

config ESPRESSIF_WIFI_STA_DISCONNECT_PM
	bool "Power Management for station when disconnected"
	default y
	---help---
		Select this option to enable power management for station when disconnected.
		Chip will do modem-sleep when RF module is not in use anymore.

choice ESPRESSIF_POWER_SAVE_MODE
	prompt "Wi-Fi Power save mode"
	default ESPRESSIF_POWER_SAVE_NONE
	---help---
		Wi-Fi supports the Modem-sleep mode which refers to the legacy power-saving mode in the IEEE 802.11 protocol.
		Modem-sleep mode works in station-only mode and the station must connect to the AP first. If the Modem-sleep
		mode is enabled, station will switch between active and sleep state periodically. In sleep state, RF, PHY and
		BB are turned off in order to reduce power consumption. Station can keep connection with AP in modem-sleep mode.

		Modem-sleep mode includes minimum and maximum power-saving modes.

		In minimum power-saving mode, station wakes
		up every DTIM to receive beacon. Broadcast data will not be lost because it is transmitted after DTIM.
		However, it cannot save much more power if DTIM is short for DTIM is determined by AP.

		In maximum power-saving mode, station wakes up in every listen interval to receive beacon. This listen interval
		can be set to be longer than the AP DTIM period. Broadcast data may be lost because station may be in sleep
		state at DTIM time. If listen interval is longer, more power is saved, but broadcast data is more easy to lose.
		Listen interval can be configured by setting ESPRESSIF_WIFI_LISTEN_INTERVAL.

		ESPRESSIF_POWER_SAVE_NONE disables Modem-sleep mode entirely. Disabling it increases power consumption, but
		minimizes the delay in receiving Wi-Fi data in real time. When Modem-sleep mode is enabled, the delay in
		receiving Wi-Fi data may be the same as the DTIM cycle (minimum power-saving mode) or the listening interval
		(maximum power-saving mode). Setting ESPRESSIF_POWER_SAVE_NONE is suitable when high throughput is required.

config ESPRESSIF_POWER_SAVE_NONE
	bool "No power save"

config ESPRESSIF_POWER_SAVE_MIN_MODEM
	bool "Minimum modem power saving."

config ESPRESSIF_POWER_SAVE_MAX_MODEM
	bool "Maximum modem power saving"

endchoice # ESPRESSIF_POWER_SAVE_MODE

config ESPRESSIF_WIFI_LISTEN_INTERVAL
	int "Wi-Fi listen interval"
	depends on ESPRESSIF_POWER_SAVE_MAX_MODEM
	default 3
	---help---
		Interval for station to listen to beacon from AP. The unit of listen interval is one beacon interval.
		For example, if beacon interval is 100 ms and listen interval is 3, the interval for station to listen
		to beacon is 300 ms.

endmenu # ESPRESSIF_WIFI

config ESPRESSIF_ESPNOW_PKTRADIO
	bool "ESPNOW pktradio support"
	depends on ESPRESSIF_WIRELESS
	depends on WIRELESS_PKTRADIO
	default n
	---help---
		Enable using espnow for pktradio, the addressing of nodes is
		based on a PANID and PANADDRESS. Node communication is limited
		to nodes with the same PANID. There is a direct relation
		between the PANADDRESS and the ipv6 address of a node:
		  PANADDRESS: 0xaabb
		  ipv6 address: AAAA 0000 0000 0000 0000 00ff fe00 bbaa
		For local link AAAA is fe80.

if ESPRESSIF_ESPNOW_PKTRADIO

config ESPRESSIF_ESPNOW_PKTRADIO_FRAMELEN
	int "ESPNOW pktradio frame length"
	range 127 250
	default 196
	---help---
		Frame size used for espnow transmissions. Ensure that this is
		set equal for all nodes.

config ESPRESSIF_ESPNOW_PKTRADIO_PANID
	hex "ESPNOW pktradio node panid"
	range 0x0 0xffff
	default 0x0
	---help---
		PANID for espnow pktradio.

config ESPRESSIF_ESPNOW_PKTRADIO_PANADDR
	hex "ESPNOW pktradio node address"
	range 0x0 0xffff
	default 0xfffe
	---help---
		PANADDRESS for espnow pktradio.

endif #ESPRESSIF_ESPNOW_PKTRADIO

config ESP_PHY_IRQSTATE_FLAGS_NUMBER
	int "Number of IRQ status lists for PHY initialization"
	default 3
	---help---
		The number of IRQ status lists to be saved when PHY enter a critical state multiple times
		at the same time during initialization.

menu "BLE Configuration"
	depends on ESPRESSIF_BLE

config ESPRESSIF_BLE_TASK_STACK_SIZE
	int "Controller task stack size"
	default 4096

config ESPRESSIF_BLE_TASK_PRIORITY
	int "Controller task priority"
	default 253

config ESPRESSIF_BLE_INTERRUPT_SAVE_STATUS
	int "Number of interrupt save status"
	default 3
	---help---
		Number of interrupt save status variables to keep track. Increase it if any related bug is found.

endmenu # BLE Configuration
