* API HAL I2C: add timeout support. Update I2C API usage by drivers. * F4: Add missing API HAL Vibro implementation.
		
			
				
	
	
		
			274 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#pragma once
 | 
						||
 | 
						||
#include <stdbool.h>
 | 
						||
#include <stdint.h>
 | 
						||
 | 
						||
#if BITS_BIG_ENDIAN == 1
 | 
						||
#error Bit structures defined in this file is not portable to BE
 | 
						||
#endif
 | 
						||
 | 
						||
#define BQ25896_ADDRESS 0xD6
 | 
						||
#define BQ25896_I2C_TIMEOUT 50
 | 
						||
 | 
						||
#define IILIM_1600 (1 << 5)
 | 
						||
#define IILIM_800 (1 << 4)
 | 
						||
#define IILIM_400 (1 << 3)
 | 
						||
#define IILIM_200 (1 << 2)
 | 
						||
#define IILIM_100 (1 << 1)
 | 
						||
#define IILIM_50 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t IINLIM : 6; // Input Current Limit, mA, offset: +100mA
 | 
						||
    bool EN_ILIM : 1; // Enable ILIM Pin
 | 
						||
    bool EN_HIZ : 1; // Enable HIZ Mode
 | 
						||
} REG00;
 | 
						||
 | 
						||
#define VINDPM_OS_1600 (1 << 4)
 | 
						||
#define VINDPM_OS_800 (1 << 3)
 | 
						||
#define VINDPM_OS_400 (1 << 2)
 | 
						||
#define VINDPM_OS_200 (1 << 1)
 | 
						||
#define VINDPM_OS_100 (1 << 0)
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    Bhot34 = 0b00, // – VBHOT1 Threshold (34.75%) (default)
 | 
						||
    Bhot37 = 0b01, // – VBHOT0 Threshold (Typ. 37.75%)
 | 
						||
    Bhot31 = 0b10, // – VBHOT2 Threshold (Typ. 31.25%)
 | 
						||
    BhotDisable = 0b11, // – Disable boost mode thermal protection
 | 
						||
} Bhot;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t VINDPM_OS : 5; // Input Voltage Limit Offset, mV
 | 
						||
    bool BCOLD : 1; // Boost Mode Cold Temperature Monitor Threshold
 | 
						||
    Bhot BHOT : 2; // Boost Mode Hot Temperature Monitor Threshold
 | 
						||
} REG01;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool AUTO_DPDM_EN : 1; // Automatic Input Detection Enable
 | 
						||
    bool FORCE_DPDM : 1; // Force Input Detection
 | 
						||
    uint8_t RES : 2; // Reserved
 | 
						||
    bool ICO_EN : 1; // Input Current Optimizer (ICO) Enable
 | 
						||
    bool BOOST_FREQ : 1; // Boost Mode Frequency Selection
 | 
						||
    bool CONV_RATE : 1; // ADC Conversion Rate Selection
 | 
						||
    bool CONV_START : 1; // ADC Conversion Start Control
 | 
						||
} REG02;
 | 
						||
 | 
						||
#define SYS_MIN_400 (1 << 2)
 | 
						||
#define SYS_MIN_200 (1 << 1)
 | 
						||
#define SYS_MIN_100 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool MIN_VBAT_SEL : 1; // Minimum Battery Voltage (falling) to exit boost mode
 | 
						||
    uint8_t SYS_MIN : 3; // Minimum System Voltage Limit, mV, offset: +3000mV
 | 
						||
    bool CHG_CONFIG : 1; // Charge Enable Configuration
 | 
						||
    bool OTG_CONFIG : 1; // Boost (OTG) Mode Configuration
 | 
						||
    bool WD_RST : 1; // I2C Watchdog Timer Reset
 | 
						||
    bool BAT_LOADEN : 1; // Battery Load (IBATLOAD) Enable
 | 
						||
} REG03;
 | 
						||
 | 
						||
#define ICHG_4096 (1 << 6)
 | 
						||
#define ICHG_2048 (1 << 5)
 | 
						||
#define ICHG_1024 (1 << 4)
 | 
						||
#define ICHG_512 (1 << 3)
 | 
						||
#define ICHG_256 (1 << 2)
 | 
						||
#define ICHG_128 (1 << 1)
 | 
						||
#define ICHG_64 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t ICHG : 7; // Fast Charge Current Limit, mA
 | 
						||
    bool EN_PUMPX : 1; // Current pulse control Enable
 | 
						||
} REG04;
 | 
						||
 | 
						||
#define IPRETERM_512 (1 << 3)
 | 
						||
#define IPRETERM_256 (1 << 2)
 | 
						||
#define IPRETERM_128 (1 << 1)
 | 
						||
