mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	fix(esp_hw_support): fix esp32s2/esp32s3 RTC IOMUX clock management
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
 | 
			
		||||
 * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
 | 
			
		||||
 *
 | 
			
		||||
 * SPDX-License-Identifier: Apache-2.0
 | 
			
		||||
 */
 | 
			
		||||
@@ -13,6 +13,9 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include "soc/rtc_io_struct.h"
 | 
			
		||||
#include "soc/rtc_io_reg.h"
 | 
			
		||||
#include "soc/rtc_periph.h"
 | 
			
		||||
#include "soc/sens_struct.h"
 | 
			
		||||
#include "hal/gpio_types.h"
 | 
			
		||||
@@ -24,7 +27,7 @@ extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    RTCIO_FUNC_RTC = 0x0,         /*!< The pin controled by RTC module. */
 | 
			
		||||
    RTCIO_FUNC_RTC = 0x0,         /*!< The pin controlled by RTC module. */
 | 
			
		||||
    RTCIO_FUNC_DIGITAL = 0x1,     /*!< The pin controlled by DIGITAL module. */
 | 
			
		||||
} rtcio_ll_func_t;
 | 
			
		||||
 | 
			
		||||
@@ -39,6 +42,16 @@ typedef enum {
 | 
			
		||||
    RTCIO_OUTPUT_OD = 0x1,      /*!< RTCIO output mode is open-drain. */
 | 
			
		||||
} rtcio_ll_out_mode_t;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Enable/Disable LP IOMUX clock.
 | 
			
		||||
 *
 | 
			
		||||
 * @param enable true to enable the clock / false to disable the clock
 | 
			
		||||
 */
 | 
			
		||||
static inline void rtcio_ll_enable_io_clock(bool enable)
 | 
			
		||||
{
 | 
			
		||||
    SENS.sar_io_mux_conf.iomux_clk_gate_en = enable;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Select the rtcio function.
 | 
			
		||||
 *
 | 
			
		||||
@@ -49,14 +62,12 @@ typedef enum {
 | 
			
		||||
static inline void rtcio_ll_function_select(int rtcio_num, rtcio_ll_func_t func)
 | 
			
		||||
{
 | 
			
		||||
    if (func == RTCIO_FUNC_RTC) {
 | 
			
		||||
        SENS.sar_io_mux_conf.iomux_clk_gate_en = 1;
 | 
			
		||||
        // 0: GPIO connected to digital GPIO module. 1: GPIO connected to analog RTC module.
 | 
			
		||||
        SET_PERI_REG_MASK(rtc_io_desc[rtcio_num].reg, (rtc_io_desc[rtcio_num].mux));
 | 
			
		||||
        //0:RTC FUNCTION 1,2,3:Reserved
 | 
			
		||||
        SET_PERI_REG_BITS(rtc_io_desc[rtcio_num].reg, RTC_IO_TOUCH_PAD1_FUN_SEL_V, RTCIO_LL_PIN_FUNC, rtc_io_desc[rtcio_num].func);
 | 
			
		||||
    } else if (func == RTCIO_FUNC_DIGITAL) {
 | 
			
		||||
        CLEAR_PERI_REG_MASK(rtc_io_desc[rtcio_num].reg, (rtc_io_desc[rtcio_num].mux));
 | 
			
		||||
        SENS.sar_io_mux_conf.iomux_clk_gate_en = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -269,8 +280,7 @@ static inline void rtcio_ll_force_unhold_all(void)
 | 
			
		||||
 */
 | 
			
		||||
static inline void rtcio_ll_wakeup_enable(int rtcio_num, rtcio_ll_wake_type_t type)
 | 
			
		||||
{
 | 
			
		||||
    SENS.sar_io_mux_conf.iomux_clk_gate_en = 1;
 | 
			
		||||
    RTCIO.pin[rtcio_num].wakeup_enable = 0x1;
 | 
			
		||||
    RTCIO.pin[rtcio_num].wakeup_enable = 1;
 | 
			
		||||
    RTCIO.pin[rtcio_num].int_type = type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -281,7 +291,6 @@ static inline void rtcio_ll_wakeup_enable(int rtcio_num, rtcio_ll_wake_type_t ty
 | 
			
		||||
 */
 | 
			
		||||
static inline void rtcio_ll_wakeup_disable(int rtcio_num)
 | 
			
		||||
{
 | 
			
		||||
    SENS.sar_io_mux_conf.iomux_clk_gate_en = 0;
 | 
			
		||||
    RTCIO.pin[rtcio_num].wakeup_enable = 0;
 | 
			
		||||
    RTCIO.pin[rtcio_num].int_type = RTCIO_WAKEUP_DISABLE;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user