Skip to content

Commit 5399677

Browse files
drivers: counter: stm32_rtc: manage EXTI line in a proper manner
Instead of hardcoded EXTI line numbers and raw LL API calls, align the STM32 RTC Counter driver with its Real-Time Clock counterpart: - obtain EXTI line number from Devicetree - use the EXTI INTC API instead of raw LL API calls Fixes the build issue observed on STM32N6. Signed-off-by: Mathieu Choplain <mathieu.choplain-ext@st.com>
1 parent f970de0 commit 5399677

1 file changed

Lines changed: 16 additions & 47 deletions

File tree

drivers/counter/counter_stm32_rtc.c

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,28 +85,9 @@ LOG_MODULE_REGISTER(counter_rtc_stm32, CONFIG_COUNTER_LOG_LEVEL);
8585
/* Seconds from 1970-01-01T00:00:00 to 2000-01-01T00:00:00 */
8686
#define T_TIME_OFFSET 946684800
8787

88-
#if defined(CONFIG_SOC_SERIES_STM32L4X)
89-
#define RTC_EXTI_LINE LL_EXTI_LINE_18
90-
#elif defined(CONFIG_SOC_SERIES_STM32C0X) \
91-
|| defined(CONFIG_SOC_SERIES_STM32G0X)
92-
#define RTC_EXTI_LINE LL_EXTI_LINE_19
93-
#elif defined(CONFIG_SOC_SERIES_STM32F4X) \
94-
|| defined(CONFIG_SOC_SERIES_STM32C5X) \
95-
|| defined(CONFIG_SOC_SERIES_STM32F0X) \
96-
|| defined(CONFIG_SOC_SERIES_STM32F1X) \
97-
|| defined(CONFIG_SOC_SERIES_STM32F2X) \
98-
|| defined(CONFIG_SOC_SERIES_STM32F3X) \
99-
|| defined(CONFIG_SOC_SERIES_STM32F7X) \
100-
|| defined(CONFIG_SOC_SERIES_STM32WBX) \
101-
|| defined(CONFIG_SOC_SERIES_STM32G4X) \
102-
|| defined(CONFIG_SOC_SERIES_STM32L0X) \
103-
|| defined(CONFIG_SOC_SERIES_STM32L1X) \
104-
|| defined(CONFIG_SOC_SERIES_STM32L5X) \
105-
|| defined(CONFIG_SOC_SERIES_STM32H7X) \
106-
|| defined(CONFIG_SOC_SERIES_STM32H5X) \
107-
|| defined(CONFIG_SOC_SERIES_STM32WLX)
108-
#define RTC_EXTI_LINE LL_EXTI_LINE_17
109-
#endif
88+
#if DT_INST_NODE_HAS_PROP(0, alrm_exti_line)
89+
#define RTC_EXTI_LINE_NUM DT_INST_PROP(0, alrm_exti_line)
90+
#endif /* DT_INST_NODE_HAS_PROP(0, alrm_exti_line) */
11091

11192
#if defined(CONFIG_SOC_SERIES_STM32F1X)
11293
#define COUNTER_NO_DATE
@@ -761,21 +742,9 @@ void rtc_stm32_isr(const struct device *dev)
761742
}
762743
}
763744

764-
#if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
765-
LL_C2_EXTI_ClearFlag_0_31(RTC_EXTI_LINE);
766-
#elif defined(CONFIG_SOC_SERIES_STM32C0X) \
767-
|| defined(CONFIG_SOC_SERIES_STM32C5X) \
768-
|| defined(CONFIG_SOC_SERIES_STM32G0X) \
769-
|| defined(CONFIG_SOC_SERIES_STM32L5X) \
770-
|| defined(CONFIG_SOC_SERIES_STM32H5X)
771-
LL_EXTI_ClearRisingFlag_0_31(RTC_EXTI_LINE);
772-
#elif defined(CONFIG_SOC_SERIES_STM32U3X) \
773-
|| defined(CONFIG_SOC_SERIES_STM32U5X) \
774-
|| defined(CONFIG_SOC_SERIES_STM32WBAX)
775-
/* RTC is not connected to EXTI for these SoC series */
776-
#else
777-
LL_EXTI_ClearFlag_0_31(RTC_EXTI_LINE);
778-
#endif
745+
#if defined(RTC_EXTI_LINE_NUM)
746+
stm32_exti_clear_pending(RTC_EXTI_LINE_NUM);
747+
#endif /* defined(RTC_EXTI_LINE_NUM) */
779748
}
780749

781750

@@ -843,16 +812,16 @@ static int rtc_stm32_init(const struct device *dev)
843812
LL_RTC_EnableWriteProtection(STM32_ARG(RTC));
844813
#endif /* RTC_CR_BYPSHAD */
845814

846-
#if defined(CONFIG_SOC_SERIES_STM32H7X) && defined(CONFIG_CPU_CORTEX_M4)
847-
LL_C2_EXTI_EnableIT_0_31(RTC_EXTI_LINE);
848-
LL_EXTI_EnableRisingTrig_0_31(RTC_EXTI_LINE);
849-
#elif defined(CONFIG_SOC_SERIES_STM32U3X) || defined(CONFIG_SOC_SERIES_STM32U5X) || \
850-
defined(CONFIG_SOC_SERIES_STM32WBAX)
851-
/* RTC is not connected to EXTI for these SoC series */
852-
#else
853-
LL_EXTI_EnableIT_0_31(RTC_EXTI_LINE);
854-
LL_EXTI_EnableRisingTrig_0_31(RTC_EXTI_LINE);
855-
#endif
815+
#if defined(RTC_EXTI_LINE_NUM)
816+
/* Trigger NVIC IRQ on RTC EXTI line rising edge */
817+
ret = stm32_exti_enable(RTC_EXTI_LINE_NUM,
818+
STM32_EXTI_TRIG_RISING,
819+
STM32_EXTI_MODE_IT);
820+
if (ret < 0) {
821+
LOG_ERR("Failed to enable RTC EXTI line");
822+
goto out_disable_bkup_access;
823+
}
824+
#endif /* defined(RTC_EXTI_LINE_NUM) */
856825

857826
out_disable_bkup_access:
858827
stm32_backup_domain_disable_access();

0 commit comments

Comments
 (0)