Initial import of NFC GNSS SDK project

This commit is contained in:
chenjintao
2026-09-15 16:10:12 +08:00
commit 2746cc3d4e
3070 changed files with 892062 additions and 0 deletions
+967
View File
@@ -0,0 +1,967 @@
#ifndef _PIMC_H_
#define _PIMC_H_
#include "quec_cust_feature.h"//QUECTEL ADD
#include "I2C.h"
/************************** MACROS ***************************************/
void usticaInit(void);
#define PMIC_UNAVAILABLE 0xFF //UNAVAILABLE
/* PMIC ID: [7:3]=PID, [2:0]=VID */
#define PMIC_812 0xC /* PM812: 0x64 */
#define PMIC_813 0x6 /* PM813: 0x30(A0), 0x31(A1)... */
#define PMIC_813A3 0x7
#define PMIC_813_A0 0x30
#define PMIC_813_A1 0x31
#define PMIC_813_A2 0x32
#define PMIC_813_A3 0x3B
#define PMIC_802 0x2 /* PM802: 0x12(B0), 0x13(B1)... */
#define PMIC_803 0x3 /* PM803: 0x18(A0) */
#define PMIC_813S 0x4 /* PM813S: 0x20(A0) */
#define PMIC_813S_A0 0x20
#define PMIC_802S 0x1 /* PM802S: 0x08(A0) */
#define PMIC_803L 0xB /* PM803L: 0x58(A0) */
#define PMIC_813L 0x9 /* PM813L: 0x48(A0) */
#define PMIC_807 0xD /* PM807: 0x68(A0)?? */
// The I2C registers offset
#define I2C_IWCR_REG 0x0030 // Wait Count Register
#define I2C_ILCR_REG 0x0028 // Load Count Register
#define I2C_ISAR_REG 0x0020 // Slave Address Register
#define I2C_ISR_REG 0x0018 // Status Register
#define I2C_ICR_REG 0x0010 // Control Register
#define I2C_IDBR_REG 0x0008 // Data Byte Register
#define I2C_IBMR_REG 0x0000 // Bus Monitor Register
#define I2C_OWN_SLAVE_ADDRESS 0xFF /* response */
/********************* Sub-Package Definitions ********************/
#define I2C_REG_CLEAR_VALUE 0x0000
#define I2C_ICR_CLEAR_ALL_CONTROL_BITS 0xfff0 // Clear the TB, STOP, START, ACK bits in the ICR register
/** bit map of the ICR register **/
#define I2C_ICR_BUS_RESET_BIT 28
#define I2C_ICR_FAST_MODE 15
#define I2C_ICR_UNIT_RESET_BIT 14
#define I2C_ICR_IDBR_RECEIVE_FULL_INT_ENABLE_BIT 9
#define I2C_ICR_UNIT_ENABLE_BIT 6
#define I2C_ICR_SCLEA_ENABLE_BIT 5
#define I2C_ICR_MASTER_ABORT_BIT 4
#define I2C_ICR_TRANSFER_BYTE_BIT 3
#define I2C_ICR_ACK_NACK_CONTROL_BIT 2
#define I2C_ICR_STOP_BIT 1
#define I2C_ICR_START_BIT 0
#define I2C_ICR_BUS_RESET (1 << I2C_ICR_BUS_RESET_BIT)
#define I2C_ICR_UNIT_RESET (1 << I2C_ICR_UNIT_RESET_BIT)
#define I2C_ICR_IDBR_RECEIVE_FULL_INT_ENABLE (1 << I2C_ICR_IDBR_RECEIVE_FULL_INT_ENABLE_BIT)
#define I2C_ICR_UNIT_ENABLE (1 << I2C_ICR_UNIT_ENABLE_BIT)
#define I2C_ICR_SCLEA_ENABLE (1 << I2C_ICR_SCLEA_ENABLE_BIT)
#define I2C_ICR_MASTER_ABORT (1 << I2C_ICR_MASTER_ABORT_BIT)
#define I2C_ICR_TRANSFER_BYTE (1 << I2C_ICR_TRANSFER_BYTE_BIT)
#define I2C_ICR_ACK_NACK_CONTROL (1 << I2C_ICR_ACK_NACK_CONTROL_BIT)
#define I2C_ICR_STOP (1 << I2C_ICR_STOP_BIT)
#define I2C_ICR_START (1 << I2C_ICR_START_BIT)
/** bit map of the ISR register **/
#define I2C_ISR_UNEXPECTED_INTERRUPTS_REPORT 0xff
#define I2C_ISR_UNEXPECTED_INTERRUPTS 0x00000310
#define I2C_ISR_CLEAR_ALL_INTERRUPTS 0x000007f0
#define I2C_ISR_EARLY_IC_BUS_BUSY_BIT 11
#define I2C_ISR_BUS_ERROR_DETECTED_BIT 10
#define I2C_ISR_SLAVE_ADDRESS_DETECTED_BIT 9
#define I2C_ISR_GENERAL_CALL_ADDRESS_DETECTED_BIT 8
#define I2C_ISR_IDBR_RECEIVE_FULL_BIT 7
#define I2C_ISR_IDBR_TRANSMIT_EMPTY_BIT 6
#define I2C_ISR_ARBITRATION_LOSS_DETECTED_BIT 5
#define I2C_ISR_SLAVE_STOP_DETECTED_BIT 4
#define I2C_ISR_I2C_BUS_BUSY_BIT 3
#define I2C_ISR_UNIT_BUSY_BIT 2
#define I2C_ISR_ACK_NACK_STATUS_BIT 1
#define I2C_ISR_READ_WRITE_MODE_BIT 0
/** bit map of the IBMR register **/
#define I2C_IBMR_SDA_BIT 0
#define I2C_IBMR_SCL_BIT 1
#define I2C_IBMR_SCL_AND_SDA_LINES_HIGH 0x3
#define I2C_IBMR_SDA_STATUS_BIT (1 << I2C_IBMR_SDA_BIT)
#define I2C_IBMR_SCL_STATUS_BIT (1 << I2C_IBMR_SCL_BIT)
/***************** macros ***********************/
#define I2C_REG_WRITE(reg,wval) \
( (* ( (volatile UINT32*)(I2C_REGISTER_BASE_ADDR + (reg)) ) ) = wval);
#define I2C_REG_READ(reg,rval) \
rval = (* ( (volatile UINT32*)(I2C_REGISTER_BASE_ADDR + (reg)) ) );
#define I2C_REG_BIT_WRITE(reg,btNm,sc) \
{ UINT32 regVl; \
I2C_REG_READ(reg,regVl); \
sc ? ( regVl = (1 << btNm) | regVl ) : (regVl = ((regVl) & (~(1 << btNm)))); \
I2C_REG_WRITE(reg,regVl); \
}
#define I2C_STATUS_REG_CLEAR_BIT(bitNum) \
{ UINT32 regVal; \
regVal = (1 << bitNum); \
I2C_REG_WRITE(I2C_ISR_REG,regVal); \
}
#define I2C_REG_BIT_READ(regVl,btNm) ( (regVl >> btNm) & 0x00000001 )
#define I2C_REG_BIT(btNm) (((UINT32)1)<<(btNm))
#define I2C_SLAVE_WRITE(slv) ( (slv) | 0x00000000 ) /* Master is writing to the slave */
#define I2C_SLAVE_READ(slv) ( (slv) | 0x00000001 ) /* Master is reading from the slave */
#define TIME_TO_SAMPLE 15 //MicroSec
/*********************** Sub-Package Parameters *************************/
#define CHECK_IF_CHIP_BUSY(st) \
{ UINT32 rv; \
I2C_REG_READ(I2C_ISR_REG,rv); \
st = I2C_REG_BIT_READ(rv,I2C_ISR_UNIT_BUSY_BIT) ? TRUE : FALSE; \
}
/****** USTICA BASE REGISTER *********/
#define USTICA_ID_REG 0x00
#define USTICA_STATUS_1_REG 0x01
#define USTICA_STATUS_2_REG 0x02
#define USTICA_INT_STATUS_1_REG 0x05
#define USTICA_INT_STATUS_2_REG 0x06
#define USTICA_INT_STATUS_3_REG 0x07
#define USTICA_INT_STATUS_4_REG 0x08
#define USTICA_INT_ENABLE_1_REG 0x09
#define USTICA_INT_ENABLE_2_REG 0x0a
#define USTICA_INT_ENABLE_3_REG 0x0b
#define USTICA_INT_ENABLE_4_REG 0x0c
#define USTICA_WAKEUP_1_REG 0x0d
#define USTICA_WAKEUP_2_REG 0x0e
#define USTICA_WATCHDOG_REG 0x1d
#define USTICA_OSC_CONTROL_1_REG 0x50
#define USTICA_OSC_CONTROL_2_REG 0x51
#define USTICA_OSC_CONTROL_3_REG 0x52
#define USTICA_OSC_CONTROL_4_REG 0x53
#define USTICA_OSC_CONTROL_5_REG 0x54
#define USTICA_OSC_CONTROL_6_REG 0x55
#define USTICA_OSC_CONTROL_7_REG 0x56
#define USTICA_OSC_CONTROL_8_REG 0x57
#define USTICA_OSC_CONTROL_9_REG 0x58
#define USTICA_OSC_CONTROL_10_REG 0x59
#define USTICA_OSC_CONTROL_11_REG 0x5a
#define USTICA_OSC_CONTROL_12_REG 0x5b
#define USTICA_OSC_CONTROL_13_REG 0x5c
#define USTICA_OSC_CONTROL_14_REG 0x5d
#define USTICA_RTC_CONTROL_1_REG 0xd0
#define USTICA_RTC_COUNT_1_REG 0xd1
#define USTICA_RTC_COUNT_2_REG 0xd2
#define USTICA_RTC_COUNT_3_REG 0xd3
#define USTICA_RTC_COUNT_4_REG 0xd4
#define USTICA_RTC_EXPIRE1_1_REG 0xd5
#define USTICA_RTC_EXPIRE1_2_REG 0xd6
#define USTICA_RTC_EXPIRE1_3_REG 0xd7
#define USTICA_RTC_EXPIRE1_4_REG 0xd8
#define USTICA_RTC_EXPIRE2_1_REG 0xdd
#define USTICA_RTC_EXPIRE2_2_REG 0xde
#define USTICA_RTC_EXPIRE2_3_REG 0xdf
#define USTICA_RTC_EXPIRE2_4_REG 0xe0
#define USTICA_RTC_MISC_1_REG 0xe1
#define USTICA_RTC_MISC_2_REG 0xe2
#define USTICA_RTC_MISC_3_REG 0xe3
#define USTICA_RTC_MISC_4_REG 0xe4
#define USTICA_RTC_MISC_5_REG 0xe7
#define USTICA_RTC_MISC_6_REG 0xe8
/****** USTICA POWER REGISTER *********/
#define USTICA_BUCK_POWER_GOOD_STATUS_REG 0x01
#define USTICA_LDO_POWER_GOOD_STATUS_1_REG 0x02
#define USTICA_LDO_POWER_GOOD_STATUS_2_REG 0x03
#define USTICA_LDO_POWER_GOOD_STATUS_3_REG 0x04
#define USTICA_LDO_POWER_LAST_GROUP_REG 0x05 ????
#define USTICA_LDO_1_VOUT_1_REG 0x08
#define USTICA_LDO_1_VOUT_2_REG 0x09
#define USTICA_LDO_1_VOUT_3_REG 0x0a
#define USTICA_LDO_2_VOUT_REG 0x0b
#define USTICA_LDO_3_VOUT_REG 0x0c
#define USTICA_LDO_4_VOUT_REG 0x0d
#define USTICA_LDO_5_VOUT_REG 0x0e
#define USTICA_LDO_6_VOUT_REG 0x0f
#define USTICA_LDO_7_VOUT_REG 0x10
#define USTICA_LDO_8_VOUT_REG 0x11
#define USTICA_LDO_9_VOUT_REG 0x12
#define USTICA_LDO_10_VOUT_REG 0x13
#define USTICA_LDO_11_VOUT_REG 0x14
#define USTICA_LDO_12_VOUT_REG 0x15
#define USTICA_LDO_13_VOUT_REG 0x16
#define USTICA_LDO_14_VOUT_REG 0x17
#define USTICA_LDO_15_VOUT_REG 0x18
#define USTICA_LDO_16_VOUT_REG 0x19
#define USTICA_LDO_17_VOUT_REG 0x1a
#define USTICA_LDO_18_VOUT_REG 0x1b
#define USTICA_LDO_19_VOUT_REG 0x1c
#define USTICA_LE_LDO_3_VOUT_REG 0x16
#define USTICA_LE_LDO_2_VOUT_REG 0x0e
#define USTICA_VBUCK_1_SET_SLEEP_REG 0x30
#define USTICA_VBUCK_2_SET_SLEEP_REG 0x31
#define USTICA_VBUCK_3_SET_SLEEP_REG 0x32
#define USTICA_VBUCK_4_SET_SLEEP_REG 0x33
#define USTICA_VBUCK_5_SET_SLEEP_REG 0x34
#define USTICA_VAUDIO_MODE_CONFIG_REG 0x38
#define USTICA_VBUCK_1_SET_0_REG 0x3c
#define USTICA_VBUCK_1_SET_1_REG 0x3d
#define USTICA_VBUCK_1_SET_2_REG 0x3e
#define USTICA_VBUCK_1_SET_3_REG 0x3f
#define USTICA_VBUCK_2_SET_REG 0x40
#define USTICA_VBUCK_3_SET_REG 0x41
#define USTICA_VBUCK_4_SET_REG 0x42
#define USTICA_VBUCK_5_SET_0_REG 0x43
#define USTICA_VBUCK_5_SET_1_REG 0x44
#define USTICA_VBUCK_5_SET_2_REG 0x45
#define USTICA_VBUCK_5_SET_3_REG 0x46
#define USTICA_BUCK_ENABLE_REG 0x50
#define USTICA_LDO_ENABLE_1_REG 0x51
#define USTICA_LDO_ENABLE_2_REG 0x52
#define USTICA_LDO_ENABLE_3_REG 0x53
#define USTICA_BUCK_ENABLE_2_REG 0x55
#define USTICA_LDO_ENABLE_2_1_REG 0x56
#define USTICA_LDO_ENABLE_2_2_REG 0x57
#define USTICA_LDO_ENABLE_2_3_REG 0x58
#define USTICA_BUCK_SLEEP_MODE_1_REG 0x5a
#define USTICA_BUCK_SLEEP_MODE_2_REG 0x5b
#define USTICA_LDO_SLEEP_MODE_1_REG 0x5c
#define USTICA_LDO_SLEEP_MODE_2_REG 0x5d
#define USTICA_LDO_SLEEP_MODE_3_REG 0x5e
#define USTICA_LDO_SLEEP_MODE_4_REG 0x5f
#define USTICA_LDO_SLEEP_MODE_5_REG 0x60
#define USTICA_BUCK_GROUP_1_REG 0x64
#define USTICA_BUCK_GROUP_2_REG 0x65
#define USTICA_BUCK_GROUP_3_REG 0x66
#define USTICA_LDO_GROUP_1_REG 0x68
#define USTICA_LDO_GROUP_2_REG 0x69
#define USTICA_LDO_GROUP_3_REG 0x6a
#define USTICA_LDO_GROUP_4_REG 0x6b
#define USTICA_LDO_GROUP_5_REG 0x6c
#define USTICA_LDO_GROUP_6_REG 0x6d
#define USTICA_LDO_GROUP_7_REG 0x6e
#define USTICA_LDO_GROUP_8_REG 0x6f
#define USTICA_LDO_GROUP_9_REG 0x70
#define USTICA_LDO_GROUP_10_REG 0x71
#define USTICA_BUCK1_MISC_2_REG 0x79
#define USTICA_BUCK4_MISC_2_REG 0x82
#define USTICA_GPADC_MEAS_ENABLE_1_REG 0x01
#define USTICA_GPADC_MEAS_ENABLE_2_REG 0x02
#define USTICA_GPADC_MISC_CONGIG_2_REG 0x06
#define USTICA_GP_BIAS_ENABLE_1_REG 0x14
#define USTICA_GPADC_MEAS_VBAT_1_REG 0x42
#define USTICA_GPADC_MEAS_VBAT_2_REG 0x43
#define USTICA_GPADC_MEAS_GPADC0_1_REG 0x54
#define USTICA_GPADC_MEAS_GPADC0_2_REG 0x55
#define USTICA_GPADC_MEAS_GPADC2_1_REG 0x58
#define USTICA_GPADC_MEAS_GPADC2_2_REG 0x59
#define USTICA_BUCK5_MISC_1_REG 0x84
#define USTICA_BUCK5_MISC_2_REG 0x85
#define USTICA_BUCK5_MISC_3_REG 0x86
#define GPIO2_CONTROL_REG 0x32
#define PM801_LDO_3_VOUT_REG 0x16
#define PM801_LDO_6_VOUT_REG 0x1C
#define PM801_LDO_ENABLE_1_3_REG 0x53
#define PM801_LDO_ENABLE_2_2_REG 0x57
#define PM801_LDO_ENABLE_2_3_REG 0x58
#define PMC_I2C_WRITE_BASE_SLAVE_ADDRESS 0x60
#define PMC_I2C_READ_BASE_SLAVE_ADDRESS 0x61
#define PMC_I2C_WRITE_POWER_SLAVE_ADDRESS 0x62
#define PMC_I2C_READ_POWER_SLAVE_ADDRESS 0x63
#define PMC_I2C_WRITE_GPADC_SLAVE_ADDRESS 0x64
#define PMC_I2C_READ_GPADC_SLAVE_ADDRESS 0x65
#define PMC_I2C_WRITE_TEST_SLAVE_ADDRESS 0x6E
#define PMC_I2C_READ_TEST_SLAVE_ADDRESS 0x6F
#define PMC_I2C_WRITE_AUDIO_SLAVE_ADDRESS 0x70
#define PMC_I2C_READ_AUDIO_SLAVE_ADDRESS 0x71
#define PM812_BASE_PAGE_WRITE_SLAVE_ADDR 0x60
#define PM812_BASE_PAGE_READ_SLAVE_ADDR 0x61
#define PM812_POWER_PAGE_WRITE_SLAVE_ADDR 0x62
#define PM812_POWER_PAGE_READ_SLAVE_ADDR 0x63
#define PM812_GPADC_PAGE_WRITE_SLAVE_ADDR 0x64
#define PM812_GPADC_PAGE_READ_SLAVE_ADDR 0x65
void ustica_I2CInit(void);
void ustica_I2CEnableclockandPin(void);
void ustica_I2CConfigureDi( void );
void USTICAI2CWriteDi_base(unsigned char I2CRegAddr, unsigned char I2CRegData);
unsigned char USTICAI2CReadDi_base(unsigned char I2CRegAddr);
void USTICAI2CWriteDi_power(unsigned char I2CRegAddr, unsigned char I2CRegData);
unsigned char USTICAI2CReadDi_power(unsigned char I2CRegAddr);
void USTICAI2CWriteDi_GPADC(unsigned char I2CRegAddr, unsigned char I2CRegData);
unsigned char USTICAI2CReadDi_GPADC(unsigned char I2CRegAddr);
void usticaPMICReadVBatTask(void *u);
void ustica_vbuck1_0_set(unsigned long value);
void ustica_USB_shutdown(void);
void usticaInit(void);
unsigned char GetPMICID(void);
//************ PM812 ******************
#define PM812_STATUS_1_REG 0x01
#define PM812_ONKEY_STATUS_BIT (0x01<<0)
#define PM812_EXTON_STATUS_BIT (0x01<<1)
#define PM812_VCHG_STATUS_BIT (0x01<<2)
#define PM812_VBAT_STATUS_BIT (0x01<<3)
#define PM812_VBUS_STATUS_BIT (0x01<<4)
#define PM812_STATUS_2_REG 0x02
#define PM812_RTC_ALARM_STATUS_BIT (0x01<<0)
#define PM812_INT_STATUS_1_REG 0x05
#define PM812_INT_STATUS_2_REG 0x06
#define PM812_INT_STATUS_3_REG 0x07
#define PM812_INT_STATUS_4_REG 0x08
#define PM812_INT_ENABLE_REG_1 0x09
#define PM812_INT_ENABLE_REG_2 0x0a
#define PM812_INT_ENABLE_REG_3 0x0b
#define PM812_INT_ENABLE_REG_4 0x0c
#define PM812_WAKEUP_1_REG 0x0d
#define PM812_RESET_PMIC_BIT (0x01<<6)
#define PM812_PWM_REG1 0x40
#define PM812_PWM_REG4 0x43
#define PM812_WD_MODE_BIT (0x01<<0)
#define PM812_WD_RST_BIT (0x01<<4)
#define PM812_SW_PDOWN_BIT (0x01<<5)
#define PM812_WAKEUP_2_REG 0x0e
#define PM812_WD_TIMER_8s (0x3<<3)
#define PM812_WD_TIMER_16s (0x4<<3)
#define PM812_WD_TIMER_32s (0x5<<3)
#define PM812_WD_TIMER_64s (0x6<<3)
#define PM812_WD_TIMER_256s (0x7<<3)
#define PM812_WD_TIMER_SLP_BITS (0x1<<6|0x1<<7)
#define PM812_WD_TIMER_ACT_BITS (0x1<<3|0x1<<4|0x1<<5)
#define PM812_WD_ENABLE_REG 0x1d
#define PM812_RTC_CONTROL_REG 0xd0
#define PM812_RTC_ALARM_WU_BIT (0x01<<4)
#define PM812_RTC_ALARM_BIT (0x01<<5)
#define PM812_RTC_USE_XO_BIT (0x01<<7)
#define PM812_RTC_ALARM_SET1_BIT (0x01<<0)
#define PM812_RTC_ALARM_SET2_BIT (0x01<<1)
#define PM812_RTC_COUNT_1_REG 0xd1
#define PM812_RTC_COUNT_2_REG 0xd2
#define PM812_RTC_COUNT_3_REG 0xd3
#define PM812_RTC_COUNT_4_REG 0xd4
#define PM812_RTC_EXPIRE1_1_reg 0xd5
#define PM812_RTC_EXPIRE1_2_reg 0xd6
#define PM812_RTC_EXPIRE1_3_reg 0xd7
#define PM812_RTC_EXPIRE1_4_reg 0xd8
#define PM812_RTC_EXPIRE2_1_reg 0xdd
#define PM812_RTC_EXPIRE2_2_reg 0xde
#define PM812_RTC_EXPIRE2_3_reg 0xdf
#define PM812_RTC_EXPIRE2_4_reg 0xe0
#define PM812_RTC_MISC_3_REG 0xe3
#define PM812_RTC_MISC_4_REG 0xe4
#define PM812_LONGKEY_1 0
#define PM812_LONGKEY_2 1
#define PM812_RTC_LONGKEY1_EN_BIT (0x01<<PM812_LONGKEY_1)
#define PM812_RTC_LONGKEY2_EN_BIT (0x01<<PM812_LONGKEY_2)
#define PM812_RTC_MISC_5_REG 0xe7
#define PM812_RTC_FAULT_WU_EN_BIT (0x01<<2)
#define PM812_RTC_FAULT_WU_BIT (0x01<<3)
#define PM812_RTC_MISC_6_REG 0xe8
#define PM812_RTC_USER_DATA_1_REG 0xea
#define PM812_RTC_USER_DATA_2_REG 0xeb
#define PM812_RTC_USER_DATA_3_REG 0xec
#define PM812_RTC_USER_DATA_4_REG 0xed
//20190513@xiaokeweng : RTC_APP_OFFSET implement ++
#define PM812_RTC_SYS_OFFSET_REG PM812_RTC_USER_DATA_1_REG
#define PM812_RTC_APP_OFFSET_REG PM812_RTC_EXPIRE2_1_reg //reuse RTC_EXPIRE_2 as APP_OFFSET
#define PM812_RTC_USERDATA_SETTING_MARK_REG PM812_RTC_USER_DATA_1_REG
//20190513@xiaokeweng : RTC_APP_OFFSET implement --
#define PM812_POWERUP_LOG_REG 0x10
#define PM812_POWERDOWN_LOG_REG 0xe5
#define PM812_POWERDOWN_LOG_REG2 0xe6
#define PM812_LDO1_VOUT_REG (0x0a)
#define PM812_LDO2_VOUT_REG (0x0b)
//LDO3~LDO17 VOUT REG share the same VOL step
#define PM812_LDO3_VOUT_REG (0x0c)
#define PM812_LDO4_VOUT_REG (0x0d)
#define PM812_LDO5_VOUT_REG (0x0e)
#define PM812_LDO6_VOUT_REG (0x0f)
#define PM812_LDO7_VOUT_REG (0x10)
#define PM812_LDO8_VOUT_REG (0x11)
#define PM812_LDO9_VOUT_REG (0x12)
#define PM812_LDO10_VOUT_REG (0x13)
#define PM812_LDO11_VOUT_REG (0x14)
#define PM812_LDO12_VOUT_REG (0x15)
#define PM812_LDO13_VOUT_REG (0x16)
#define PM812_LDO14_VOUT_REG (0x17)
#define PM812_LDO15_VOUT_REG (0x18)
#define PM812_LDO16_VOUT_REG (0x19)
#define PM812_LDO17_VOUT_REG (0x1a)
//LDO18~LDO19 VOUT REG share the same VOL step
#define PM812_LDO18_VOUT_REG (0x1b)
#define PM812_LDO19_VOUT_REG (0x1c)
//LDO1 VOUT
#define PM812_LDO1_0V60_ACT (0x0)
#define PM812_LDO1_0V65_ACT (0x1)
#define PM812_LDO1_0V70_ACT (0x2)
#define PM812_LDO1_0V75_ACT (0x3)
#define PM812_LDO1_0V80_ACT (0x4)
#define PM812_LDO1_0V85_ACT (0x5)
#define PM812_LDO1_0V90_ACT (0x6)
#define PM812_LDO1_0V95_ACT (0x7)
#define PM812_LDO1_1V00_ACT (0x8)
#define PM812_LDO1_1V05_ACT (0x9)
#define PM812_LDO1_1V10_ACT (0xa)
#define PM812_LDO1_1V15_ACT (0xb)
#define PM812_LDO1_1V20_ACT (0xc)
#define PM812_LDO1_1V30_ACT (0xd)
#define PM812_LDO1_1V40_ACT (0xe)
#define PM812_LDO1_1V50_ACT (0xf)
#define PM812_LDO1_0V60_SLP (0x0 << 4)
#define PM812_LDO1_0V65_SLP (0x1 << 4)
#define PM812_LDO1_0V70_SLP (0x2 << 4)
#define PM812_LDO1_0V75_SLP (0x3 << 4)
#define PM812_LDO1_0V80_SLP (0x4 << 4)
#define PM812_LDO1_0V85_SLP (0x5 << 4)
#define PM812_LDO1_0V90_SLP (0x6 << 4)
#define PM812_LDO1_0V95_SLP (0x7 << 4)
#define PM812_LDO1_1V00_SLP (0x8 << 4)
#define PM812_LDO1_1V05_SLP (0x9 << 4)
#define PM812_LDO1_1V10_SLP (0xa << 4)
#define PM812_LDO1_1V15_SLP (0xb << 4)
#define PM812_LDO1_1V20_SLP (0xc << 4)
#define PM812_LDO1_1V30_SLP (0xd << 4)
#define PM812_LDO1_1V40_SLP (0xe << 4)
#define PM812_LDO1_1V50_SLP (0xf << 4)
//LDO2 VOUT
#define PM812_LDO2_1V70_ACT (0x0)
#define PM812_LDO2_1V80_ACT (0x1)
#define PM812_LDO2_1V90_ACT (0x2)
#define PM812_LDO2_2V00_ACT (0x3)
#define PM812_LDO2_2V10_ACT (0x4)
#define PM812_LDO2_2V50_ACT (0x5)
#define PM812_LDO2_2V70_ACT (0x6)
#define PM812_LDO2_2V80_ACT (0x7)
#define PM812_LDO2_1V70_SLP (0x0 << 4)
#define PM812_LDO2_1V80_SLP (0x1 << 4)
#define PM812_LDO2_1V90_SLP (0x2 << 4)
#define PM812_LDO2_2V00_SLP (0x3 << 4)
#define PM812_LDO2_2V10_SLP (0x4 << 4)
#define PM812_LDO2_2V50_SLP (0x5 << 4)
#define PM812_LDO2_2V70_SLP (0x6 << 4)
#define PM812_LDO2_2V80_SLP (0x7 << 4)
//LDO3~LDO17
#define PM812_LDO3_TO_LDO17_1V20_ACT (0x0)
#define PM812_LDO3_TO_LDO17_1V25_ACT (0x1)
#define PM812_LDO3_TO_LDO17_1V70_ACT (0x2)
#define PM812_LDO3_TO_LDO17_1V80_ACT (0x3)
#define PM812_LDO3_TO_LDO17_1V85_ACT (0x4)
#define PM812_LDO3_TO_LDO17_1V90_ACT (0x5)
#define PM812_LDO3_TO_LDO17_2V50_ACT (0x6)
#define PM812_LDO3_TO_LDO17_2V60_ACT (0x7)
#define PM812_LDO3_TO_LDO17_2V70_ACT (0x8)
#define PM812_LDO3_TO_LDO17_2V75_ACT (0x9)
#define PM812_LDO3_TO_LDO17_2V80_ACT (0xa)
#define PM812_LDO3_TO_LDO17_2V85_ACT (0xb)
#define PM812_LDO3_TO_LDO17_2V90_ACT (0xc)
#define PM812_LDO3_TO_LDO17_3V00_ACT (0xd)
#define PM812_LDO3_TO_LDO17_3V10_ACT (0xe)
#define PM812_LDO3_TO_LDO17_3V30_ACT (0xf)
#define PM812_LDO3_TO_LDO17_1V20_SLP (0x0 << 4)
#define PM812_LDO3_TO_LDO17_1V25_SLP (0x1 << 4)
#define PM812_LDO3_TO_LDO17_1V70_SLP (0x2 << 4)
#define PM812_LDO3_TO_LDO17_1V80_SLP (0x3 << 4)
#define PM812_LDO3_TO_LDO17_1V85_SLP (0x4 << 4)
#define PM812_LDO3_TO_LDO17_1V90_SLP (0x5 << 4)
#define PM812_LDO3_TO_LDO17_2V50_SLP (0x6 << 4)
#define PM812_LDO3_TO_LDO17_2V60_SLP (0x7 << 4)
#define PM812_LDO3_TO_LDO17_2V70_SLP (0x8 << 4)
#define PM812_LDO3_TO_LDO17_2V75_SLP (0x9 << 4)
#define PM812_LDO3_TO_LDO17_2V80_SLP (0xa << 4)
#define PM812_LDO3_TO_LDO17_2V85_SLP (0xb << 4)
#define PM812_LDO3_TO_LDO17_2V90_SLP (0xc << 4)
#define PM812_LDO3_TO_LDO17_3V00_SLP (0xd << 4)
#define PM812_LDO3_TO_LDO17_3V10_SLP (0xe << 4)
#define PM812_LDO3_TO_LDO17_3V30_SLP (0xf << 4)
//LDO18~LDO19 VOUT
#define PM812_LDO18_TO_LDO19_1V70_ACT (0x0)
#define PM812_LDO18_TO_LDO19_1V80_ACT (0x1)
#define PM812_LDO18_TO_LDO19_1V90_ACT (0x2)
#define PM812_LDO18_TO_LDO19_2V50_ACT (0x3)
#define PM812_LDO18_TO_LDO19_2V80_ACT (0x4)
#define PM812_LDO18_TO_LDO19_2V90_ACT (0x5)
#define PM812_LDO18_TO_LDO19_3V10_ACT (0x6)
#define PM812_LDO18_TO_LDO19_3V30_ACT (0x7)
#define PM812_LDO18_TO_LDO19_1V70_SLP (0x0 << 4)
#define PM812_LDO18_TO_LDO19_1V80_SLP (0x1 << 4)
#define PM812_LDO18_TO_LDO19_1V90_SLP (0x2 << 4)
#define PM812_LDO18_TO_LDO19_2V50_SLP (0x3 << 4)
#define PM812_LDO18_TO_LDO19_2V80_SLP (0x4 << 4)
#define PM812_LDO18_TO_LDO19_2V90_SLP (0x5 << 4)
#define PM812_LDO18_TO_LDO19_3V10_SLP (0x6 << 4)
#define PM812_LDO18_TO_LDO19_3V30_SLP (0x7 << 4)
#define PM812_LDO1_TO_LDO8_ENABLE_REG_1 (0x51)
#define PM812_LDO1_TO_LDO8_ENABLE_REG_2 (0x56)
#define PM812_LDO9_TO_LDO16_ENABLE_REG_1 (0x52)
#define PM812_LDO9_TO_LDO16_ENABLE_REG_2 (0x57)
#define PM812_LDO17_TO_LDO19_ENABLE_REG_1 (0x53)
#define PM812_LDO17_TO_LDO19_ENABLE_REG_2 (0x58)
#define PM812_LDO_ENABLE_REG_1(LDO_X) ((LDO_X >= 17)?PM812_LDO17_TO_LDO19_ENABLE_REG_1:((LDO_X >= 9)?PM812_LDO9_TO_LDO16_ENABLE_REG_1:PM812_LDO1_TO_LDO8_ENABLE_REG_1))
#define PM812_LDO_ENABLE_REG_2(LDO_X) ((LDO_X >= 17)?PM812_LDO17_TO_LDO19_ENABLE_REG_2:((LDO_X >= 9)?PM812_LDO9_TO_LDO16_ENABLE_REG_2:PM812_LDO1_TO_LDO8_ENABLE_REG_2))
#define PM812_LDO_ENABLE_BIT(LDO_X) (0x1 << ((LDO_X - 1)%8))
//=============GPADC PAGE
#define PM812_GPADC_MEAS_ENABLE_1_REG 0x01
#define PM812_GPADC_MEAS_ENABLE_2_REG 0x02
#define PM812_GPADC_MISC_CONGIG_2_REG 0x06
#define PM812_GPADC_TIME_2_REG 0x08
#define PM812_GPADC_SW_TRIG_BIT (0x01 << 2)
#define PM812_GPADC_NON_STOP (0x01 << 1) /* Enable NON_STOP GPADC operation mode. */
#define PM812_GPADC_GPADC_EN (0x01 << 0) /* Enable the GPADC periodic modes. */
#define PM812_GP_BIAS_ENABLE_1_REG 0x14
#define PM812_VCHG_LOW_TH (0x1a)
#define PM812_VCHG_HIGH_TH (0x2a)
#define PM812_GPADC_MEAS_VBAT_1_REG 0x42
#define PM812_GPADC_MEAS_VBAT_2_REG 0x43
#define PM812_GPADC_MEAS_VCHG_1_REG 0x46
#define PM812_GPADC_MEAS_VCHG_2_REG 0x47
#define PM812_GPADC_MEAS_GPADC1_1_REG 0x56
#define PM812_GPADC_MEAS_GPADC1_2_REG 0x57
#define PM812_GPADC_BAT_BD_GP3_EN_BIT (0x01<<7)
#define PM812_GPADC_BAT_BD_GP1_EN_BIT (0x01<<6)
#define PM812_GPADC_BAT_BD_EN_BIT (0x01<<5)
#define DIVIDE_5V6_12BIT_MV(meas) (meas*5600/4095)
#define DIVIDE_1V4_12BIT_MV(meas) (meas*1400/4095)
#define DIVIDE_5V6_MV_12BIT(vol) (vol*4095/5600)
#define DIVIDE_1V4_MV_12BIT(vol) (vol*4095/1400)
void PM812_bk4clkfll_set_2m(void);
void PM812_vbuck3_set_1_25(void);
void PM812_vbuck4_set_1_85(void);
void PM812_vbuck4_set_2_00(void);
void PM812_APT_enable(void);
void PM812_BUCK5_Enable(void);
static void PM812_LDO_Enable(int ldo_num,BOOL OnOff);
static void PM812_LDO_VOUT_CFG(int addr,int act_vol,int slp_vol);
void PM812_Ldo_4_set_1_8(void);
void PM812_Ldo_4_set_3_0(void);
void PM812_Ldo_4_set(BOOL OnOff);
void PM812_Ldo_10_set_1_8(void);
void PM812_Ldo_10_set_3_0(void);
void PM812_Ldo_10_set(BOOL OnOff);
void PM812_Ldo_12_set_1_8(void);
void PM812_Ldo_12_set_2_8(void);
void PM812_Ldo_12_set_3_0(void);
void PM812_Ldo_12_set(BOOL OnOff);
unsigned int PM812_REG_DUMP(unsigned char page, unsigned char addr);//page must be PM812_BASE_PAGE_READ_SLAVE_ADDR \ PM812_POWER_PAGE_READ_SLAVE_ADDR\ PM812_GPADC_PAGE_READ_SLAVE_ADDR
void PM812_Ldo_5_set_3_1(void);
void PM812_Ldo_5_set(BOOL OnOff);
void PM812_Ldo_6_set_1_8(void);
void PM812_Ldo_6_set_2_8(void);
void PM812_Ldo_6_set(BOOL OnOff);
void PM812_Ldo_8_set_2_8(void);
void PM812_Ldo_8_set(BOOL OnOff);
void PM812_Ldo_9_set_1_8(void);
void PM812_Ldo_9_set(BOOL OnOff);
void PM812_Ldo_11_set_2_8(void);
void PM812_Ldo_11_set(BOOL OnOff);
void PM812_Ldo_13_set_2_8(void);
void PM812_Ldo_13_set(BOOL OnOff);
void PM812_Ldo_15_set_2_8(void);
void PM812_Ldo_15_set(BOOL OnOff);
void PM812_Ldo_16_set_2_8(void);
void PM812_Ldo_16_set(BOOL OnOff);
void PM812_Ldo_17_set_2_8(void);
void PM812_Ldo_17_set(BOOL OnOff);
void PM812_Ldo_18_set_1_8(void);
void PM812_Ldo_18_set(BOOL OnOff);
void PM812SetLDO3OffOnSleep(void);
void PM812_32K_OUT2_Enable(void);
typedef union CNT_32{
UINT8 cnt_8[4];
UINT32 cnt_32;
} COUNTER_32;
typedef void (*PmicCallback)(void);
typedef struct {
BOOL pmic_intc_enabled;
PmicCallback pmic_isr;
}Pmic_Int_Handler;
typedef enum {
//INT ENABLE REG 4 addr=0x0c
PM812_GPIO0_INT=0,
PM812_GPIO1_INT,
PM812_GPIO2_INT,
PM812_GPIO3_INT,
PM812_GPIO4_INT,
//INT ENABLE REG 3 addr=0x0b
PM812_GPADC0_INT=8,
PM812_GPADC1_INT,
PM812_GPADC2_INT,
PM812_GPADC3_INT,
PM812_GPADC4_INT,
//INT ENABLE REG 2 addr=0x0a
PM812_VBAT_INT=16,
PM812_VSYS_INT,
PM812_VCHG_INT,
PM812_TINT_INT,
//INT ENABLE REG 1 addr=0x09
PM812_ONKEY_INT =24,
PM812_EXTON_INT,
PM812_CHG_INT,
PM812_BAT_INT,
PM812_RTC_INT,
PM812_CLASSD_OC_INT
} PM812_INTC ;
#define PM812_INTC_MAX 31
#define PM812_INTC_TO_STATUS_BIT(intc) (0x01<<intc)
#define PM812_INTC_TO_ENABLE_BIT(intc) (1<<(intc%8))
#define PM812_INTC_TO_ENABLE_REG(intc) (PM812_INT_ENABLE_REG_4 - (intc/8))
typedef enum {
//gpadc meas en reg 2 ,addr=0x02
PM812_INT_TEMP_MEAS_EN,
PM812_PMODE_MEAS_EN,
PM812_GPADC0_MEAS_EN,
PM812_GPADC1_MEAS_EN,
PM812_GPADC2_MEAS_EN,
PM812_GPADC3_MEAS_EN,
PM812_GPADC4_MEAS_EN,
//gpadc meas en reg 1 ,addr=0x01
PM812_VBBAT_MEAS_EN=8,
PM812_VBAT_MEAS_EN,
PM812_VSYS_MEAS_EN,
PM812_VCHG_MEAS_EN,
}PM812_MEAS_EN ;
typedef enum {
//gpadc bias enable reg 1 ,addr=0x14
PM812_GPADC0_BIAS_EN,
PM812_GPADC1_BIAS_EN,
PM812_GPADC2_BIAS_EN,
PM812_GPADC3_BIAS_EN,
}PM812_BIAS_EN ;
typedef enum {
PM812_GPADC0_BIAS_OUT=4,
PM812_GPADC1_BIAS_OUT,
PM812_GPADC2_BIAS_OUT,
PM812_GPADC3_BIAS_OUT,
}PM812_BIAS_OUT ;
//ICAT EXPORTED ENUM
typedef enum
{
BUCK_0_700 = 0x08, /* 0.700V */
BUCK_0_750 = 0x0C,
BUCK_0_800 = 0x10,
BUCK_0_850 = 0x14,
BUCK_0_900 = 0x18,
BUCK_0_950 = 0x1C,
BUCK_1_000 = 0x20,
BUCK_1_025 = 0x22,
BUCK_1_050 = 0x24,
BUCK_1_075 = 0x26,
BUCK_1_100 = 0x28,
BUCK_1_150 = 0x2C,
BUCK_1_200 = 0x30,
BUCK_1_250 = 0x34,
BUCK_1_300 = 0x38,
BUCK_1_350 = 0x3C,
BUCK_1_600 = 0x50,
BUCK_1_650 = 0x51,
BUCK_1_700 = 0x52,
BUCK_1_750 = 0x53,
BUCK_1_800 = 0x54,
BUCK_1_850 = 0x55,
BUCK_1_900 = 0x56,
BUCK_1_950 = 0x57,
BUCK_2_000 = 0x58,
BUCK_DEFAULT = 0xFF,
} PMIC_BUCK_T;
#define PM812_MEAS_TO_ENABLE_REG(meas_en) ((meas_en > PM812_VBBAT_MEAS_EN) ? PM812_GPADC_MEAS_ENABLE_1_REG : PM812_GPADC_MEAS_ENABLE_2_REG)
#define PM812_MEAS_TO_ENABLE_BIT(meas_en) (0x01<<(meas_en%8))
void PMIC_WRITE_REG_GPADC(UINT8 addr, UINT8 value);
UINT8 PMIC_READ_REG_GPADC(UINT8 addr);
void PMIC_WRITE_REG_POWER(UINT8 addr, UINT8 value);
UINT8 PMIC_READ_REG_POWER(UINT8 addr);
void PMIC_WRITE_REG_BASE(UINT8 addr, UINT8 value);
UINT8 PMIC_READ_REG_BASE(UINT8 addr);
void PMIC_WRITE_REG_TEST(UINT8 addr, UINT8 value);
UINT8 PMIC_READ_REG_TEST(UINT8 addr);
void PMIC_WRITE_REG_AUDIO(UINT8 addr, UINT8 value);
UINT8 PMIC_READ_REG_AUDIO(UINT8 addr);
static void PM812_LDO_Enable(int ldo_num,BOOL OnOff);
static void PM812_LDO_VOUT_CFG(int addr,int act_vol,int slp_vol);
static void PM812_WRITE_REG_BASE(UINT8 addr, UINT8 value);
static UINT8 PM812_READ_REG_BASE(UINT8 addr);
static UINT32 PM812_GET_RTC_REG_32(UINT8 start);
static void PM812_SET_RTC_REG_32(UINT8 start,UINT32 data);
static UINT8 PM812_GET_POWER_UP_LOG(void);
static void PM812_CLR_POWER_UP_LOG(UINT8 tmp);
static UINT8 PM812_GET_POWER_DOWN_LOG(void);
static void PM812_CLR_POWER_DOWN_LOG(UINT8 tmp);
static UINT8 PM812_GET_POWER_DOWN_LOG2(void);
static void PM812_CLR_POWER_DOWN_LOG2(UINT8 tmp);
static UINT32 PM812_GET_INT_TO_HOST_ENABLE_REG(void);
static UINT32 PM812_GET_INT_TO_HOST_STATUS_REG(void);
static void PM812_CLEAR_INT_TO_HOST_STATUS_REG(void);
static void PM812_PRE_REG_SNAPSHOT(void);
static void PM812_INT_TO_HOST_ENABLE(PM812_INTC intc);
static void PM812_INT_TO_HOST_DISABLE(PM812_INTC intc);
static void PM812_POWER_UP_ACTIONS(void);
void PM812_SW_RESET(void);
void PM812_SW_PDOWN(void);
void PM812_DUMP_STATE(void);
void PM812_SET_WD_TIMEOUT_ACT(UINT8 timeout);
void PM812_WD_RESET(void);
void PM812_WD_ENABLE(BOOL enable);
UINT8 PM812_RTC_GET_CONTROL_REG(void);
void PM812_RTC_SET_CONTROL_REG(UINT8 ctl);
UINT32 PM812_RTC_GET_32B_COUNTER(void);
UINT32 PM812_RTC_GET_32B_OFFSET(void);
void PM812_RTC_SET_32B_OFFSET(UINT32 offset);
UINT32 PM812_RTC_GET_32B_EXPIR_1(void);
UINT32 PM812_RTC_GET_32B_EXPIR_2(void);
void PM812_RTC_SET_32B_EXPIR_1(UINT32 expir);
void PM812_RTC_SET_32B_EXPIR_2(UINT32 expir);
void PM812_RTC_ENABLE_EXPIR_1(void);
void PM812_RTC_ENABLE_EXPIR_2(void);
void PM812_RTC_DISABLE_EXPIR_1(void);
void PM812_RTC_DISABLE_EXPIR_2(void);
void PM812_RTC_USE_XO(void);
BOOL PM812_IS_ALARM_TRIGGERD_POWERUP(void);
BOOL PMIC_ID_GET(void);
BOOL PMIC_COMP_ID_GET(void);
BOOL PMIC_IS_PM812(void);
BOOL PMIC_IS_PM813(void);
BOOL PMIC_IS_PM813_A1(void);
BOOL PMIC_IS_PM813_A2(void);
BOOL PMIC_IS_PM813_A3(void);
BOOL PMIC_IS_PM802(void);
BOOL PMIC_IS_PM803(void);
BOOL PMIC_IS_PM813S(void);
BOOL PMIC_IS_PM813S_A0(void);
BOOL PMIC_IS_PM802S(void);
BOOL PMIC_IS_PM803L(void);
BOOL PMIC_IS_PM807(void);
BOOL PMIC_IS_PM813L(void);
void PMIC_Phase1Init(void);
void PMIC_Phase2Init(void);
void PMIC_Phase3Init(void);
void PM812_INT_DISABLE(PM812_INTC intc);
void PM812_INT_ENABLE(PM812_INTC intc);
void PM812_INT_CALLBACK_REGISTER(PM812_INTC intc,PmicCallback isr);
static void PMIC_HISR_FUNC(void);
static void PMIC_LISR_FUNC(UINT32 isr);
BOOL PM812_CHARGER_IS_DETECTED(void);
BOOL PM812_VBUS_IS_AVAILABLE(void);
UINT32 PM812_GET_VCHG_LOW_TH(void);
UINT32 PM812_GET_VCHG_UPP_TH(void);
void PM812_SET_VCHG_LOW_TH(UINT8 low);
void PM812_SET_VCHG_UPP_TH(UINT8 upp);
UINT16 PM812_GPADC_READ_VOL_MEAS(UINT8 meaReg);
void PM812_BIAS_ENABLE(PM812_BIAS_EN bias_en);
void PM812_BIAS_DISABLE(PM812_BIAS_EN bias_en);
void PM812_BIAS_OUT_ON(PM812_BIAS_OUT bias_out);
void PM812_BIAS_OUT_OFF(PM812_BIAS_OUT bias_out);
void PM812_MEAS_ENABLE(PM812_MEAS_EN meas_en);
void PM812_MEAS_DISABLE(PM812_MEAS_EN meas_en);
void PM812_GPADC_SW_TRIG(void);
BOOL PM812_EXTON_IS_DETECTED(void);
BOOL PM812_BATTERY_IS_DETECTED(void);
void PM812_BD_ENABLE(UINT8 bit);
void PM812_BD_DISABLE(UINT8 bit);
UINT8 PM812_GET_POWER_UP_REASON(void);
UINT8 PM812_GET_POWER_DOWN_REASON(void);
UINT8 PM812_GET_POWER_DOWN_REASON2(void);
BOOL PM812_ONKEY_IS_DETECTED(void);
void PM812_LONKEY_ENABLE_SET(UINT8 LONGKEY_NUM,BOOL enable);
void PM812_SET_LONKEY_PRESS_TIME(UINT8 sec);
void PM812_VBUCK1_CFG(UINT8 value); //Refer to PMIC_BUCK_T for "value"
void PM812_VBUCK2_CFG(UINT8 value); //Refer to PMIC_BUCK_T for "value"
void PM812_PwmSetLevel(UINT8 level); //0 for PMIC PWM off, 1 for on.
void PM812_SW_PDOWN(void);
void PM812_SW_RESET(void);
typedef enum {
CAM_VDD_1V20 = 0x0,
CAM_VDD_1V25,
CAM_VDD_1V70, /* PM813 IOVdd suported point */
CAM_VDD_1V80, /* PM813 IOVdd suported point */
CAM_VDD_1V85,
CAM_VDD_1V90, /* PM813 IOVdd suported point */
CAM_VDD_2V50, /* PM813 IOVdd suported point */
CAM_VDD_2V60,
CAM_VDD_2V70,
CAM_VDD_2V75,
CAM_VDD_2V80, /* PM813 IOVdd suported point */
CAM_VDD_2V85,
CAM_VDD_2V90, /* PM813 IOVdd suported point */
CAM_VDD_3V00,
CAM_VDD_3V10, /* PM813 IOVdd suported point */
CAM_VDD_3V30, /* PM813 IOVdd suported point */
CAM_VDD_MAX = CAM_VDD_3V30
}Camera_Pwr_Val ;
void Camera_Avdd_Power_set(Camera_Pwr_Val ldoVal);
void Camera_Dvdd_Power_set(Camera_Pwr_Val ldoVal);
void Camera_IOvdd_Power_set(Camera_Pwr_Val ldoVal);
void Camera_IOvdd_Power_off(void);
void Camera_Avdd_Power_off(void);
#define PMIC_REG_FOR_USR_DEF_FLAGS_STR 0xE8
#define PMIC_REG_FOR_SW_RESTART_REASON_STR 0xE9
#define PM802_REG_FOR_USR_DEF_FLAGS_STR 0xEC
#define PM802S_REG_FOR_USR_DEF_FLAGS_STR 0xCF
#define PM803L_REG_FOR_USR_DEF_FLAGS_STR 0xCF
#define PM807_REG_FOR_USR_DEF_FLAGS_STR 0xCF
#if QUECTEL_PROJECT_CUST
//QUECTEL ADD FIX 因为CP和 boot测读取pmic 的寄存器地址不统一导致,在cp侧设置C8区域,但是在boot侧读取的却是cf区域
//特地添加的兼容方案,同时写入 C8 CF 这样无论boot读取那一个地址的值都是正常的
#define PM807_REG_FOR_USR_DEF_FLAGS_STR_BACK_UP 0xC8
//DON'T delete
#endif
typedef enum {
RSTREASON_POWEROFF_CHARGE = 'C', //Charging in "powering off" mode
RSTREASON_RD_PRODUCTION = 'R', //Rd production mode
RSTREASON_RTC_ALARM = 'A', //rtc Alarm
RSTREASON_NORMAL_POWERON = 'N', //Normal powering on
RSTREASON_ERROR_CONDITION = 'E', //Error reset, eg. watchdog reset triggered by system hang or silent reset
RSTREASON_ENTER_DOWNLOAD = 'D', //image Download mode
} SW_RESTART_REASON ;
void SysRestartReasonSet(SW_RESTART_REASON reason);
UINT8 SysRestartReasonGet(void);
UINT8 isSysRestartByCharging(void);
UINT8 isSysRestartByRdProduction(void);
UINT8 isSysRestartByAlarm(void);
UINT8 isSysRestartByNormal(void);
UINT8 isSysRestartByError(void);
void set_calib_production_mode(UINT32 val);
void pmic_user_defined_flags_set(UINT8 flag);
UINT8 pmic_user_defined_flags_get(void);
//fix build warnning
UINT32 PM812_RTC_GET_32B_APP_OFFSET(void);
UINT32 PM812_RTC_GET_32B_SYS_OFFSET(void);
void PM812_RTC_SET_32B_APP_OFFSET(UINT32 offset);
UINT32 PM812_RTC_GET_32B_SYS_OFFSET(void);
void PM812_RTC_SET_32B_SYS_OFFSET(UINT32 offset);
void PM812_RESET_ALL(void);
void PM812_GPADC_NONSTOP_TRIG_ENABLE(void);
void PM812_GPADC_NONSTOP_TRIG_DISABLE(void);
BOOL PM812_LONKEY_ENABLE_GET(UINT8 LONGKEY_NUM);
UINT8 PM812_GET_LONKEY_PRESS_TIME(void);
BOOL PMIC_ID_GET(void);
unsigned char USTICAI2CReadDi_TEST(unsigned char I2CRegAddr);
void USTICAI2CWriteDi_TEST(unsigned char I2CRegAddr, unsigned char I2CRegData);
void PMIC_PowerDown(void);
BOOL PMIC_IS_ALARM_TRIGGERD_POWERUP(void);
UINT32 PMIC_readVbat(void);
void PM812_FAULT_WU_EN_ENABLE(void);
void PM812_FAULT_WU_ENABLE(void);
void PlatformRfSwitchPowerConfig(void);
void PlatformBuckAptConfig(void);
#define PMIC_RTC_SETTING_FILE "PMIC_RTC_SETTING.nvm"
#define DEFAULT_TIMEZONE (8) //UTC+8 (Beijing) as default
#define TIMEZONE_TO_COUNT(x) ((x)*60*60)
#define COUNT_TO_TIMEZONE(y) ((y)/(60*60))
//ICAT EXPORTED STRUCT
typedef struct {
UINT32 pmic_rtc_setting_sys_offset;
UINT32 pmic_rtc_setting_app_offset;
INT32 pmic_rtc_setting_timezone;
}PMIC_RTC_Setting;
typedef enum {
PMIC_RTC_SETTING_AVAILABLE = (0x1<<0),//to detect whether PMIC into state POWER_DONE_2, then {PMIC_RTC_SETTING} should be reset
APP_OFFSET_EVER_CFGED = (0x1<<1),//to mark app_offset ever configed
}PMIC_RTC_FUNC_BIT;
typedef enum {
PMIC_RTC_OFFSET_NULL,
PMIC_RTC_OFFSET_IN_NVM,
PMIC_RTC_OFFSET_IN_PMIC_REG,
}PMIC_RTC_OFFSET_STORAGE;
#ifdef SCS_BUT_WITHOUT_ALARM_IO_PAD
void no_alarm_io_rtc_signal_clear(void);
void no_alarm_rtc_alarm_enable(BOOL onoff);
static void no_alarm_io_PMIC_HISR_FUNC(void);
static void no_alarm_io_PMIC_LISR_FUNC(UINT32 isr);
#endif//SCS_BUT_WITHOUT_ALARM_IO_PAD
BOOL PMIC_RTC_CFG_INIT_FLAG_GET(void);
BOOL pmic_userdata_get_app_lcd_ever_configed(void);
#endif /* _PIMC_H_ */