Files
banban/ql-bootloader/common/inc/ql_boot_power.h

263 lines
6.4 KiB
C

/**
******************************************************************************
* @file ql_boot_gpio.h
* @author somer.zhang
* @version V1.0.0
* @date 2020/05/27
* @brief This file contains the power functions's declaration
******************************************************************************
**/
#ifndef __QL_BOOT_POWER_H__
#define __QL_BOOT_POWER_H__
#ifdef __cplusplus
extern "C" {
#endif
//forrest.liu@20201201 add from R01_b04 newest change
//#define QUEC_BOOT_BAT_CHARGE
//#define QUEC_BOOT_PWRKEY_CHECK
//#define QUEC_BOOT_VBUS_VOLT_CHECK
//#define QUEC_BOOT_NTC_TMP
//#define QUEC_BOOT_GET_POWERUP_REASON
#define NINGBO_RONLY_DATA_CHG_OK (0x01<<3)
#define PMIC_813_A1 0x31
#define PMIC_813_A2 0x32
#define PMIC_813_A3 0x3B
/* Timer0_0 is configured to free run @1MHz from BootROM. */
#define APBTIMER0_CNT_REG 0xD4014090
#define APBTIMER0_EN_REG 0xD4014000
typedef enum QL_POWERUP_REASON_ENUM
{
QL_POWERUP_NO_REASON = 0,
QL_POWERUP_PWRKEY,
QL_POWERUP_RESET,
QL_POWERUP_VBAT,
QL_POWERUP_RTC,
QL_POWERUP_FAULT,
QL_POWERUP_VBUS,
}QL_POWERUP_REASON_E;
typedef enum QL_CHARGER_STATUS_ENUM
{
QL_CHARGER_SHUTDOWN = 0,
QL_CHARGER_CHECK,
QL_CHARGER_TRICKLE,
QL_CHARGER_PRE,
QL_CHARGER_CC,
QL_CHARGER_CV,
QL_CHARGER_TER,
QL_CHARGER_FAULT,
}QL_CHARGER_STATUS_E;
typedef enum QL_PRE_CHG_CURRENT_ENUM
{
QL_PRE_CHG_CUR_75MA,
QL_PRE_CHG_CUR_50MA,
QL_PRE_CHG_CUR_100MA,
QL_PRE_CHG_CUR_150MA,
QL_PRE_CHG_CUR_MAX = QL_PRE_CHG_CUR_150MA
}QL_PRE_CHG_CURRENT_E;
typedef enum QL_CC_CHG_CURRENT_ENUM
{
QL_CC_CHG_CUR_100MA,
QL_CC_CHG_CUR_200MA,
QL_CC_CHG_CUR_300MA,
QL_CC_CHG_CUR_400MA,
QL_CC_CHG_CUR_450MA,
QL_CC_CHG_CUR_500MA,
QL_CC_CHG_CUR_550MA,
QL_CC_CHG_CUR_600MA,
QL_CC_CHG_CUR_650MA,
QL_CC_CHG_CUR_700MA,
QL_CC_CHG_CUR_750MA,
QL_CC_CHG_CUR_800MA,
QL_CC_CHG_CUR_850MA,
QL_CC_CHG_CUR_900MA,
QL_CC_CHG_CUR_950MA,
QL_CC_CHG_CUR_1000MA,
QL_CC_CHG_CUR_MAX = QL_CC_CHG_CUR_1000MA
}QL_CC_CHG_CURRENT_E;
typedef enum QL_TERM_CHG_CURRENT_ENUM
{
QL_TERM_CHG_CUR_50MA,
QL_TERM_CHG_CUR_25MA,
QL_TERM_CHG_CUR_75MA,
QL_TERM_CHG_CUR_100MA,
QL_TERM_CHG_CUR_MAX = QL_TERM_CHG_CUR_100MA
}QL_TERM_CHG_CURRENT_E;
typedef enum QL_PRE_CHG_TIME_ENUM
{
QL_PRE_CHG_MINUTE24,
QL_PRE_CHG_MINUTE36,
QL_PRE_CHG_MINUTE48,
QL_PRE_CHG_MINUTE60,
QL_PRE_CHG_MINUTE_MAX = QL_PRE_CHG_MINUTE60
}QL_PRE_CHG_TIME_E;
typedef enum QL_TRICKLE_CHG_TIME_ENUM
{
QL_TRICKLE_CHG_MINUTE6,
QL_TRICKLE_CHG_MINUTE9,
QL_TRICKLE_CHG_MINUTE12,
QL_TRICKLE_CHG_MINUTE15,
QL_TRICKLE_CHG_MINUTE_MAX = QL_TRICKLE_CHG_MINUTE15
}QL_TRICKLE_CHG_TIME_E;
typedef enum QL_CCCV_TIME_SET_ENUM
{
QL_CCCV_TIME_MINUTE96,
QL_CCCV_TIME_MINUTE144,
QL_CCCV_TIME_MINUTE192,
QL_CCCV_TIME_MINUTE240,
QL_CCCV_TIME_MINUTE_MAX=QL_CCCV_TIME_MINUTE240
}QL_CCCV_TIME_SET_E;
typedef enum QL_VBAT_VOL_SET_ENUM
{
QL_VBAT_VOL_4V20,
QL_VBAT_VOL_4V35,
QL_VBAT_VOL_4V15,
QL_VBAT_VOL_4V10,
QL_VBAT_VOL_MAX=QL_VBAT_VOL_4V35
}QL_VBAT_VOL_SET_E;
typedef enum QL_TERMINATE_JUDGE_ENUM
{
QL_TERMINATE_DISABLE = 0,
QL_TERMINATE_ENABLE,
}QL_TERMINATE_JUDGE_E;
typedef enum QL_RECHARGE_JUDGE_ENUM
{
QL_RECHARGE_DISABLE = 0,
QL_RECHARGE_ENABLE,
}QL_RECHARGE_JUDGE_E;
void delay_s(int s);
void ql_power_down(unsigned char normal_flag);
int ql_get_powerup_reason(void);
void Quec_pwrkey_check(void);
/*********************Charger API*******************/
unsigned char ql_get_vbus_state(void);
unsigned short ql_get_battery_vol(void);
unsigned short ql_get_charging_battery_vol(void);
unsigned char ql_get_battery_level(void);
unsigned int ql_get_charge_cur(void);
QL_CHARGER_STATUS_E ql_get_charge_status(void);
unsigned char ql_set_charge_mpp(unsigned short limit_cur, unsigned int uvlo);
void ql_charger_switch(unsigned char on_off); //1 -- on, 0 -- off
/**
* precharger mode maximum current setting @ normal temp
**/
void ql_max_pre_cur_set(QL_PRE_CHG_CURRENT_E value);
/**
* CC mode maximum current setting @ normal temp
**/
void ql_max_cc_cur_set(QL_CC_CHG_CURRENT_E value);
/**
* Charge maximum current setting when PMIC temp is too high (110C)
**/
void ql_max_cc_cur_set_toohigh(QL_CC_CHG_CURRENT_E value);
/**
* Charger termination setting
* 00: 100mA(dis_drvseg=1)
* 50mA (dis_drvseg=0)
* 01: 150mA(dis_drvseg=1)
* 25mA (dis_drvseg=0)
* 10: 200mA(dis_drvseg=1)
* 75mA (dis_drvseg=0)
* 11: 250mA(dis_drvseg=1)
* 100mA (dis_drvseg=0)
**/
void ql_terminate_cur_set(QL_TERM_CHG_CURRENT_E value);
/**
* Pre-charge timer
* =00, 24 min
* =01, 36 min
* =10, 48 min
* =11, 60 min
**/
void ql_precharge_time_set(QL_PRE_CHG_TIME_E value);
/**
* Trickle charge timer
* =00: 6 min
* =01: 9 min
* =10: 12 min
* =11: 15 min
**/
void ql_trickle_charge_time_set(QL_TRICKLE_CHG_TIME_E value);
/**
* force Charger state by software , as shown below:
000: Force Shutdown
001: Force Check
010: Force Trickle Charge
011: Force Pre Charge
100: Force CC Charge
101: Force CV Charge
110: Force Termination
111: Force Fault
**/
void ql_force_charge_state_set(QL_CHARGER_STATUS_E value);
QL_CHARGER_STATUS_E ql_force_charge_state_get(void);
/**
* get battery temp(need NTC)
**/
unsigned int ql_get_battemp_vol_mv(void);
/**
* cccv timer setting
**/
void ql_cccv_time_set(QL_CCCV_TIME_SET_E value);
/**
* vbat voltage setting
**/
void ql_vbat_vol_set(QL_VBAT_VOL_SET_E value);
/*
somer-2020/05/29-add charger terminate current poll
*/
QL_TERMINATE_JUDGE_E ql_charger_terminate_poll(unsigned int terminate_curr_mA);
/*
somer-2020/05/29-add recharger poll
*/
QL_RECHARGE_JUDGE_E ql_recharger_poll(unsigned int recharger_vol_mV);
//forrest.liu@20201201 add from R01_b04 newest change
void boot_battery_charge(void);
void boot_battery_charge_v2(void);
/* juson.zhang-2020/06/16: add api control cam VDD output */
/**
* LDO10, 2.8V output
* on_off: 0---off, 1---on
**/
void ql_set_cam_vdd_output(unsigned char on_off);
/**
* LDO13, 1.8V output
* on_off: 0---off, 1---on
**/
void ql_set_cam_iovdd_output(unsigned char on_off);
//test code
void ql_boot_get_battery_vol_test(void);
#ifdef __cplusplus
} /*"C" */
#endif
#endif