From 5ce6c51c28dfb48b9bbc4526165ba434aa74d554 Mon Sep 17 00:00:00 2001 From: wuzhenghui Date: Thu, 10 Apr 2025 20:29:07 +0800 Subject: [PATCH] fix(esp_hw_support): fix unused OSC source deinit breaks XTAL32K configuration --- components/esp_system/port/soc/esp32/clk.c | 7 ++----- components/esp_system/port/soc/esp32c3/clk.c | 7 ++----- components/esp_system/port/soc/esp32c5/clk.c | 4 +--- components/esp_system/port/soc/esp32c6/clk.c | 4 +--- components/esp_system/port/soc/esp32h2/clk.c | 4 +--- components/esp_system/port/soc/esp32s2/clk.c | 7 ++----- components/esp_system/port/soc/esp32s3/clk.c | 7 ++----- 7 files changed, 11 insertions(+), 29 deletions(-) diff --git a/components/esp_system/port/soc/esp32/clk.c b/components/esp_system/port/soc/esp32/clk.c index ac60eb03e7..e99ed451fa 100644 --- a/components/esp_system/port/soc/esp32/clk.c +++ b/components/esp_system/port/soc/esp32/clk.c @@ -92,11 +92,8 @@ static void select_rtc_slow_clk(slow_clk_sel_t slow_clk) } rtc_clk_slow_src_set(rtc_slow_clk_src); if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { - if (slow_clk == SLOW_CLK_32K_XTAL) { - rtc_clk_32k_enable(false); - } else if (slow_clk == SLOW_CLK_32K_EXT_OSC) { - rtc_clk_32k_disable_external(); - } + rtc_clk_32k_enable(false); + rtc_clk_32k_disable_external(); } if (SLOW_CLK_CAL_CYCLES > 0) { /* TODO: 32k XTAL oscillator has some frequency drift at startup. diff --git a/components/esp_system/port/soc/esp32c3/clk.c b/components/esp_system/port/soc/esp32c3/clk.c index 491ddc8a07..f268f38e27 100644 --- a/components/esp_system/port/soc/esp32c3/clk.c +++ b/components/esp_system/port/soc/esp32c3/clk.c @@ -177,11 +177,8 @@ static void select_rtc_slow_clk(slow_clk_sel_t slow_clk) } rtc_clk_slow_src_set(rtc_slow_clk_src); if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { - if (slow_clk == SLOW_CLK_32K_XTAL) { - rtc_clk_32k_enable(false); - } else if (slow_clk == SLOW_CLK_32K_EXT_OSC) { - rtc_clk_32k_disable_external(); - } + rtc_clk_32k_enable(false); + rtc_clk_32k_disable_external(); } if (SLOW_CLK_CAL_CYCLES > 0) { /* TODO: 32k XTAL oscillator has some frequency drift at startup. diff --git a/components/esp_system/port/soc/esp32c5/clk.c b/components/esp_system/port/soc/esp32c5/clk.c index a9eebf74c2..7b2a967fba 100644 --- a/components/esp_system/port/soc/esp32c5/clk.c +++ b/components/esp_system/port/soc/esp32c5/clk.c @@ -180,10 +180,8 @@ static void select_rtc_slow_clk(soc_rtc_slow_clk_src_t rtc_slow_clk_src) rtc_clk_slow_src_set(rtc_slow_clk_src); // Disable unused clock sources after clock source switching is complete. // Regardless of the clock source selection, the internal 136K clock source will always keep on. - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { + if ((rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) && (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW)) { rtc_clk_32k_enable(false); - } - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW) { rtc_clk_32k_disable_external(); } if (SLOW_CLK_CAL_CYCLES > 0) { diff --git a/components/esp_system/port/soc/esp32c6/clk.c b/components/esp_system/port/soc/esp32c6/clk.c index 3be4ee1965..5de2ec44ec 100644 --- a/components/esp_system/port/soc/esp32c6/clk.c +++ b/components/esp_system/port/soc/esp32c6/clk.c @@ -187,10 +187,8 @@ static void select_rtc_slow_clk(soc_rtc_slow_clk_src_t rtc_slow_clk_src) rtc_clk_slow_src_set(rtc_slow_clk_src); // Disable unused clock sources after clock source switching is complete. // Regardless of the clock source selection, the internal 136K clock source will always keep on. - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { + if ((rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) && (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW)) { rtc_clk_32k_enable(false); - } - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW) { rtc_clk_32k_disable_external(); } if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_RC32K) { diff --git a/components/esp_system/port/soc/esp32h2/clk.c b/components/esp_system/port/soc/esp32h2/clk.c index 876d296536..5107a2474f 100644 --- a/components/esp_system/port/soc/esp32h2/clk.c +++ b/components/esp_system/port/soc/esp32h2/clk.c @@ -188,10 +188,8 @@ static void select_rtc_slow_clk(soc_rtc_slow_clk_src_t rtc_slow_clk_src) rtc_clk_slow_src_set(rtc_slow_clk_src); // Disable unused clock sources after clock source switching is complete. // Regardless of the clock source selection, the internal 136K clock source will always keep on. - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { + if ((rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) && (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW)) { rtc_clk_32k_enable(false); - } - if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_OSC_SLOW) { rtc_clk_32k_disable_external(); } if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_RC32K) { diff --git a/components/esp_system/port/soc/esp32s2/clk.c b/components/esp_system/port/soc/esp32s2/clk.c index ef25477936..cad8861158 100644 --- a/components/esp_system/port/soc/esp32s2/clk.c +++ b/components/esp_system/port/soc/esp32s2/clk.c @@ -180,11 +180,8 @@ static void select_rtc_slow_clk(slow_clk_sel_t slow_clk) } rtc_clk_slow_src_set(rtc_slow_clk_src); if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { - if (slow_clk == SLOW_CLK_32K_XTAL) { - rtc_clk_32k_enable(false); - } else if (slow_clk == SLOW_CLK_32K_EXT_OSC) { - rtc_clk_32k_disable_external(); - } + rtc_clk_32k_enable(false); + rtc_clk_32k_disable_external(); } if (SLOW_CLK_CAL_CYCLES > 0) { /* TODO: 32k XTAL oscillator has some frequency drift at startup. diff --git a/components/esp_system/port/soc/esp32s3/clk.c b/components/esp_system/port/soc/esp32s3/clk.c index b18ca20336..3c3fd96ff0 100644 --- a/components/esp_system/port/soc/esp32s3/clk.c +++ b/components/esp_system/port/soc/esp32s3/clk.c @@ -178,11 +178,8 @@ static void select_rtc_slow_clk(slow_clk_sel_t slow_clk) } rtc_clk_slow_src_set(rtc_slow_clk_src); if (rtc_slow_clk_src != SOC_RTC_SLOW_CLK_SRC_XTAL32K) { - if (slow_clk == SLOW_CLK_32K_XTAL) { - rtc_clk_32k_enable(false); - } else if (slow_clk == SLOW_CLK_32K_EXT_OSC) { - rtc_clk_32k_disable_external(); - } + rtc_clk_32k_enable(false); + rtc_clk_32k_disable_external(); } if (SLOW_CLK_CAL_CYCLES > 0) { /* TODO: 32k XTAL oscillator has some frequency drift at startup.