@ -2,6 +2,7 @@
* Copyright ( c ) 2016 Open - RnD Sp . z o . o .
* Copyright ( c ) 2016 Open - RnD Sp . z o . o .
* Copyright ( c ) 2017 RnDity Sp . z o . o .
* Copyright ( c ) 2017 RnDity Sp . z o . o .
* Copyright ( c ) 2019 - 23 Linaro Limited
* Copyright ( c ) 2019 - 23 Linaro Limited
* Copyright ( C ) 2025 Savoir - faire Linux , Inc .
*
*
* SPDX - License - Identifier : Apache - 2.0
* SPDX - License - Identifier : Apache - 2.0
*/
*/
@ -60,7 +61,8 @@ static inline uint32_t stm32_exti_linenum_to_src_cfg_line(gpio_pin_t linenum)
# if defined(CONFIG_SOC_SERIES_STM32L0X) || \
# if defined(CONFIG_SOC_SERIES_STM32L0X) || \
defined ( CONFIG_SOC_SERIES_STM32F0X )
defined ( CONFIG_SOC_SERIES_STM32F0X )
return ( ( linenum % 4 * 4 ) < < 16 ) | ( linenum / 4 ) ;
return ( ( linenum % 4 * 4 ) < < 16 ) | ( linenum / 4 ) ;
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti)
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32g0_exti) || \
defined ( CONFIG_SOC_SERIES_STM32MP2X )
return ( ( linenum & 0x3 ) < < ( 16 + 3 ) ) | ( linenum > > 2 ) ;
return ( ( linenum & 0x3 ) < < ( 16 + 3 ) ) | ( linenum > > 2 ) ;
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
/* Gives the LL_SBS_EXTI_LINEn corresponding to the line number */
/* 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)
LL_EXTI_IsActiveFallingFlag_0_31 ( line ) ) ;
LL_EXTI_IsActiveFallingFlag_0_31 ( line ) ) ;
# elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
# elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
return LL_C2_EXTI_IsActiveFlag_0_31 ( line ) ;
return LL_C2_EXTI_IsActiveFlag_0_31 ( line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
return LL_EXTI_IsActiveRisingFlag_0_31 ( EXTI2 , line ) | |
LL_EXTI_IsActiveFallingFlag_0_31 ( EXTI2 , line ) ;
# else
# else
return LL_EXTI_IsActiveFlag_0_31 ( line ) ;
return LL_EXTI_IsActiveFlag_0_31 ( line ) ;
# endif
# endif
@ -99,6 +104,9 @@ static inline void stm32_exti_clear_pending(stm32_gpio_irq_line_t line)
LL_EXTI_ClearFallingFlag_0_31 ( line ) ;
LL_EXTI_ClearFallingFlag_0_31 ( line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
# elif defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
LL_C2_EXTI_ClearFlag_0_31 ( line ) ;
LL_C2_EXTI_ClearFlag_0_31 ( line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
LL_EXTI_ClearRisingFlag_0_31 ( EXTI2 , line ) ;
LL_EXTI_ClearFallingFlag_0_31 ( EXTI2 , line ) ;
# else
# else
LL_EXTI_ClearFlag_0_31 ( line ) ;
LL_EXTI_ClearFlag_0_31 ( line ) ;
# endif
# endif
@ -269,6 +277,8 @@ void stm32_gpio_intc_enable_line(stm32_gpio_irq_line_t line)
/* Enable requested line interrupt */
/* Enable requested line interrupt */
# if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
# if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
LL_C2_EXTI_EnableIT_0_31 ( line ) ;
LL_C2_EXTI_EnableIT_0_31 ( line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
LL_C2_EXTI_EnableIT_0_31 ( EXTI2 , line ) ;
# else
# else
LL_EXTI_EnableIT_0_31 ( line ) ;
LL_EXTI_EnableIT_0_31 ( line ) ;
# endif
# endif
@ -281,6 +291,8 @@ void stm32_gpio_intc_disable_line(stm32_gpio_irq_line_t line)
{
{
# if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
# if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
LL_C2_EXTI_DisableIT_0_31 ( line ) ;
LL_C2_EXTI_DisableIT_0_31 ( line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
LL_C2_EXTI_DisableIT_0_31 ( EXTI2 , line ) ;
# else
# else
LL_EXTI_DisableIT_0_31 ( line ) ;
LL_EXTI_DisableIT_0_31 ( line ) ;
# endif
# endif
@ -291,6 +303,24 @@ void stm32_gpio_intc_select_line_trigger(stm32_gpio_irq_line_t line, uint32_t tr
z_stm32_hsem_lock ( CFG_HW_EXTI_SEMID , HSEM_LOCK_DEFAULT_RETRY ) ;
z_stm32_hsem_lock ( CFG_HW_EXTI_SEMID , HSEM_LOCK_DEFAULT_RETRY ) ;
switch ( trg ) {
switch ( trg ) {
# if defined(CONFIG_SOC_SERIES_STM32MP2X)
case STM32_GPIO_IRQ_TRIG_NONE :
LL_EXTI_DisableRisingTrig_0_31 ( EXTI2 , line ) ;
LL_EXTI_DisableFallingTrig_0_31 ( EXTI2 , line ) ;
break ;
case STM32_GPIO_IRQ_TRIG_RISING :
LL_EXTI_EnableRisingTrig_0_31 ( EXTI2 , line ) ;
LL_EXTI_DisableFallingTrig_0_31 ( EXTI2 , line ) ;
break ;
case STM32_GPIO_IRQ_TRIG_FALLING :
LL_EXTI_EnableFallingTrig_0_31 ( EXTI2 , line ) ;
LL_EXTI_DisableRisingTrig_0_31 ( EXTI2 , line ) ;
break ;
case STM32_GPIO_IRQ_TRIG_BOTH :
LL_EXTI_EnableRisingTrig_0_31 ( EXTI2 , line ) ;
LL_EXTI_EnableFallingTrig_0_31 ( EXTI2 , line ) ;
break ;
# else /* CONFIG_SOC_SERIES_STM32MP2X */
case STM32_GPIO_IRQ_TRIG_NONE :
case STM32_GPIO_IRQ_TRIG_NONE :
LL_EXTI_DisableRisingTrig_0_31 ( line ) ;
LL_EXTI_DisableRisingTrig_0_31 ( line ) ;
LL_EXTI_DisableFallingTrig_0_31 ( line ) ;
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
LL_EXTI_EnableRisingTrig_0_31 ( line ) ;
LL_EXTI_EnableRisingTrig_0_31 ( line ) ;
LL_EXTI_EnableFallingTrig_0_31 ( line ) ;
LL_EXTI_EnableFallingTrig_0_31 ( line ) ;
break ;
break ;
# endif /* CONFIG_SOC_SERIES_STM32MP2X */
default :
default :
__ASSERT_NO_MSG ( 0 ) ;
__ASSERT_NO_MSG ( 0 ) ;
break ;
break ;
@ -369,6 +400,8 @@ void stm32_exti_set_line_src_port(gpio_pin_t line, uint32_t port)
LL_EXTI_SetEXTISource ( port , ll_line ) ;
LL_EXTI_SetEXTISource ( port , ll_line ) ;
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
LL_SBS_SetEXTISource ( port , ll_line ) ;
LL_SBS_SetEXTISource ( port , ll_line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
LL_EXTI_SetEXTISource ( EXTI2 , port , ll_line ) ;
# else
# else
LL_SYSCFG_SetEXTISource ( port , ll_line ) ;
LL_SYSCFG_SetEXTISource ( port , ll_line ) ;
# endif
# endif
@ -386,6 +419,8 @@ uint32_t stm32_exti_get_line_src_port(gpio_pin_t line)
port = LL_EXTI_GetEXTISource ( ll_line ) ;
port = LL_EXTI_GetEXTISource ( ll_line ) ;
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
# elif DT_HAS_COMPAT_STATUS_OKAY(st_stm32h7rs_exti)
port = LL_SBS_GetEXTISource ( ll_line ) ;
port = LL_SBS_GetEXTISource ( ll_line ) ;
# elif defined(CONFIG_SOC_SERIES_STM32MP2X)
port = LL_EXTI_GetEXTISource ( EXTI2 , ll_line ) ;
# else
# else
port = LL_SYSCFG_GetEXTISource ( ll_line ) ;
port = LL_SYSCFG_GetEXTISource ( ll_line ) ;
# endif
# endif