#
# For a description of the syntax of this configuration file,
# see the file kconfig-language.txt in the NuttX tools repository.
#

if ARCH_CHIP_ESPRESSIF || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32C3_GENERIC

choice ESPRESSIF_CHIP_SERIES
	prompt "Chip Series"
	default ESPRESSIF_ESP32C3

config ESPRESSIF_ESP32C3
	bool "ESP32-C3"
	select ARCH_HAVE_I2CRESET
	---help---
		ESP32-C3 chip with a single RISC-V IMC core, no embedded Flash memory

config ESPRESSIF_ESP32C6
	bool "ESP32-C6"
	select ARCH_HAVE_I2CRESET
	---help---
		Espressif ESP32-C6 (RV32IMAC).

config ESPRESSIF_ESP32H2
	bool "ESP32-H2"
	select ARCH_HAVE_I2CRESET
	---help---
		Espressif ESP32-H2 (RV32IMC).

endchoice # ESPRESSIF_CHIP_SERIES

config ESPRESSIF_CHIP_SERIES
	string
	default "esp32c3" if ESPRESSIF_ESP32C3
	default "esp32c6" if ESPRESSIF_ESP32C6
	default "esp32h2" if ESPRESSIF_ESP32H2
	default "unknown"

choice ESPRESSIF_FLASH
	prompt "Flash Size"
	default ESPRESSIF_FLASH_4M if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2

config ESPRESSIF_FLASH_2M
	bool "2 MB"

config ESPRESSIF_FLASH_4M
	bool "4 MB"

config ESPRESSIF_FLASH_8M
	bool "8 MB"

config ESPRESSIF_FLASH_16M
	bool "16 MB"

endchoice # ESPRESSIF_FLASH

config ESPRESSIF_FLASH_DETECT
	bool "Auto-detect FLASH size"
	default n
	---help---
		Auto detect flash size when flashing.

config ESPRESSIF_NUM_CPUS
	int
	default 1 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2

choice ESPRESSIF_CPU_FREQ
	prompt "CPU frequency"
	default ESPRESSIF_CPU_FREQ_160 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	default ESPRESSIF_CPU_FREQ_96 if ESPRESSIF_ESP32H2
	---help---
		CPU frequency to be set on application startup.

config ESPRESSIF_CPU_FREQ_40
	bool "40 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	---help---
		Set the CPU frequency to 40 MHz.

config ESPRESSIF_CPU_FREQ_48
	bool "48 MHz"
	depends on ESPRESSIF_ESP32H2
	---help---
		Set the CPU frequency to 48 MHz.

config ESPRESSIF_CPU_FREQ_64
	bool "64 MHz"
	depends on ESPRESSIF_ESP32H2
	---help---
		Set the CPU frequency to 64 MHz.

config ESPRESSIF_CPU_FREQ_80
	bool "80 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	---help---
		Set the CPU frequency to 80 MHz.

config ESPRESSIF_CPU_FREQ_96
	bool "96 MHz"
	depends on ESPRESSIF_ESP32H2
	---help---
		Set the CPU frequency to 96 MHz.

config ESPRESSIF_CPU_FREQ_160
	bool "160 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	---help---
		Set the CPU frequency to 160 MHz.

endchoice # ESPRESSIF_CPU_FREQ

config ESPRESSIF_CPU_FREQ_MHZ
	int
	default 40 if ESPRESSIF_CPU_FREQ_40
	default 48 if ESPRESSIF_CPU_FREQ_48
	default 64 if ESPRESSIF_CPU_FREQ_64
	default 80 if ESPRESSIF_CPU_FREQ_80
	default 96 if ESPRESSIF_CPU_FREQ_96
	default 160 if ESPRESSIF_CPU_FREQ_160

config ESPRESSIF_REGION_PROTECTION
	bool "Enable region protection"
	default y
	select ARCH_USE_MPU
	---help---
		Configure the MPU to disable access to invalid memory regions.

config ESPRESSIF_RUN_IRAM
	bool "Run from IRAM"
	default n
	---help---
		This loads all of NuttX inside IRAM. Used to test somewhat small
		images that can fit entirely in IRAM.

config ESPRESSIF_ESPTOOLPY_NO_STUB
	bool "Disable download stub"
	default n
	---help---
		The flasher tool sends a precompiled download stub first by default.
		That stub allows things like compressed downloads and more.
		Usually you should not need to disable that feature.
		It is only required to be disabled in certain scenarios when either
		Secure Boot V2 or Flash Encryption is enabled.

config ESPRESSIF_HAL_ASSERTIONS
	bool "Enable HAL assertions"
	depends on DEBUG_ASSERTIONS
	default y
	---help---
		Enable the assertions implemented in the HAL. Otherwise, the assertions
		are replaced by empty macros.

config ESPRESSIF_SOC_RTC_MEM_SUPPORTED
	bool
	default n

menu "Bootloader and Image Configuration"

config ESPRESSIF_SIMPLE_BOOT
	bool
	depends on !ESPRESSIF_BOOTLOADER_MCUBOOT
	default y

config ESPRESSIF_BOOTLOADER_MCUBOOT
	bool "Enable MCUboot-bootable format"
	select ESPRESSIF_HAVE_OTA_PARTITION
	---help---
		Enables the Espressif port of MCUboot to be used as 2nd stage bootloader.

config ESPRESSIF_MCUBOOT_VERSION
	string "MCUboot version"
	depends on ESPRESSIF_BOOTLOADER_MCUBOOT
	default "20f98e0a975c24864872e0df5701eb1082e9c957"

choice ESPRESSIF_ESPTOOL_TARGET_SLOT
	prompt "Target slot for image flashing"
	default ESPRESSIF_ESPTOOL_TARGET_PRIMARY
	depends on ESPRESSIF_HAVE_OTA_PARTITION
	---help---
		Slot to which ESPTOOL will flash the generated binary image.

