# Kconfig - STM32 EXTI configuration
#
# Copyright (c) 2016 Open-RnD Sp. z o.o.
#
# SPDX-License-Identifier: Apache-2.0
#

if SOC_FAMILY_STM32

config EXTI_STM32
	bool "External Interrupt/Event Controller (EXTI) Driver for STM32 family of MCUs"
	default y if SOC_FAMILY_STM32
	help
	 Enable EXTI driver for STM32 line of MCUs

config EXTI_STM32_EXTI1_0_IRQ_PRI
	int "EXTI1:0 IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
	default 0
	help
	 IRQ priority of EXTI1:0 interrupt

config EXTI_STM32_EXTI3_2_IRQ_PRI
	int "EXTI3:2 IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
	default 0
	help
	 IRQ priority of EXTI3:2 interrupt

config EXTI_STM32_EXTI15_4_IRQ_PRI
	int "EXTI15:4 IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F0X || SOC_SERIES_STM32L0X
	default 0
	help
	 IRQ priority of EXTI15:4 interrupt

if SOC_SERIES_STM32F0X!=y && SOC_SERIES_STM32L0X!=y

config EXTI_STM32_EXTI0_IRQ_PRI
	int "EXTI0 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI0 interrupt

config EXTI_STM32_EXTI1_IRQ_PRI
	int "EXTI1 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI1 interrupt

config EXTI_STM32_EXTI2_IRQ_PRI
	int "EXTI2 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI2 interrupt

config EXTI_STM32_EXTI3_IRQ_PRI
	int "EXTI3 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI3 interrupt

config EXTI_STM32_EXTI4_IRQ_PRI
	int "EXTI4 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI4 interrupt

if SOC_SERIES_STM32MP1X
config EXTI_STM32_EXTI5_IRQ_PRI
	int "EXTI5 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI5 interrupt

config EXTI_STM32_EXTI6_IRQ_PRI
	int "EXTI6 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI6 interrupt

config EXTI_STM32_EXTI7_IRQ_PRI
	int "EXTI7 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI7 interrupt

config EXTI_STM32_EXTI8_IRQ_PRI
	int "EXTI8 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI8 interrupt

config EXTI_STM32_EXTI9_IRQ_PRI
	int "EXTI9 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI9 interrupt

config EXTI_STM32_EXTI10_IRQ_PRI
	int "EXTI10 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI10 interrupt

config EXTI_STM32_EXTI11_IRQ_PRI
	int "EXTI11 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI11 interrupt

config EXTI_STM32_EXTI12_IRQ_PRI
	int "EXTI12 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI12 interrupt

config EXTI_STM32_EXTI13_IRQ_PRI
	int "EXTI13 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI13 interrupt

config EXTI_STM32_EXTI14_IRQ_PRI
	int "EXTI14 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI14 interrupt

config EXTI_STM32_EXTI15_IRQ_PRI
	int "EXTI15 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI15 interrupt

endif # SOC_SERIES_STM32MP1X

if SOC_SERIES_STM32MP1X!=y
config EXTI_STM32_EXTI9_5_IRQ_PRI
	int "EXTI9:5 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI9:5 interrupt

config EXTI_STM32_EXTI15_10_IRQ_PRI
	int "EXTI15:10 IRQ priority"
	depends on EXTI_STM32
	default 0
	help
	 IRQ priority of EXTI15:10 interrupt
endif # SOC_SERIES_STM32MP1X!=y

endif # SOC_SERIES_STM32F0X!=y && SOC_SERIES_STM32L0X!=y

config EXTI_STM32_PVD_IRQ_PRI
	int "RVD Through IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
	default 0
	help
	 IRQ priority of RVD Through interrupt

config EXTI_STM32_OTG_FS_WKUP_IRQ_PRI
	int "USB OTG FS Wake Up IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
	default 0
	help
	 IRQ priority of USB OTG FS Wake interrupt

config EXTI_STM32_TAMP_STAMP_IRQ_PRI
	int "Tamper and Timestamp IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
	default 0
	help
	 IRQ priority of Tamper and Timestamp interrupt

config EXTI_STM32_RTC_WKUP_IRQ_PRI
	int "RTC Wake Up IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F4X || SOC_SERIES_STM32F7X || SOC_SERIES_STM32F2X
	default 0
	help
	 IRQ priority of RTC Wake Up interrupt

config EXTI_STM32_LPTIM1_IRQ_PRI
	int "LPTIM1 IRQ priority"
	depends on EXTI_STM32
	depends on SOC_SERIES_STM32F7X
	default 0
	help
	 IRQ priority of LPTIM1 interrupt

endif # SOC_FAMILY_STM32
