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>
This commit is contained in:
Rong Chang
2012-08-27 18:29:27 +08:00
committed by Gerrit
parent a0f7b3dac8
commit 38454d7a16
3 changed files with 92 additions and 11 deletions

View File

@@ -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);

View File

@@ -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, enable ? (reg | CG_CTRL0_EN) :
(reg & ~CG_CTRL0));
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, &reg);
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, &reg);
if (rv)
return rv;
reg &= ~CG_FASTCHARGE_MASK;
reg |= (timeout << CG_FASTCHARGE_SHIFT) & CG_FASTCHARGE_MASK;
return pmu_write(CG_CTRL0, reg);
}
/**

View File

@@ -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 */