config ESPRESSIF_ESPTOOL_TARGET_PRIMARY
	bool "Application image primary slot"
	---help---
		This assumes that the generated image is already pre-validated.
		This is the recommended option for the initial stages of the
		application firmware image development.

config ESPRESSIF_ESPTOOL_TARGET_SECONDARY
	bool "Application image secondary slot"
	---help---
		The application needs to confirm the generated image as valid,
		otherwise the bootloader may consider it invalid and perform the
		rollback of the update after a reset.
		This is the choice most suitable for the development and verification
		of a secure firmware update workflow.

endchoice

config ESPRESSIF_MCUBOOT_SIGN_IMAGE_VERSION
	string "Sign image version"
	depends on ESPRESSIF_BOOTLOADER_MCUBOOT
	default "1.0.0"

config ESPRESSIF_APP_MCUBOOT_HEADER_SIZE
	int "Application image header size (in bytes)"
	default 32
	depends on ESPRESSIF_BOOTLOADER_MCUBOOT

config ESPRESSIF_HAVE_OTA_PARTITION
	bool
	default n

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

endmenu # Bootloader and Image Configuration

menu "Peripheral Support"

config ESPRESSIF_RTC
	bool "Real Time Clock (RTC)"
	default y

config ESPRESSIF_UART
	bool
	default n

config ESPRESSIF_LP_UART
	bool
	default n

config ESPRESSIF_UART0
	bool "UART0"
	default y
	select ESPRESSIF_UART
	select UART0_SERIALDRIVER
	select ARCH_HAVE_SERIAL_TERMIOS

config ESPRESSIF_UART1
	bool "UART1"
	default n
	select ESPRESSIF_UART
	select UART1_SERIALDRIVER
	select ARCH_HAVE_SERIAL_TERMIOS

config ESPRESSIF_LP_UART0
	bool "LP UART0"
	default n
	depends on ARCH_CHIP_ESP32C6
	select ESPRESSIF_UART
	select ESPRESSIF_LP_UART
	select LPUART0_SERIALDRIVER
	select ARCH_HAVE_SERIAL_TERMIOS

config ESPRESSIF_TWAI
	bool "TWAI (CAN)"
	default n
	select ARCH_HAVE_CAN_ERRORS
	select CAN

config ESPRESSIF_TWAI0
	bool "TWAI0 (CAN)"
	default n
	select ESPRESSIF_TWAI
	select ARCH_HAVE_CAN_ERRORS
	select CAN

config ESPRESSIF_TWAI1
	bool "TWAI1 (CAN)"
	default n
	depends on ESPRESSIF_ESP32C6
	select ESPRESSIF_TWAI
	select ARCH_HAVE_CAN_ERRORS
	select CAN

config ESPRESSIF_USBSERIAL
	bool "USB-Serial-JTAG Driver"
	default n
	select ESPRESSIF_ESPTOOLPY_NO_STUB if ARCH_CHIP_ESP32C3_GENERIC
	select OTHER_UART_SERIALDRIVER
	select ARCH_HAVE_SERIAL_TERMIOS

config ESPRESSIF_DEDICATED_GPIO
	bool "Dedicated GPIO"
	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_GPIO_IRQ
	bool "GPIO pin interrupts"
	default n
	---help---
		Enable support for interrupting GPIO pins

config ESPRESSIF_RTCIO_IRQ
	bool "RTC IO interrupts"
	default n
	depends on !ARCH_CHIP_ESP32H2 && !ARCH_CHIP_ESP32C6
	---help---
		Enable support for RTC peripherals interrupts.

config ESPRESSIF_LEDC
	bool "LEDC (PWM)"
	default n
	select PWM
	select ARCH_HAVE_PWM_MULTICHAN

config ESPRESSIF_SHA_ACCELERATOR
	bool "SHA Accelerator"
	default n
	---help---
		Enable SHA accelerator support.

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"

endif # ESPRESSIF_ADC

config ESPRESSIF_I2S
	bool
	default n

config ESPRESSIF_I2S0
	bool "I2S 0"
	default n
	select ESPRESSIF_I2S
	select I2S
	select ESPRESSIF_DMA
	select ESPRESSIF_GPIO_IRQ
	select SCHED_HPWORK

config ESPRESSIF_I2C
	bool
	default n

config ESPRESSIF_LPI2C
	bool
	default n

config ESPRESSIF_I2C_PERIPH_MASTER_MODE
	bool
	depends on (ESPRESSIF_I2C0_MASTER_MODE || ESPRESSIF_I2C1_MASTER_MODE || ESPRESSIF_LP_I2C0)
	default n

config ESPRESSIF_I2C_PERIPH_SLAVE_MODE
	bool
	depends on (ESPRESSIF_I2C0_SLAVE_MODE || ESPRESSIF_I2C1_SLAVE_MODE)
	default n

config ESPRESSIF_I2C0
	bool "I2C 0"
	default n
	select ESPRESSIF_I2C
	select I2C

config ESPRESSIF_I2C1
	bool "I2C 1"
	default n
	depends on ARCH_CHIP_ESP32H2
	select ESPRESSIF_I2C
	select I2C

config ESPRESSIF_LP_I2C0
	bool "LP I2C 0"
	default n
	depends on ARCH_CHIP_ESP32C6
	select ESPRESSIF_I2C
	select ESPRESSIF_LPI2C
	select ESPRESSIF_I2C_PERIPH_MASTER_MODE
	select I2C

choice ESPRESSIF_I2C0_MODE
	prompt "I2C0 Mode"
	depends on ESPRESSIF_I2C0
	default ESPRESSIF_I2C0_MASTER_MODE

config ESPRESSIF_I2C0_MASTER_MODE
	bool "I2C0 Master Mode"
	select ESPRESSIF_I2C_PERIPH_MASTER_MODE

