diff options
author | Rong Chang <rongchang@chromium.org> | 2012-08-27 18:29:27 +0800 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-08-28 03:44:43 -0700 |
commit | 38454d7a161b28319bfa111e5ca8a89009699ae1 (patch) | |
tree | 7f87556cd7da5894cb9c23c20a99e9016f3d4e44 | |
parent | a0f7b3dac8c1e72635f6266962a297bbc7c45bdd (diff) | |
download | chrome-ec-38454d7a161b28319bfa111e5ca8a89009699ae1.tar.gz |
snow: Change TPSCHROME fastcharge timeout to 6 hours
When battery temperature t in range 0C to 10C, default charging current
is 50%. And it will take longer than 3 hours to charge battery from 0%
to full.
Signed-off-by: Rong Chang <rongchang@chromium.org>
BRANCH=snow
BUG=chrome-os-partner:13172
TEST=manual
Check pmu register 0x4. FASTCHARGE bits[4:2] should be 0b100.
Change-Id: I133acee21c0886b0739b4b41766ca077bb4babbc
Reviewed-on: https://gerrit.chromium.org/gerrit/31458
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
Commit-Ready: Rong Chang <rongchang@chromium.org>
Tested-by: Rong Chang <rongchang@chromium.org>
-rw-r--r-- | board/snow/board.c | 11 | ||||
-rw-r--r-- | common/pmu_tps65090.c | 63 | ||||
-rw-r--r-- | include/pmu_tpschrome.h | 29 |
3 files changed, 92 insertions, 11 deletions
diff --git a/board/snow/board.c b/board/snow/board.c index 25122a85f8..8fe510a020 100644 --- a/board/snow/board.c +++ b/board/snow/board.c @@ -279,11 +279,12 @@ void board_pmu_init(void) { int ver; - /* - * Set fast charging timeout to 3hr. - * Enable gpio charge_en control. - */ - pmu_write(0x04, 0x06); + /* Set fast charging timeout to 6 hours*/ + pmu_set_fastcharge(TIMEOUT_6HRS); + /* Enable external gpio CHARGER_EN control */ + pmu_enable_ext_control(1); + /* Disable force charging */ + pmu_enable_charger(0); /* Set NOITERM bit */ pmu_low_current_charging(1); diff --git a/common/pmu_tps65090.c b/common/pmu_tps65090.c index d6c8b1f994..0fdbef1d89 100644 --- a/common/pmu_tps65090.c +++ b/common/pmu_tps65090.c @@ -49,7 +49,10 @@ #define TPSCHROME_VER 0x19 /* Charger control */ -#define CG_CTRL0_EN 1 +#define CG_EN (1 << 0) +#define CG_EXT_EN (1 << 1) +#define CG_FASTCHARGE_SHIFT 2 +#define CG_FASTCHARGE_MASK (7 << CG_FASTCHARGE_SHIFT) /* Charger termination voltage/current */ #define CG_VSET_SHIFT 3 @@ -164,6 +167,13 @@ int pmu_get_power_source(int *ac_good, int *battery_good) return EC_SUCCESS; } +/** + * Enable charger's charging function + * + * When enable, charger ignores external control and charge the + * battery directly. If EC wants to contorl charging, set the flag + * to 0. + */ int pmu_enable_charger(int enable) { int rv; @@ -173,11 +183,54 @@ int pmu_enable_charger(int enable) if (rv) return rv; - if (reg & CG_CTRL0_EN) - return EC_SUCCESS; + if (enable) + reg |= CG_EN; + else + reg &= ~CG_EN; + + return pmu_write(CG_CTRL0, reg); +} + +/** + * Set external charge enable pin + * + * @param enable boolean, set 1 to eanble external control + */ +int pmu_enable_ext_control(int enable) +{ + int rv; + int reg; + + rv = pmu_read(CG_CTRL0, ®); + if (rv) + return rv; + + if (enable) + reg |= CG_EXT_EN; + else + reg &= ~CG_EXT_EN; + + return pmu_write(CG_CTRL0, reg); +} + +/** + * Set fast charge timeout + * + * @param timeout enum FASTCHARGE_TIMEOUT + */ +int pmu_set_fastcharge(enum FASTCHARGE_TIMEOUT timeout) +{ + int rv; + int reg; + + rv = pmu_read(CG_CTRL0, ®); + if (rv) + return rv; + + reg &= ~CG_FASTCHARGE_MASK; + reg |= (timeout << CG_FASTCHARGE_SHIFT) & CG_FASTCHARGE_MASK; - return pmu_write(CG_CTRL0, enable ? (reg | CG_CTRL0_EN) : - (reg & ~CG_CTRL0)); + return pmu_write(CG_CTRL0, reg); } /** diff --git a/include/pmu_tpschrome.h b/include/pmu_tpschrome.h index 5d65b73b45..2f7c213d9d 100644 --- a/include/pmu_tpschrome.h +++ b/include/pmu_tpschrome.h @@ -47,6 +47,18 @@ enum TPS_TERMINATION_CURRENT { TERM_I1000, /* 100 % */ }; +/* Fast charge timeout */ +enum FASTCHARGE_TIMEOUT { + TIMEOUT_2HRS, + TIMEOUT_3HRS, + TIMEOUT_4HRS, + TIMEOUT_5HRS, + TIMEOUT_6HRS, + TIMEOUT_7HRS, + TIMEOUT_8HRS, + TIMEOUT_10HRS, /* No 9 hours option */ +}; + #define FET_BACKLIGHT 1 #define FET_LCD_PANEL 6 @@ -111,7 +123,7 @@ int pmu_get_power_source(int *ac_good, int *battery_good); int pmu_enable_fet(int fet_id, int enable, int *power_good); /** - * Enable/disable pmu internal charger + * Enable/disable pmu internal charger force charging mode * * @param enable 0 to disable the charger, 1 to enable * @return EC_SUCCESS if no I2C communication error @@ -190,5 +202,20 @@ void pmu_init(void); */ int pmu_shutdown(void); +/** + * Set external charge enable pin + * + * @param enable boolean, set 1 to eanble external control + */ +int pmu_enable_ext_control(int enable); + +/** + * Set fast charge timeout + * + * @param timeout enum FASTCHARGE_TIMEOUT + */ +int pmu_set_fastcharge(enum FASTCHARGE_TIMEOUT timeout); + + #endif /* __CROS_EC_TPSCHROME_H */ |