/* * Copyright (c) 2022 ITE Corporation. All Rights Reserved. * * SPDX-License-Identifier: Apache-2.0 */ #include #include #include __weak const struct pm_state_info *pm_policy_next_state(uint8_t cpu, int32_t ticks) { const struct pm_state_info *cpu_states; uint8_t num_cpu_states; num_cpu_states = pm_state_cpu_get_all(cpu, &cpu_states); for (int16_t i = (int16_t)num_cpu_states - 1; i >= 0; i--) { const struct pm_state_info *state = &cpu_states[i]; uint32_t min_residency; /* check if there is a lock on state + substate */ if (pm_policy_state_lock_is_active( state->state, state->substate_id)) { continue; } min_residency = k_us_to_ticks_ceil32(state->min_residency_us); /* * The tick interval for the system to enter sleep mode needs * to be longer than or equal to the minimum residency. */ if (ticks >= min_residency) { return state; } } return NULL; }