Files
banban/ql-kernel/threadx/common/include/pmic.h
T

968 lines
35 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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_ */