#define IPRETERM_64 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t ITERM : 4; // Termination Current Limit, offset: +64mA
 | 
						||
    uint8_t IPRECHG : 4; // Precharge Current Limit, offset: +64mA
 | 
						||
} REG05;
 | 
						||
 | 
						||
#define VREG_512 (1 << 5)
 | 
						||
#define VREG_256 (1 << 4)
 | 
						||
#define VREG_128 (1 << 3)
 | 
						||
#define VREG_64 (1 << 2)
 | 
						||
#define VREG_32 (1 << 1)
 | 
						||
#define VREG_16 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool VRECHG : 1; // Battery Recharge Threshold Offset
 | 
						||
    bool BATLOWV : 1; // Battery Precharge to Fast Charge Threshold
 | 
						||
    uint8_t VREG : 6; // Charge Voltage Limit, offset: +3840mV
 | 
						||
} REG06;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    WatchdogDisable = 0b00,
 | 
						||
    Watchdog40 = 0b01,
 | 
						||
    Watchdog80 = 0b10,
 | 
						||
    Watchdog160 = 0b11,
 | 
						||
} Watchdog;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    ChgTimer5 = 0b00,
 | 
						||
    ChgTimer8 = 0b01,
 | 
						||
    ChgTimer12 = 0b10,
 | 
						||
    ChgTimer20 = 0b11,
 | 
						||
} ChgTimer;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool JEITA_ISET : 1; // JEITA Low Temperature Current Setting
 | 
						||
    ChgTimer CHG_TIMER : 2; // Fast Charge Timer Setting
 | 
						||
    bool EN_TIMER : 1; // Charging Safety Timer Enable
 | 
						||
    Watchdog WATCHDOG : 2; // I2C Watchdog Timer Setting
 | 
						||
    bool STAT_DIS : 1; // STAT Pin Disable
 | 
						||
    bool EN_TERM : 1; // Charging Termination Enable
 | 
						||
} REG07;
 | 
						||
 | 
						||
#define BAT_COMP_80 (1 << 2)
 | 
						||
#define BAT_COMP_40 (1 << 1)
 | 
						||
#define BAT_COMP_20 (1 << 0)
 | 
						||
 | 
						||
#define VCLAMP_128 (1 << 2)
 | 
						||
#define VCLAMP_64 (1 << 1)
 | 
						||
#define VCLAMP_32 (1 << 0)
 | 
						||
 | 
						||
#define TREG_60 (0b00)
 | 
						||
#define TREG_80 (0b01)
 | 
						||
#define TREG_100 (0b10)
 | 
						||
#define TREG_120 (0b11)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t TREG : 2; // Thermal Regulation Threshold
 | 
						||
    uint8_t VCLAMP : 3; // IR Compensation Voltage Clamp
 | 
						||
    uint8_t BAT_COMP : 3; // IR Compensation Resistor Setting
 | 
						||
} REG08;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool PUMPX_DN : 1; // Current pulse control voltage down enable
 | 
						||
    bool PUMPX_UP : 1; // Current pulse control voltage up enable
 | 
						||
    bool BATFET_RST_EN : 1; // BATFET full system reset enable
 | 
						||
    bool BATFET_DLY : 1; // BATFET turn off delay control
 | 
						||
    bool JEITA_VSET : 1; // JEITA High Temperature Voltage Setting
 | 
						||
    bool BATFET_DIS : 1; // Force BATFET off to enable ship mode
 | 
						||
    bool TMR2X_EN : 1; // Safety Timer Setting during DPM or Thermal Regulation
 | 
						||
    bool FORCE_ICO : 1; // Force Start Input Current Optimizer
 | 
						||
} REG09;
 | 
						||
 | 
						||
#define BOOSTV_512 (1 << 3)
 | 
						||
#define BOOSTV_256 (1 << 2)
 | 
						||
#define BOOSTV_128 (1 << 1)
 | 
						||
#define BOOSTV_64 (1 << 0)
 | 
						||
 | 
						||
#define BOOST_LIM_500 (0b000)
 | 
						||
#define BOOST_LIM_750 (0b001)
 | 
						||
#define BOOST_LIM_1200 (0b010)
 | 
						||
#define BOOST_LIM_1400 (0b011)
 | 
						||
#define BOOST_LIM_1650 (0b100)
 | 
						||
#define BOOST_LIM_1875 (0b101)
 | 
						||
#define BOOST_LIM_2150 (0b110)
 | 
						||
