2
2
* Copyright (c) 2016 Open-RnD Sp. z o.o.
3
3
* Copyright (c) 2017 RnDity Sp. z o.o.
4
4
* Copyright (c) 2019-23 Linaro Limited
5
+ * Copyright (C) 2025 Savoir-faire Linux, Inc.
5
6
*
6
7
* SPDX-License-Identifier: Apache-2.0
7
8
*/
@@ -60,7 +61,8 @@ static inline uint32_t stm32_exti_linenum_to_src_cfg_line(gpio_pin_t linenum)
60
61
#if defined(CONFIG_SOC_SERIES_STM32L0X ) || \
61
62
defined(CONFIG_SOC_SERIES_STM32F0X )
62
63
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 )
64
66
return ((linenum & 0x3 ) << (16 + 3 )) | (linenum >> 2 );
65
67
#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
66
68
/* 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)
82
84
LL_EXTI_IsActiveFallingFlag_0_31 (line ));
83
85
#elif defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
84
86
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 );
85
90
#else
86
91
return LL_EXTI_IsActiveFlag_0_31 (line );
87
92
#endif
@@ -99,6 +104,9 @@ static inline void stm32_exti_clear_pending(stm32_gpio_irq_line_t line)
99
104
LL_EXTI_ClearFallingFlag_0_31 (line );
100
105
#elif defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
101
106
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 );
102
110
#else
103
111
LL_EXTI_ClearFlag_0_31 (line );
104
112
#endif
@@ -269,6 +277,8 @@ void stm32_gpio_intc_enable_line(stm32_gpio_irq_line_t line)
269
277
/* Enable requested line interrupt */
270
278
#if defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
271
279
LL_C2_EXTI_EnableIT_0_31 (line );
280
+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
281
+ LL_C2_EXTI_EnableIT_0_31 (EXTI2 , line );
272
282
#else
273
283
LL_EXTI_EnableIT_0_31 (line );
274
284
#endif
@@ -281,6 +291,8 @@ void stm32_gpio_intc_disable_line(stm32_gpio_irq_line_t line)
281
291
{
282
292
#if defined(CONFIG_SOC_SERIES_STM32H7X ) && defined(CONFIG_CPU_CORTEX_M4 )
283
293
LL_C2_EXTI_DisableIT_0_31 (line );
294
+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
295
+ LL_C2_EXTI_DisableIT_0_31 (EXTI2 , line );
284
296
#else
285
297
LL_EXTI_DisableIT_0_31 (line );
286
298
#endif
@@ -291,6 +303,24 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
291
303
z_stm32_hsem_lock (CFG_HW_EXTI_SEMID , HSEM_LOCK_DEFAULT_RETRY );
292
304
293
305
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 */
294
324
case STM32_GPIO_IRQ_TRIG_NONE :
295
325
LL_EXTI_DisableRisingTrig_0_31 (line );
296
326
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
307
337
LL_EXTI_EnableRisingTrig_0_31 (line );
308
338
LL_EXTI_EnableFallingTrig_0_31 (line );
309
339
break ;
340
+ #endif /* CONFIG_SOC_SERIES_STM32MP2X */
310
341
default :
311
342
__ASSERT_NO_MSG (0 );
312
343
break ;
@@ -369,6 +400,8 @@ void stm32_exti_set_line_src_port(gpio_pin_t line, uint32_t port)
369
400
LL_EXTI_SetEXTISource (port , ll_line );
370
401
#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
371
402
LL_SBS_SetEXTISource (port , ll_line );
403
+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
404
+ LL_EXTI_SetEXTISource (EXTI2 , port , ll_line );
372
405
#else
373
406
LL_SYSCFG_SetEXTISource (port , ll_line );
374
407
#endif
@@ -386,6 +419,8 @@ uint32_t stm32_exti_get_line_src_port(gpio_pin_t line)
386
419
port = LL_EXTI_GetEXTISource (ll_line );
387
420
#elif DT_HAS_COMPAT_STATUS_OKAY (st_stm32h7rs_exti )
388
421
port = LL_SBS_GetEXTISource (ll_line );
422
+ #elif defined(CONFIG_SOC_SERIES_STM32MP2X )
423
+ port = LL_EXTI_GetEXTISource (EXTI2 , ll_line );
389
424
#else
390
425
port = LL_SYSCFG_GetEXTISource (ll_line );
391
426
#endif
0 commit comments