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

if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4

config ESPRESSIF_CHIP_SERIES
	string
	default "esp32c3" if ARCH_CHIP_ESP32C3
	default "esp32c6" if ARCH_CHIP_ESP32C6
	default "esp32h2" if ARCH_CHIP_ESP32H2
	default "esp32p4" if ARCH_CHIP_ESP32P4
	default "unknown"

choice ESPRESSIF_FLASH
	prompt "Flash Size"
	default ESPRESSIF_FLASH_4M if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4

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"

config ESPRESSIF_FLASH_32M
	bool "32 MB"

endchoice # ESPRESSIF_FLASH

config ESPRESSIF_DONT_USE_ROM_LIBC
	bool "Don't use ROM libc functions"
	default n
	---help---
		If enabled, NuttX libc will be used instead of ROM newlib
		functions (strdup, strndup, atoi, etc.).

		This prevents cross-heap allocation issues when ROM newlib
		allocators are not mapped to the same heap as NuttX libc.

menuconfig ESPRESSIF_SPIRAM
	bool "External SPI RAM (SPIRAM)"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable external PSRAM support through the ESP HAL component.

if ESPRESSIF_SPIRAM

config ESPRESSIF_SPIRAM_BOOT_INIT
	bool "Initialize SPIRAM during early boot"
	default y
	---help---
		Initialize and map external PSRAM before heap region registration.

config ESPRESSIF_SPIRAM_IGNORE_NOTFOUND
	bool "Ignore SPIRAM not found"
	depends on !ESPRESSIF_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
	default n
	---help---
		Keep booting even if PSRAM detection fails.

config ESPRESSIF_SPIRAM_MEMTEST
	bool "Run SPIRAM memory test at boot"
	default y
	---help---
		Run a basic memory test before adding PSRAM to the allocator.

config ESPRESSIF_SPIRAM_USE_8LINE_MODE
	bool "Use x8 line mode"
	default n
	---help---
		Enable x8 line mode instead of x16 line mode.

config ESPRESSIF_SPIRAM_ECC
	bool "Enable SPIRAM ECC"
	default n
	---help---
		Enable ECC for external PSRAM accesses.

choice ESPRESSIF_SPIRAM_SPEED
	prompt "SPIRAM speed"
	default ESPRESSIF_SPIRAM_SPEED_200M if !ESP32P4_REV_MIN_0
	default ESPRESSIF_SPIRAM_SPEED_80M

config ESPRESSIF_SPIRAM_SPEED_20M
	bool "20 MHz"

config ESPRESSIF_SPIRAM_SPEED_80M
	bool "80 MHz"

config ESPRESSIF_SPIRAM_SPEED_200M
	bool "200 MHz"
	depends on !ESP32P4_REV_MIN_0

config ESPRESSIF_SPIRAM_SPEED_250M
	bool "250 MHz"
	depends on !ESP32P4_REV_MIN_0

endchoice # ESPRESSIF_SPIRAM_SPEED

config ESPRESSIF_SPIRAM_SPEED
	int
	default 20 if ESPRESSIF_SPIRAM_SPEED_20M
	default 80 if ESPRESSIF_SPIRAM_SPEED_80M
	default 200 if ESPRESSIF_SPIRAM_SPEED_200M
	default 250 if ESPRESSIF_SPIRAM_SPEED_250M

config ESPRESSIF_SPIRAM_USER_HEAP
	bool "Add SPIRAM to user heap"
	default y
	select ESPRESSIF_DONT_USE_ROM_LIBC
	---help---
		Add SPIRAM as an additional NuttX heap region.

config ESPRESSIF_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY
	bool "Allow .bss segment placed in external memory"
	default n
	---help---
		If enabled, variables with EXT_RAM_BSS_ATTR attribute will be
		placed in SPIRAM instead of internal DRAM.

		BSS sections from esp-hal-3rdparty components can also be placed
		in SPIRAM through linker fragment mappings when enabled.

		Note that variables placed in SPIRAM this way are still
		zero-initialized at startup.

endif # ESPRESSIF_SPIRAM

config ESPRESSIF_IDF_ENV_FPGA
	bool "IDF FPGA Environment"
	default n
	---help---
		- This option is for internal use only.
		- Enabling this option will help enable all FPGA support so as to
			run NuttX on an FPGA. This can help reproduce some issues that
			only happens on FPGA condition, or when you have to burn some
			efuses multiple times.

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 ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2
	default 2 if ARCH_CHIP_ESP32P4

choice ESPRESSIF_CPU_FREQ
	prompt "CPU frequency"
	default ESPRESSIF_CPU_FREQ_40 if ARCH_CHIP_ESP32P4 && ESPRESSIF_IDF_ENV_FPGA
	default ESPRESSIF_CPU_FREQ_96 if ARCH_CHIP_ESP32H2
	default ESPRESSIF_CPU_FREQ_160 if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6
	default ESPRESSIF_CPU_FREQ_360 if ARCH_CHIP_ESP32P4 && ESP32P4_SELECTS_REV_LESS_V3
	default ESPRESSIF_CPU_FREQ_400 if ARCH_CHIP_ESP32P4 && !ESP32P4_SELECTS_REV_LESS_V3
	---help---
		CPU frequency to be set on application startup.

config ESPRESSIF_CPU_FREQ_40
	bool "40 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	---help---
		Set the CPU frequency to 40 MHz.

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

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

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

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

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

config ESPRESSIF_CPU_FREQ_360
	bool "360 MHz"
	depends on ARCH_CHIP_ESP32P4 && ESP32P4_SELECTS_REV_LESS_V3
	---help---
		Set the CPU frequency to 360 MHz.

config ESPRESSIF_CPU_FREQ_400
	bool "400 MHz"
	depends on ARCH_CHIP_ESP32P4 && !ESP32P4_SELECTS_REV_LESS_V3
	---help---
		Set the CPU frequency to 400 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
	default 360 if ESPRESSIF_CPU_FREQ_360
	default 400 if ESPRESSIF_CPU_FREQ_400

config ESPRESSIF_DFS
	bool "Enable DFS (Dynamic Frequency Scaling)"
	select PM
	default n

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 "Espressif DFS Options"
	depends on ESPRESSIF_DFS

choice ESPRESSIF_MIN_CPU_FREQ
	prompt "Minimum CPU frequency"
	default ESPRESSIF_MIN_CPU_FREQ_40 if ARCH_CHIP_ESP32P4 && ESPRESSIF_IDF_ENV_FPGA
	default ESPRESSIF_MIN_CPU_FREQ_96 if ARCH_CHIP_ESP32H2
	default ESPRESSIF_MIN_CPU_FREQ_160 if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6
	default ESPRESSIF_MIN_CPU_FREQ_360 if ARCH_CHIP_ESP32P4 && ESP32P4_SELECTS_REV_LESS_V3
	default ESPRESSIF_MIN_CPU_FREQ_400 if ARCH_CHIP_ESP32P4 && !ESP32P4_SELECTS_REV_LESS_V3
	---help---
		Minimum CPU frequency to be scale.

config ESPRESSIF_MIN_CPU_FREQ_40
	bool "40 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	---help---
		Set the minimum CPU frequency to 40 MHz.

config ESPRESSIF_MIN_CPU_FREQ_48
	bool "48 MHz"
	depends on ARCH_CHIP_ESP32H2
	---help---
		Set the minimum CPU frequency to 48 MHz.

config ESPRESSIF_MIN_CPU_FREQ_64
	bool "64 MHz"
	depends on ARCH_CHIP_ESP32H2
	---help---
		Set the minimum CPU frequency to 64 MHz.

config ESPRESSIF_MIN_CPU_FREQ_80
	bool "80 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6
	---help---
		Set the minimum CPU frequency to 80 MHz.

config ESPRESSIF_MIN_CPU_FREQ_96
	bool "96 MHz"
	depends on ARCH_CHIP_ESP32H2
	---help---
		Set the minimum CPU frequency to 96 MHz.

config ESPRESSIF_MIN_CPU_FREQ_160
	bool "160 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6
	---help---
		Set the minimum CPU frequency to 160 MHz.

config ESPRESSIF_MIN_CPU_FREQ_360
	bool "360 MHz"
	depends on ARCH_CHIP_ESP32P4 && ESP32P4_SELECTS_REV_LESS_V3
	---help---
		Set the minimum CPU frequency to 360 MHz.

config ESPRESSIF_MIN_CPU_FREQ_400
	bool "400 MHz"
	depends on ARCH_CHIP_ESP32P4 && !ESP32P4_SELECTS_REV_LESS_V3
	---help---
		Set the minimum CPU frequency to 400 MHz.

endchoice # ESPRESSIF_MIN_CPU_FREQ

config ESPRESSIF_MAX_CPU_FREQ_MHZ
	int
	default 40 if ESPRESSIF_MAX_CPU_FREQ_40
	default 48 if ESPRESSIF_MAX_CPU_FREQ_48
	default 64 if ESPRESSIF_MAX_CPU_FREQ_64
	default 80 if ESPRESSIF_MAX_CPU_FREQ_80
	default 96 if ESPRESSIF_MAX_CPU_FREQ_96
	default 160 if ESPRESSIF_MAX_CPU_FREQ_160
	default 360 if ESPRESSIF_MAX_CPU_FREQ_360
	default 400 if ESPRESSIF_MAX_CPU_FREQ_400

