Commit 1f054a7b authored by Erwan Gouriou's avatar Erwan Gouriou Committed by Kumar Gala
Browse files

drivers/exti: stm32: Add support for STM32L5 series



Add support for stm32l5 socs on stm32 external interrupts driver

Signed-off-by: default avatarErwan Gouriou <erwan.gouriou@linaro.org>
parent f2581995
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -72,7 +72,8 @@ config EXTI_STM32_EXTI4_IRQ_PRI
	help
	  IRQ priority of EXTI4 interrupt

if SOC_SERIES_STM32MP1X
if SOC_SERIES_STM32MP1X || SOC_SERIES_STM32L5X

config EXTI_STM32_EXTI5_IRQ_PRI
	int "EXTI5 IRQ priority"
	depends on EXTI_STM32
@@ -152,7 +153,8 @@ config EXTI_STM32_EXTI15_IRQ_PRI

endif # SOC_SERIES_STM32MP1X

if SOC_SERIES_STM32MP1X!=y
if SOC_SERIES_STM32MP1X!=y && SOC_SERIES_STM32L5X!=y

config EXTI_STM32_EXTI9_5_IRQ_PRI
	int "EXTI9:5 IRQ priority"
	depends on EXTI_STM32
@@ -166,7 +168,8 @@ config EXTI_STM32_EXTI15_10_IRQ_PRI
	default 0
	help
	  IRQ priority of EXTI15:10 interrupt
endif # SOC_SERIES_STM32MP1X!=y

endif # SOC_SERIES_STM32MP1X!=y && SOC_SERIES_STM32L5X!=y

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

+16 −7
Original line number Diff line number Diff line
@@ -11,7 +11,8 @@
 *
 * Driver is currently implemented to support following EXTI lines
 * STM32F1/STM32F3: Lines 0 to 15. Lines > 15 not supported
 * STM32F0/STM32L0/STM32L4/STM32G0/STM32G4: Lines 0 to 15. Lines > 15 are not mapped on an IRQ
 * STM32F0/STM32L0/STM32L4/STM32L5/STM32G0/STM32G4: Lines 0 to 15.
 * Lines > 15 are not mapped on an IRQ
 * STM32F2/STM32F4: Lines 0 to 15, 16, 17 18, 21 and 22. Others not supported
 * STM32F7: Lines 0 to 15, 16, 17 18, 21, 22 and 23. Others not supported
 *
@@ -68,7 +69,8 @@ const IRQn_Type exti_irq_table[] = {
	PVD_IRQn, 0xFF, OTG_FS_WKUP_IRQn, 0xFF,
	0xFF, TAMP_STAMP_IRQn, RTC_WKUP_IRQn, LPTIM1_IRQn
};
#elif defined(CONFIG_SOC_SERIES_STM32MP1X)
#elif defined(CONFIG_SOC_SERIES_STM32MP1X) || \
	defined(CONFIG_SOC_SERIES_STM32L5X)
const IRQn_Type exti_irq_table[] = {
	EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn,
	EXTI4_IRQn, EXTI5_IRQn, EXTI6_IRQn, EXTI7_IRQn,
@@ -135,7 +137,9 @@ void stm32_exti_disable(int line)
static inline int stm32_exti_is_pending(int line)
{
	if (line < 32) {
#if defined(CONFIG_SOC_SERIES_STM32MP1X) || defined(CONFIG_SOC_SERIES_STM32G0X)
#if defined(CONFIG_SOC_SERIES_STM32MP1X) || \
	defined(CONFIG_SOC_SERIES_STM32G0X) || \
	defined(CONFIG_SOC_SERIES_STM32L5X)
		return (LL_EXTI_IsActiveRisingFlag_0_31(1 << line) ||
			LL_EXTI_IsActiveFallingFlag_0_31(1 << line));
#elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
@@ -157,7 +161,9 @@ static inline int stm32_exti_is_pending(int line)
static inline void stm32_exti_clear_pending(int line)
{
	if (line < 32) {
#if defined(CONFIG_SOC_SERIES_STM32MP1X) || defined(CONFIG_SOC_SERIES_STM32G0X)
#if defined(CONFIG_SOC_SERIES_STM32MP1X) || \
	defined(CONFIG_SOC_SERIES_STM32G0X) || \
	defined(CONFIG_SOC_SERIES_STM32L5X)
		LL_EXTI_ClearRisingFlag_0_31(1 << line);
		LL_EXTI_ClearFallingFlag_0_31(1 << line);
#elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
@@ -275,7 +281,8 @@ static inline void __stm32_exti_isr_4(void *arg)
	__stm32_exti_isr(4, 5, arg);
}

#if defined(CONFIG_SOC_SERIES_STM32MP1X)
#if defined(CONFIG_SOC_SERIES_STM32MP1X) || \
	defined(CONFIG_SOC_SERIES_STM32L5X)
static inline void __stm32_exti_isr_5(void *arg)
{
	__stm32_exti_isr(5, 6, arg);
@@ -449,6 +456,7 @@ static void __stm32_exti_connect_irqs(struct device *dev)
	defined(CONFIG_SOC_SERIES_STM32H7X) || \
	defined(CONFIG_SOC_SERIES_STM32L1X) || \
	defined(CONFIG_SOC_SERIES_STM32L4X) || \
	defined(CONFIG_SOC_SERIES_STM32L5X) || \
	defined(CONFIG_SOC_SERIES_STM32MP1X) || \
	defined(CONFIG_SOC_SERIES_STM32WBX) || \
	defined(CONFIG_SOC_SERIES_STM32G4X)
@@ -479,7 +487,8 @@ static void __stm32_exti_connect_irqs(struct device *dev)
		CONFIG_EXTI_STM32_EXTI4_IRQ_PRI,
		__stm32_exti_isr_4, DEVICE_GET(exti_stm32),
		0);
#ifndef CONFIG_SOC_SERIES_STM32MP1X
#if !defined(CONFIG_SOC_SERIES_STM32MP1X) && \
	!defined(CONFIG_SOC_SERIES_STM32L5X)
	IRQ_CONNECT(EXTI9_5_IRQn,
		CONFIG_EXTI_STM32_EXTI9_5_IRQ_PRI,
		__stm32_exti_isr_9_5, DEVICE_GET(exti_stm32),
@@ -533,7 +542,7 @@ static void __stm32_exti_connect_irqs(struct device *dev)
		CONFIG_EXTI_STM32_EXTI15_IRQ_PRI,
		__stm32_exti_isr_15, DEVICE_GET(exti_stm32),
		0);
#endif /* CONFIG_SOC_SERIES_STM32MP1X */
#endif /* CONFIG_SOC_SERIES_STM32MP1X || CONFIG_SOC_SERIES_STM32L5X */

#if defined(CONFIG_SOC_SERIES_STM32F2X) || \
	defined(CONFIG_SOC_SERIES_STM32F4X) || \
+4 −0
Original line number Diff line number Diff line
@@ -35,6 +35,10 @@
#include <stm32l5xx_ll_pwr.h>
#endif /* CONFIG_CLOCK_CONTROL_STM32_CUBE */

#ifdef CONFIG_EXTI_STM32
#include <stm32l5xx_ll_exti.h>
#endif

#endif /* !_ASMLANGUAGE */

#endif /* _STM32L5_SOC_H_ */