diff options
author | Rong Chang <rongchang@chromium.org> | 2012-06-27 21:04:54 +0800 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-09-21 14:54:33 -0700 |
commit | eee90a3f351c45a575623f4b9f89fa7be491937a (patch) | |
tree | 5796739fad5862834e08c3235c42e3ce5b64e578 /common | |
parent | e97896945dc22681aaa11abadaace30d1a1396e7 (diff) | |
download | chrome-ec-eee90a3f351c45a575623f4b9f89fa7be491937a.tar.gz |
Add TPSChrome FET API
Some designs will have the PMU not directly connected to the AP but
behind the EC.
For easier bring-up, it's nice to be able to force power rails.
Signed-off-by: Rong Chang <rongchang@chromium.org>
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BUG=chrome-os-partner:10912 chrome-os-partner:14324
TEST=manual
On snow, switch on and off the backlight using the API
BRANCH=none
Change-Id: I74e05308043546cb11f7f2cdbe644944c0a0a35e
Reviewed-on: https://gerrit.chromium.org/gerrit/26234
Reviewed-by: Rong Chang <rongchang@chromium.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Commit-Ready: Vincent Palatin <vpalatin@chromium.org>
Tested-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'common')
-rw-r--r-- | common/pmu_tps65090.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/common/pmu_tps65090.c b/common/pmu_tps65090.c index 97e3292c54..2afe7aa585 100644 --- a/common/pmu_tps65090.c +++ b/common/pmu_tps65090.c @@ -77,6 +77,13 @@ /* Charger alarm */ #define CHARGER_ALARM 3 +/* FET control register bits */ +#define FET_CTRL_ENFET (1 << 0) +#define FET_CTRL_ADENFET (1 << 1) +#define FET_CTRL_PGFET (1 << 4) + +#define FET_CTRL_BASE (FET1_CTRL - 1) + void __board_hard_reset(void) { CPRINTF("This board is not capable of a hard reset.\n"); @@ -363,6 +370,35 @@ int pmu_low_current_charging(int enable) return pmu_write(CG_CTRL5, reg_val); } +int pmu_enable_fet(int fet_id, int enable, int *power_good) +{ + int rv, reg; + int reg_offset; + + reg_offset = FET_CTRL_BASE + fet_id; + + rv = pmu_read(reg_offset, ®); + if (rv) + return rv; + if (enable) + reg |= FET_CTRL_ADENFET | FET_CTRL_ENFET; + else + reg &= ~FET_CTRL_ENFET; + + rv = pmu_write(reg_offset, reg); + if (rv) + return rv; + + if (power_good) { + rv = pmu_read(reg_offset, ®); + if (rv) + return rv; + *power_good = reg & FET_CTRL_PGFET; + } + + return EC_SUCCESS; +} + void pmu_irq_handler(enum gpio_signal signal) { #ifdef CONFIG_AC_POWER_STATUS |