blob: 67d9b307917e42a3c9db63120611aa66ab620634 [file] [log] [blame]
/* 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);
}