summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@chromium.org>2017-08-21 17:30:45 -0700
committerchrome-bot <chrome-bot@chromium.org>2017-08-22 16:43:58 -0700
commit844b03dd0e66c871f288f18237404d6e173571c8 (patch)
tree47a04e7bd371508038170b996e6f880603a5123b
parent1fb39a424725447079d161bd638236dcbade4de4 (diff)
downloadchrome-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.c24
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);