config ESPRESSIF_MIN_CPU_FREQ_MHZ
	int
	default 40 if ESPRESSIF_MIN_CPU_FREQ_40
	default 48 if ESPRESSIF_MIN_CPU_FREQ_48
	default 64 if ESPRESSIF_MIN_CPU_FREQ_64
	default 80 if ESPRESSIF_MIN_CPU_FREQ_80
	default 96 if ESPRESSIF_MIN_CPU_FREQ_96
	default 160 if ESPRESSIF_MIN_CPU_FREQ_160
	default 360 if ESPRESSIF_MIN_CPU_FREQ_360
	default 400 if ESPRESSIF_MIN_CPU_FREQ_400

endmenu #

menu "Espressif Log Level"
	visible if DEBUG_FEATURES

config ESPRESSIF_LOG_LEVEL_NONE
	bool "NONE"
	depends on !DEBUG_FEATURES && !DEBUG_ERROR && !DEBUG_WARN && !DEBUG_INFO
	default y
	---help---
		No log output from Espressif log messages.

config ESPRESSIF_LOG_LEVEL_ERROR
	bool "ERROR"
	depends on DEBUG_ERROR
	default y
	---help---
		Display critical errors from Espressif log messages.

config ESPRESSIF_LOG_LEVEL_WARN
	bool "WARN"
	depends on DEBUG_WARN
	default y
	---help---
		Display warning messages from Espressif log messages.

config ESPRESSIF_LOG_LEVEL_INFO
	bool "INFO"
	depends on DEBUG_INFO
	default y
	---help---
		Display information messages from Espressif log messages.

config ESPRESSIF_LOG_LEVEL_DEBUG
	bool "DEBUG"
	depends on DEBUG_INFO
	default n
	---help---
		Display extra information from Espressif log messages.

config ESPRESSIF_LOG_LEVEL_VERBOSE
	bool "VERBOSE"
	depends on DEBUG_INFO
	default n
	---help---
		Display bigger chunks of debugging information, or frequent messages
		which can potentially flood the output from Espressif log messages.

config ESPRESSIF_LOG_LEVEL
	int
	default 5 if ESPRESSIF_LOG_LEVEL_VERBOSE
	default 4 if ESPRESSIF_LOG_LEVEL_DEBUG
	default 3 if ESPRESSIF_LOG_LEVEL_INFO
	default 2 if ESPRESSIF_LOG_LEVEL_WARN
	default 1 if ESPRESSIF_LOG_LEVEL_ERROR
	default 0 if ESPRESSIF_LOG_LEVEL_NONE

endmenu # Espressif Log Level

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 "8a07053d42e592c85cb35b79c4de1b7749943387"

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

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

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

config ESPRESSIF_OTA_SCRATCH_OFFSET
	hex "Scratch partition offset"
	default 0x2C0000

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

config ESPRESSIF_SECURE_FLASH_ENC_ENABLED
	bool "Enable Flash Encryption on boot (READ DOCS FIRST)"
	default n
	depends on ESPRESSIF_BOOTLOADER_MCUBOOT
	select ESPRESSIF_EFUSE
	---help---
		If this option is set, flash contents will be encrypted by the bootloader on first boot.

		Note: After first boot, the system will be permanently encrypted. Re-flashing an encrypted
		system is complicated and not always possible.

		Read https://docs.espressif.com/projects/esp-idf/en/latest/security/flash-encryption.html
		before enabling.

		Note: enabling this option will automatically select ESPRESSIF_EFUSE and ESPRESSIF_EFUSE_VIRTUAL,
		as a mean to avoid accidental burning of the E-Fuses.

if ESPRESSIF_SECURE_FLASH_ENC_ENABLED

config ESPRESSIF_SECURE_FLASH_UART_BOOTLOADER_ALLOW_ENC
	bool "Leave UART bootloader encryption enabled"
	depends on ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	default n
	---help---
		If not set (default), the bootloader will permanently disable UART bootloader encryption access on
		first boot. If set, the UART bootloader will still be able to access hardware encryption.

		It is recommended to only set this option in testing environments.

config ESPRESSIF_SECURE_FLASH_UART_BOOTLOADER_ALLOW_DEC
	bool "Leave UART bootloader decryption enabled"
	default n
	depends on ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	---help---
		If not set (default), the bootloader will permanently disable UART bootloader decryption access on
		first boot. If set, the UART bootloader will still be able to access hardware decryption.

		Only set this option in testing environments. Setting this option allows complete bypass of flash
		encryption.

config ESPRESSIF_SECURE_FLASH_UART_BOOTLOADER_ALLOW_CACHE
	bool "Leave UART bootloader flash cache enabled"
	default n
	depends on ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	---help---
		If not set (default), the bootloader will permanently disable UART bootloader flash cache access on
		first boot. If set, the UART bootloader will still be able to access the flash cache.

		Only set this option in testing environments.

choice ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE
	bool "Enable usage mode"
	default ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	---help---
		By default, Development mode is enabled which allows ROM download mode to perform Flash Encryption
		operations (plaintext is sent to the device, and it encrypts it internally and writes ciphertext
		to flash). This mode is not secure, it's possible for an attacker to write their own chosen plaintext
		to flash.

		Release mode should always be selected for production or manufacturing. Once enabled it's no longer
		possible for the device in ROM Download Mode to use the Flash Encryption hardware.

		Refer to the Flash Encryption section of the ESP-IDF Programmer's Guide for details:
		https://docs.espressif.com/projects/esp-idf/en/latest/esp32/security/flash-encryption.html#flash-encryption-configuration

config ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	bool "Development (NOT SECURE)"
	select ESPRESSIF_SECURE_FLASH_UART_BOOTLOADER_ALLOW_ENC

config ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_RELEASE
	bool "Release"

endchoice

config ESPRESSIF_SECURE_FLASH_ENC_USE_HOST_KEY
	bool "Require user provided encryption key for flash encryption"
	default y
	---help---
		This option enables the requirement of a host generated flash encryption key.

		If not selected, a random key will be generated by the bootloader on first boot.
		In this case, the user will not have access to the key and will be unable to reuse it.

if ESPRESSIF_SECURE_FLASH_ENC_USE_HOST_KEY

config ESPRESSIF_SECURE_FLASH_ENC_HOST_KEY_NAME
	string "Path to flash encryption key"
	default "flash_enc_key.bin"
	---help---
		Path to the key file used to encrypt the flash.

		This key is in a binary format and is generated by espsecure application.

		Path is evaluated relative to the NuttX root directory.

		You can generate a new signing key by running the following command:
		$ espsecure.py generate_flash_encryption_key <key_name>

endif # ESPRESSIF_SECURE_FLASH_ENC_USE_HOST_KEY

config ESPRESSIF_SECURE_FLASH_ENC_FLASH_DEVICE_ENCRYPTED
	bool "Device is already encrypted"
	default n
	depends on ESPRESSIF_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT
	depends on !ESPRESSIF_EFUSE_VIRTUAL
	---help---
		Append --encrypt to esptool.py write_flash command.

		This option is useful when the device already has a flash encryption key,
		and the user wants to simply flash a new firmware to it, using the key already present.
		It requires that the DEVELOPMENT mode is set. It is not possible to reflash in RELEASE mode.

endif # ESPRESSIF_SECURE_FLASH_ENC_ENABLED

endmenu # Bootloader and Image Configuration

menu "LP Core (Low-power core) Coprocessor Configuration"

config ESPRESSIF_USE_LP_CORE
	bool "Enable LP Coprocessor"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	---help---
		Enable LP core (Low-power core) coprocessor

if ESPRESSIF_USE_LP_CORE

config ESPRESSIF_ULP_COPROC_RESERVE_MEM_SIZE
	int "RTC slow memory reserved for coprocessor"
	default 4096
	range 32 16352
	---help---
		Bytes of memory to reserve for ULP Co-processor firmware & data.
		Data is reserved at the beginning of RTC slow memory.

config ESPRESSIF_ULP_SHARED_MEM_SIZE
	int "Size of the shared memory for ULP core"
	default 16
	---help---
		Size of the shared memory defined in bytes.

config ESPRESSIF_ULP_ENABLE_UBSAN
	bool "Enable UBSan (undefined behavior sanitizer) for LP core application"
	depends on DEBUG_SYMBOLS
	default n
	---help---
		LP core supports limited set of HW exceptions. This can be overcome
		by enabling undefined behavior sanitizer for LP core application to catch some errors.
		But note that it will increase code size significantly and it can happen that
		application will not fit into RTC RAM

choice ESPRESSIF_ULP_WAKEUP_SOURCE
	prompt "LP Coprocessor wakeup source"
	default ESPRESSIF_ULP_WAKEUP_HP_CPU

config ESPRESSIF_ULP_WAKEUP_HP_CPU
	bool "Wakeup by HP core"

config ESPRESSIF_ULP_WAKEUP_LP_UART
	depends on ESPRESSIF_LP_UART
	bool "Wakeup by LP UART RX"

config ESPRESSIF_ULP_WAKEUP_LP_IO
	bool "Wakeup by LP IO interrupt"

