| /* Copyright 2021 The ChromiumOS Authors | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #include "common.h" | 
 | #include "gpio.h" | 
 | #include "sku.h" | 
 | #include "system.h" | 
 | #include "usbc_ppc.h" | 
 |  | 
 | void board_hibernate(void) | 
 | { | 
 | 	int i; | 
 |  | 
 | 	if (!board_is_clamshell()) { | 
 | 		/* | 
 | 		 * Sensors are unpowered in hibernate. Apply PD to the | 
 | 		 * interrupt lines such that they don't float. | 
 | 		 */ | 
 | 		gpio_set_flags(GPIO_ACCEL_GYRO_INT_L, | 
 | 			       GPIO_INPUT | GPIO_PULL_DOWN); | 
 | 		gpio_set_flags(GPIO_LID_ACCEL_INT_L, | 
 | 			       GPIO_INPUT | GPIO_PULL_DOWN); | 
 | 	} | 
 |  | 
 | 	/* | 
 | 	 * Board rev 5+ has the hardware fix. Don't need the following | 
 | 	 * workaround. | 
 | 	 */ | 
 | 	if (system_get_board_version() >= 5) | 
 | 		return; | 
 |  | 
 | 	/* | 
 | 	 * Enable the PPC power sink path before EC enters hibernate; | 
 | 	 * otherwise, ACOK won't go High and can't wake EC up. Check the | 
 | 	 * bug b/170324206 for details. | 
 | 	 */ | 
 | 	for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) | 
 | 		ppc_vbus_sink_enable(i, 1); | 
 | } |