diff options
Diffstat (limited to 'fw/fe310/eos/i2c')
-rw-r--r-- | fw/fe310/eos/i2c/bq25895.c | 24 | ||||
-rw-r--r-- | fw/fe310/eos/i2c/bq25895.h | 2 |
2 files changed, 17 insertions, 9 deletions
diff --git a/fw/fe310/eos/i2c/bq25895.c b/fw/fe310/eos/i2c/bq25895.c index 934b5e7..2b45f88 100644 --- a/fw/fe310/eos/i2c/bq25895.c +++ b/fw/fe310/eos/i2c/bq25895.c @@ -3,20 +3,28 @@ #include <stdio.h> #include "eos.h" +#include "power.h" #include "i2c.h" #include "i2c/bq25895.h" -void eos_bq25895_init(void) { - uint8_t data = 0; +void eos_bq25895_init(uint8_t wakeup_cause) { + int rst = (wakeup_cause == EOS_PWR_WAKE_RST); int i, ret = EOS_OK; + uint8_t data = 0; eos_i2c_start(100000); - ret = eos_i2c_write8(BQ25895_ADDR, 0x07, 0x8d); // disable watchdog - if (ret) printf("I2C ERROR 0x07\n"); - ret = eos_i2c_write8(BQ25895_ADDR, 0x00, 0x28); // 2.1A input current - if (ret) printf("I2C ERROR 0x00\n"); - ret = eos_i2c_write8(BQ25895_ADDR, 0x03, 0x1e); // sysmin 3.7, disable otg - if (ret) printf("I2C ERROR 0x03\n"); + if (rst) { + ret = eos_i2c_write8(BQ25895_ADDR, 0x14, 0x80); // reset + if (ret) printf("I2C ERROR 0x14\n"); + ret = eos_i2c_write8(BQ25895_ADDR, 0x14, 0x00); // disable watchdog + if (ret) printf("I2C ERROR 0x14\n"); + ret = eos_i2c_write8(BQ25895_ADDR, 0x07, 0x8d); // disable watchdog + if (ret) printf("I2C ERROR 0x07\n"); + ret = eos_i2c_write8(BQ25895_ADDR, 0x00, 0x28); // 2.1A input current + if (ret) printf("I2C ERROR 0x00\n"); + ret = eos_i2c_write8(BQ25895_ADDR, 0x02, 0x20); // disaable MaxCharge, ICO and + if (ret) printf("I2C ERROR 0x02\n"); + } printf("BQ25895:\n"); for (i=0; i<0x15; i++) { diff --git a/fw/fe310/eos/i2c/bq25895.h b/fw/fe310/eos/i2c/bq25895.h index f61a46f..39c6b68 100644 --- a/fw/fe310/eos/i2c/bq25895.h +++ b/fw/fe310/eos/i2c/bq25895.h @@ -2,4 +2,4 @@ #define BQ25895_ADDR 0x6A -void eos_bq25895_init(void); +void eos_bq25895_init(uint8_t wakeup_cause); |