diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c index f71a27cbd25d..1283c640aa72 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c @@ -468,7 +468,11 @@ int bq2589x_set_chargecurrent(struct bq2589x *bq, int curr) { u8 ichg; - ichg = (curr - BQ2589X_ICHG_BASE)/BQ2589X_ICHG_LSB; + if (bq->part_no == SC89890H) { + ichg = (curr - SC89890H_ICHG_BASE)/SC89890H_ICHG_LSB; + } else { + ichg = (curr - BQ2589X_ICHG_BASE)/BQ2589X_ICHG_LSB; + } return bq2589x_update_bits(bq, BQ2589X_REG_04, BQ2589X_ICHG_MASK, ichg << BQ2589X_ICHG_SHIFT); } @@ -477,7 +481,11 @@ int bq2589x_set_term_current(struct bq2589x *bq, int curr) { u8 iterm; - iterm = (curr - BQ2589X_ITERM_BASE) / BQ2589X_ITERM_LSB; + if (bq->part_no == SC89890H) { + iterm = (curr - SC89890H_ITERM_BASE) / SC89890H_ITERM_LSB; + } else { + iterm = (curr - BQ2589X_ITERM_BASE) / BQ2589X_ITERM_LSB; + } return bq2589x_update_bits(bq, BQ2589X_REG_05, BQ2589X_ITERM_MASK, iterm << BQ2589X_ITERM_SHIFT); } @@ -487,7 +495,11 @@ int bq2589x_set_prechg_current(struct bq2589x *bq, int curr) { u8 iprechg; - iprechg = (curr - BQ2589X_IPRECHG_BASE) / BQ2589X_IPRECHG_LSB; + if (bq->part_no == SC89890H) { + iprechg = (curr - SC89890H_IPRECHG_BASE) / SC89890H_IPRECHG_LSB; + } else { + iprechg = (curr - BQ2589X_IPRECHG_BASE) / BQ2589X_IPRECHG_LSB; + } return bq2589x_update_bits(bq, BQ2589X_REG_05, BQ2589X_IPRECHG_MASK, iprechg << BQ2589X_IPRECHG_SHIFT); } diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_reg.h b/drivers/power/bq2589x_chg_mmi/bq2589x_reg.h index 6e2dfafd79ca..54a9387db8f0 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_reg.h +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_reg.h @@ -100,6 +100,8 @@ #define BQ2589X_ICHG_SHIFT 0 #define BQ2589X_ICHG_BASE 0 #define BQ2589X_ICHG_LSB 64 +#define SC89890H_ICHG_BASE 0 +#define SC89890H_ICHG_LSB 60 /* Register 0x05*/ #define BQ2589X_REG_05 0x05 @@ -111,6 +113,10 @@ #define BQ2589X_IPRECHG_LSB 64 #define BQ2589X_ITERM_BASE 64 #define BQ2589X_ITERM_LSB 64 +#define SC89890H_IPRECHG_BASE 60 +#define SC89890H_IPRECHG_LSB 60 +#define SC89890H_ITERM_BASE 30 +#define SC89890H_ITERM_LSB 60 /* Register 0x06*/ #define BQ2589X_REG_06 0x06