config ESPRESSIF_I2C0_SLAVE_MODE
	bool "I2C0 Slave Mode"
	select I2C_SLAVE
	select I2C_SLAVE_DRIVER
	select ESPRESSIF_I2C_PERIPH_SLAVE_MODE

endchoice # ESPRESSIF_I2C0_MODE

choice ESPRESSIF_I2C1_MODE
	prompt "I2C1 Mode"
	depends on ESPRESSIF_I2C1
	default ESPRESSIF_I2C1_MASTER_MODE

config ESPRESSIF_I2C1_MASTER_MODE
	bool "I2C1 Master Mode"
	select ESPRESSIF_I2C_PERIPH_MASTER_MODE

config ESPRESSIF_I2C1_SLAVE_MODE
	bool "I2C1 Slave Mode"
	select I2C_SLAVE
	select I2C_SLAVE_DRIVER
	select ESPRESSIF_I2C_PERIPH_SLAVE_MODE

endchoice # ESPRESSIF_I2C1_MODE

config ESPRESSIF_I2C_BITBANG
	bool "I2C Bitbang"
	default n
	select I2C_BITBANG
	select ESPRESSIF_I2C
	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
	bool
	default n

config ESPRESSIF_SPI_PERIPH
	bool
	depends on ESPRESSIF_SPI2
	default n

config ESPRESSIF_SPI2
	bool "SPI 2"
	default n
	select ESPRESSIF_SPI
	select SPI
	select ESPRESSIF_SPI_PERIPH

config ESPRESSIF_SPI_BITBANG
	bool "SPI Bitbang"
	default n
	select ESPRESSIF_SPI
	select SPI
	select SPI_BITBANG
	---help---
		Software implemented SPI peripheral with GPIOs. Suggested to use if SPI peripheral is already in use.

config ESPRESSIF_SPIFLASH
	bool "SPI Flash"
	default n

config ESPRESSIF_DMA
	bool "General DMA (GDMA)"
	default n
	select ARCH_DMA

config ESPRESSIF_EFUSE
	bool "EFUSE support"
	default n
	---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_HR_TIMER
	bool
	default RTC_DRIVER
	---help---
		A high-resolution hardware timer for supporting the management of
		kernel events.
		The HR Timer is built on top of the System Timer (SYSTIMER) peripheral.
		Timer callbacks are dispatched from a high-priority kernel task.

config ESPRESSIF_WDT
	bool
	default n
	select WATCHDOG

config ESPRESSIF_MWDT0
	bool "Main System Watchdog Timer (Group 0)"
	default n
	select ESPRESSIF_WDT
	---help---
		Includes MWDT0. This watchdog timer is part of the Group 0
		timer submodule.

config ESPRESSIF_MWDT1
	bool "Main System Watchdog Timer (Group 1)"
	default n
	select ESPRESSIF_WDT
	---help---
		Includes MWDT1. This watchdog timer is part of the Group 1
		timer submodule.

config ESPRESSIF_RWDT
	bool "RTC Watchdog Timer"
	default n
	select ESPRESSIF_WDT
	---help---
		Includes RWDT. This watchdog timer is from the RTC module.
		When it is selected, if the developer sets it to reset on expiration
		it will reset Main System and the RTC module. If you don't want
		to have the RTC module reset, please, use the Timers' Module WDTs.
		They will only reset Main System.

config ESPRESSIF_XTWDT
	bool "XTAL32K Watchdog Timer"
	depends on ARCH_CHIP_ESP32C3_GENERIC
	depends on ESPRESSIF_RTCIO_IRQ
	depends on ESPRESSIF_RTC_CLK_EXT_OSC || ESPRESSIF_RTC_CLK_EXT_XTAL
	default n
	select ESPRESSIF_WDT
	---help---
		Includes XTWDT. This watchdog timer monitors the status of the
		external 32 kHz crystal oscillator (XTAL32K). When XTAL32K_CLK works
		as the clock source of RTC_SLOW_CLK and it stops oscillating, the
		XTAL32K watchdog timer first switches to BACKUP32K_CLK derived from
		RC_SLOW_CLK (if ESP32S2_XTWDT_BACKUP_CLK_ENABLE) and, then, generates
		an interrupt that could be captured by WDIOC_CAPTURE.

config ESPRESSIF_XTWDT_TIMEOUT
	int "XTAL32K watchdog timeout period"
	depends on ESPRESSIF_XTWDT
	range 1 255
	default 200
	---help---
		Timeout period configuration for the XTAL32K watchdog timer based on RTC_CLK.

config ESPRESSIF_XTWDT_BACKUP_CLK_ENABLE
	bool "Automatically switch to BACKUP32K_CLK when timer expires"
	depends on ESPRESSIF_XTWDT
	default y
	---help---
		Enable this to automatically switch to BACKUP32K_CLK as the source of
		RTC_SLOW_CLK when the watchdog timer expires.

config ESPRESSIF_BROWNOUT_DET
	bool "Brownout Detector"
	default y
	---help---
		A built-in brownout detector which can detect if the voltage is lower
		than a specific value. If this happens, it will reset the chip in
		order to prevent unintended behaviour.

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_SDM
	bool "Sigma-Delta Modulation (SDM) Module"
	default n
	select ANALOG
	select DAC

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

config ESP_WIRELESS
	bool
	default n
	select NET
	select ARCH_PHY_INTERRUPT
	select RTC
	select RTC_DRIVER
	select ESPRESSIF_HR_TIMER

config ESPRESSIF_WIFI
	bool "Wi-Fi"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	default n
	select ESP_WIRELESS
	---help---
		Enable Wi-Fi support