config ESPRESSIF_ULP_WAKEUP_LP_TIMER
	bool "Wakeup by LP timer"

endchoice # ESPRESSIF_ULP_WAKEUP_SOURCE

menu "ULP Wakeup LP IO Sources"
	depends on ESPRESSIF_ULP_WAKEUP_LP_IO

menu "GPIOs to wakeup ULP when low"

config ESPRESSIF_ULP_WAKEUP_LP_IO0_LOW
	bool "LP_IO0"
	default n
	---help---
		Wakeup ULP when LP_GPIO0 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO1_LOW
	bool "LP_IO1"
	default n
	---help---
		Wakeup ULP when LP_GPIO1 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO2_LOW
	bool "LP_IO2"
	default n
	---help---
		Wakeup ULP when LP_GPIO2 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO3_LOW
	bool "LP_IO3"
	default n
	---help---
		Wakeup ULP when LP_GPIO3 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO4_LOW
	bool "LP_IO4"
	default n
	---help---
		Wakeup ULP when LP_GPIO4 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO5_LOW
	bool "LP_IO5"
	default n
	---help---
		Wakeup ULP when LP_GPIO5 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO6_LOW
	bool "LP_IO6"
	default n
	---help---
		Wakeup ULP when LP_GPIO6 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO7_LOW
	bool "LP_IO7"
	default n
	---help---
		Wakeup ULP when LP_GPIO7 is low.

config ESPRESSIF_ULP_WAKEUP_LP_IO8_LOW
	bool "LP_IO8"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO8 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO9_LOW
	bool "LP_IO9"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO9 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO10_LOW
	bool "LP_IO10"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO10 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO11_LOW
	bool "LP_IO11"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO11 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO12_LOW
	bool "LP_IO12"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO12 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO13_LOW
	bool "LP_IO13"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO13 is low

config ESPRESSIF_ULP_WAKEUP_LP_IO14_LOW
	bool "LP_IO14"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO14 is low

endmenu # GPIOs to wakeup ULP when low

menu "GPIOs to wakeup ULP when high"

config ESPRESSIF_ULP_WAKEUP_LP_IO0_HIGH
	bool "LP_IO0"
	default n
	---help---
		Wakeup ULP when LP_GPIO0 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO1_HIGH
	bool "LP_IO1"
	default n
	---help---
		Wakeup ULP when LP_GPIO1 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO2_HIGH
	bool "LP_IO2"
	default n
	---help---
		Wakeup ULP when LP_GPIO2 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO3_HIGH
	bool "LP_IO3"
	default n
	---help---
		Wakeup ULP when LP_GPIO3 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO4_HIGH
	bool "LP_IO4"
	default n
	---help---
		Wakeup ULP when LP_GPIO4 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO5_HIGH
	bool "LP_IO5"
	default n
	---help---
		Wakeup ULP when LP_GPIO5 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO6_HIGH
	bool "LP_IO6"
	default n
	---help---
		Wakeup ULP when LP_GPIO6 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO7_HIGH
	bool "LP_IO7"
	default n
	---help---
		Wakeup ULP when LP_GPIO7 is high.

config ESPRESSIF_ULP_WAKEUP_LP_IO8_HIGH
	bool "LP_IO8"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO8 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO9_HIGH
	bool "LP_IO9"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO9 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO10_HIGH
	bool "LP_IO10"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO10 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO11_HIGH
	bool "LP_IO11"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO11 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO12_HIGH
	bool "LP_IO12"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO12 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO13_HIGH
	bool "LP_IO13"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO13 is high

config ESPRESSIF_ULP_WAKEUP_LP_IO14_HIGH
	bool "LP_IO14"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Wakeup ULP when LP_GPIO14 is high

endmenu # GPIOs to wakeup ULP when high

endmenu # ULP Wakeup LP IO Sources

config ESPRESSIF_ULP_WAKEUP_SLEEP_DURATION_US
	int "Sleep duration of LP Coprocessor in us"
	depends on ESPRESSIF_ULP_WAKEUP_LP_TIMER
	default 1000000

choice ESPRESSIF_ULP_WAKEUP_LPUART_MODE
	prompt "LP Coprocessor UART Wakeup Mode"
	depends on ESPRESSIF_ULP_WAKEUP_LP_UART
	default ESPRESSIF_ULP_WAKEUP_LPUART_START_BIT_MODE

config ESPRESSIF_ULP_WAKEUP_LPUART_ACTIVE_EDGE_THRESHOLD_MODE
	bool "Wake-up triggered by active edge threshold"

config ESPRESSIF_ULP_WAKEUP_LPUART_FIFO_THRESHOLD_MODE
	bool "Wake-up triggered by the number of bytes received in the RX FIFO"

config ESPRESSIF_ULP_WAKEUP_LPUART_START_BIT_MODE
	bool "Wake-up triggered by the detection of a start bit"

config ESPRESSIF_ULP_WAKEUP_LPUART_CHAR_SEQ_MODE
	bool "Wake-up triggered by detecting a specific character sequence"

endchoice # ESPRESSIF_ULP_WAKEUP_LPUART_MODE

config ESPRESSIF_ULP_WAKEUP_LPUART_ACTIVE_EDGE_THRESHOLD
	int "Number of RXD edge changes to to trigger wake-up"
	depends on ESPRESSIF_ULP_WAKEUP_LPUART_ACTIVE_EDGE_THRESHOLD_MODE
	default 3

config ESPRESSIF_ULP_WAKEUP_LPUART_FIFO_THRESHOLD
	int "Number of bytes needed to receive in the RX FIFO to trigger wake-up"
	depends on ESPRESSIF_ULP_WAKEUP_LPUART_FIFO_THRESHOLD_MODE
	default 8

config ESPRESSIF_ULP_WAKEUP_LPUART_CHAR_SEQ
	string "Character sequence to trigger wake-up"
	depends on ESPRESSIF_ULP_WAKEUP_LPUART_CHAR_SEQ_MODE
	default "esp"

endif # ESPRESSIF_USE_LP_CORE
endmenu # LP Core (Low-power core) Coprocessor Configuration

menu "PM Configuration"

config ESPRESSIF_AUTO_SLEEP
	bool "Auto-sleep"
	default n
	select PM
	select ESPRESSIF_HR_TIMER
	select ARCH_HAVE_EXTRA_HEAPS if ARCH_CHIP_ESP32C3
	select ESPRESSIF_RETENTION_HEAP if ARCH_CHIP_ESP32C3
	select SCHED_TICKLESS
	---help---
		Enable Auto-sleep

config ESPRESSIF_RETENTION_HEAP
	bool "Use retention memory as a separate heap"
	depends on ARCH_CHIP_ESP32C3
	default n

if PM

config PM_EXT1_WAKEUP
	bool "PM EXT1 Wakeup"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable EXT1 wakeup functionality.
		This allows the system to wake up from PM_STANDBY or PM_SLEEP
		when a GPIO pin configured as an EXT1 wakeup source is triggered.

menu "PM EXT1 Wakeup Sources"
	depends on PM_EXT1_WAKEUP

config PM_EXT1_WAKEUP_RTC_GPIO0
	bool "RTC_GPIO0"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO0 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO1
	bool "RTC_GPIO1"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO1 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO2
	bool "RTC_GPIO2"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO2 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO3
	bool "RTC_GPIO3"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO3 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO4
	bool "RTC_GPIO4"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO4 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO5
	bool "RTC_GPIO5"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO5 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO6
	bool "RTC_GPIO6"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO6 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO7
	bool "RTC_GPIO7"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO7 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO8
	bool "RTC_GPIO8"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO8 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO9
	bool "RTC_GPIO9"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO9 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO10
	bool "RTC_GPIO10"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO10 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO11
	bool "RTC_GPIO11"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO11 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO12
	bool "RTC_GPIO12"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO12 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO13
	bool "RTC_GPIO13"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO13 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO14
	bool "RTC_GPIO14"
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO14 as an EXT1 wakeup source.

config PM_EXT1_WAKEUP_RTC_GPIO15
	bool "RTC_GPIO15"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable RTC GPIO15 as an EXT1 wakeup source.

choice PM_EXT1_WAKEUP_TRIGGER_MODE
	prompt "PM EXT1 Wakeup Trigger Mode"
	default PM_EXT1_WAKEUP_TRIGGER_ANY_LOW

config PM_EXT1_WAKEUP_TRIGGER_ANY_LOW
	bool "Wake the chip when any of the selected GPIOs go low"

config PM_EXT1_WAKEUP_TRIGGER_ANY_HIGH
	bool "Wake the chip when any of the selected GPIOs go high"

endchoice # PM_EXT1_WAKEUP_TRIGGER_MODE

endmenu # PM_EXT1_WAKEUP_SOURCES

config PM_ULP_WAKEUP
	bool "PM ULP Wakeup"
	depends on ESPRESSIF_USE_LP_CORE
	default n
	---help---
		Enable ULP coprocessor wakeup functionality.
		This allows the system to wake up from PM_STANDBY or PM_SLEEP
		when ULP app triggers HP core to wakeup with "ulp_lp_core_wakeup_main_processor"
		call on ULP app.

config PM_GPIO_WAKEUP
	bool "PM GPIO Wakeup"
	default n
	---help---
		Enable GPIO wakeup functionality.
		This allows the system to wake up from PM_STANDBY
		when a GPIO pin configured as wakeup source is triggered.

