From 3fbe1949b1bed2dfc58d92b01368b308ebacef04 Mon Sep 17 00:00:00 2001 From: Duncan Laurie Date: Mon, 15 Oct 2018 13:39:35 -0700 Subject: [PATCH] ec/google/wilco: Save and restore PS/2 data for S3 Send a command to the EC on the way into S3 suspend state telling it to save the PS/2 data, and on resume send it a command for restoring the PS/2 data that was previously saved. Change-Id: Ic4b5d6d2656dbb1c476b9211b0d60c71b0cd7b32 Signed-off-by: Duncan Laurie Reviewed-on: https://review.coreboot.org/29120 Reviewed-by: Aaron Durbin Reviewed-by: Paul Menzel Tested-by: build bot (Jenkins) --- src/ec/google/wilco/chip.c | 6 ++++++ src/ec/google/wilco/commands.h | 4 ++++ src/ec/google/wilco/smihandler.c | 1 + 3 files changed, 11 insertions(+) diff --git a/src/ec/google/wilco/chip.c b/src/ec/google/wilco/chip.c index 9a200bd720..929d1cc312 100644 --- a/src/ec/google/wilco/chip.c +++ b/src/ec/google/wilco/chip.c @@ -44,6 +44,12 @@ static void wilco_ec_post_video_init(void *unused) BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_EXIT, wilco_ec_post_video_init, NULL); +static void wilco_ec_resume(void *unused) +{ + wilco_ec_send_noargs(KB_RESTORE); +} +BOOT_STATE_INIT_ENTRY(BS_OS_RESUME, BS_ON_ENTRY, wilco_ec_resume, NULL); + static void wilco_ec_init(struct device *dev) { if (!dev->enabled) diff --git a/src/ec/google/wilco/commands.h b/src/ec/google/wilco/commands.h index 61eb460bfa..7a9bc05a07 100644 --- a/src/ec/google/wilco/commands.h +++ b/src/ec/google/wilco/commands.h @@ -26,6 +26,10 @@ enum { KB_POWER_STATUS = 0x05, /* Inform the EC aboout the reason host is turning off */ KB_POWER_OFF = 0x08, + /* Save PS/2 data before S3 suspend */ + KB_SAVE = 0x2f, + /* Restore PS/2 data after S3 resume */ + KB_RESTORE = 0x30, /* Retrieve information about the EC */ KB_EC_INFO = 0x38, /* Set ACPI mode on or off */ diff --git a/src/ec/google/wilco/smihandler.c b/src/ec/google/wilco/smihandler.c index 8c4bfd364d..60ad8139fe 100644 --- a/src/ec/google/wilco/smihandler.c +++ b/src/ec/google/wilco/smihandler.c @@ -25,6 +25,7 @@ void wilco_ec_smi_sleep(int slp_type) { switch (slp_type) { case ACPI_S3: + wilco_ec_send_noargs(KB_SAVE); wilco_ec_slp_en(); break; case ACPI_S5: