ec/google/wilco: Turn on wake up from lid

Send required EC command to enable ACPI S3 wake up from lid switch.

BUG=b:120748824
TEST=Put Sarien system into S3 and then wake up from lid switch
successful.

Signed-off-by: Lijian Zhao <lijian.zhao@intel.com>
Change-Id: I13f3469847b0886147b8b624311a1ece796f847b
Signed-off-by: Lijian Zhao <lijian.zhao@intel.com>
Reviewed-on: https://review.coreboot.org/c/30824
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
diff --git a/src/ec/google/wilco/commands.c b/src/ec/google/wilco/commands.c
index c42699d..1c76461 100644
--- a/src/ec/google/wilco/commands.c
+++ b/src/ec/google/wilco/commands.c
@@ -158,3 +158,12 @@
 				radio_control, ARRAY_SIZE(radio_control),
 				NULL, 0);
 }
+
+int wilco_ec_change_wake(uint8_t source, enum ec_wake_change change)
+{
+	uint8_t wake_source[3] = { change, source };
+
+	return wilco_ec_mailbox(WILCO_EC_MSG_DEFAULT, KB_ACPI_WAKEUP_CHANGE,
+				wake_source, ARRAY_SIZE(wake_source),
+				NULL, 0);
+}
diff --git a/src/ec/google/wilco/commands.h b/src/ec/google/wilco/commands.h
index 752e19b..53f6d0f 100644
--- a/src/ec/google/wilco/commands.h
+++ b/src/ec/google/wilco/commands.h
@@ -38,6 +38,8 @@
 	KB_EC_INFO = 0x38,
 	/* Set ACPI mode on or off */
 	KB_ACPI = 0x3a,
+	/* Change ACPI wake up source */
+	KB_ACPI_WAKEUP_CHANGE = 0x4a,
 	/* Manage the EC power button passthru to the host */
 	KB_POWER_BUTTON_TO_HOST = 0x3e,
 	/* Manage the EC control of speaker mute */
@@ -257,4 +259,25 @@
  */
 int wilco_ec_get_lid_state(void);
 
+enum ec_wake_change {
+	WAKE_OFF = 0,
+	WAKE_ON
+};
+/**
+ * wilco_ec_change_wake_source
+ *
+ * Change acpi wake up source.
+ * @source:		Wake up source that can be enabled/disabled.
+ * @ec_wake_change:	On/off switch.
+ *
+ * Returns -1 if the EC command failed
+ */
+int wilco_ec_change_wake(uint8_t source, enum ec_wake_change change);
+
+enum ec_acpi_wake_events {
+	EC_ACPI_WAKE_PWRB = BIT(0),	/* Wake up by power button */
+	EC_ACPI_WAKE_LID = BIT(1),	/* Wake up by lid switch */
+	EC_ACPI_WAKE_RTC = BIT(5),	/* Wake up by RTC */
+};
+
 #endif /* EC_GOOGLE_WILCO_COMMANDS_H */
diff --git a/src/ec/google/wilco/smihandler.c b/src/ec/google/wilco/smihandler.c
index 60ad813..e127434 100644
--- a/src/ec/google/wilco/smihandler.c
+++ b/src/ec/google/wilco/smihandler.c
@@ -26,6 +26,8 @@
 	switch (slp_type) {
 	case ACPI_S3:
 		wilco_ec_send_noargs(KB_SAVE);
+		wilco_ec_change_wake((EC_ACPI_WAKE_PWRB|EC_ACPI_WAKE_LID),
+				WAKE_ON);
 		wilco_ec_slp_en();
 		break;
 	case ACPI_S5: