coreboot-libre-fam15h-rdimm/3rdparty/chromeec/power/host_sleep.c

80 lines
1.9 KiB
C
Raw Permalink Normal View History

2024-03-04 11:14:53 +01:00
/* Copyright 2019 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "ec_commands.h"
#include "host_command.h"
#include "power.h"
/* Track last reported sleep event */
static enum host_sleep_event host_sleep_state;
__overridable void power_chipset_handle_host_sleep_event(
enum host_sleep_event state,
struct host_sleep_event_context *ctx)
{
/* Default weak implementation -- no action required. */
}
static enum ec_status
host_command_host_sleep_event(struct host_cmd_handler_args *args)
{
const struct ec_params_host_sleep_event_v1 *p = args->params;
struct ec_response_host_sleep_event_v1 *r = args->response;
struct host_sleep_event_context ctx;
enum host_sleep_event state = p->sleep_event;
host_sleep_state = state;
ctx.sleep_transitions = 0;
switch (state) {
case HOST_SLEEP_EVENT_S0IX_SUSPEND:
case HOST_SLEEP_EVENT_S3_SUSPEND:
case HOST_SLEEP_EVENT_S3_WAKEABLE_SUSPEND:
ctx.sleep_timeout_ms = EC_HOST_SLEEP_TIMEOUT_DEFAULT;
/* The original version contained only state. */
if (args->version >= 1)
ctx.sleep_timeout_ms =
p->suspend_params.sleep_timeout_ms;
break;
default:
break;
}
power_chipset_handle_host_sleep_event(host_sleep_state, &ctx);
switch (state) {
case HOST_SLEEP_EVENT_S0IX_RESUME:
case HOST_SLEEP_EVENT_S3_RESUME:
if (args->version >= 1) {
r->resume_response.sleep_transitions =
ctx.sleep_transitions;
args->response_size = sizeof(*r);
}
break;
default:
break;
}
return EC_RES_SUCCESS;
}
DECLARE_HOST_COMMAND(EC_CMD_HOST_SLEEP_EVENT,
host_command_host_sleep_event,
EC_VER_MASK(0) | EC_VER_MASK(1));
enum host_sleep_event power_get_host_sleep_state(void)
{
return host_sleep_state;
}
void power_set_host_sleep_state(enum host_sleep_event state)
{
host_sleep_state = state;
}