Skip to content

Commit 230d99e

Browse files
committed
Enable BQ25896 OTG on boot
1 parent d1c3b0b commit 230d99e

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

lib/drivers/bq25896.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ static bq25896_regs_t bq25896_regs;
3838
bool 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

Comments
 (0)