1194 lines
33 KiB
C
Executable File
1194 lines
33 KiB
C
Executable File
#ifndef _PM_H_
|
|
#define _PM_H_
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <driver/int.h>
|
|
#include "common/bk_err.h"
|
|
#include "sys_types.h"
|
|
|
|
#define PARAM_DATA_VALID (0xFFFF)
|
|
#define PM_APP_AUTO_VOTE_ENABLE (0x1)
|
|
#define PM_APP_AUTO_VOTE_DISENABLE (0x0)
|
|
#define PM_CP1_AUTO_POWER_DOWN_ENABLE (0x1)
|
|
#define PM_CP1_AUTO_POWER_DOWN_DISENABLE (0x0)
|
|
|
|
/*--------------------------WAKEUP SOURCE DEFINE START--------------------------------*/
|
|
#define pm_wakeup_source_e wakeup_source_t
|
|
|
|
#define PM_WAKEUP_SOURCE_INT_GPIO (WAKEUP_SOURCE_INT_GPIO)
|
|
#define PM_WAKEUP_SOURCE_INT_RTC (WAKEUP_SOURCE_INT_RTC)
|
|
#define PM_WAKEUP_SOURCE_INT_TOUCHED (WAKEUP_SOURCE_INT_TOUCHED)
|
|
#define PM_WAKEUP_SOURCE_INT_SYSTEM_WAKE (WAKEUP_SOURCE_INT_WIFI)//WAKEUP_SOURCE_INT_BT AND WAKEUP_SOURCE_INT_WIFI ARE THE SAME BIT
|
|
#define PM_WAKEUP_SOURCE_INT_WIFI (WAKEUP_SOURCE_INT_WIFI)
|
|
#define PM_WAKEUP_SOURCE_INT_BT (WAKEUP_SOURCE_INT_BT)
|
|
#define PM_WAKEUP_SOURCE_INT_USBPLUG (WAKEUP_SOURCE_INT_USBPLUG)
|
|
#define PM_WAKEUP_SOURCE_INT_NONE (WAKEUP_SOURCE_INT_NONE)
|
|
/*--------------------------WAKEUP SOURCE DEFINE END--------------------------------*/
|
|
|
|
/*--------------------------POWER DOMAIN MODUEL DEFINE START--------------------------------*/
|
|
#define pm_power_module_name_e unsigned int
|
|
|
|
/*----POWER DOMAIN DEFINE--------*/
|
|
#define PM_POWER_MODULE_NAME_MEM1 (POWER_MODULE_NAME_MEM1) //0
|
|
#define PM_POWER_MODULE_NAME_MEM2 (POWER_MODULE_NAME_MEM2) //1
|
|
#define PM_POWER_MODULE_NAME_MEM3 (POWER_MODULE_NAME_MEM3) //2
|
|
#define PM_POWER_MODULE_NAME_ENCP (POWER_MODULE_NAME_ENCP) //3
|
|
#define PM_POWER_MODULE_NAME_BAKP (POWER_MODULE_NAME_BAKP) //4
|
|
#define PM_POWER_MODULE_NAME_AHBP (POWER_MODULE_NAME_AHBP) //5
|
|
#define PM_POWER_MODULE_NAME_AUDP (POWER_MODULE_NAME_AUDP) //6
|
|
#define PM_POWER_MODULE_NAME_VIDP (POWER_MODULE_NAME_VIDP) //7
|
|
#define PM_POWER_MODULE_NAME_BTSP (POWER_MODULE_NAME_BTSP) //8
|
|
#define PM_POWER_MODULE_NAME_WIFIP_MAC (POWER_MODULE_NAME_WIFIP_MAC)//9
|
|
#define PM_POWER_MODULE_NAME_PHY (POWER_MODULE_NAME_WIFI_PHY) //10
|
|
#define PM_POWER_MODULE_NAME_MEM0 (POWER_MODULE_NAME_MEM0) //11
|
|
#define PM_POWER_MODULE_NAME_MEM4 (POWER_MODULE_NAME_MEM4) //12
|
|
#define PM_POWER_MODULE_NAME_OFDM (POWER_MODULE_NAME_OFDM) //13
|
|
#define PM_POWER_MODULE_NAME_TCM0_PGEN (POWER_MODULE_NAME_TCM0_PGEN)//14
|
|
#define PM_POWER_MODULE_NAME_ROM_PGEN (POWER_MODULE_NAME_ROM_PGEN) //15
|
|
#define PM_POWER_MODULE_NAME_TCM1_PGEN (POWER_MODULE_NAME_TCM1_PGEN)//16
|
|
#define PM_POWER_MODULE_NAME_CPU1 (POWER_MODULE_NAME_CPU1) //17
|
|
|
|
#define PM_POWER_MODULE_NAME_CPU2 (POWER_MODULE_NAME_CPU2) //18
|
|
|
|
#define PM_POWER_MODULE_NAME_APP (POWER_MODULE_NAME_APP) //19
|
|
|
|
#define PM_POWER_MODULE_NAME_NONE (POWER_MODULE_NAME_NONE)
|
|
|
|
/*----SUB POWER DOMAIN AUDP--------*/
|
|
#define PM_POWER_SUB_MODULE_NAME_AUDP_FFT (POWER_SUB_MODULE_NAME_AUDP_FFT)
|
|
#define PM_POWER_SUB_MODULE_NAME_AUDP_SBC (POWER_SUB_MODULE_NAME_AUDP_SBC)
|
|
#define PM_POWER_SUB_MODULE_NAME_AUDP_AUDIO (POWER_SUB_MODULE_NAME_AUDP_AUDIO)
|
|
#define PM_POWER_SUB_MODULE_NAME_AUDP_I2S (POWER_SUB_MODULE_NAME_AUDP_I2S)
|
|
/*----SUB POWER DOMAIN VIDP--------*/
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_DMA2D (POWER_SUB_MODULE_NAME_VIDP_DMA2D)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_YUVBUF (POWER_SUB_MODULE_NAME_VIDP_YUVBUF)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_JPEG_EN (POWER_SUB_MODULE_NAME_VIDP_JPEG_EN)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_JPEG_DE (POWER_SUB_MODULE_NAME_VIDP_JPEG_DE)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_LCD (POWER_SUB_MODULE_NAME_VIDP_LCD)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_ROTT (POWER_SUB_MODULE_NAME_VIDP_ROTT)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_SCAL0 (POWER_SUB_MODULE_NAME_VIDP_SCAL0)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_SCAL1 (POWER_SUB_MODULE_NAME_VIDP_SCAL1)
|
|
#define PM_POWER_SUB_MODULE_NAME_VIDP_H264 (POWER_SUB_MODULE_NAME_VIDP_H264)
|
|
/*----SUB POWER DOMAIN PHY--------*/
|
|
#define PM_POWER_SUB_MODULE_NAME_PHY_BT (POWER_SUB_MODULE_NAME_PHY_BT)
|
|
#define PM_POWER_SUB_MODULE_NAME_PHY_WIFI (POWER_SUB_MODULE_NAME_PHY_WIFI)
|
|
#define PM_POWER_SUB_MODULE_NAME_PHY_RF (POWER_SUB_MODULE_NAME_PHY_RF)
|
|
|
|
/*----SUB POWER DOMAIN AHB--------*/
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_CAN (POWER_SUB_MODULE_NAME_AHBP_CAN)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_QSPI (POWER_SUB_MODULE_NAME_AHBP_QSPI)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_USB (POWER_SUB_MODULE_NAME_AHBP_USB)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_PSRAM (POWER_SUB_MODULE_NAME_AHBP_PSRAM)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_QSPI1 (POWER_SUB_MODULE_NAME_AHBP_QSPI1)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_ENET (POWER_SUB_MODULE_NAME_AHBP_ENET)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_SCR (POWER_SUB_MODULE_NAME_AHBP_SCR)
|
|
#define PM_POWER_SUB_MODULE_NAME_AHBP_LIN (POWER_SUB_MODULE_NAME_AHBP_LIN)
|
|
/*----SUB POWER DOMAIN BAKP--------*/
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_TIMER1 (POWER_SUB_MODULE_NAME_BAKP_TIMER1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_UART1 (POWER_SUB_MODULE_NAME_BAKP_UART1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_UART2 (POWER_SUB_MODULE_NAME_BAKP_UART2)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_SPI1 (POWER_SUB_MODULE_NAME_BAKP_SPI1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_I2C0 (POWER_SUB_MODULE_NAME_BAKP_I2C0)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_I2C1 (POWER_SUB_MODULE_NAME_BAKP_I2C1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_SADC (POWER_SUB_MODULE_NAME_BAKP_SADC)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_PWM1 (POWER_SUB_MODULE_NAME_BAKP_PWM1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_PWM0 (POWER_SUB_MODULE_NAME_BAKP_PWM0)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_TRNG (POWER_SUB_MODULE_NAME_BAKP_TRNG)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_IRDA (POWER_SUB_MODULE_NAME_BAKP_IRDA)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_SDIO (POWER_SUB_MODULE_NAME_BAKP_SDIO)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_COMSEG (POWER_SUB_MODULE_NAME_BAKP_COMSEG)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_DMA0 (POWER_SUB_MODULE_NAME_BAKP_DMA0)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_DMA1 (POWER_SUB_MODULE_NAME_BAKP_DMA1)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_LA (POWER_SUB_MODULE_NAME_BAKP_LA)
|
|
#define PM_POWER_SUB_MODULE_NAME_BAKP_PM (POWER_SUB_MODULE_NAME_BAKP_PM)// used for PM control of bakp domain power on and off
|
|
|
|
/*---------------------------POWER DOMAIN MODUEL DEFINE END-------------------------------------*/
|
|
typedef enum
|
|
{
|
|
PM_CP1_AUTO_CTRL_DISABLE = 0,
|
|
PM_CP1_AUTO_CTRL_ENABLE = 1,
|
|
}pm_cp1_auto_ctrl_e;
|
|
|
|
typedef enum
|
|
{
|
|
PM_MEM_AUTO_CTRL_DISABLE = 0,
|
|
PM_MEM_AUTO_CTRL_ENABLE = 1,
|
|
}pm_mem_auto_ctrl_e;
|
|
|
|
typedef enum
|
|
{
|
|
GPIO_TRIGGER_INTERRUPE_LEVEL_LOW_ACTIVE = 0,
|
|
GPIO_TRIGGER_INTERRUPE_LEVEL_HIGH_ACTIVE,
|
|
GPIO_TRIGGER_INTERRUPE_EDGE_RISING,
|
|
GPIO_TRIGGER_INTERRUPE_EDGE_FALLING,
|
|
}gpio_trigger_interrupt_type_e;
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t gpio_id;
|
|
gpio_trigger_interrupt_type_e gpio_trigger_interrupt_type;
|
|
int_group_isr_t isr_callback;
|
|
uint32_t gpio_valid; //PARAM_DATA_VALID
|
|
}gpio_wakeup_param_t;
|
|
typedef struct
|
|
{
|
|
uint32_t period;
|
|
int_group_isr_t isr_callback;
|
|
uint32_t rtc_valid; //PARAM_DATA_VALID
|
|
}rtc_wakeup_param_t;
|
|
typedef enum
|
|
{
|
|
WIFI_WAKEUP = 1,
|
|
BT_WAKEUP,
|
|
}wifi_bt_wakeup_type_e;
|
|
typedef struct
|
|
{
|
|
wifi_bt_wakeup_type_e wifi_bt_wakeup;
|
|
uint32_t sleep_time;
|
|
int_group_isr_t isr_callback;
|
|
}system_wakeup_param_t;
|
|
typedef struct
|
|
{
|
|
int_group_isr_t isr_callback;
|
|
}usbplug_wakeup_param_t;
|
|
typedef struct
|
|
{
|
|
uint32_t touch_channel;
|
|
int_group_isr_t isr_callback;
|
|
}touch_wakeup_param_t;
|
|
typedef enum
|
|
{
|
|
PM_MODE_NORMAL_SLEEP = 0,
|
|
PM_MODE_LOW_VOLTAGE ,
|
|
PM_MODE_DEEP_SLEEP ,
|
|
PM_MODE_SUPER_DEEP_SLEEP ,
|
|
PM_MODE_DEFAULT
|
|
}pm_sleep_mode_e;
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
PM_SLEEP_MODULE_NAME_I2C1 = 0, // 0
|
|
PM_SLEEP_MODULE_NAME_SPI_1, // 1
|
|
PM_SLEEP_MODULE_NAME_UART1, // 2
|
|
PM_SLEEP_MODULE_NAME_PWM_1, // 3
|
|
PM_SLEEP_MODULE_NAME_TIMER_1, // 4
|
|
PM_SLEEP_MODULE_NAME_SARADC, // 5
|
|
PM_SLEEP_MODULE_NAME_AUDP, // 6
|
|
PM_SLEEP_MODULE_NAME_VIDP, // 7
|
|
PM_SLEEP_MODULE_NAME_BTSP, // 8
|
|
PM_SLEEP_MODULE_NAME_WIFIP_MAC,// 9
|
|
PM_SLEEP_MODULE_NAME_WIFI_PHY, // 10
|
|
PM_SLEEP_MODULE_NAME_TIMER_2, // 11
|
|
PM_SLEEP_MODULE_NAME_APP, // 12 //attention: the APP vote is for customer application using,other applications use the other votes
|
|
PM_SLEEP_MODULE_NAME_OTP, // 13
|
|
PM_SLEEP_MODULE_NAME_I2S_1, // 14
|
|
PM_SLEEP_MODULE_NAME_USB_1, // 15
|
|
PM_SLEEP_MODULE_NAME_CAN, // 16
|
|
PM_SLEEP_MODULE_NAME_PSRAM, // 17
|
|
PM_SLEEP_MODULE_NAME_QSPI_1, // 18
|
|
PM_SLEEP_MODULE_NAME_QSPI_2, // 19
|
|
PM_SLEEP_MODULE_NAME_SDIO, // 20
|
|
PM_SLEEP_MODULE_NAME_AUXS, // 21
|
|
PM_SLEEP_MODULE_NAME_LOG, // 22
|
|
PM_SLEEP_MODULE_NAME_AT, // 23
|
|
PM_SLEEP_MODULE_NAME_I2C2, // 24
|
|
PM_SLEEP_MODULE_NAME_UART2, // 25
|
|
PM_SLEEP_MODULE_NAME_UART3, // 26
|
|
PM_SLEEP_MODULE_NAME_WDG, // 27
|
|
PM_SLEEP_MODULE_NAME_TIMER_3, // 28
|
|
PM_SLEEP_MODULE_NAME_APP1, // 29
|
|
PM_SLEEP_MODULE_NAME_CPU1, // 30
|
|
PM_SLEEP_MODULE_NAME_APP3, // 31
|
|
/*Attention: if you add vote ,the following[ #define PM_ENTER_LOW_VOL_MODULES_CONFIG] also need add the vote*/
|
|
PM_SLEEP_MODULE_NAME_MAX
|
|
}pm_sleep_module_name_e;
|
|
typedef enum
|
|
{
|
|
PM_POWER_MODULE_STATE_ON = 0,
|
|
PM_POWER_MODULE_STATE_OFF,
|
|
PM_POWER_MODULE_STATE_NONE
|
|
}pm_power_module_state_e;
|
|
typedef enum
|
|
{
|
|
PM_MODULE_NAME_WIFI = 0,
|
|
PM_MODULE_NAME_BT,
|
|
PM_MODULE_NAME_NONE
|
|
}pm_module_name_e;
|
|
typedef enum
|
|
{
|
|
PM_LPO_SRC_DIVD = 0,//32K from 26m
|
|
PM_LPO_SRC_X32K, //extern 32k
|
|
PM_LPO_SRC_ROSC, //32K from ROSC
|
|
PM_LPO_SRC_DEFAULT //32K from ROSC
|
|
}pm_lpo_src_e;
|
|
typedef enum
|
|
{
|
|
PM_CLK_ID_I2C1 = 0, // 0
|
|
PM_CLK_ID_SPI_1, // 1
|
|
PM_CLK_ID_UART1, // 2
|
|
PM_CLK_ID_PWM_1, // 3
|
|
PM_CLK_ID_TIMER_1, // 4
|
|
PM_CLK_ID_SARADC, // 5
|
|
PM_CLK_ID_IRDA, // 6
|
|
PM_CLK_ID_EFUSE, // 7
|
|
PM_CLK_ID_I2C2, // 8
|
|
PM_CLK_ID_SPI_2, // 9
|
|
PM_CLK_ID_UART2, // 10
|
|
PM_CLK_ID_UART3, // 11
|
|
PM_CLK_ID_PWM_2, // 12
|
|
PM_CLK_ID_TIMER_2, // 13
|
|
PM_CLK_ID_TIMER_3, // 14
|
|
PM_CLK_ID_OTP, // 15
|
|
PM_CLK_ID_I2S_1, // 16
|
|
PM_CLK_ID_USB_1, // 17
|
|
PM_CLK_ID_CAN, // 18
|
|
PM_CLK_ID_PSRAM, // 19
|
|
PM_CLK_ID_QSPI_1, // 20
|
|
PM_CLK_ID_QSPI_2, // 21
|
|
PM_CLK_ID_SDIO, // 22
|
|
PM_CLK_ID_AUXS, // 23
|
|
PM_CLK_ID_BTDM, // 24
|
|
PM_CLK_ID_XVR, // 25
|
|
PM_CLK_ID_MAC, // 26
|
|
PM_CLK_ID_PHY, // 27
|
|
PM_CLK_ID_JPEG, // 28
|
|
PM_CLK_ID_DISP, // 29
|
|
PM_CLK_ID_AUDIO, // 30
|
|
PM_CLK_ID_WDG_CPU, // 31
|
|
|
|
PM_CLK_ID_NONE
|
|
}pm_dev_clk_e;
|
|
typedef enum
|
|
{
|
|
PM_CLK_CTRL_PWR_DOWN = 0,
|
|
PM_CLK_CTRL_PWR_UP,
|
|
}pm_dev_clk_pwr_e;
|
|
typedef enum
|
|
{
|
|
PM_DEV_ID_I2C1 = 0, // 0
|
|
PM_DEV_ID_SPI_1, // 1
|
|
PM_DEV_ID_UART1, // 2
|
|
PM_DEV_ID_WDG, // 3
|
|
PM_DEV_ID_TIMER_1, // 4
|
|
PM_DEV_ID_SARADC, // 5
|
|
PM_DEV_ID_IRDA, // 6
|
|
PM_DEV_ID_EFUSE, // 7
|
|
PM_DEV_ID_I2C2, // 8
|
|
PM_DEV_ID_SPI_2, // 9
|
|
PM_DEV_ID_UART2, // 10
|
|
PM_DEV_ID_UART3, // 11
|
|
PM_DEV_ID_PWM_2, // 12
|
|
PM_DEV_ID_TIMER_2, // 13
|
|
PM_DEV_ID_TIMER_3, // 14
|
|
PM_DEV_ID_TOUCH, // 15
|
|
PM_DEV_ID_I2S_1, // 16
|
|
PM_DEV_ID_USB_1, // 17
|
|
PM_DEV_ID_CAN, // 18
|
|
PM_DEV_ID_PSRAM, // 19
|
|
PM_DEV_ID_QSPI_1, // 20
|
|
PM_DEV_ID_QSPI_2, // 21
|
|
PM_DEV_ID_SDIO, // 22
|
|
PM_DEV_ID_AUXS, // 23
|
|
PM_DEV_ID_BTDM, // 24
|
|
PM_DEV_ID_WPAS, // 25
|
|
PM_DEV_ID_MAC, // 26
|
|
PM_DEV_ID_PHY, // 27
|
|
PM_DEV_ID_JPEG, // 28
|
|
PM_DEV_ID_DISP, // 29
|
|
PM_DEV_ID_AUDIO, // 30
|
|
PM_DEV_ID_RTC, // 31
|
|
PM_DEV_ID_GPIO, // 32
|
|
PM_DEV_ID_DECODER, // 33
|
|
PM_DEV_ID_LIN, // 34
|
|
PM_DEV_ID_PWM_1, // 35
|
|
PM_DEV_ID_OTP_AHB, // 36
|
|
PM_DEV_ID_OTP_APB, // 37
|
|
PM_DEV_ID_SHANHAI, // 38
|
|
PM_DEV_ID_KEY, // 39
|
|
|
|
PM_DEV_ID_DEFAULT, // 40 it is used by pm module set default cpu frequency
|
|
|
|
PM_DEV_ID_MAX
|
|
}pm_dev_id_e;
|
|
typedef enum
|
|
{
|
|
PM_CPU_FRQ_26M = 0, // 0:CPU:26M,BUS:26M
|
|
PM_CPU_FRQ_60M, // 1:CPU:60M,BUS:60M
|
|
PM_CPU_FRQ_80M, // 2:CPU:80M,BUS:80M
|
|
PM_CPU_FRQ_120M, // 3:CPU:120M,BUS:120M
|
|
PM_CPU_FRQ_240M, // 4:CPU:240M,BUS:120M
|
|
PM_CPU_FRQ_320M, // 5:CPU:320M,BUS:160M
|
|
PM_CPU_FRQ_480M, // 6:CPU:480M,BUS:240M
|
|
PM_CPU_FRQ_DEFAULT // default cpu frequency which control by pm module
|
|
}pm_cpu_freq_e;
|
|
typedef enum
|
|
{
|
|
PM_ROSC_CALI_AUTO = 0, // 0:auto calibration
|
|
PM_ROSC_CALI_MANUAL, // 1:manual calibration
|
|
PM_ROSC_CALI_STOP, // 2:stop calibration
|
|
}pm_rosc_cali_mode_e;
|
|
typedef int (*pm_cb)(uint64_t sleep_time, void *args);
|
|
typedef struct {
|
|
pm_cb cb;
|
|
void *args;
|
|
} pm_cb_conf_t;
|
|
|
|
typedef struct {
|
|
pm_dev_id_e id;
|
|
pm_cb_conf_t cfg;
|
|
} pm_sleep_cb_t;
|
|
|
|
typedef enum
|
|
{
|
|
PM_CB_PRIORITY_0 = 0,
|
|
PM_CB_PRIORITY_1,
|
|
PM_CB_PRIORITY_2,
|
|
PM_CB_PRIORITY_3,
|
|
PM_CB_PRIORITY_MAX,
|
|
} pm_cb_priority_e;
|
|
|
|
typedef enum
|
|
{
|
|
PM_32K_MODULE_BT = 0,
|
|
PM_32K_MODULE_WIFI = 1,
|
|
PM_32K_MODULE_MAX,
|
|
}pm_cb_module_e;
|
|
|
|
typedef enum
|
|
{
|
|
PM_32K_STEP_BEGIN = 0,
|
|
PM_32K_STEP_FINISH = 1,
|
|
}pm_sw_step_e; // Indicate switch status
|
|
|
|
typedef int (*pm_cb_notify)(void);
|
|
typedef int (*pm_cb_extern32k)(pm_sw_step_e sw_step, pm_lpo_src_e lpo_src, pm_cb_notify cb);
|
|
typedef struct {
|
|
pm_cb_module_e cb_module;
|
|
pm_cb_extern32k cb_func;
|
|
} pm_cb_extern32k_cfg_t;
|
|
|
|
typedef enum
|
|
{
|
|
PM_LOW_VOL_VOLTAGE_0_6 = 0, // 0.6V
|
|
PM_LOW_VOL_VOLTAGE_0_7, // 0.7V
|
|
PM_LOW_VOL_VOLTAGE_0_8, // 0.8V
|
|
PM_LOW_VOL_VOLTAGE_0_9, // 0.9V
|
|
PM_LOW_VOL_VOLTAGE_1_0, // 1.0V
|
|
PM_LOW_VOL_VOLTAGE_1_1, // 1.1V
|
|
PM_LOW_VOL_VOLTAGE_1_2, // 1.2V
|
|
PM_LOW_VOL_VOLTAGE_1_3 // 1.3V
|
|
}pm_low_vol_voltage_e;
|
|
|
|
|
|
/*=====================CONFIG SECTION START====================*/
|
|
/*enter low voltage ,require sleep module config*/
|
|
#define PM_ENTER_LOW_VOL_MODULES_CONFIG \
|
|
{\
|
|
PM_SLEEP_MODULE_NAME_I2C1,\
|
|
PM_SLEEP_MODULE_NAME_SPI_1,\
|
|
PM_SLEEP_MODULE_NAME_UART1,\
|
|
PM_SLEEP_MODULE_NAME_PWM_1,\
|
|
PM_SLEEP_MODULE_NAME_TIMER_1,\
|
|
PM_SLEEP_MODULE_NAME_SARADC,\
|
|
PM_SLEEP_MODULE_NAME_AUDP,\
|
|
PM_SLEEP_MODULE_NAME_VIDP,\
|
|
PM_SLEEP_MODULE_NAME_BTSP,\
|
|
PM_SLEEP_MODULE_NAME_WIFIP_MAC,\
|
|
PM_SLEEP_MODULE_NAME_WIFI_PHY,\
|
|
PM_SLEEP_MODULE_NAME_TIMER_2,\
|
|
PM_SLEEP_MODULE_NAME_APP,\
|
|
PM_SLEEP_MODULE_NAME_OTP,\
|
|
PM_SLEEP_MODULE_NAME_I2S_1,\
|
|
PM_SLEEP_MODULE_NAME_USB_1,\
|
|
PM_SLEEP_MODULE_NAME_CAN,\
|
|
PM_SLEEP_MODULE_NAME_PSRAM,\
|
|
PM_SLEEP_MODULE_NAME_QSPI_1,\
|
|
PM_SLEEP_MODULE_NAME_QSPI_2,\
|
|
PM_SLEEP_MODULE_NAME_SDIO,\
|
|
PM_SLEEP_MODULE_NAME_AUXS,\
|
|
PM_SLEEP_MODULE_NAME_LOG,\
|
|
PM_SLEEP_MODULE_NAME_AT,\
|
|
PM_SLEEP_MODULE_NAME_I2C2,\
|
|
PM_SLEEP_MODULE_NAME_UART2,\
|
|
PM_SLEEP_MODULE_NAME_UART3,\
|
|
PM_SLEEP_MODULE_NAME_WDG,\
|
|
PM_SLEEP_MODULE_NAME_TIMER_3,\
|
|
PM_SLEEP_MODULE_NAME_APP1,\
|
|
PM_SLEEP_MODULE_NAME_CPU1,\
|
|
PM_SLEEP_MODULE_NAME_APP3,\
|
|
}
|
|
|
|
/*enter deep sleep ,require sleep module config*/
|
|
#define PM_ENTER_DEEP_SLEEP_MODULES_CONFIG \
|
|
{\
|
|
PM_POWER_MODULE_NAME_BTSP,\
|
|
PM_POWER_MODULE_NAME_WIFIP_MAC,\
|
|
PM_POWER_MODULE_NAME_AUDP,\
|
|
PM_POWER_MODULE_NAME_VIDP,\
|
|
}
|
|
|
|
/*config the voltage at low vol*/
|
|
#define PM_VOLTAGE_OF_LOW_VOL (PM_LOW_VOL_VOLTAGE_0_6)
|
|
|
|
/*config the lpo source*/
|
|
#define PM_LPO_SOURCE (PM_LPO_SRC_DIVD)
|
|
|
|
/*config whether auto vote*/
|
|
#define PM_APP_AUTO_VOTE_CTRL (PM_APP_AUTO_VOTE_ENABLE)
|
|
|
|
/*config cpu1 auto power down according media*/
|
|
#define PM_CP1_AUTO_POWER_DOWN_CTRL (PM_CP1_AUTO_POWER_DOWN_ENABLE)
|
|
|
|
/*=====================CONFIG SECTION END=======================*/
|
|
/**
|
|
* @brief clear the lv sleep state
|
|
*
|
|
* clear the lv sleep state
|
|
*
|
|
* @attention
|
|
* - This API is used to clear the lv sleep state
|
|
*
|
|
* @param
|
|
* -module:module name
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_module_lv_sleep_state_clear(pm_dev_id_e module);
|
|
/**
|
|
* @brief set the lv sleep state
|
|
*
|
|
* set the lv sleep state
|
|
*
|
|
* @attention
|
|
* - This API is used to set the lv sleep state
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
__attribute__((section(".itcm_sec_code"))) bk_err_t bk_pm_module_lv_sleep_state_set();
|
|
/**
|
|
* @brief get the lv sleep state
|
|
*
|
|
* get the lv sleep state
|
|
*
|
|
* @attention
|
|
* - This API is used to get the lv sleep state
|
|
*
|
|
* @param
|
|
* -module:module name
|
|
* @return
|
|
* - module_lv_sleep_state
|
|
*/
|
|
uint64_t bk_pm_module_lv_sleep_state_get(pm_dev_id_e module);
|
|
/**
|
|
* @brief get wakeup source from deepsleep
|
|
*
|
|
* get wakeup source from deepsleep
|
|
*
|
|
* @attention
|
|
* - This API is used to get wakeup source from deepsleep
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - wakeup source(0x0:WAKEUP SOURCE OF GPIO;0x1:WAKEUP SOURCE OF RTC;0x2:WAKEUP SOURCE OF WIFI OR BT;0x4:WAKEUP SOURCE OF TOUCHED;0x5:NONE WAKEUP_SOURCE)
|
|
*/
|
|
pm_wakeup_source_e bk_pm_deep_sleep_wakeup_source_get();
|
|
/**
|
|
* @brief clear wakeup source of exiting low voltage process
|
|
*
|
|
* clear wakeup source of exit low voltage
|
|
*
|
|
* @attention
|
|
* - This API is used to clear wakeup source of exiting low voltage process
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_exit_low_vol_wakeup_source_clear();
|
|
/**
|
|
* @brief set and save wakeup source of exiting low voltage
|
|
*
|
|
* set and save wakeup source of exiting low voltage
|
|
*
|
|
* @attention
|
|
* - This API is used to set and save wakeup source of exiting low voltage
|
|
*
|
|
* @param
|
|
* -0x0:close cp1 auto power down feature ;0x1:open cp1 auto power down feature
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_exit_low_vol_wakeup_source_set();
|
|
/**
|
|
* @brief get wakeup source of exiting low voltage
|
|
*
|
|
* get wakeup source of exiting low voltage
|
|
*
|
|
* @attention
|
|
* - This API is used to get wakeup source of exiting low voltage
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - wakeup source(0x0:WAKEUP SOURCE OF GPIO;0x1:WAKEUP SOURCE OF RTC;0x2:WAKEUP SOURCE OF WIFI OR BT;0x4:WAKEUP SOURCE OF TOUCHED;0x5:NONE WAKEUP_SOURCE)
|
|
*/
|
|
pm_wakeup_source_e bk_pm_exit_low_vol_wakeup_source_get();
|
|
/**
|
|
* @brief get memory auto power down flag
|
|
*
|
|
* get memory auto power down flag
|
|
*
|
|
* @attention
|
|
* - This API is used to get memory auto power down flag
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - memory auto power down flag(PM_MEM_AUTO_CTRL_DISABLE:disable memory auto power down feature ;PM_MEM_AUTO_CTRL_ENABLE:enable memory auto power down feature)
|
|
*/
|
|
pm_mem_auto_ctrl_e bk_pm_mem_auto_power_down_state_get();
|
|
/**
|
|
* @brief memory auto power down flag set
|
|
*
|
|
* set memory auto power down flag
|
|
*
|
|
* @attention
|
|
* - This API is used to set memory auto power down flag
|
|
*
|
|
* @param
|
|
* -PM_MEM_AUTO_CTRL_DISABLE:disable memory auto power down feature ;PM_MEM_AUTO_CTRL_ENABLE:enable memory auto power down feature
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_mem_auto_power_down_state_set(pm_mem_auto_ctrl_e value);
|
|
|
|
/**
|
|
* @brief get cp1 auto power down flag
|
|
*
|
|
* get cp1 auto power down flag
|
|
*
|
|
* @attention
|
|
* - This API is used to get cp1 auto power down flag
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - cp1 auto power down flag(0x0:close cp1 auto power down feature ;0x1:open cp1 auto power down feature)
|
|
*/
|
|
uint32_t bk_pm_cp1_auto_power_down_state_get();
|
|
/**
|
|
* @brief cp1 auto power down flag set
|
|
*
|
|
* set cp1 auto power down flag
|
|
*
|
|
* @attention
|
|
* - This API is used to set cp1 auto power down flag
|
|
*
|
|
* @param
|
|
* -0x0:close cp1 auto power down feature ;0x1:open cp1 auto power down feature
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_cp1_auto_power_down_state_set(uint32_t value);
|
|
|
|
/**
|
|
* @brief get cpu1 boot flag
|
|
*
|
|
* get cpu1 boot flag(ready or not ready)
|
|
*
|
|
* @attention
|
|
* - This API is used to get cpu1 boot flag(ready or not ready)
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the flag of cpu1 boot flag (0x0:cpu1 not boot ready;0x1:cpu1 boot ready)
|
|
*/
|
|
uint32_t bk_pm_cp1_boot_flag_get();
|
|
/**
|
|
* @brief rosc calibration
|
|
*
|
|
* rosc calibration
|
|
*
|
|
* @attention
|
|
* - This API is used to calibrate rosc
|
|
*
|
|
* @param
|
|
* -rosc_cali_mode:0x1:rosc calibrate manual; 0x0:rosc calibrate auto
|
|
* -cali_interval: 0x0:0.25s;0x1:0.5s;0x2:0.75s;0x3:1.0s;0x4:1.25s;0x5:1.5s;0x6:1.75s;0x7:2s;
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_rosc_calibration(pm_rosc_cali_mode_e rosc_cali_mode, uint32_t cali_interval);
|
|
/**
|
|
* @brief using the gpio to control the external ldo
|
|
*
|
|
* control the external ldo
|
|
*
|
|
* @attention
|
|
* - This API is used to use the specific gpio(define in GPIO_CTRL_LDO_OUTPUT_HIGH_MAP or GPIO_CTRL_LDO_OUTPUT_LOW_MAP in gpio_map.h) control the external ldo
|
|
*
|
|
* @param
|
|
* -value:0x1:output high; 0x0:output low
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_external_ldo_ctrl(uint32_t value);
|
|
/**
|
|
* @brief get the state of phy calibration
|
|
*
|
|
* get the state of phy calibration
|
|
*
|
|
* @attention
|
|
* - This API is used to get the state of phy calibration
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the state of phy calibration(0x1:have calibration;0x0:not calibration)
|
|
*/
|
|
uint32_t bk_pm_phy_cali_state_get();
|
|
/**
|
|
* @brief get the flag of phy reinit part1
|
|
*
|
|
* get the flag of phy reinit part1
|
|
*
|
|
* @attention
|
|
* - This API is used to get the flag of phy reinit part1
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the flag of phy reinit part1 (True:have part1;false:not do it)
|
|
*/
|
|
bool bk_pm_phy_reinit_flag_get();
|
|
/**
|
|
* @brief clear the flag of phy reinit part1
|
|
*
|
|
* clear the flag of phy reinit part1
|
|
*
|
|
* @attention
|
|
* - This API is used to clear the flag of phy reinit part1
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* -void
|
|
*/
|
|
void bk_pm_phy_reinit_flag_clear();
|
|
/**
|
|
* @brief get the consume time from lowvol wakeup
|
|
*
|
|
* the consume time from lowvol wakeup
|
|
*
|
|
* @attention
|
|
* - This API is used to get the consume time from lowvol wakeup
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the consume time of wakeup from lowvol
|
|
*/
|
|
uint32_t bk_pm_wakeup_from_lowvol_consume_time_get();
|
|
/**
|
|
* @brief register sleep mode(low voltage and deepsleep) config
|
|
*
|
|
* register sleep config(include callback function and parameter)
|
|
*
|
|
* @attention
|
|
* - This API is used to register low voltage and deepsleep config
|
|
*
|
|
* @param
|
|
* -sleep_mode:low voltage or deepsleep mode
|
|
* -dev_id:dev id
|
|
* -enter_config:enter sleep config
|
|
* -exit_config:exit sleep config
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_sleep_register_cb(pm_sleep_mode_e sleep_mode,pm_dev_id_e dev_id,pm_cb_conf_t *enter_config, pm_cb_conf_t *exit_config);
|
|
/**
|
|
* @brief unregister sleep mode(low voltage and deepsleep) config
|
|
*
|
|
* unregister sleep config(include callback function and parameter)
|
|
*
|
|
* @attention
|
|
* - This API is used to unregister low voltage and deepsleep config
|
|
*
|
|
* @param
|
|
* -sleep_mode:low voltage or deepsleep mode
|
|
* -dev_id:dev id
|
|
* -enter_cb:whether unregister the enter call back
|
|
* -exit_cb:whether unregister the exit call back
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_sleep_unregister_cb(pm_sleep_mode_e sleep_mode,pm_dev_id_e dev_id,bool enter_cb, bool exit_cb);
|
|
/**
|
|
* @brief register light sleep config
|
|
*
|
|
* register light sleep config(include callback function and parameter)
|
|
*
|
|
* @attention
|
|
* - This API is used to register light sleep config
|
|
*
|
|
* @param
|
|
* -enter_config:enter light sleep config
|
|
* -exit_config:exit light sleep config
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_light_sleep_register_cb(pm_cb_conf_t *enter_config, pm_cb_conf_t *exit_config);
|
|
/**
|
|
* @brief unregister light sleep callback
|
|
*
|
|
* unregister light sleep callback(enter light sleep callback and exit light sleep callback)
|
|
*
|
|
* @attention
|
|
* - This API is used to unregister light sleep callback
|
|
*
|
|
* @param
|
|
* -enter_cb:whether unregister the enter call back
|
|
* -exit_cb:whether unregister the exit call back
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_light_sleep_unregister_cb(bool enter_cb, bool exit_cb);
|
|
/**
|
|
* @brief get power domain of module state
|
|
*
|
|
* get the power domain state
|
|
*
|
|
* @attention
|
|
* - This API is used to get the power domain state
|
|
*
|
|
* @param
|
|
* -module:module name
|
|
* @return
|
|
* -the state of power domain state
|
|
*
|
|
*/
|
|
int32 bk_pm_module_power_state_get(pm_power_module_name_e module);
|
|
/**
|
|
* @brief get the cpu frequency of the module vote
|
|
*
|
|
* get the module voting cpu frequency
|
|
*
|
|
* @attention
|
|
* - This API is used to get the module voting cpu frequency
|
|
*
|
|
* @param
|
|
* -module:module id
|
|
* @return
|
|
* - the cpu frequency of the module vote
|
|
*
|
|
*/
|
|
pm_cpu_freq_e bk_pm_module_current_cpu_freq_get(pm_dev_id_e module);
|
|
/**
|
|
* @brief get the current max and used cpu frequency
|
|
*
|
|
* select the cpu frequency
|
|
*
|
|
* @attention
|
|
* - This API is used to get the current max and used cpu frequency
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - get the current max and used cpu frequency
|
|
*
|
|
*/
|
|
pm_cpu_freq_e bk_pm_current_max_cpu_freq_get();
|
|
/**
|
|
* @brief vote cpu frequency
|
|
*
|
|
* select the cpu frequency
|
|
*
|
|
* @attention
|
|
* - This API is used to vote ,then select the cpu frequency
|
|
*
|
|
* @param
|
|
* -module:module id;cpu_freq:cpu frequency(320M,240M,120M,26M)
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_module_vote_cpu_freq(pm_dev_id_e module,pm_cpu_freq_e cpu_freq);
|
|
/**
|
|
* @brief clock ctrl
|
|
*
|
|
* enable or disable dev clock
|
|
*
|
|
* @attention
|
|
* - This API is used to enable or disable dev clock
|
|
*
|
|
* @param
|
|
* -module:device id;clock_state:PM_CLK_CTRL_PWR_DOWN or PM_CLK_CTRL_PWR_DOWN
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_clock_ctrl(pm_dev_clk_e module,pm_dev_clk_pwr_e clock_state);
|
|
/**
|
|
* @brief lp voltage set
|
|
*
|
|
* set the lp voltage
|
|
*
|
|
* @attention
|
|
* - This API is used to set lp voltage when enter low voltage
|
|
*
|
|
* @param
|
|
* -uint32_t:0x0:0.6v;0x1:0.7v;0x2:0.8v;0x3:0.9v;0x4:1.0v;0x5:1.1v;0x6:1.2v;0x7:1.3v;
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_lp_vol_set(uint32_t lp_vol);
|
|
|
|
/**
|
|
* @brief lp voltage get
|
|
*
|
|
* get the lpo voltage
|
|
*
|
|
* @attention
|
|
* - This API is used to get lpo voltage value
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the lp voltage value
|
|
*
|
|
*/
|
|
uint32_t bk_pm_lp_vol_get();
|
|
|
|
/**
|
|
* @brief rf tx voltage set
|
|
*
|
|
* set the tx voltage of RF
|
|
*
|
|
* @attention
|
|
* - This API is used to set tx voltage of RF
|
|
*
|
|
* @param
|
|
* -uint32_t:0x0:1.25v;0x1:1.3v;0x2:1.35v;0x3:1.4v;0x4:1.45v;0x5:1.5v;0x6:1.55v;0x7:1.6v;
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_rf_tx_vol_set(uint32_t tx_vol);
|
|
|
|
/**
|
|
* @brief rf tx voltage get
|
|
*
|
|
* get the tx voltage of RF
|
|
*
|
|
* @attention
|
|
* - This API is used to get tx voltage value of RF
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the tx voltage value
|
|
*
|
|
*/
|
|
uint32_t bk_pm_rf_tx_vol_get();
|
|
|
|
/**
|
|
* @brief rf rx voltage set
|
|
*
|
|
* set the rx voltage of RF
|
|
*
|
|
* @attention
|
|
* - This API is used to set rx voltage of RF
|
|
*
|
|
* @param
|
|
* -uint32_t:0x0:1.25v;0x1:1.3v;0x2:1.35v;0x3:1.4v;0x4:1.45v;0x5:1.5v;0x6:1.55v;0x7:1.6v;
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t bk_pm_rf_rx_vol_set(uint32_t rx_vol);
|
|
|
|
/**
|
|
* @brief rf rx voltage get
|
|
*
|
|
* get the rx voltage of RF
|
|
*
|
|
* @attention
|
|
* - This API is used to get rx voltage value of RF
|
|
*
|
|
* @param
|
|
* -void
|
|
* @return
|
|
* - the rx voltage value
|
|
*
|
|
*/
|
|
uint32_t bk_pm_rf_rx_vol_get();
|
|
|
|
/**
|
|
* @brief lpo source set
|
|
*
|
|
* set the lpo source
|
|
*
|
|
* @attention
|
|
* - This API is used to select 32k source when enter low voltage and deepsleep
|
|
*
|
|
* @param
|
|
* -lpo_src:0x0:32K from 26m;0x1:32K from 26m;0x2:32K from ROSC;0x3:32K from ROSC
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_lpo_src_set(pm_lpo_src_e lpo_src);
|
|
|
|
/**
|
|
* @brief lpo source get
|
|
*
|
|
* get the lpo source
|
|
*
|
|
* @attention
|
|
* - This API is used to get 32k lpo source
|
|
*
|
|
* @param
|
|
* void
|
|
* @return
|
|
* -lpo_src:0x0:32K from 26m;0x1:32K from 26m;0x2:32K from ROSC;0x3:32K from ROSC
|
|
*
|
|
*/
|
|
pm_lpo_src_e bk_pm_lpo_src_get();
|
|
/**
|
|
* @brief mcu pm ctrl
|
|
*
|
|
* enabel and disable the mcu power manage
|
|
*
|
|
* @attention
|
|
* - This API is used to enabel and disable the mcu power manage
|
|
*
|
|
* @param
|
|
* -power_state:0x0:enable the mcu power manage;0x1:disable the mcu power manage
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_mcu_pm_ctrl(uint32_t power_state);
|
|
|
|
/**
|
|
* @brief get the mcu power feature state
|
|
*
|
|
* get the mcu power feature state
|
|
*
|
|
* @attention
|
|
*-This API is used to get the mcu power manage feature state(open or close)
|
|
*
|
|
* @param
|
|
* none
|
|
* @return
|
|
*-mcu power manage state(0x0:enable the mcu power manage;0x1:disable the mcu power manage)
|
|
*
|
|
*/
|
|
uint32_t bk_pm_mcu_pm_state_get();
|
|
|
|
/**
|
|
* @brief set sleep mode
|
|
*
|
|
* set sleep mode.
|
|
*
|
|
* @attention
|
|
* - This API set sleep mode
|
|
*
|
|
* @param sleep mode:0x0:NORMAL_SLEEP;0x1:LOW_VOLTAGE;0x2:DEEP_SLEEP;0x3:DEFAULT(if it meet low voltage,enter low voltage,otherwise enter normal sleep);
|
|
*
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_sleep_mode_set(pm_sleep_mode_e sleep_mode);
|
|
|
|
/**
|
|
* @brief set wakeup source
|
|
*
|
|
* set wakeup source(eg.rtc,gpio)
|
|
*
|
|
* @attention
|
|
* - This API set wakeup source,wifi and bt themselves not need set wakup source when in volatage
|
|
*
|
|
* @param
|
|
* -wakeup_source:wake up source
|
|
* -source_param: the wakeup source parameter
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_wakeup_source_set(pm_wakeup_source_e wakeup_source, void* source_param);
|
|
|
|
/**
|
|
* @brief module vote sleep ctrl
|
|
*
|
|
* other module tell pm module, they have entered sleep.(eg.wifi or bt enter sleep,then call the function ,tell pm it have entered sleep)
|
|
*
|
|
* @attention
|
|
* - This API is used by wifi or bt... let pm module know them(wifi or bt...) enter sleep or exit sleep
|
|
* - if all the specific module enter sleep, the mcu will enter low voltage
|
|
*
|
|
* @param
|
|
* -module:module name
|
|
* -sleep_state:0x1:enter sleep;0x0:exit sleep
|
|
* -sleep_time: sleep time
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_module_vote_sleep_ctrl(pm_sleep_module_name_e module,uint32_t sleep_state,uint32_t sleep_time);
|
|
|
|
/**
|
|
* @brief pm module vote power ctrl
|
|
*
|
|
* ther module tell pm module, they can enter power on or power off
|
|
*
|
|
* @attention
|
|
* - This API is used for the module power on and power off.
|
|
* - if all the specific module power off, the mcu will enter deep sleep
|
|
* @param
|
|
* -module:module name
|
|
* -power_state:0x1:power off;0x0:power on
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_module_vote_power_ctrl(pm_power_module_name_e module,pm_power_module_state_e power_state);
|
|
|
|
/**
|
|
* @brief pm suppress ticks and sleep
|
|
*
|
|
* when the rtos enter idle task and sleep time > 2*(time per tick),it will call the function enter power manager
|
|
*
|
|
* @attention
|
|
* - This API is used for power manager.
|
|
*
|
|
* @param
|
|
* -sleep_ticks:sleep time using tick unit
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*/
|
|
bk_err_t bk_pm_suppress_ticks_and_sleep(uint32_t sleep_ticks);
|
|
/**
|
|
* @brief enter sleep
|
|
*
|
|
* the function is for adapting harmony os
|
|
*
|
|
* @attention
|
|
* - This API is used for power manager.
|
|
*
|
|
* @param
|
|
* - void
|
|
* @return
|
|
* - void
|
|
*
|
|
*/
|
|
void bk_pm_enter_sleep();
|
|
/**
|
|
* @brief sleep vote init
|
|
*
|
|
* the function is for init the enter low voltage sleep vote
|
|
*
|
|
* @attention
|
|
* - This API is used for init the enter low voltage sleep vote
|
|
*
|
|
* @param
|
|
* - void
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
static inline bk_err_t pm_sleep_vote_init()
|
|
{
|
|
uint32_t i = 0;
|
|
pm_sleep_module_name_e enter_low_vol_modules[] = PM_ENTER_LOW_VOL_MODULES_CONFIG;
|
|
|
|
for(i=0;i<sizeof(enter_low_vol_modules)/sizeof(pm_sleep_module_name_e);i++)
|
|
{
|
|
if((enter_low_vol_modules[i] == PM_SLEEP_MODULE_NAME_BTSP)||(enter_low_vol_modules[i] == PM_SLEEP_MODULE_NAME_WIFIP_MAC)||(enter_low_vol_modules[i] == PM_SLEEP_MODULE_NAME_APP))
|
|
{
|
|
continue;
|
|
}
|
|
bk_pm_module_vote_sleep_ctrl(enter_low_vol_modules[i],0x1,0);
|
|
}
|
|
|
|
return BK_OK;
|
|
}
|
|
/**
|
|
* @brief 32k source switch
|
|
*
|
|
* When the external 32k clock source is enabled, this api used to switch the 32k clock source
|
|
*
|
|
* @param
|
|
* - pm_lpo_src_e taget 32k clock source
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t pm_clk_32k_source_switch(pm_lpo_src_e lpo_src);
|
|
/**
|
|
* @brief register callback function
|
|
*
|
|
* BT WIFI module registered callback function, used to switch synchronization when switching clock source
|
|
*
|
|
* @param
|
|
* - pm_cb_extern32k_cfg_t Structure pointer
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t pm_extern32k_register_cb(pm_cb_extern32k_cfg_t *cfg);
|
|
/**
|
|
* @brief unregister callback function
|
|
*
|
|
* @param
|
|
* - pm_cb_extern32k_cfg_t Structure pointer
|
|
* @return
|
|
* - BK_OK: succeed
|
|
* - others: other errors.
|
|
*
|
|
*/
|
|
bk_err_t pm_extern32k_unregister_cb(pm_cb_extern32k_cfg_t *cfg);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|