22 * Copyright (c) 2016 Open-RnD Sp. z o.o.
33 * Copyright (c) 2017 RnDity Sp. z o.o.
44 * Copyright (c) 2019-23 Linaro Limited
5+ * Copyright (C) 2025 Savoir-faire Linux, Inc.
56 *
67 * SPDX-License-Identifier: Apache-2.0
78 */
@@ -60,7 +61,8 @@ static inline uint32_t stm32_exti_linenum_to_src_cfg_line(gpio_pin_t linenum)
6061#if defined(CONFIG_SOC_SERIES_STM32L0X ) || \
6162 defined(CONFIG_SOC_SERIES_STM32F0X )
6263 return ((linenum % 4 * 4 ) << 16 ) | (linenum / 4 );
63- #elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32g0_exti )
64+ #elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32g0_exti ) || \
65+ defined(CONFIG_SOC_SERIES_STM32MP2X )
6466 return ((linenum & 0x3 ) << (16 + 3 )) | (linenum >> 2 );
6567#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
6668 /* Gives the LL_SBS_EXTI_LINEn corresponding to the line number */
@@ -82,6 +84,9 @@ static inline int stm32_exti_is_pending(stm32_gpio_irq_line_t line)
8284 LL_EXTI_IsActiveFallingFlag_0_31 (line ));
8385#elif defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
8486 return LL_C2_EXTI_IsActiveFlag_0_31 (line );
87+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
88+ return LL_EXTI_IsActiveRisingFlag_0_31 (EXTI2 , line ) ||
89+ LL_EXTI_IsActiveFallingFlag_0_31 (EXTI2 , line );
8590#else
8691 return LL_EXTI_IsActiveFlag_0_31 (line );
8792#endif
@@ -99,6 +104,9 @@ static inline void stm32_exti_clear_pending(stm32_gpio_irq_line_t line)
99104 LL_EXTI_ClearFallingFlag_0_31 (line );
100105#elif defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
101106 LL_C2_EXTI_ClearFlag_0_31 (line );
107+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
108+ LL_EXTI_ClearRisingFlag_0_31 (EXTI2 , line );
109+ LL_EXTI_ClearFallingFlag_0_31 (EXTI2 , line );
102110#else
103111 LL_EXTI_ClearFlag_0_31 (line );
104112#endif
@@ -269,6 +277,8 @@ void stm32_gpio_intc_enable_line(stm32_gpio_irq_line_t line)
269277 /* Enable requested line interrupt */
270278#if defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
271279 LL_C2_EXTI_EnableIT_0_31 (line );
280+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
281+ LL_C2_EXTI_EnableIT_0_31 (EXTI2 , line );
272282#else
273283 LL_EXTI_EnableIT_0_31 (line );
274284#endif
@@ -281,6 +291,8 @@ void stm32_gpio_intc_disable_line(stm32_gpio_irq_line_t line)
281291{
282292#if defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
283293 LL_C2_EXTI_DisableIT_0_31 (line );
294+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
295+ LL_C2_EXTI_DisableIT_0_31 (EXTI2 , line );
284296#else
285297 LL_EXTI_DisableIT_0_31 (line );
286298#endif
@@ -291,6 +303,24 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
291303 z_stm32_hsem_lock (CFG_HW_EXTI_SEMID , HSEM_LOCK_DEFAULT_RETRY );
292304
293305 switch (trg ) {
306+ #if defined(CONFIG_SOC_SERIES_STM32MP2X )
307+ case STM32_GPIO_IRQ_TRIG_NONE :
308+ LL_EXTI_DisableRisingTrig_0_31 (EXTI2 , line );
309+ LL_EXTI_DisableFallingTrig_0_31 (EXTI2 , line );
310+ break ;
311+ case STM32_GPIO_IRQ_TRIG_RISING :
312+ LL_EXTI_EnableRisingTrig_0_31 (EXTI2 , line );
313+ LL_EXTI_DisableFallingTrig_0_31 (EXTI2 , line );
314+ break ;
315+ case STM32_GPIO_IRQ_TRIG_FALLING :
316+ LL_EXTI_EnableFallingTrig_0_31 (EXTI2 , line );
317+ LL_EXTI_DisableRisingTrig_0_31 (EXTI2 , line );
318+ break ;
319+ case STM32_GPIO_IRQ_TRIG_BOTH :
320+ LL_EXTI_EnableRisingTrig_0_31 (EXTI2 , line );
321+ LL_EXTI_EnableFallingTrig_0_31 (EXTI2 , line );
322+ break ;
323+ #else /* CONFIG_SOC_SERIES_STM32MP2X */
294324 case STM32_GPIO_IRQ_TRIG_NONE :
295325 LL_EXTI_DisableRisingTrig_0_31 (line );
296326 LL_EXTI_DisableFallingTrig_0_31 (line );
@@ -307,6 +337,7 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
307337 LL_EXTI_EnableRisingTrig_0_31 (line );
308338 LL_EXTI_EnableFallingTrig_0_31 (line );
309339 break ;
340+ #endif /* CONFIG_SOC_SERIES_STM32MP2X */
310341 default :
311342 __ASSERT_NO_MSG (0 );
312343 break ;
@@ -369,6 +400,8 @@ void stm32_exti_set_line_src_port(gpio_pin_t line, uint32_t port)
369400 LL_EXTI_SetEXTISource (port , ll_line );
370401#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
371402 LL_SBS_SetEXTISource (port , ll_line );
403+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
404+ LL_EXTI_SetEXTISource (EXTI2 , port , ll_line );
372405#else
373406 LL_SYSCFG_SetEXTISource (port , ll_line );
374407#endif
@@ -386,6 +419,8 @@ uint32_t stm32_exti_get_line_src_port(gpio_pin_t line)
386419 port = LL_EXTI_GetEXTISource (ll_line );
387420#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
388421 port = LL_SBS_GetEXTISource (ll_line );
422+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
423+ port = LL_EXTI_GetEXTISource (EXTI2 , ll_line );
389424#else
390425 port = LL_SYSCFG_GetEXTISource (ll_line );
391426#endif
0 commit comments