From 774548e0fe7587688be7f05d9785765b6531ec77 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/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 ++----- 6 files changed, 10 insertions(+), 26 deletions(-) diff --git a/components/esp_system/port/soc/esp32/clk.c b/components/esp_system/port/soc/esp32/clk.c index 9dccb46dbe..2133cc8b25 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 3b88deca25..4eaef281d6 100644 --- a/components/esp_system/port/soc/esp32c3/clk.c +++ b/components/esp_system/port/soc/esp32c3/clk.c @@ -175,11 +175,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/esp32c6/clk.c b/components/esp_system/port/soc/esp32c6/clk.c index aab6a0e11e..049c6ada9a 100644 --- a/components/esp_system/port/soc/esp32c6/clk.c +++ b/components/esp_system/port/soc/esp32c6/clk.c @@ -165,10 +165,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 d4d9b54ffb..3a81d9c0d6 100644 --- a/components/esp_system/port/soc/esp32h2/clk.c +++ b/components/esp_system/port/soc/esp32h2/clk.c @@ -166,10 +166,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 b818747346..bb43f3c8e6 100644 --- a/components/esp_system/port/soc/esp32s2/clk.c +++ b/components/esp_system/port/soc/esp32s2/clk.c @@ -181,11 +181,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 808c07f6c4..cd33cc210a 100644 --- a/components/esp_system/port/soc/esp32s3/clk.c +++ b/components/esp_system/port/soc/esp32s3/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.