summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorRong Chang <rongchang@chromium.org>2012-06-27 21:04:54 +0800
committerGerrit <chrome-bot@google.com>2012-09-21 14:54:33 -0700
commiteee90a3f351c45a575623f4b9f89fa7be491937a (patch)
tree5796739fad5862834e08c3235c42e3ce5b64e578 /common
parente97896945dc22681aaa11abadaace30d1a1396e7 (diff)
downloadchrome-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.c36
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, &reg);
+ 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, &reg);
+ 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