diff options
author | Aseda Aboagye <aaboagye@google.com> | 2018-05-14 23:51:59 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-05-22 15:54:05 -0700 |
commit | fc8b1ab52c6f5d556f91a3b8f4ce6a8ef437ae70 (patch) | |
tree | 86f16b34b3bf51502560fc9ae5d17b603ed8c078 | |
parent | ad8a61232105e028fea1e7c6ee420e05fcd98637 (diff) | |
download | chrome-ec-fc8b1ab52c6f5d556f91a3b8f4ce6a8ef437ae70.tar.gz |
nocturne: Fix EC hibernate.
This commit adds the appropriate hibernate flags to the hibernate wake
pins. It additionally, adds a board specific hibernate function which
sets up the PSL pins for wake as well as writing to the ROP PMIC to
disable all the power rails.
BUG=b:79713379
BRANCH=poppy
TEST=Enter `hibernate` on EC console, verify that system can wake from
AC insertion, power button press, and lid switch.
Change-Id: I5b197c3c4d54cfc9c0b00c19815faa019f8b8cae
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Reviewed-on: https://chromium-review.googlesource.com/1067892
Commit-Ready: Aseda Aboagye <aaboagye@chromium.org>
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-by: Mulin Chao <mlchao@nuvoton.com>
-rw-r--r-- | board/nocturne/board.c | 24 | ||||
-rw-r--r-- | board/nocturne/gpio.inc | 4 |
2 files changed, 26 insertions, 2 deletions
diff --git a/board/nocturne/board.c b/board/nocturne/board.c index 0c812f71ca..180314ee7d 100644 --- a/board/nocturne/board.c +++ b/board/nocturne/board.c @@ -31,6 +31,7 @@ #include "pwm_chip.h" #include "registers.h" #include "system.h" +#include "system_chip.h" #include "switch.h" #include "task.h" #include "tcpci.h" @@ -323,6 +324,29 @@ int board_get_version(void) return board_version; } +void board_hibernate(void) +{ + int p; + + /* Configure PSL pins */ + for (p = 0; p < hibernate_wake_pins_used; p++) + system_config_psl_mode(hibernate_wake_pins[p]); + + /* + * Enter PSL mode. Note that on Nocturne, simply enabling PSL mode does + * not cut the EC's power. Therefore, we'll need to cut off power via + * the ROP PMIC afterwards. + */ + system_enter_psl_mode(); + + /* Cut off DSW power via the ROP PMIC. */ + i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992, 0x49, 0x1); + + /* Wait for power to be cut. */ + while (1) + ; +} + static void board_init(void) { /* Enable sensor interrupts. */ diff --git a/board/nocturne/gpio.inc b/board/nocturne/gpio.inc index 837ee37056..8886c5ead2 100644 --- a/board/nocturne/gpio.inc +++ b/board/nocturne/gpio.inc @@ -22,14 +22,14 @@ GPIO_INT(SLP_S0_L, PIN(A, 4), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(SLP_S4_L, PIN(A, 3), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(SLP_S3_L, PIN(A, 6), GPIO_INT_BOTH, power_signal_interrupt) GPIO_INT(SLP_SUS_L_PCH, PIN(D, 4), GPIO_INT_BOTH, power_signal_interrupt) -GPIO_INT(ACOK_OD, PIN(0, 0), GPIO_INT_BOTH, extpower_interrupt) +GPIO_INT(ACOK_OD, PIN(0, 0), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, extpower_interrupt) GPIO_INT(ROP_INT_L, PIN(D, 5), GPIO_INT_BOTH | GPIO_PULL_UP, power_signal_interrupt) /* Misc. interrupts */ GPIO_INT(H1_EC_VOL_DOWN_ODL, PIN(6, 3), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(H1_EC_VOL_UP_ODL, PIN(7, 5), GPIO_INT_BOTH | GPIO_PULL_UP, button_interrupt) GPIO_INT(EC_WP_L, PIN(A, 1), GPIO_INT_BOTH, switch_interrupt) -GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH, lid_interrupt) +GPIO_INT(LID_OPEN, PIN(D, 2), GPIO_INT_BOTH | GPIO_HIB_WAKE_HIGH, lid_interrupt) GPIO_INT(ACCELGYRO3_INT_L, PIN(4, 1), GPIO_INT_FALLING, bmi160_interrupt) GPIO_INT(BASE_PWR_FAULT_ODL, PIN(2, 4), GPIO_INT_FALLING, base_pwr_fault_interrupt) GPIO_INT(RCAM_VSYNC, PIN(E, 4), GPIO_INT_FALLING, sync_interrupt) |