summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2017-02-18 10:38:28 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-03-02 11:29:07 -0800
commit899fba96494e022f8e083611c328e7b57cf18079 (patch)
tree12cb7e0a6ade6f96bb5c8cc9c82917eb4716bb81
parenta990e4e832010c6967eb0243de8ba7ce9c3a7825 (diff)
downloadchrome-ec-899fba96494e022f8e083611c328e7b57cf18079.tar.gz
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 <shawnn@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/444322 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> (cherry picked from commit 106d33cd3a8e4f3356950a3b2b92ea587977b4e7) Reviewed-on: https://chromium-review.googlesource.com/445276 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org>
-rw-r--r--common/host_command.c5
-rw-r--r--common/switch.c2
-rw-r--r--include/hooks.h14
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,