menu "PM GPIO Wakeup Sources"
	depends on PM_GPIO_WAKEUP

config PM_GPIO_WAKEUP_GPIO0
	bool "GPIO0"
	default n
	---help---
		Enable GPIO0 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO1
	bool "GPIO1"
	default n
	---help---
		Enable GPIO1 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO2
	bool "GPIO2"
	default n
	---help---
		Enable GPIO2 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO3
	bool "GPIO3"
	default n
	---help---
		Enable GPIO3 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO4
	bool "GPIO4"
	default n
	---help---
		Enable GPIO4 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO5
	bool "GPIO5"
	default n
	---help---
		Enable GPIO5 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO6
	bool "GPIO6"
	default n
	---help---
		Enable GPIO6 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO7
	bool "GPIO7"
	default n
	---help---
		Enable GPIO7 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO8
	bool "GPIO8"
	default n
	---help---
		Enable GPIO8 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO9
	bool "GPIO9"
	default n
	---help---
		Enable GPIO9 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO10
	bool "GPIO10"
	default n
	---help---
		Enable GPIO10 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO11
	bool "GPIO11"
	default n
	---help---
		Enable GPIO11 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO12
	bool "GPIO12"
	default n
	---help---
		Enable GPIO12 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO13
	bool "GPIO13"
	default n
	---help---
		Enable GPIO13 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO14
	bool "GPIO14"
	default n
	---help---
		Enable GPIO14 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO15
	bool "GPIO15"
	default n
	---help---
		Enable GPIO15 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO16
	bool "GPIO16"
	default n
	---help---
		Enable GPIO16 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO17
	bool "GPIO17"
	default n
	---help---
		Enable GPIO17 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO18
	bool "GPIO18"
	default n
	---help---
		Enable GPIO18 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO19
	bool "GPIO19"
	default n
	---help---
		Enable GPIO19 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO20
	bool "GPIO20"
	default n
	---help---
		Enable GPIO20 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO21
	bool "GPIO21"
	default n
	---help---
		Enable GPIO21 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO22
	bool "GPIO22"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO22 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO23
	bool "GPIO23"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO23 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO24
	bool "GPIO24"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO24 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO25
	bool "GPIO25"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO25 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO26
	bool "GPIO26"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO26 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO27
	bool "GPIO27"
	depends on !ARCH_CHIP_ESP32C3
	default n
	---help---
		Enable GPIO27 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO28
	bool "GPIO28"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO28 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO29
	bool "GPIO29"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO29 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO30
	bool "GPIO30"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO30 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO31
	bool "GPIO31"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO31 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO32
	bool "GPIO32"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO32 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO33
	bool "GPIO33"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO33 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO34
	bool "GPIO34"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO34 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO35
	bool "GPIO35"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO35 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO36
	bool "GPIO36"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO36 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO37
	bool "GPIO37"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO37 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO38
	bool "GPIO38"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO38 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO39
	bool "GPIO39"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO39 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO40
	bool "GPIO40"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO40 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO41
	bool "GPIO41"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO41 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO42
	bool "GPIO42"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO42 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO43
	bool "GPIO43"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO43 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO44
	bool "GPIO44"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO44 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO45
	bool "GPIO45"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO45 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO46
	bool "GPIO46"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO46 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO47
	bool "GPIO47"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO47 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO48
	bool "GPIO48"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO48 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO49
	bool "GPIO49"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO49 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO50
	bool "GPIO50"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO50 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO51
	bool "GPIO51"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO51 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO52
	bool "GPIO52"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO52 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO53
	bool "GPIO53"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
    Enable GPIO53 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO54
	bool "GPIO54"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO54 as an GPIO wakeup source.

config PM_GPIO_WAKEUP_GPIO55
	bool "GPIO55"
	depends on ARCH_CHIP_ESP32P4
	default n
	---help---
		Enable GPIO55 as an GPIO wakeup source.

choice PM_GPIO_WAKEUP_TRIGGER_MODE
	prompt "PM GPIO Wakeup Trigger Mode"
	default PM_GPIO_WAKEUP_TRIGGER_ANY_LOW

config PM_GPIO_WAKEUP_TRIGGER_ANY_LOW
	bool "Wake the chip when any of the selected GPIOs go low"

config PM_GPIO_WAKEUP_TRIGGER_ANY_HIGH
	bool "Wake the chip when any of the selected GPIOs go high"

endchoice # PM_GPIO_WAKEUP_TRIGGER_MODE

endmenu # PM_GPIO_WAKEUP_SOURCES

config PM_UART_WAKEUP
	bool "PM UART Wakeup"
	depends on ESPRESSIF_UART0 || ESPRESSIF_UART1
	default n
	---help---
		Enable UART wakeup functionality.
		This allows the system to wake up from PM_STANDBY
		when a UART configured as an UART wakeup source is triggered.

menu "PM UART Wakeup Sources"
	depends on PM_UART_WAKEUP

choice PM_UART_WAKEUP_UART_NUM
	prompt "PM UART Wakeup UART Number"
	default PM_UART_WAKEUP_UART0 if ESPRESSIF_UART0
	default PM_UART_WAKEUP_UART1 if ESPRESSIF_UART1

config PM_UART_WAKEUP_UART0
	depends on ESPRESSIF_UART0
	bool "Wake the chip up when UART0 gets a data"

config PM_UART_WAKEUP_UART1
	depends on ESPRESSIF_UART1
	bool "Wake the chip up when UART1 gets a data"

endchoice # PM_UART_WAKEUP_UART_NUM

choice PM_UART_WAKEUP_MODE
	prompt "PM UART Wakeup Mode"
	default PM_UART_WAKEUP_START_BIT_MODE if !ARCH_CHIP_ESP32C3
	default PM_UART_WAKEUP_ACTIVE_EDGE_THRESHOLD_MODE if ARCH_CHIP_ESP32C3

config PM_UART_WAKEUP_ACTIVE_EDGE_THRESHOLD_MODE
	bool "Wake-up triggered by active edge threshold"

config PM_UART_WAKEUP_FIFO_THRESHOLD_MODE
	bool "Wake-up triggered by the number of bytes received in the RX FIFO"
	depends on !ARCH_CHIP_ESP32C3

config PM_UART_WAKEUP_START_BIT_MODE
	bool "Wake-up triggered by the detection of a start bit"
	depends on !ARCH_CHIP_ESP32C3

config PM_UART_WAKEUP_CHAR_SEQ_MODE
	bool "Wake-up triggered by detecting a specific character sequence"
	depends on !ARCH_CHIP_ESP32C3

endchoice # PM_UART_WAKEUP_MODE

config PM_UART_WAKEUP_ACTIVE_EDGE_THRESHOLD
	int "Number of RXD edge changes to to trigger wake-up"
	depends on PM_UART_WAKEUP_ACTIVE_EDGE_THRESHOLD_MODE
	default 3

config PM_UART_WAKEUP_FIFO_THRESHOLD
	int "Number of bytes needed to receive in the RX FIFO to trigger wake-up"
	depends on PM_UART_WAKEUP_FIFO_THRESHOLD_MODE
	default 8

config PM_UART_WAKEUP_CHAR_SEQ
	string "Character sequence to trigger wake-up"
	depends on PM_UART_WAKEUP_CHAR_SEQ_MODE
	default "esp"

endmenu # PM UART Wakeup Sources

config PM_TOUCH_WAKEUP
	bool "PM Touch Wakeup"
	depends on ESPRESSIF_TOUCH
	default n
	---help---
		Enable touch sensor wakeup functionality.
		This allows the system to wake up from PM_STANDBY or PM_SLEEP

config PM_ALARM_SEC
	int "PM_STANDBY delay (seconds)"
	default 15
	---help---
		Number of seconds to wait in PM_STANDBY mode.

config PM_ALARM_NSEC
	int "PM_STANDBY delay (nanoseconds)"
	default 0
	---help---
		Number of additional nanoseconds to wait in PM_STANDBY mode.

config PM_SLEEP_WAKEUP_SEC
	int "PM_SLEEP delay (seconds)"
	default 20
	---help---
		Number of seconds to wait in PM_SLEEP.

config PM_SLEEP_WAKEUP_NSEC
	int "PM_SLEEP delay (nanoseconds)"
	default 0
	---help---
		Number of additional nanoseconds to wait in PM_SLEEP.

endif # PM

endmenu # PM 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 || ARCH_CHIP_ESP32P4
	select ESPRESSIF_UART
	select ESPRESSIF_LP_UART
	select LPUART0_SERIALDRIVER
	select ARCH_HAVE_SERIAL_TERMIOS

config ESPRESSIF_TWAI
	bool
	default n

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 ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	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
	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_ESP32C3
	---help---
		Enable support for RTC peripherals interrupts.

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

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

config ESPRESSIF_AES_ACCELERATOR
	bool "AES Accelerator"
	default n
	---help---
		Enable AES accelerator support.

config ESPRESSIF_TOUCH
	bool "Touch sensor"
	default n
	depends on ARCH_CHIP_ESP32P4
	---help---
		Enable touch sensor support.

config ESPRESSIF_ANA_COMPR
	bool
	default n
	select COMP
	select ANALOG