#define BOOST_LIM_RSVD (0b111)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t BOOST_LIM : 3; // Boost Mode Current Limit
 | 
						||
    bool PFM_OTG_DIS : 1; // PFM mode allowed in boost mode
 | 
						||
    uint8_t BOOSTV : 4; // Boost Mode Voltage Regulation, offset: +4550mV
 | 
						||
} REG0A;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    VBusStatNo = 0b000,
 | 
						||
    VBusStatUSB = 0b001,
 | 
						||
    VBusStatExternal = 0b010,
 | 
						||
    VBusStatOTG = 0b111,
 | 
						||
} VBusStat;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    ChrgStatNo = 0b00,
 | 
						||
    ChrgStatPre = 0b01,
 | 
						||
    ChrgStatFast = 0b10,
 | 
						||
    ChrgStatDone = 0b11,
 | 
						||
} ChrgStat;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    bool VSYS_STAT : 1; // VSYS Regulation Status
 | 
						||
    bool RES : 1; // Reserved: Always reads 1
 | 
						||
    bool PG_STAT : 1; // Power Good Status
 | 
						||
    ChrgStat CHRG_STAT : 2; // Charging Status
 | 
						||
    VBusStat VBUS_STAT : 3; // VBUS Status register
 | 
						||
} REG0B;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    ChrgFaultNO = 0b00,
 | 
						||
    ChrgFaultIN = 0b01,
 | 
						||
    ChrgFaultTH = 0b10,
 | 
						||
    ChrgFaultTIM = 0b11,
 | 
						||
} ChrgFault;
 | 
						||
 | 
						||
typedef enum {
 | 
						||
    NtcFaultNo = 0b000,
 | 
						||
    NtcFaultWarm = 0b010,
 | 
						||
    NtcFaultCool = 0b011,
 | 
						||
    NtcFaultCold = 0b101,
 | 
						||
    NtcFaultHot = 0b110,
 | 
						||
} NtcFault;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    NtcFault NTC_FAULT : 3; // NTC Fault Status
 | 
						||
    bool BAT_FAULT : 1; // Battery Fault Status
 | 
						||
    ChrgFault CHRG_FAULT : 2; // Charge Fault Status
 | 
						||
    bool BOOST_FAULT : 1; // Boost Mode Fault Status
 | 
						||
    bool WATCHDOG_FAULT : 1; // Watchdog Fault Status
 | 
						||
} REG0C;
 | 
						||
 | 
						||
#define VINDPM_6400 (1 << 6)
 | 
						||
#define VINDPM_3200 (1 << 5)
 | 
						||
#define VINDPM_1600 (1 << 4)
 | 
						||
#define VINDPM_800 (1 << 3)
 | 
						||
#define VINDPM_400 (1 << 2)
 | 
						||
#define VINDPM_200 (1 << 1)
 | 
						||
#define VINDPM_100 (1 << 0)
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t VINDPM : 7; // Absolute VINDPM Threshold, offset: +2600mV
 | 
						||
    bool FORCE_VINDPM : 1; // VINDPM Threshold Setting Method
 | 
						||
} REG0D;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t BATV : 7; // ADC conversion of Battery Voltage (VBAT), offset: +2304mV
 | 
						||
    bool THERM_STAT : 1; // Thermal Regulation Status
 | 
						||
} REG0E;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t SYSV : 7; // ADDC conversion of System Voltage (VSYS), offset: +2304mV
 | 
						||
    uint8_t RES : 1; // Reserved: Always reads 0
 | 
						||
} REG0F;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t TSPCT : 7; // ADC conversion of TS Voltage (TS) as percentage of REGN, offset: +21%
 | 
						||
    uint8_t RES : 1; // Reserved: Always reads 0
 | 
						||
} REG10;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t VBUSV : 7; // ADC conversion of VBUS voltage (VBUS), offset: +2600mV
 | 
						||
    bool VBUS_GD : 1; // VBUS Good Status
 | 
						||
} REG11;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t ICHGR : 7; // ADC conversion of Charge Current (IBAT) when VBAT > VBATSHORT
 | 
						||
    uint8_t RES : 1; // Reserved: Always reads 0
 | 
						||
} REG12;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t
 | 
						||
        IDPM_LIM : 6; // Input Current Limit in effect while Input Current Optimizer (ICO) is enabled, offset: 100mA (default)
 | 
						||
    bool IDPM_STAT : 1; // IINDPM Status
 | 
						||
    bool VDPM_STAT : 1; // VINDPM Status
 | 
						||
} REG13;
 | 
						||
 | 
						||
typedef struct {
 | 
						||
    uint8_t DEV_REV : 2; // Device Revision
 | 
						||
    bool TS_PROFILE : 1; // Temperature Profile
 | 
						||
    uint8_t PN : 3; // Device Configuration
 | 
						||
    bool ICO_OPTIMIZED : 1; // Input Current Optimizer (ICO) Status
 | 
						||
    bool REG_RST : 1; // Register Reset
 | 
						||
} REG14;
 |