From 899fba96494e022f8e083611c328e7b57cf18079 Mon Sep 17 00:00:00 2001 From: Shawn Nematbakhsh Date: Sat, 18 Feb 2017 10:38:28 -0800 Subject: [PATCH] switch: Initialize switch state earlier during HOOK_INIT The host may ask for our switch state at any time, so do initialization immediately after lid + power button are initialized. BUG=chrome-os-partner:63073 BRANCH=gru TEST=On kevin, verify system boots when EC reset is triggered with lid open. Verify lid close and power button press still succeed to power-down from dev screen. Change-Id: I8e37c02ef4f4d2d7c06beb383cdbda8eea67bc5c Signed-off-by: Shawn Nematbakhsh Reviewed-on: https://chromium-review.googlesource.com/444322 Reviewed-by: Aseda Aboagye (cherry picked from commit 106d33cd3a8e4f3356950a3b2b92ea587977b4e7) Reviewed-on: https://chromium-review.googlesource.com/445276 Commit-Ready: Shawn N Tested-by: Shawn N --- common/host_command.c | 5 +++++ common/switch.c | 2 +- include/hooks.h | 14 ++++++++------ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/common/host_command.c b/common/host_command.c index 57cfe506c9..7ff327c726 100644 --- a/common/host_command.c +++ b/common/host_command.c @@ -518,6 +518,11 @@ static int host_command_read_memmap(struct host_cmd_handler_args *args) offset + size > EC_MEMMAP_SIZE) return EC_RES_INVALID_PARAM; + /* Make sure switch data is initialized */ + if (offset == EC_MEMMAP_SWITCHES && + *host_get_memmap(EC_MEMMAP_SWITCHES_VERSION) == 0) + return EC_RES_UNAVAILABLE; + memcpy(args->response, host_get_memmap(offset), size); args->response_size = size; diff --git a/common/switch.c b/common/switch.c index 1ca490a6b4..de6e170940 100644 --- a/common/switch.c +++ b/common/switch.c @@ -94,7 +94,7 @@ static void switch_init(void) gpio_enable_interrupt(GPIO_WP_L); #endif } -DECLARE_HOOK(HOOK_INIT, switch_init, HOOK_PRIO_DEFAULT); +DECLARE_HOOK(HOOK_INIT, switch_init, HOOK_PRIO_INIT_SWITCH); void switch_interrupt(enum gpio_signal signal) { diff --git a/include/hooks.h b/include/hooks.h index 9df5676e77..b976a8c927 100644 --- a/include/hooks.h +++ b/include/hooks.h @@ -29,18 +29,20 @@ enum hook_priority { HOOK_PRIO_INIT_LID = HOOK_PRIO_FIRST + 4, /* Power button inits before chipset and switch */ HOOK_PRIO_INIT_POWER_BUTTON = HOOK_PRIO_FIRST + 5, + /* Init switch states after power button / lid */ + HOOK_PRIO_INIT_SWITCH = HOOK_PRIO_FIRST + 6, /* Init fan before PWM */ - HOOK_PRIO_INIT_FAN = HOOK_PRIO_FIRST + 6, + HOOK_PRIO_INIT_FAN = HOOK_PRIO_FIRST + 7, /* PWM inits before modules which might use it (LEDs) */ - HOOK_PRIO_INIT_PWM = HOOK_PRIO_FIRST + 7, + HOOK_PRIO_INIT_PWM = HOOK_PRIO_FIRST + 8, /* SPI inits before modules which might use it (sensors) */ - HOOK_PRIO_INIT_SPI = HOOK_PRIO_FIRST + 8, + HOOK_PRIO_INIT_SPI = HOOK_PRIO_FIRST + 9, /* Extpower inits before modules which might use it (battery, LEDs) */ - HOOK_PRIO_INIT_EXTPOWER = HOOK_PRIO_FIRST + 9, + HOOK_PRIO_INIT_EXTPOWER = HOOK_PRIO_FIRST + 10, /* Init VBOOT hash later, since it depends on deferred functions */ - HOOK_PRIO_INIT_VBOOT_HASH = HOOK_PRIO_FIRST + 10, + HOOK_PRIO_INIT_VBOOT_HASH = HOOK_PRIO_FIRST + 11, /* Init charge manager before usage in board init */ - HOOK_PRIO_CHARGE_MANAGER_INIT = HOOK_PRIO_FIRST + 11, + HOOK_PRIO_CHARGE_MANAGER_INIT = HOOK_PRIO_FIRST + 12, /* Specific values to lump temperature-related hooks together */ HOOK_PRIO_TEMP_SENSOR = 6000,