config ESPRESSIF_BLE
	bool "BLE"
	depends on ESPRESSIF_ESP32C3
	default n
	select ESP_WIRELESS
	---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) || \
               (ESPRESSIF_WIFI && ESP_IEEE802154)   || \
               (ESP_IEEE802154 && 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

config ESP_MCPWM
	bool "Motor Control PWM (MCPWM)"
	default n
	depends on ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2
	---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
	depends on ESPRESSIF_ESP32H2 || ESPRESSIF_ESP32C6

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

endmenu # Peripheral Support

menu "ADC Configuration"
	depends on ESPRESSIF_ADC

if ESPRESSIF_ADC_1

config ESPRESSIF_ADC_1_DEVNAME
	string "ADC 1 Device Name"
	default "/dev/adc0"

choice ESPRESSIF_ADC_1_ATTENUATION
	prompt "ADC 1 Input Attenuation"
	default ESPRESSIF_ADC_1_ATTEN_12
	---help---
		Select input attenuation for the ADC unit.
		Relates to maximum measurable input voltage.
		See ESP32 Technical Reference Manual for details.

config ESPRESSIF_ADC_1_ATTEN_0
	bool "0 dB (1.1 V)"

config ESPRESSIF_ADC_1_ATTEN_2_5
	bool "2.5 dB (1.47 V)"

config ESPRESSIF_ADC_1_ATTEN_6
	bool "6 dB (2.2 V)"

config ESPRESSIF_ADC_1_ATTEN_12
	bool "12 dB (4.4 V)"

endchoice  # ESPRESSIF_ADC_1_ATTENUATION

config ESPRESSIF_ADC_1_ATTENUATION
	int
	default 0 if ESPRESSIF_ADC_1_ATTEN_0
	default 1 if ESPRESSIF_ADC_1_ATTEN_2_5
	default 2 if ESPRESSIF_ADC_1_ATTEN_6
	default 3 if ESPRESSIF_ADC_1_ATTEN_12

choice ESPRESSIF_ADC_1_MODE
	prompt "ADC 1 Mode"
	default ESPRESSIF_ADC_1_MODE_ONE_SHOT
	---help---
		Select operating mode for ADC 1.

config ESPRESSIF_ADC_1_MODE_ONE_SHOT
	bool "One-Shot Mode"

config ESPRESSIF_ADC_1_MODE_CONTINUOUS
	bool "Continuous Mode"

endchoice  # ESPRESSIF_ADC_1_MODE

menu "ADC 1 Channel Selection"

config ESPRESSIF_ADC_1_CH0
	bool "Channel 0"
	default y

config ESPRESSIF_ADC_1_CH1
	bool "Channel 1"
	default y

config ESPRESSIF_ADC_1_CH2
	bool "Channel 2"
	default y

config ESPRESSIF_ADC_1_CH3
	bool "Channel 3"
	default y

config ESPRESSIF_ADC_1_CH4
	bool "Channel 4"
	default n

config ESPRESSIF_ADC_1_CH5
	bool "Channel 5"
	depends on ESPRESSIF_ESP32C6
	default n

config ESPRESSIF_ADC_1_CH6
	bool "Channel 6"
	depends on ESPRESSIF_ESP32C6
	default n

endmenu # ADC 1 Channel Selection

endif  # ESPRESSIF_ADC_1

endmenu # ADC Configuration

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 if !ESPRESSIF_ESP32C6
	range 2 128 if ESPRESSIF_ESP32C6
	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 if !ESPRESSIF_ESP32C6
	range 2 64 if ESPRESSIF_ESP32C6
	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 if !ESPRESSIF_ESP32C6
	range 2 64 if ESPRESSIF_ESP32C6
	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_MIN_MODEM if ESPRESSIF_WIFI_BT_COEXIST
	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 # ESP_POWER_SAVE_MODE

endmenu # ESPRESSIF_WIFI

menu "BLE Configuration"
	depends on ESPRESSIF_BLE

config ESPRESSIF_BLE_TTY_NAME
	string "BLE TTY device name"
	default "/dev/ttyHCI0"
	depends on UART_BTH4

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

menu "UART Configuration"
	depends on ESPRESSIF_UART

if ESPRESSIF_UART0

config ESPRESSIF_UART0_RS485
	bool "RS-485 on UART0"
	default n
	---help---
		Enable RS-485 interface on UART0. Your board config will have to
		provide GPIO_UART0_RS485_DIR pin definition.

config ESPRESSIF_UART0_RS485_DIR_PIN
	int "UART0 RS-485 DIR pin"
	default 10
	range 0 46
	depends on ESPRESSIF_UART0_RS485
	---help---
		DIR pin for RS-485 on UART0. This pin will control the RS485 enable
		TX of the RS485 transceiver.

config ESPRESSIF_UART0_RS485_DIR_POLARITY
	int "UART0 RS-485 DIR pin polarity"
	default 1
	range 0 1
	depends on ESPRESSIF_UART0_RS485
	---help---
		Polarity of DIR pin for RS-485 on UART0. Set to state on DIR pin which
		enables TX (0 - low / nTXEN, 1 - high / TXEN).

config ESPRESSIF_UART0_TXPIN
	int "UART0 TX Pin"
	default 21 if ESPRESSIF_ESP32C3
	default 16 if ESPRESSIF_ESP32C6
	default 24 if ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

config ESPRESSIF_UART0_RXPIN
	int "UART0 RX Pin"
	default 20 if ESPRESSIF_ESP32C3
	default 17 if ESPRESSIF_ESP32C6
	default 23 if ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

config ESPRESSIF_UART0_RTSPIN
	int "UART0 RTS Pin"
	depends on SERIAL_IFLOWCONTROL
	default 16 if ESPRESSIF_ESP32C3
	default 15 if ESPRESSIF_ESP32C6
	default 22 if ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

config ESPRESSIF_UART0_CTSPIN
	int "UART0 CTS Pin"
	depends on SERIAL_OFLOWCONTROL
	default 15 if ESPRESSIF_ESP32C3
	default 14 if ESPRESSIF_ESP32C6
	default 21 if ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

endif # ESPRESSIF_UART0

if ESPRESSIF_UART1

config ESPRESSIF_UART1_RS485
	bool "RS-485 on UART1"
	default n
	---help---
		Enable RS-485 interface on UART1. Your board config will have to
		provide GPIO_UART1_RS485_DIR pin definition.

config ESPRESSIF_UART1_RS485_DIR_PIN
	int "UART1 RS-485 DIR pin"
	default 4
	range 0 46
	depends on ESPRESSIF_UART1_RS485
	---help---
		DIR pin for RS-485 on UART1. This pin will control the RS485 enable
		TX of the RS485 transceiver.

config ESPRESSIF_UART1_RS485_DIR_POLARITY
	int "UART1 RS-485 DIR pin polarity"
	default 1
	range 0 1
	depends on ESPRESSIF_UART1_RS485
	---help---
		Polarity of DIR pin for RS-485 on UART1. Set to state on DIR pin which
		enables TX (0 - low / nTXEN, 1 - high / TXEN).

config ESPRESSIF_UART1_TXPIN
	int "UART1 TX Pin"
	default 8 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2

config ESPRESSIF_UART1_RXPIN
	int "UART1 RX Pin"
	default 9 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2

config ESPRESSIF_UART1_RTSPIN
	int "UART1 RTS Pin"
	depends on SERIAL_IFLOWCONTROL
	default 1 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

config ESPRESSIF_UART1_CTSPIN
	int "UART1 CTS Pin"
	depends on SERIAL_OFLOWCONTROL
	default 2 if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2
	range 0 21 if ESPRESSIF_ESP32C3
	range 0 30 if ESPRESSIF_ESP32C6
	range 0 27 if ESPRESSIF_ESP32H2

endif # ESPRESSIF_UART1

endmenu # UART Configuration

menu "TWAI driver options"
	depends on ESPRESSIF_TWAI

if ESPRESSIF_TWAI0

config ESPRESSIF_TWAI0_TXPIN
	int "TWAI0 TX Pin"
	default 2

config ESPRESSIF_TWAI0_RXPIN
	int "TWAI0 RX Pin"
	default 3

choice ESPRESSIF_TWAI0_TIMING
	prompt "TWAI0 Timing config"
	default TWAI0_TIMING_100KBITS
	---help---
		These options control timing of TWAI0.

config TWAI0_TIMING_100KBITS
	bool "100 KBits"

config TWAI0_TIMING_125KBITS
	bool "125 KBits"

config TWAI0_TIMING_250KBITS
	bool "250 KBits"

config TWAI0_TIMING_500KBITS
	bool "500 KBits"

config TWAI0_TIMING_800KBITS
	bool "800 KBits"

endchoice # ESPRESSIF_TWAI0_TIMING

config ESPRESSIF_TWAI0_SAM
	bool "TWAI0 sampling"
	default n
	---help---
		The bus is sampled 3 times (recommended for low to medium speed buses
		to spikes on the bus-line).

endif # ESPRESSIF_TWAI0

if ESPRESSIF_TWAI1

config ESPRESSIF_TWAI1_TXPIN
	int "TWAI1 TX Pin"
	default 4

config ESPRESSIF_TWAI1_RXPIN
	int "TWAI1 RX Pin"
	default 5

choice ESPRESSIF_TWAI1_TIMING
	prompt "TWAI1 Timing config"
	default TWAI1_TIMING_100KBITS
	---help---
		These options control timing of TWAI1.

config TWAI1_TIMING_100KBITS
	bool "100 KBits"

config TWAI1_TIMING_125KBITS
	bool "125 KBits"

config TWAI1_TIMING_250KBITS
	bool "250 KBits"

config TWAI1_TIMING_500KBITS
	bool "500 KBits"

config TWAI1_TIMING_800KBITS
	bool "800 KBits"

endchoice # ESPRESSIF_TWAI1_TIMING

config ESPRESSIF_TWAI1_SAM
	bool "TWAI1 sampling"
	default n
	---help---
		The bus is sampled 3 times (recommended for low to medium speed buses
		to spikes on the bus-line).

endif # ESPRESSIF_TWAI1

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

endmenu #ESPRESSIF_TWAI

menu "SPI configuration"
	depends on ESPRESSIF_SPI

config ESPRESSIF_SPI_SWCS
	bool "SPI software CS"
	depends on ESPRESSIF_SPI_PERIPH
	default n
	---help---
		Use SPI software CS.

config ESPRESSIF_SPI_UDCS
	bool "User defined CS"
	default n
	depends on ESPRESSIF_SPI_SWCS
	depends on ESPRESSIF_SPI_PERIPH
	---help---
		Use user-defined CS.

if ESPRESSIF_SPI2

config ESPRESSIF_SPI2_DMA
	bool "SPI2 use GDMA"
	default n
	depends on ESPRESSIF_DMA
	---help---
		Enable support for transfers using the GDMA engine.

config ESPRESSIF_SPI2_DMADESC_NUM
	int "SPI2 Master GDMA maximum number of descriptors"
	default 2
	depends on ESPRESSIF_SPI2_DMA
	---help---
		Configure the maximum number of out-link/in-link descriptors to
		be chained for a GDMA transfer.

config ESPRESSIF_SPI2_DMATHRESHOLD
	int "SPI2 GDMA threshold"
	default 64
	depends on ESPRESSIF_SPI2_DMA
	---help---
		When SPI GDMA is enabled, GDMA transfers whose size are below the
		defined threshold will be performed by polling logic.

config ESPRESSIF_SPI2_SLAVE
	bool "SPI2 Slave mode"
	default n
	depends on SPI_SLAVE
	select ESPRESSIF_GPIO_IRQ
	---help---
		Configure SPI2 to operate in Slave mode.

config ESPRESSIF_SPI2_SLAVE_BUFSIZE
	int "SPI2 Slave buffer size"
	default 2048
	depends on ESPRESSIF_SPI2_SLAVE
	---help---
		Configure the size of SPI2 Slave controller's internal buffers.

config ESPRESSIF_SPI2_CSPIN
	int "SPI2 CS Pin"
	default 10 if ARCH_CHIP_ESP32C3_GENERIC
	default 16 if ARCH_CHIP_ESP32C6
	default 1 if ARCH_CHIP_ESP32H2
	range 0 21

config ESPRESSIF_SPI2_CLKPIN
	int "SPI2 CLK Pin"
	default 6 if !ARCH_CHIP_ESP32H2
	default 4 if ARCH_CHIP_ESP32H2
	range 0 21

config ESPRESSIF_SPI2_MOSIPIN
	int "SPI2 MOSI Pin"
	default 7 if !ARCH_CHIP_ESP32H2
	default 5 if ARCH_CHIP_ESP32H2
	range 0 21

config ESPRESSIF_SPI2_MISOPIN
	int "SPI2 MISO Pin"
	default 2 if !ARCH_CHIP_ESP32H2
	default 0 if ARCH_CHIP_ESP32H2
	range 0 21

endif # ESPRESSIF_SPI2

if 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

endif # ESPRESSIF_SPI_BITBANG

config ESPRESSIF_SPI_TEST_MODE
	bool "SPI driver loopback test mode (for testing only)"
	default n
	depends on SYSTEM_SPITOOL
	depends on ESPRESSIF_SPI_PERIPH
	---help---
		This enables a loopback test mode that attaches the transmitter
		to the receiver internally, being able to test the SPI
		peripheral without any external connection.

endmenu # SPI configuration

menu "Interrupt Configuration"

config ESPRESSIF_IRAM_ISR_DEBUG
	bool "Enable debugging of the IRAM-enabled interrupts"
	default n
	---help---
		This option enables keeping track of the IRAM-enabled interrupts by
		registering its execution when non-IRAM interrupts are disabled. It
		keeps track of the IRQ executed and register how many times since
		boot it was executed. Generally used for testing.

endmenu

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

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 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
	---help---
		Block size for MTD driver in kB. This size must be divisible by 2

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

choice ESPRESSIF_FLASH_FREQ
	prompt "SPI Flash frequency"
	default ESPRESSIF_FLASH_FREQ_80M if ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6
	default ESPRESSIF_FLASH_FREQ_64M if ESPRESSIF_ESP32H2
	---help---
		SPI Flash frequency.

config ESPRESSIF_FLASH_FREQ_80M
	bool "80 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6

config ESPRESSIF_FLASH_FREQ_64M
	bool "64 MHz"
	depends on ESPRESSIF_ESP32H2

config ESPRESSIF_FLASH_FREQ_40M
	bool "40 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6

config ESPRESSIF_FLASH_FREQ_26M
	bool "26 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6

config ESPRESSIF_FLASH_FREQ_20M
	bool "20 MHz"
	depends on ESPRESSIF_ESP32C3 || ESPRESSIF_ESP32C6

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.

config ESPRESSIF_SPI_FLASH_USE_ROM_CODE
	bool "Use SPI flash driver in ROM"
	default n
	depends on ESPRESSIF_ESP32C3
	---help---
		Use functions in ROM for SPI flash driver instead of
		source code.

config ESPRESSIF_SPI_FLASH_USE_32BIT_ADDRESS
	bool "SPI flash uses 32-bit address"
	default n
	---help---
		SPI flash driver in ROM only support 24-bit address access,
		if select the option, it will force to use source code instead
		of functions in ROM, so that SPI flash driver can access full
		32-bit address.

config ESPRESSIF_STORAGE_MTD_OFFSET
	hex "Storage MTD base address in SPI Flash"
	default 0x180000 if !ESPRESSIF_BOOTLOADER_MCUBOOT
	default 0x250000 if ESPRESSIF_BOOTLOADER_MCUBOOT
	depends on ESPRESSIF_MTD
	---help---
		MTD base address in SPI Flash.

config ESPRESSIF_STORAGE_MTD_SIZE
	hex "Storage MTD size in SPI Flash"
	default 0x100000
	depends on ESPRESSIF_MTD
	---help---
		MTD size in SPI Flash.

endmenu # SPI Flash Configuration

menu "RTC Configuration"
	depends on ESPRESSIF_RTC

choice ESPRESSIF_RTC_CLK_SRC
	prompt "RTC clock source"
	default ESPRESSIF_RTC_CLK_INT_RC
	---help---
		Choose which clock is used as RTC clock source.

		- "Internal 90KHz oscillator" option provides lowest deep sleep current
			consumption, and does not require extra external components. However
			frequency stability with respect to temperature is poor, so time may
			drift in deep/light sleep modes.
		- "External 32KHz crystal" provides better frequency stability, at the
			expense of slightly higher (1uA) deep sleep current consumption.
		- "External 32KHz oscillator" allows using 32KHz clock generated by an
			external circuit. In this case, external clock signal must be connected
			to 32K_XN pin. Amplitude should be <1.2V in case of sine wave signal,
			and <1V in case of square wave signal. Common mode voltage should be
			0.1 < Vcm < 0.5Vamp, where Vamp is the signal amplitude.
			Additionally, 1nF capacitor must be connected between 32K_XP pin and
			ground. 32K_XP pin can not be used as a GPIO in this case.
		- "Internal 8.5MHz oscillator divided by 256" option results in higher
			deep sleep current (by 5uA) but has better frequency stability than
			the internal 90KHz oscillator. It does not require external components.

config ESPRESSIF_RTC_CLK_INT_RC
	bool "Internal 90KHz RC oscillator"

config ESPRESSIF_RTC_CLK_EXT_XTAL
	bool "External 32KHz crystal"
	select ESP_SYSTEM_RTC_EXT_XTAL

config ESPRESSIF_RTC_CLK_EXT_OSC
	bool "External 32KHz oscillator at 32K_XN pin"
	select ESP_SYSTEM_RTC_EXT_XTAL

config ESPRESSIF_RTC_CLK_INT_8MD256
	bool "Internal 8.5MHz oscillator, divided by 256 (~33kHz)"

endchoice
endmenu # "RTC Configuration"

menu "LEDC configuration"
	depends on ESPRESSIF_LEDC

config ESPRESSIF_LEDC_HPOINT
	hex "LEDC hpoint value"
	default 0x0000
	range 0x0 0xfffff

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 13
	range 1 14 if ESPRESSIF_ESP32C3 && !(ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	range 1 20 if !ESPRESSIF_ESP32C3 && (ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	---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 13
	range 1 14 if ESPRESSIF_ESP32C3 && !(ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	range 1 20 if !ESPRESSIF_ESP32C3 && (ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	---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 13
	range 1 14 if ESPRESSIF_ESP32C3 && !(ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	range 1 20 if !ESPRESSIF_ESP32C3 && (ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	---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 13
	range 1 14 if ESPRESSIF_ESP32C3 && !(ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	range 1 20 if !ESPRESSIF_ESP32C3 && (ESPRESSIF_ESP32C6 || ESPRESSIF_ESP32H2)
	---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

config ESPRESSIF_LEDC_CHANNEL0_PIN
	int "Channel 0 pin"
	default 2

config ESPRESSIF_LEDC_CHANNEL1_PIN
	int "Channel 1 pin"
	default 3

config ESPRESSIF_LEDC_CHANNEL2_PIN
	int "Channel 2 pin"
	default 4

config ESPRESSIF_LEDC_CHANNEL3_PIN
	int "Channel 3 pin"
	default 5

if PWM_MULTICHAN && PWM_NCHANNELS > 1

config ESPRESSIF_LEDC_CHANNEL4_PIN
	int "Channel 4 pin"
	default 6

config ESPRESSIF_LEDC_CHANNEL5_PIN
	int "Channel 5 pin"
	default 7

endif # PWM_MULTICHAN && PWM_NCHANNELS > 1

endmenu # LEDC configuration

menu "I2S Configuration"
	depends on ESPRESSIF_I2S

config ESPRESSIF_I2S_MAXINFLIGHT
	int "I2S queue size"
	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 y
	---help---
		Enable I2S receiver (port 0)

config ESPRESSIF_I2S0_TX
	bool "Enable I2S transmitter"
	default y
	---help---
		Enable I2S transmitter (port 0)

choice ESPRESSIF_I2S0_ROLE
	prompt "I2S0 role"
	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_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 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 4
	range 0 48

config ESPRESSIF_I2S0_WSPIN
	int "I2S0 WS pin"
	default 5
	range 0 48

config ESPRESSIF_I2S0_DINPIN
	int "I2S0 DIN pin"
	depends on ESPRESSIF_I2S0_RX
	default 19 if !ESPRESSIF_ESP32H2
	default 11 if ESPRESSIF_ESP32H2
	range 0 48

config ESPRESSIF_I2S0_DOUTPIN
	int "I2S0 DOUT pin"
	depends on ESPRESSIF_I2S0_TX
	default 18 if !ESPRESSIF_ESP32H2
	default 10 if ESPRESSIF_ESP32H2
	range 0 48

config ESPRESSIF_I2S0_MCLK
	bool "Enable I2S Master Clock"
	depends on ESPRESSIF_I2S0_ROLE_MASTER
	default n
	---help---
		Enable I2S master clock

config ESPRESSIF_I2S0_MCLKPIN
	int "I2S MCLK pin"
	depends on ESPRESSIF_I2S0_MCLK
	default 0
	range 0 48

endif # ESPRESSIF_I2S0

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 an I2S DMA transfer.

endmenu # I2S configuration

menu "I2C Configuration"
	depends on ESPRESSIF_I2C

if ESPRESSIF_I2C0

config ESPRESSIF_I2C0_SCLPIN
	int "I2C0 SCL Pin"
	default 6 if !ESPRESSIF_LPI2C
	default 23 if ESPRESSIF_LPI2C
	range 0 21

config ESPRESSIF_I2C0_SDAPIN
	int "I2C0 SDA Pin"
	default 5
	range 0 21

endif # ESPRESSIF_I2C0

if ESPRESSIF_I2C1

config ESPRESSIF_I2C1_SCLPIN
	int "I2C1 SCL Pin"
	default 2
	range 0 21

config ESPRESSIF_I2C1_SDAPIN
	int "I2C1 SDA Pin"
	default 1
	range 0 21

endif # ESPRESSIF_I2C1

if 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

endif # ESPRESSIF_I2C_BITBANG

config ESPRESSIF_I2CTIMEOSEC
	int "Timeout seconds"
	depends on ESPRESSIF_I2C_PERIPH_MASTER_MODE
	default 0

config ESPRESSIF_I2CTIMEOMS
	int "Timeout milliseconds"
	depends on ESPRESSIF_I2C_PERIPH_MASTER_MODE
	default 500

endmenu # I2C configuration

menu "MCPWM Configuration"
	depends on ESP_MCPWM

config ESP_MCPWM_MOTOR
	bool "MCPWM Motor Support"
	default n

menu "MCPWM Motor Configuration"
	depends on ESP_MCPWM_MOTOR

config ESP_MCPWM_MOTOR_BDC
	bool "Brushed DC Motor Control"
	depends on ESP_MCPWM
	depends on ESP_MCPWM_MOTOR
	select MOTOR
	select MOTOR_UPPER
	select MOTOR_UPPER_HAVE_SPEED
	default n
	---help---
		Enables the use of the MCPWM submodule for control of brushed DC
		motor.

if ESP_MCPWM_MOTOR_BDC

config ESP_MCPWM_MOTOR_CH0
	bool "Motor Control Channel 0"
	default n
	---help---
		Enables motor control on channel 0.

if ESP_MCPWM_MOTOR_CH0

config ESP_MCPWM_MOTOR_CH0_PWMA_GPIO
	int "Output Pin PWM_A"
	default 20 if ESPRESSIF_ESP32C6
	default 10 if ESPRESSIF_ESP32H2
	---help---
		Output pin assigned to channel 0 PWM output PWM_A.

config ESP_MCPWM_MOTOR_CH0_PWMB_GPIO
	int "Output Pin PWM_B"
	default 21 if ESPRESSIF_ESP32C6
	default 11 if ESPRESSIF_ESP32H2
	---help---
		Output pin assigned to channel 0 PWM output PWM_B.

config ESP_MCPWM_MOTOR_CH0_PWM_FREQ
	int "PWM output frequency for channel 0 [Hz]"
	default 1000
	---help---
		Select PWM frequency for channel 0.
		Minimum is 25 Hz and maximum is 3000 Hz.

config ESP_MCPMW_MOTOR_CH0_FAULT
	bool "Enable fault for channel 0"
	default n
	---help---
		Enables the use of a fault pin to quickly stop the motor when
		a GPIO pin pulled high.

if ESP_MCPMW_MOTOR_CH0_FAULT

config ESP_MCPMW_MOTOR_CH0_FAULT_GPIO
	int "GPIO Pin for fault detection"
	default 9
	---help---
		Input pin assigned to channel 0 fault indicator.

endif # ESP_MCPMW_MOTOR_CH0_FAULT

endif # ESP_MCPWM_MOTOR_CH0

config ESP_MCPWM_MOTOR_CH1
	bool "Motor Control Channel 1"
	default n
	---help---
		Enables motor control on channel 1.

if ESP_MCPWM_MOTOR_CH1

config ESP_MCPWM_MOTOR_CH1_PWMA_GPIO
	int "Output Pin CH1 PWM_A"
	default 15
	---help---
		Output pin assigned to channel 1 PWM output PWM_A.

config ESP_MCPWM_MOTOR_CH1_PWMB_GPIO
	int "Output Pin CH1 PWM_B"
	default 16
	---help---
		Output pin assigned to channel 1 PWM output PWM_B.

endif # ESP_MCPWM_MOTOR_CH1

endif # ESP_MCPWM_MOTOR_BDC

endmenu # MCPWM Motor Settings

config ESP_MCPWM_CAPTURE
	bool "MCPWM Capture Submodule"
	depends on ESP_MCPWM
	select CAPTURE
	default n
	---help---
		Enables the use of the MCPWM capture submodule.

if ESP_MCPWM_CAPTURE

config ESP_MCPWM_CAPTURE_CH0
	bool "Capture Channel 0"
	default n
	---help---
		Enables capture on channel 0.

if ESP_MCPWM_CAPTURE_CH0

config ESP_MCPWM_CAPTURE_CH0_GPIO
	int "GPIO Pin"
	default 18
	---help---
		GPIO pin assigned to capture channel 0.

endif # ESP_MCPWM_CAPTURE_CH0

config ESP_MCPWM_CAPTURE_CH1
	bool "Capture Channel 1"
	default n
	---help---
		Enables capture on channel 1.

if ESP_MCPWM_CAPTURE_CH1

config ESP_MCPWM_CAPTURE_CH1_GPIO
	int "GPIO Pin"
	default 19
	---help---
		GPIO pin assigned to capture channel 1.

endif # ESP_MCPWM_CAPTURE_CH1

config ESP_MCPWM_CAPTURE_CH2
	bool "Capture Channel 2"
	default n
	---help---
		Enables capture on channel 2.

if ESP_MCPWM_CAPTURE_CH2

config ESP_MCPWM_CAPTURE_CH2_GPIO
	int "GPIO Pin"
	default 20
	---help---
		GPIO pin assigned to capture channel 2.

endif # ESP_MCPWM_CAPTURE_CH2

endif # ESP_MCPWM_CAPTURE

config ESP_MCPWM_TEST_LOOPBACK
	bool "MCPWM loopback test mode"
	depends on EXPERIMENTAL
	default n
	---help---
		This enables a lower-half driver-specific loopback test
		mode that attaches a capture device to the PWM output on
		motor tests.

endmenu # MCPWM Configuration

menu "High Resolution Timer"
	depends on ESPRESSIF_HR_TIMER

config ESPRESSIF_HR_TIMER_TASK_NAME
	string "High Resolution Timer task name"
	default "hr_timer"

config ESPRESSIF_HR_TIMER_TASK_PRIORITY
	int "High Resolution Timer task priority"
	default 223
	---help---
		Priority level of the High Resolution Timer task.
		Must be lower than the SCHED_HPWORKPRIORITY.

config ESPRESSIF_HR_TIMER_TASK_STACK_SIZE
	int "High Resolution Timer task stack size"
	default 2048

endmenu # High Resolution Timer

menu "Brownout Detector Configuration"
	depends on ESPRESSIF_BROWNOUT_DET

choice ESPRESSIF_BROWNOUT_DET_LVL_SEL
	prompt "Brownout voltage level"
	default ESPRESSIF_BROWNOUT_DET_LVL_SEL_7
	---help---
		The brownout detector will reset the chip when the supply voltage is
		approximately below this level. Note that there may be some variation
		of brownout voltage level between each chip.

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_7
	bool "2.51V"

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_6
	bool "2.64V"

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_5
	bool "2.76V"

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_4
	bool "2.92V"

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_3
	bool "3.10V"

config ESPRESSIF_BROWNOUT_DET_LVL_SEL_2
	bool "3.27V"

endchoice # ESPRESSIF_BROWNOUT_DET_LVL_SEL

config ESPRESSIF_BROWNOUT_DET_LVL
	int
	default 2 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_2
	default 3 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_3
	default 4 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_4
	default 5 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_5
	default 6 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_6
	default 7 if ESPRESSIF_BROWNOUT_DET_LVL_SEL_7

endmenu # ESPRESSIF_BROWNOUT_DET

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

endif # ARCH_CHIP_ESPRESSIF
