drivers: clock_control: some stm32 have a HSI48 fixed clock
For the stm32 devices that have a HSI48 clock,
the driver enables it, like any other fixed clock,
if needed and supported by the serie.
For stm32L0, SYSCFG VREFINT is also required.
Signed-off-by: Francois Ramu <francois.ramu@st.com>
diff --git a/drivers/clock_control/clock_stm32_ll_common.c b/drivers/clock_control/clock_stm32_ll_common.c
index 37c777c..be084c5 100644
--- a/drivers/clock_control/clock_stm32_ll_common.c
+++ b/drivers/clock_control/clock_stm32_ll_common.c
@@ -624,6 +624,24 @@
z_stm32_hsem_unlock(CFG_HW_RCC_SEMID);
}
+
+#if defined(STM32_HSI48_ENABLED)
+ /* For all series with HSI 48 clock support */
+ if (IS_ENABLED(STM32_HSI48_ENABLED)) {
+#if defined(CONFIG_SOC_SERIES_STM32L0X)
+ /*
+ * HSI48 requires VREFINT (see RM0376 section 7.2.4).
+ * The SYSCFG is needed to control VREFINT, so clock it.
+ */
+ LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
+ LL_SYSCFG_VREFINT_EnableHSI48();
+#endif /* CONFIG_SOC_SERIES_STM32L0X */
+
+ LL_RCC_HSI48_Enable();
+ while (LL_RCC_HSI48_IsReady() != 1) {
+ }
+ }
+#endif /* STM32_HSI48_ENABLED */
}
/**
diff --git a/drivers/clock_control/clock_stm32_ll_h7.c b/drivers/clock_control/clock_stm32_ll_h7.c
index 44f5301..b32e8d6 100644
--- a/drivers/clock_control/clock_stm32_ll_h7.c
+++ b/drivers/clock_control/clock_stm32_ll_h7.c
@@ -635,6 +635,12 @@
while (LL_RCC_LSE_IsReady() != 1) {
}
}
+
+ if (IS_ENABLED(STM32_HSI48_ENABLED)) {
+ LL_RCC_HSI48_Enable();
+ while (LL_RCC_HSI48_IsReady() != 1) {
+ }
+ }
}
__unused
diff --git a/drivers/clock_control/clock_stm32_ll_u5.c b/drivers/clock_control/clock_stm32_ll_u5.c
index b6f409c..f9081aa 100644
--- a/drivers/clock_control/clock_stm32_ll_u5.c
+++ b/drivers/clock_control/clock_stm32_ll_u5.c
@@ -767,6 +767,11 @@
}
}
+ if (IS_ENABLED(STM32_HSI48_ENABLED)) {
+ LL_RCC_HSI48_Enable();
+ while (LL_RCC_HSI48_IsReady() != 1) {
+ }
+ }
}
int stm32_clock_control_init(const struct device *dev)
diff --git a/include/zephyr/drivers/clock_control/stm32_clock_control.h b/include/zephyr/drivers/clock_control/stm32_clock_control.h
index 329c08f..77b04ad 100644
--- a/include/zephyr/drivers/clock_control/stm32_clock_control.h
+++ b/include/zephyr/drivers/clock_control/stm32_clock_control.h
@@ -334,6 +334,10 @@
#define STM32_HSE_FREQ 0
#endif
+#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(clk_hsi48), fixed_clock, okay)
+#define STM32_HSI48_ENABLED 1
+#endif
+
#if DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(perck), st_stm32_clock_mux, okay)
#define STM32_CKPER_ENABLED 1
#endif