@@ -38,6 +38,16 @@ static bq25896_regs_t bq25896_regs;
3838bool bq25896_init (const FuriHalI2cBusHandle * handle ) {
3939 bool result = true;
4040
41+ // Check whether OTG is enabled before resetting registers
42+ result &= furi_hal_i2c_read_mem (
43+ handle ,
44+ BQ25896_ADDRESS ,
45+ 0x00 ,
46+ (uint8_t * )& bq25896_regs ,
47+ sizeof (bq25896_regs ),
48+ BQ25896_I2C_TIMEOUT );
49+ bool otg_enabled = bq25896_regs .r03 .OTG_CONFIG ;
50+
4151 bq25896_regs .r14 .REG_RST = 1 ;
4252 result &= furi_hal_i2c_write_reg_8 (
4353 handle , BQ25896_ADDRESS , 0x14 , * (uint8_t * )& bq25896_regs .r14 , BQ25896_I2C_TIMEOUT );
@@ -67,6 +77,24 @@ bool bq25896_init(const FuriHalI2cBusHandle* handle) {
6777 result &= furi_hal_i2c_write_reg_8 (
6878 handle , BQ25896_ADDRESS , 0x0A , * (uint8_t * )& bq25896_regs .r0A , BQ25896_I2C_TIMEOUT );
6979
80+ // Enable OTG output for 5V GPIO boards
81+ bq25896_regs .r03 .OTG_CONFIG = true;
82+ furi_hal_i2c_write_reg_8 (
83+ handle , BQ25896_ADDRESS , 0x03 , * (uint8_t * )& bq25896_regs .r03 , BQ25896_I2C_TIMEOUT );
84+
85+ result &= furi_hal_i2c_read_mem (
86+ handle ,
87+ BQ25896_ADDRESS ,
88+ 0x00 ,
89+ (uint8_t * )& bq25896_regs ,
90+ sizeof (bq25896_regs ),
91+ BQ25896_I2C_TIMEOUT );
92+
93+ // Re-enable OTG output if it was previously enabled
94+ bq25896_regs .r03 .OTG_CONFIG = otg_enabled ;
95+ furi_hal_i2c_write_reg_8 (
96+ handle , BQ25896_ADDRESS , 0x03 , * (uint8_t * )& bq25896_regs .r03 , BQ25896_I2C_TIMEOUT );
97+
7098 result &= furi_hal_i2c_read_mem (
7199 handle ,
72100 BQ25896_ADDRESS ,
0 commit comments