config ESPRESSIF_ANA_COMPR0
	bool "Analog comparator 0"
	default n
	depends on ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	select ESPRESSIF_ANA_COMPR
	---help---
		Enable analog comparator unit 0.

config ESPRESSIF_ANA_COMPR1
	bool "Analog comparator 1"
	default n
	depends on ARCH_CHIP_ESP32P4
	select ESPRESSIF_ANA_COMPR
	---help---
		Enable analog comparator unit 1.

config ESPRESSIF_LP_MAILBOX
	bool "LP Mailbox"
	default n
	depends on ARCH_CHIP_ESP32P4 && ESPRESSIF_USE_LP_CORE
	---help---
		Enable lp mailbox support for data passing between cores.

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_1_USE_LP
	depends on ESPRESSIF_ADC_1 && ARCH_CHIP_ESP32P4
	default n
	bool "Use ADC 1 as LP ADC"

config ESPRESSIF_ADC_2
	default n
	depends on ARCH_CHIP_ESP32P4
	bool "Enable SAR ADC 2"

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 || ARCH_CHIP_ESP32P4)
	select ESPRESSIF_I2C
	select I2C

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

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_SLAVE
	bool
	default n

config ESPRESSIF_SPI_PERIPH
	bool
	depends on ESPRESSIF_SPI2 || ESPRESSIF_SPI3 || ESPRESSIF_LPSPI0
	default n

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

config ESPRESSIF_SPI3
	bool "SPI 3"
	depends on ARCH_CHIP_ESP32P4
	default n
	select ESPRESSIF_SPI
	select SPI
	select ESPRESSIF_SPI_PERIPH

config ESPRESSIF_LPSPI0
	bool "LP SPI0"
	depends on ARCH_CHIP_ESP32P4
	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 (User Storage)"
	default n
	---help---
		Enable SPI Flash driver for general storage support. This allows
		mounting an MTD partition at a configurable region in flash.

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

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

config ESPRESSIF_EFUSE_VIRTUAL
	bool "Virtual E-Fuses support"
	depends on ESPRESSIF_EFUSE
	default y
	---help---
		Enable virtual E-Fuse support to simulate E-Fuse operations in RAM.
		Changes will be reverted each reboot unless enabling ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH.

