# 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 || SOC_SERIES_STM32G0X
	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 || SOC_SERIES_STM32G0X
	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 || SOC_SERIES_STM32G0X
	default 0
	help
	 IRQ priority of EXTI15:4 interrupt

if SOC_SERIES_STM32F0X!=y && SOC_SERIES_STM32L0X!=y && SOC_SERIES_STM32G0X!=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 && SOC_SERIES_STM32G0X!=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 || SOC_SERIES_STM32G0X
	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
