1 /*
2  * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #pragma once
8 
9 #include "esp_err.h"
10 #include "soc/clk_tree_defs.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 /**
17  * @brief Degree of precision of frequency value to be returned by esp_clk_tree_src_get_freq_hz()
18  */
19 typedef enum {
20     ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED,   /*< Get value from the data cached by the driver; If the data is 0, then a calibration will be performed */
21     ESP_CLK_TREE_SRC_FREQ_PRECISION_APPROX,   /*< Get its approxiamte frequency value */
22     ESP_CLK_TREE_SRC_FREQ_PRECISION_EXACT,    /*< Always perform a calibration */
23     ESP_CLK_TREE_SRC_FREQ_PRECISION_INVALID,  /*< Invalid degree of precision */
24 } esp_clk_tree_src_freq_precision_t;
25 
26 /**
27  * @brief Get frequency of module clock source
28  *
29  * @param[in] clk_src Clock source available to modules, in soc_module_clk_t
30  * @param[in] precision Degree of precision, one of esp_clk_tree_src_freq_precision_t values
31  *                      This arg only applies to the clock sources that their frequencies can vary:
32  *                      SOC_MOD_CLK_RTC_FAST, SOC_MOD_CLK_RTC_SLOW, SOC_MOD_CLK_RC_FAST, SOC_MOD_CLK_RC_FAST_D256,
33  *                      SOC_MOD_CLK_XTAL32K
34  *                      For other clock sources, this field is ignored.
35  * @param[out] freq_value Frequency of the clock source, in Hz
36  *
37  * @return
38  *      - ESP_OK               Success
39  *      - ESP_ERR_INVALID_ARG  Parameter error
40  *      - ESP_FAIL             Calibration failed
41  */
42 esp_err_t esp_clk_tree_src_get_freq_hz(soc_module_clk_t clk_src, esp_clk_tree_src_freq_precision_t precision,
43 uint32_t *freq_value);
44 
45 #ifdef __cplusplus
46 }
47 #endif
48