config ESPRESSIF_EFUSE_VIRTUAL_KEEP_IN_FLASH
	bool "Keep E-Fuses in flash"
	depends on ESPRESSIF_EFUSE_VIRTUAL
	default y
	---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 reboots (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 0x10000 if ESPRESSIF_BOOTLOADER_MCUBOOT
	default 0x250000 if !ESPRESSIF_BOOTLOADER_MCUBOOT
	---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_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
	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"
	depends on !ESPRESSIF_IDF_ENV_FPGA
	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
	---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 RMT_LOOP_TEST_MODE
	bool "Enable RMT loop test pin mapping"
	default n
	depends on ESP_RMT
	---help---
		Use a loop test pin mapping for RMT RX/TX.
		When enabled, board pin definitions can route RX/TX to the same
		GPIO for loopback testing without external wiring.

if ESP_RMT

config RMT_DEFAULT_RX_BUFFER_SIZE
	int "Default RX buffer size"
	default 100
	---help---
		The RMT RX default buffer size. This is the expected buffer size
		that should be returned on a receive operation.

endif # ESP_RMT

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 ESPRESSIF_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 ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6
	default n
	select ESPRESSIF_WIRELESS
	---help---
		Enable Wi-Fi support

config ESPRESSIF_BLE
	bool "BLE"
	depends on !ARCH_CHIP_ESP32P4
	default n
	select ESPRESSIF_WIRELESS
	---help---
		Enable BLE support

config ESPRESSIF_EMAC
	bool "Ethernet MAC"
	depends on ARCH_CHIP_ESP32P4
	default n
	select NET
	select ARCH_PHY_INTERRUPT
	select ESPRESSIF_HR_TIMER
	select SCHED_LPWORK
	---help---
		Enable Ethernet MAC 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 ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	---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 ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4

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 "Analog Comparator Configuration"
	depends on ESPRESSIF_ANA_COMPR

if ESPRESSIF_ANA_COMPR0

choice ESPRESSIF_ANA_COMPR0_REF_SRC
	prompt "Analog comparator0 reference source"
	default ESPRESSIF_ANA_COMPR0_REF_SRC_INTERNAL
	---help---
		Select reference source for the analog comparator0 unit.

config ESPRESSIF_ANA_COMPR0_REF_SRC_INTERNAL
	bool "Internal reference source"

config ESPRESSIF_ANA_COMPR0_REF_SRC_EXTERNAL
	bool "External reference source"

endchoice  # ESPRESSIF_ANA_COMPR0_REF_SRC

choice ESPRESSIF_ANA_COMPR0_REF_VOLT
	prompt "Analog comparator0 reference voltage"
	depends on ESPRESSIF_ANA_COMPR0_REF_SRC_INTERNAL
	default ESPRESSIF_ANA_COMPR0_REF_VOLT_50_VDD
	---help---
		Select reference source for the analog comparator0 unit.

config ESPRESSIF_ANA_COMPR0_REF_VOLT_0_VDD
	bool "Internal reference voltage equals to 0% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_10_VDD
	bool "Internal reference voltage equals to 10% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_20_VDD
	bool "Internal reference voltage equals to 20% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_30_VDD
	bool "Internal reference voltage equals to 30% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_40_VDD
	bool "Internal reference voltage equals to 40% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_50_VDD
	bool "Internal reference voltage equals to 50% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_60_VDD
	bool "Internal reference voltage equals to 60% VDD"

config ESPRESSIF_ANA_COMPR0_REF_VOLT_70_VDD
	bool "Internal reference voltage equals to 70% VDD"
endchoice  # ESPRESSIF_ANA_COMPR0_REF_SRC

config ESPRESSIF_ANA_COMPR0_DEBOUNCE
	int "PM_SLEEP delay (milliseconds)"
	default 100
	---help---
		The wait time to prevent frequent interrupts caused by signal noise or bouncing in milliseconds.

endif # ESPRESSIF_ANA_COMPR0

if ESPRESSIF_ANA_COMPR1

choice ESPRESSIF_ANA_COMPR1_REF_SRC
	prompt "Analog comparator0 reference source"
	default ESPRESSIF_ANA_COMPR1_REF_SRC_INTERNAL
	---help---
		Select reference source for the analog comparator0 unit.

config ESPRESSIF_ANA_COMPR1_REF_SRC_INTERNAL
	bool "Internal reference source"

config ESPRESSIF_ANA_COMPR1_REF_SRC_EXTERNAL
	bool "External reference source"

endchoice  # ESPRESSIF_ANA_COMPR1_REF_SRC

choice ESPRESSIF_ANA_COMPR1_REF_VOLT
	prompt "Analog comparator0 reference voltage"
	depends on ESPRESSIF_ANA_COMPR1_REF_SRC_INTERNAL
	default ESPRESSIF_ANA_COMPR1_REF_VOLT_50_VDD
	---help---
		Select reference source for the analog comparator0 unit.

config ESPRESSIF_ANA_COMPR1_REF_VOLT_0_VDD
	bool "Internal reference voltage equals to 0% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_10_VDD
	bool "Internal reference voltage equals to 10% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_20_VDD
	bool "Internal reference voltage equals to 20% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_30_VDD
	bool "Internal reference voltage equals to 30% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_40_VDD
	bool "Internal reference voltage equals to 40% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_50_VDD
	bool "Internal reference voltage equals to 50% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_60_VDD
	bool "Internal reference voltage equals to 60% VDD"

config ESPRESSIF_ANA_COMPR1_REF_VOLT_70_VDD
	bool "Internal reference voltage equals to 70% VDD"
endchoice  # ESPRESSIF_ANA_COMPR1_REF_SRC

config ESPRESSIF_ANA_COMPR1_DEBOUNCE
	int "PM_SLEEP delay (milliseconds)"
	default 100
	---help---
		The wait time to prevent frequent interrupts caused by signal noise or bouncing in milliseconds.

endif # ESPRESSIF_ANA_COMPR1

endmenu # Analog Comparator Configuration

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 ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n

config ESPRESSIF_ADC_1_CH6
	bool "Channel 6"
	depends on ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default n

config ESPRESSIF_ADC_1_CH7
	bool "Channel 6"
	depends on ARCH_CHIP_ESP32P4
	default n

endmenu # ADC 1 Channel Selection

endif  # ESPRESSIF_ADC_1

if ESPRESSIF_ADC_2

config ESPRESSIF_ADC_2_DEVNAME
	string "ADC 2 Device Name"
	default "/dev/adc1"

choice ESPRESSIF_ADC_2_ATTENUATION
	prompt "ADC 2 Input Attenuation"
	default ESPRESSIF_ADC_2_ATTEN_12
	---help---
		Select input attenuation for the ADC unit.
		Relates to maximum measurable input voltage (Vmax) and the internal ADC reference voltage (approx. 1100 mV).
		See ESP32 Technical Reference Manual for details.

config ESPRESSIF_ADC_2_ATTEN_0
	bool "0 dB (1.1 V)"

config ESPRESSIF_ADC_2_ATTEN_2_5
	bool "2.5 dB (1.47 V)"

config ESPRESSIF_ADC_2_ATTEN_6
	bool "6 dB (2.2 V)"

config ESPRESSIF_ADC_2_ATTEN_12
	bool "12 dB (4.4 V)"

endchoice  # ESPRESSIF_ADC_2_ATTENUATION

config ESPRESSIF_ADC_2_ATTENUATION
	int
	default 0 if ESPRESSIF_ADC_2_ATTEN_0
	default 1 if ESPRESSIF_ADC_2_ATTEN_2_5
	default 2 if ESPRESSIF_ADC_2_ATTEN_6
	default 3 if ESPRESSIF_ADC_2_ATTEN_12

choice ESPRESSIF_ADC_2_MODE
	prompt "ADC 2 Mode"
	default ESPRESSIF_ADC_2_MODE_ONE_SHOT
	---help---
		Select operating mode for ADC 2.

config ESPRESSIF_ADC_2_MODE_ONE_SHOT
	bool "One-Shot Mode"

config ESPRESSIF_ADC_2_MODE_CONTINUOUS
	bool "Continuous Mode"

endchoice  # ESPRESSIF_ADC_2_MODE

menu "ADC 2 Channel Selection"

config ESPRESSIF_ADC_2_CH0
	bool "Channel 0"
	default y

config ESPRESSIF_ADC_2_CH1
	bool "Channel 1"
	default y

config ESPRESSIF_ADC_2_CH2
	bool "Channel 2"
	default y

config ESPRESSIF_ADC_2_CH3
	bool "Channel 3"
	default y

config ESPRESSIF_ADC_2_CH4
	bool "Channel 4"
	default n

config ESPRESSIF_ADC_2_CH5
	bool "Channel 5"
	default n

config ESPRESSIF_ADC_2_CH6
	bool "Channel 6"
	default n

config ESPRESSIF_ADC_2_CH7
	bool "Channel 7"
	depends on !ARCH_CHIP_ESP32P4
	default n

config ESPRESSIF_ADC_2_CH8
	bool "Channel 8"
	depends on !ARCH_CHIP_ESP32P4
	default n

config ESPRESSIF_ADC_2_CH9
	bool "Channel 9"
	depends on !ARCH_CHIP_ESP32P4
	default n

endmenu # ADC 2 Channel Selection

endif  # ESPRESSIF_ADC_2

endmenu # ADC Configuration

menu "Ethernet Configuration"
	depends on ESPRESSIF_EMAC

config ESPRESSIF_ETH_NRXDESC
	int "RX descriptor number"
	default 20
	---help---
		Number of DMA receive descriptors/buffers used by the EMAC.
		Each buffer is CONFIG_ESPRESSIF_ETH_DMA_BUFFER_SIZE bytes.
		The default of 20 provides headroom for TCP-style ACK bursts
		that arrive while the upper layer is busy submitting a TX burst
		(otherwise the EMAC asserts RX_BUFF_UNAVAILABLE and silently
		drops incoming frames, forcing TCP retransmissions).

config ESPRESSIF_ETH_NTXDESC
	int "TX descriptor number"
	default 20
	---help---
		Number of DMA transmit descriptors/buffers used by the EMAC.
		With CONFIG_ESPRESSIF_ETH_DMA_BUFFER_SIZE=1600, each descriptor
		holds one Ethernet frame.  TCP send() bursts up to ~12 segments
		back-to-back; 20 descriptors gives ample headroom so that
		esp_eth_transmit() never returns ESP_ERR_NO_MEM mid-burst.
		If the ring is exhausted, frames are silently dropped and
		retransmissions happen via fast-retransmit/RTO, drastically
		degrading throughput.

config ESPRESSIF_ETH_DMA_BUFFER_SIZE
	int "DMA buffer size (bytes)"
	default 1600
	range 256 1600
	---help---
		Size of each DMA buffer used by the EMAC (must match esp_eth's
		CONFIG_ETH_DMA_BUFFER_SIZE).  At the maximum 1600 bytes one
		buffer holds an entire 1518-byte Ethernet frame, so a typical
		TX uses exactly one descriptor.  Lower values cause the MAC DMA
		to chain multiple descriptors per frame, reducing the effective
		number of frames the ring can hold.

config ESPRESSIF_ETH_TX_MAX_RETRIES
	int "TX submit retry budget"
	default 32
	range 1 256
	---help---
		Number of times emac_transmit() retries esp_eth_transmit() when
		the DMA TX descriptor ring is fully owned by hardware
		(ESP_ERR_NO_MEM).  Between attempts the driver yields the CPU
		via sched_yield() so that the RX worker (and any other peer at
		the same priority) can run while the EMAC DMA drains its TX
		descriptors in the background.  The default of 32 covers a
		full ring rotation under sustained TCP bursts while remaining
		bounded; increase if the network has very high latency between
		TX submissions and DMA descriptor recycling.

config ESPRESSIF_ETH_PHY_ADDR
	int "PHY address"
	default 1
	range 0 31
	---help---
		Address of the external Ethernet PHY on the SMI (MDC/MDIO) bus.

config ESPRESSIF_ETH_MDC_GPIO
	int "MDC GPIO"
	default 31 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the PHY MDC pin.  The shipped default
		corresponds to the ESP32-P4 Function EV Board V1.5.2; override
		for other boards/SoCs.

config ESPRESSIF_ETH_MDIO_GPIO
	int "MDIO GPIO"
	default 52 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the PHY MDIO pin.  The shipped default
		corresponds to the ESP32-P4 Function EV Board V1.5.2; override
		for other boards/SoCs.

config ESPRESSIF_ETH_RMII_CLK_GPIO
	int "RMII REF_CLK GPIO"
	default 50 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number for the RMII 50MHz reference clock (input).  The
		shipped default corresponds to the ESP32-P4 Function EV Board
		V1.5.2; override for other boards/SoCs.

config ESPRESSIF_ETH_RMII_TX_EN_GPIO
	int "RMII TX_EN GPIO"
	default 49 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII TX_EN pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_RMII_TXD0_GPIO
	int "RMII TXD0 GPIO"
	default 34 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII TXD0 pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_RMII_TXD1_GPIO
	int "RMII TXD1 GPIO"
	default 35 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII TXD1 pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_RMII_CRS_DV_GPIO
	int "RMII CRS_DV GPIO"
	default 28 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII CRS_DV pin.  Default is for
		the ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_RMII_RXD0_GPIO
	int "RMII RXD0 GPIO"
	default 29 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII RXD0 pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_RMII_RXD1_GPIO
	int "RMII RXD1 GPIO"
	default 30 if ARCH_CHIP_ESP32P4
	default -1
	---help---
		GPIO number connected to the RMII RXD1 pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

config ESPRESSIF_ETH_ENABLE_PHY_RSTPIN
	bool "Enable PHY reset pin"
	default y

config ESPRESSIF_ETH_PHY_RST_GPIO
	int "PHY reset GPIO"
	default 51 if ARCH_CHIP_ESP32P4
	default -1
	depends on ESPRESSIF_ETH_ENABLE_PHY_RSTPIN
	---help---
		GPIO number connected to the PHY reset pin.  Default is for the
		ESP32-P4 Function EV Board V1.5.2.

endmenu # Ethernet 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 # ESPRESSIF_WIFI_MGMT_RX_BUFFER

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 !ARCH_CHIP_ESP32C6
	range 2 128 if ARCH_CHIP_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 # ESPRESSIF_WIFI_TX_BUFFER

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 !ARCH_CHIP_ESP32C6
	range 2 64 if ARCH_CHIP_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 !ARCH_CHIP_ESP32C6
	range 2 64 if ARCH_CHIP_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 ARCH_CHIP_ESP32C3
	default 16 if ARCH_CHIP_ESP32C6
	default 24 if ARCH_CHIP_ESP32H2
	default 37 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_UART0_RXPIN
	int "UART0 RX Pin"
	default 20 if ARCH_CHIP_ESP32C3
	default 17 if ARCH_CHIP_ESP32C6
	default 23 if ARCH_CHIP_ESP32H2
	default 38 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_UART0_RTSPIN
	int "UART0 RTS Pin"
	depends on SERIAL_IFLOWCONTROL
	default 16 if ARCH_CHIP_ESP32C3
	default 15 if ARCH_CHIP_ESP32C6
	default 22 if ARCH_CHIP_ESP32H2
	default 35 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_UART0_CTSPIN
	int "UART0 CTS Pin"
	depends on SERIAL_OFLOWCONTROL
	default 15 if ARCH_CHIP_ESP32C3
	default 14 if ARCH_CHIP_ESP32C6
	default 21 if ARCH_CHIP_ESP32H2
	default 36 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

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 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4
	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 ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4

config ESPRESSIF_UART1_RXPIN
	int "UART1 RX Pin"
	default 9 if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4

config ESPRESSIF_UART1_RTSPIN
	int "UART1 RTS Pin"
	depends on SERIAL_IFLOWCONTROL
	default 1 if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2 || ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_UART1_CTSPIN
	int "UART1 CTS Pin"
	depends on SERIAL_OFLOWCONTROL
	default 2 if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_UART1

if ESPRESSIF_LP_UART0

config ESPRESSIF_LPUART0_TXPIN
	int "LPUART0 TX Pin"
	default 5 if ARCH_CHIP_ESP32C6
	default 14 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4
	range 5 5 if ARCH_CHIP_ESP32C6

config ESPRESSIF_LPUART0_RXPIN
	int "LPUART0 RX Pin"
	default 4 if ARCH_CHIP_ESP32C6
	default 15 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4
	range 4 4 if ARCH_CHIP_ESP32C6

config ESPRESSIF_LPUART0_RTSPIN
	int
	depends on SERIAL_IFLOWCONTROL
	default 2 if ARCH_CHIP_ESP32C6
	default -1 if ARCH_CHIP_ESP32P4

config ESPRESSIF_LPUART0_CTSPIN
	int
	depends on SERIAL_OFLOWCONTROL
	default 3 if ARCH_CHIP_ESP32C6
	default -1 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_LP_UART0

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.

choice ESPRESSIF_SPI2_MODE
	prompt "SPI2 mode"
	default ESPRESSIF_SPI2_MODE_MASTER

config ESPRESSIF_SPI2_MODE_MASTER
	bool "SPI2 Master mode"
	depends on SPI_DRIVER
	---help---
		Configure SPI2 to operate in Master mode.

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

endchoice # ESPRESSIF_SPI2_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
	default 16 if ARCH_CHIP_ESP32C6
	default 1 if ARCH_CHIP_ESP32H2
	default 28 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI2_CLKPIN
	int "SPI2 CLK Pin"
	default 6 if ARCH_CHIP_ESP32C3
	default 6 if ARCH_CHIP_ESP32C6
	default 4 if ARCH_CHIP_ESP32H2
	default 30 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI2_MOSIPIN
	int "SPI2 MOSI Pin"
	default 7 if ARCH_CHIP_ESP32C3
	default 7 if ARCH_CHIP_ESP32C6
	default 5 if ARCH_CHIP_ESP32H2
	default 29 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI2_MISOPIN
	int "SPI2 MISO Pin"
	default 2 if ARCH_CHIP_ESP32C3
	default 2 if ARCH_CHIP_ESP32C6
	default 0 if ARCH_CHIP_ESP32H2
	default 31 if ARCH_CHIP_ESP32P4
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_SPI2

if ESPRESSIF_SPI3

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

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

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

choice ESPRESSIF_SPI3_MODE
	prompt "SPI3 mode"
	default ESPRESSIF_SPI3_MODE_MASTER

config ESPRESSIF_SPI3_MODE_MASTER
	bool "SPI3 Master mode"
	depends on SPI_DRIVER
	---help---
		Configure SPI3 to operate in Master mode.

config ESPRESSIF_SPI3_SLAVE
	bool "SPI3 Slave mode"
	depends on SPI_SLAVE
	select ESPRESSIF_GPIO_IRQ
	select ESPRESSIF_SPI_SLAVE
	---help---
		Configure SPI3 to operate in Slave mode.

endchoice # ESPRESSIF_SPI3_MODE

config ESPRESSIF_SPI3_SLAVE_BUFSIZE
	int "SPI3 Slave buffer size"
	default 2048
	depends on ESPRESSIF_SPI3_SLAVE
	---help---
		Configure the size of SPI3 Slave controller's internal buffers.

config ESPRESSIF_SPI3_CSPIN
	int "SPI3 CS Pin"
	default 20 if ARCH_CHIP_ESP32P4
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI3_CLKPIN
	int "SPI3 CLK Pin"
	default 22 if ARCH_CHIP_ESP32P4
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI3_MOSIPIN
	int "SPI3 MOSI Pin"
	default 21 if ARCH_CHIP_ESP32P4
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI3_MISOPIN
	int "SPI3 MISO Pin"
	default 27 if ARCH_CHIP_ESP32P4
	range 0 54 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_SPI3

if ESPRESSIF_LPSPI0

config ESPRESSIF_LPSPI0_CSPIN
	int "LP SPI CS Pin"
	default 4 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4

config ESPRESSIF_LPSPI0_CLKPIN
	int "LP SPI CLK Pin"
	default 8 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4

config ESPRESSIF_LPSPI0_MOSIPIN
	int "LP SPI MOSI Pin"
	default 7 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4

config ESPRESSIF_LPSPI0_MISOPIN
	int "LP SPI MISO Pin"
	default 6 if ARCH_CHIP_ESP32P4
	range 0 15 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_LPSPI0

if ESPRESSIF_SPI_BITBANG

choice ESPRESSIF_SPI_BITBANG_OPERATION_MODE
	prompt "SPI Bitbang mode"
	default ESPRESSIF_SPI_BITBANG_OPERATION_MODE_MASTER

config ESPRESSIF_SPI_BITBANG_OPERATION_MODE_MASTER
	bool "SPI Bitbang Master mode"
	depends on SPI_DRIVER
	---help---
		Configure SPI Bitbang to operate in Master mode.

endchoice # ESPRESSIF_SPI_BITBANG_OPERATION_MODE

config ESPRESSIF_SPI_BITBANG_CSPIN
	int "SPI Bitbang CS Pin"
	default 0
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI_BITBANG_CLKPIN
	int "SPI Bitbang CLK Pin"
	default 1
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI_BITBANG_MOSIPIN
	int "SPI Bitbang MOSI Pin"
	default 2
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_SPI_BITBANG_MISOPIN
	int "SPI Bitbang MISO Pin"
	default 3
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

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

choice ESPRESSIF_FLASH_FREQ
	prompt "SPI Flash frequency"
	default ESPRESSIF_FLASH_FREQ_40M if ESP32P4_REV_MIN_0
	default ESPRESSIF_FLASH_FREQ_40M if ARCH_CHIP_ESP32P4 && ESPRESSIF_IDF_ENV_FPGA
	default ESPRESSIF_FLASH_FREQ_80M if ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	default ESPRESSIF_FLASH_FREQ_64M if ARCH_CHIP_ESP32H2
	---help---
		SPI Flash frequency.

config ESPRESSIF_FLASH_FREQ_80M
	bool "80 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4
	depends on !ESP32P4_REV_MIN_0

config ESPRESSIF_FLASH_FREQ_64M
	bool "64 MHz"
	depends on ARCH_CHIP_ESP32H2

config ESPRESSIF_FLASH_FREQ_40M
	bool "40 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4

config ESPRESSIF_FLASH_FREQ_26M
	bool "26 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6

config ESPRESSIF_FLASH_FREQ_20M
	bool "20 MHz"
	depends on ARCH_CHIP_ESP32C3 || ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32P4

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

endmenu # SPI Flash Configuration

if ESPRESSIF_SPIFLASH
menu "User 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).

config ESPRESSIF_STORAGE_MTD_OFFSET
	hex "Storage MTD base address in SPI Flash"
	default 0x180000 if !ESPRESSIF_BOOTLOADER_MCUBOOT
	default 0x300000 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 # User Storage MTD Configuration
endif # ESPRESSIF_SPIFLASH

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_NCHANNELS > 1
	default 1 if PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER0_RESOLUTION
	int "Timer 0 resolution"
	default 13
	range 1 14 if ARCH_CHIP_ESP32C3 && !(ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2)
	range 1 20 if !ARCH_CHIP_ESP32C3 && (ARCH_CHIP_ESP32C6 || ARCH_CHIP_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_NCHANNELS > 1
	default 1 if PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER1_RESOLUTION
	int "Timer 1 resolution"
	default 13
	range 1 14 if ARCH_CHIP_ESP32C3 && !(ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2)
	range 1 20 if !ARCH_CHIP_ESP32C3 && (ARCH_CHIP_ESP32C6 || ARCH_CHIP_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_NCHANNELS > 1
	default 1 if PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER2_RESOLUTION
	int "Timer 2 resolution"
	default 13
	range 1 14 if ARCH_CHIP_ESP32C3 && !(ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2)
	range 1 20 if !ARCH_CHIP_ESP32C3 && (ARCH_CHIP_ESP32C6 || ARCH_CHIP_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_NCHANNELS > 1
	default 1 if PWM_NCHANNELS = 1
	range 0 6

config ESPRESSIF_LEDC_TIMER3_RESOLUTION
	int "Timer 3 resolution"
	default 13
	range 1 14 if ARCH_CHIP_ESP32C3 && !(ARCH_CHIP_ESP32C6 || ARCH_CHIP_ESP32H2)
	range 1 20 if !ARCH_CHIP_ESP32C3 && (ARCH_CHIP_ESP32C6 || ARCH_CHIP_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_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_NCHANNELS > 1

endmenu # LEDC configuration

menu "Touch Sensor Configuration"
	depends on ESPRESSIF_TOUCH

config ESP_TOUCH_CHANNEL1
	bool "Touch Sensor Channel 1(IO2)"
	default n
	---help---
		Enable touch sensor channel 1 (IO2).

config ESP_TOUCH_CHANNEL2
	bool "Touch Sensor Channel 2(IO3)"
	default n
	---help---
		Enable touch sensor channel 2 (IO3).

config ESP_TOUCH_CHANNEL3
	bool "Touch Sensor Channel 3(IO4)"
	default n
	---help---
		Enable touch sensor channel 3 (IO4).

config ESP_TOUCH_CHANNEL4
	bool "Touch Sensor Channel 4(IO5)"
	default n
	---help---
		Enable touch sensor channel 4 (IO5).

config ESP_TOUCH_CHANNEL5
	bool "Touch Sensor Channel 5(IO6)"
	default n
	---help---
		Enable touch sensor channel 5 (IO6).

config ESP_TOUCH_CHANNEL6
	bool "Touch Sensor Channel 6(IO7)"
	default n
	---help---
		Enable touch sensor channel 6 (IO7).

config ESP_TOUCH_CHANNEL7
	bool "Touch Sensor Channel 7(IO8)"
	default n
	---help---
		Enable touch sensor channel 7 (IO8).

config ESP_TOUCH_CHANNEL8
	bool "Touch Sensor Channel 8(IO9)"
	default n
	---help---
		Enable touch sensor channel 8 (IO9).

config ESP_TOUCH_CHANNEL9
	bool "Touch Sensor Channel 9(IO10)"
	default n
	---help---
		Enable touch sensor channel 9 (IO10).

config ESP_TOUCH_CHANNEL10
	bool "Touch Sensor Channel 10(IO11)"
	default n
	---help---
		Enable touch sensor channel 10 (IO11).

config ESP_TOUCH_CHANNEL11
	bool "Touch Sensor Channel 11(IO12)"
	default n
	---help---
		Enable touch sensor channel 11 (IO12).

config ESP_TOUCH_CHANNEL12
	bool "Touch Sensor Channel 12(IO13)"
	default n
	---help---
		Enable touch sensor channel 12 (IO13).

config ESP_TOUCH_CHANNEL13
	bool "Touch Sensor Channel 13(IO14)"
	default n
	---help---
		Enable touch sensor channel 13 (IO14).

config ESP_TOUCH_CHANNEL14
	bool "Touch Sensor Channel 14(IO15)"
	default n
	---help---
		Enable touch sensor channel 14 (IO15).

choice ESP_TOUCH_MODE
	prompt "Touch Sensor Mode"
	default ESP_TOUCH_MODE_CONTINUOUS
	---help---
		Select operating mode for touch sensor.

config ESP_TOUCH_MODE_ONE_SHOT
	bool "One-Shot Mode"

config ESP_TOUCH_MODE_CONTINUOUS
	bool "Continuous Mode"

endchoice  # ESP_TOUCH_MODE

config ESP_TOUCH_IRQ
	bool "Enable touch pad interrupts"
	depends on ARCH_IRQBUTTONS
	default n
	---help---
		Enable interrupt support for the touch pads.

config ESP_TOUCH_INVERTED
	bool "Touch pad inverted threshold detection"
	default n
	---help---
		Detect touch activity when read value is lower than threshold.

config ESP_TOUCH_FILTER
	bool "Touch pad filter"
	default y
	---help---
		Enable internal filter for the touch pads.

config ESP_TOUCH_DENOISE_LVL
	int "Touch pad denoise level"
	depends on ESP_TOUCH_FILTER
	default 1
	range 0 4
	---help---
		Internal denoise level for the touch pads.

endmenu # Touch Sensor 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 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2S0_WSPIN
	int "I2S0 WS pin"
	default 5
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2S0_DINPIN
	int "I2S0 DIN pin"
	depends on ESPRESSIF_I2S0_RX
	default 19 if !ARCH_CHIP_ESP32H2
	default 11 if ARCH_CHIP_ESP32H2
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2S0_DOUTPIN
	int "I2S0 DOUT pin"
	depends on ESPRESSIF_I2S0_TX
	default 18 if !ARCH_CHIP_ESP32H2
	default 10 if ARCH_CHIP_ESP32H2
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

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 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

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

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

config ESPRESSIF_I2C0_SCLPIN
	int "I2C0 SCL Pin"
	default 6 if !ESPRESSIF_LPI2C
	default 23 if ESPRESSIF_LPI2C
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2C0_SDAPIN
	int "I2C0 SDA Pin"
	default 5 if !ESPRESSIF_LPI2C
	default 22 if ESPRESSIF_LPI2C
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_I2C0

if ESPRESSIF_I2C1

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_I2C1_SCLPIN
	int "I2C1 SCL Pin"
	default 2
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2C1_SDAPIN
	int "I2C1 SDA Pin"
	default 1
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

endif # ESPRESSIF_I2C1

if ESPRESSIF_LPI2C

choice ESPRESSIF_LPI2C_MODE
	prompt "LPI2C Mode"
	default ESPRESSIF_LPI2C_MASTER_MODE

config ESPRESSIF_LPI2C_MASTER_MODE
	bool "LP I2C0 Master Mode"
	select ESPRESSIF_I2C_PERIPH_MASTER_MODE

endchoice # ESPRESSIF_LPI2C_MODE

if ESPRESSIF_LP_I2C0

config ESPRESSIF_LPI2C0_SCLPIN
	int "LPI2C0 SCL Pin"
	default 7 if ARCH_CHIP_ESP32C6
	default 4 if ARCH_CHIP_ESP32P4
	range 7 7 if ARCH_CHIP_ESP32C6
	range 0 15 if ARCH_CHIP_ESP32P4
	range 7 7 if ARCH_CHIP_ESP32C6

config ESPRESSIF_LPI2C0_SDAPIN
	int "LPI2C0 SDA Pin"
	default 6 if ARCH_CHIP_ESP32C6
	default 5 if ARCH_CHIP_ESP32P4
	range 6 6 if ARCH_CHIP_ESP32C6
	range 0 15 if ARCH_CHIP_ESP32P4
	range 6 6 if ARCH_CHIP_ESP32C6

endif # ESPRESSIF_LP_I2C0
endif # ESPRESSIF_LP_I2C

if ESPRESSIF_I2C_BITBANG

choice ESPRESSIF_I2C_BITBANG_MODE
	prompt "I2C Bitbang Mode"
	default ESPRESSIF_I2C_BITBANG_MASTER_MODE

config ESPRESSIF_I2C_BITBANG_MASTER_MODE
	bool "I2C Bitbang Master Mode"

endchoice # ESPRESSIF_I2C_BITBANG_MODE

config ESPRESSIF_I2C_BITBANG_SCLPIN
	int "I2C Bitbang SCL Pin"
	default 0
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

config ESPRESSIF_I2C_BITBANG_SDAPIN
	int "I2C Bitbang SDA Pin"
	default 1
	range 0 21 if ARCH_CHIP_ESP32C3
	range 0 30 if ARCH_CHIP_ESP32C6
	range 0 27 if ARCH_CHIP_ESP32H2
	range 0 54 if ARCH_CHIP_ESP32P4

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

config ESPRESSIF_I2C_TEST_MODE
	bool "I2C driver loopback test mode (for testing only)"
	default n
	depends on !ARCH_CHIP_ESP32C3
	depends on (ESPRESSIF_I2C_PERIPH_MASTER_MODE && ESPRESSIF_I2C_PERIPH_SLAVE_MODE)
	---help---
		This enables a loopback test mode that attaches the master I2C peripheral
		to the slave device internally, being able to test the I2C peripheral
		without any external connection.

if ESPRESSIF_I2C_TEST_MODE

choice ESPRESSIF_I2C_TEST_MODE_MASTER_PERIPH
	prompt "I2C Test Master Device"
	depends on ESPRESSIF_I2C_PERIPH_MASTER_MODE
	default ESPRESSIF_I2C_TEST_MODE_MASTER_I2C1

config ESPRESSIF_I2C_TEST_MODE_MASTER_I2C0
	bool "I2C0 Master Mode"
	depends on ESPRESSIF_I2C0_MASTER_MODE
	depends on (!ESPRESSIF_LP_I2C0 && ESPRESSIF_I2C1)

config ESPRESSIF_I2C_TEST_MODE_MASTER_I2C1
	bool "I2C1 Master Mode"
	depends on ESPRESSIF_I2C1_MASTER_MODE

config ESPRESSIF_I2C_TEST_MODE_MASTER_LP_I2C0
	bool "LP I2C0 Master Mode"
	depends on ESPRESSIF_LP_I2C0

endchoice #ESPRESSIF_I2C_TEST_MODE_MASTER_PERIPH

choice ESPRESSIF_I2C_TEST_MODE_SLAVE_PERIPH
	prompt "I2C Test Slave Device"
	depends on ESPRESSIF_I2C_PERIPH_SLAVE_MODE
	default ESPRESSIF_I2C_TEST_MODE_SLAVE_I2C0

config ESPRESSIF_I2C_TEST_MODE_SLAVE_I2C0
	bool "I2C0 Slave Mode"
	depends on ESPRESSIF_I2C0_SLAVE_MODE

config ESPRESSIF_I2C_TEST_MODE_SLAVE_I2C1
	bool "I2C1 Slave Mode"
	depends on ESPRESSIF_I2C1_SLAVE_MODE

endchoice #ESPRESSIF_I2C_TEST_MODE_SLAVE_PERIPH

endif # ESPRESSIF_I2C_TEST_MODE

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 ARCH_CHIP_ESP32C6
	default 10 if ARCH_CHIP_ESP32H2
	default 10 if ARCH_CHIP_ESP32P4
	---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 ARCH_CHIP_ESP32C6
	default 11 if ARCH_CHIP_ESP32H2
	default 11 if ARCH_CHIP_ESP32P4
	---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 "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
