| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #include <stdint.h>
- #include <assert.h>
- #include "soc/rtc.h"
- typedef enum {
- PM_LIGHT_SLEEP = BIT(2), /*!< WiFi PD, memory in light sleep */
- } pm_sleep_mode_t;
- typedef enum{
- PM_SW_NOREJECT = 0,
- PM_SW_REJECT = 1
- } pm_sw_reject_t;
- /* These MAC-related functions are defined in the closed source part of
- * RTC library
- */
- extern void pm_mac_init(void);
- extern int pm_check_mac_idle(void);
- extern void pm_mac_deinit(void);
- /* This sleep-related function is called from the closed source part of RTC
- * library.
- */
- pm_sw_reject_t pm_set_sleep_mode(pm_sleep_mode_t sleep_mode, void(*pmac_save_params)(void))
- {
- (void) pmac_save_params; /* unused */
- pm_mac_deinit();
- if (pm_check_mac_idle()) {
- pm_mac_init();
- return PM_SW_REJECT;
- }
- rtc_sleep_config_t cfg = { 0 };
- switch (sleep_mode) {
- case PM_LIGHT_SLEEP:
- cfg.wifi_pd_en = 1;
- cfg.dig_dbias_wak = 4;
- cfg.dig_dbias_slp = 0;
- cfg.rtc_dbias_wak = 0;
- cfg.rtc_dbias_slp = 0;
- cfg.lslp_meminf_pd = 1;
- rtc_sleep_init(cfg);
- break;
- default:
- assert(0 && "unsupported sleep mode");
- }
- return PM_SW_NOREJECT;
- }
|