diff options
author | Furquan Shaikh <furquan@chromium.org> | 2017-08-21 17:30:45 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-08-22 16:43:58 -0700 |
commit | 844b03dd0e66c871f288f18237404d6e173571c8 (patch) | |
tree | 47a04e7bd371508038170b996e6f880603a5123b | |
parent | 1fb39a424725447079d161bd638236dcbade4de4 (diff) | |
download | chrome-ec-844b03dd0e66c871f288f18237404d6e173571c8.tar.gz |
poppy: Enable/disable power to base on chipset startup/shutdown
Instead of always enabling power to base whenever it is connected,
enable/disable power to base depending upon chipset startup/shutdown.
BUG=b:64460667
BRANCH=None
TEST=Verified following:
1. On system startup, base is connected only after chipset startup.
2. On apshutdown, base is disconnected after chipset shutdown.
3. Wake from base still works.
4. Base still works on firmware screen.
Change-Id: I39454701889650964b7c678b275c984772ecd3e7
Signed-off-by: Furquan Shaikh <furquan@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/625244
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r-- | board/poppy/board.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/board/poppy/board.c b/board/poppy/board.c index 227d812f1d..a2cbb5e8a0 100644 --- a/board/poppy/board.c +++ b/board/poppy/board.c @@ -308,6 +308,21 @@ void base_detect_interrupt(enum gpio_signal signal) base_detect_debounce_time = time_now + BASE_DETECT_DEBOUNCE_US; } +static void base_enable(void) +{ + /* Enable base detection interrupt. */ + base_detect_debounce_time = get_time().val; + hook_call_deferred(&base_detect_deferred_data, 0); + gpio_enable_interrupt(GPIO_BASE_DET_A); +} + +static void base_disable(void) +{ + /* Disable base detection interrupt and disable power to base. */ + gpio_disable_interrupt(GPIO_BASE_DET_A); + base_detect_change(BASE_DISCONNECTED); +} + #include "gpio_list.h" /* power signal list. Must match order of enum power_signal. */ @@ -583,11 +598,6 @@ static void board_init(void) /* Enable pericom BC1.2 interrupts */ gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_L); gpio_enable_interrupt(GPIO_USB_C1_BC12_INT_L); - - /* Enable base detection interrupt */ - base_detect_debounce_time = get_time().val; - hook_call_deferred(&base_detect_deferred_data, 0); - gpio_enable_interrupt(GPIO_BASE_DET_A); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); @@ -949,6 +959,8 @@ static void board_chipset_startup(void) */ i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992, 0x41, 0x01); i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992, 0x2a, 0x02); + + base_enable(); } DECLARE_HOOK(HOOK_CHIPSET_STARTUP, board_chipset_startup, HOOK_PRIO_DEFAULT); @@ -962,6 +974,8 @@ static void board_chipset_shutdown(void) */ i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992, 0x41, 0x0); i2c_write8(I2C_PORT_PMIC, I2C_ADDR_BD99992, 0x2a, 0x0); + + base_disable(); } DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, board_chipset_shutdown, HOOK_PRIO_DEFAULT); |