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>
This commit is contained in:
Shawn Nematbakhsh
2017-02-18 10:38:28 -08:00
committed by chrome-bot
parent a990e4e832
commit 899fba9649
3 changed files with 14 additions and 7 deletions

View File

@@ -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;

View File

@@ -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)
{

View File

@@ -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,