# Copyright (c) 2024 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

if PM
choice PM_POLICY
	prompt "Idle State Power Management Policy"
	default PM_POLICY_DEFAULT
	help
	  Select the idle state power management policy.

config PM_POLICY_DEFAULT
	bool "Default PM policy"
	help
	  This option selects the default PM policy. Default policy is based
	  on CPU residency times and other constraints imposed by the drivers or
	  application.

config PM_POLICY_CUSTOM
	bool "Custom PM Policy"
	help
	  This options allows applications to override the default policy with
	  a custom implementation.

endchoice

config PM_POLICY_DEVICE_CONSTRAINTS
	bool "Power state constraints per device"
	help
	  This option allows devices to have a list of power states
	  that when the system transition to them, cause power loss in the device.
	  This used to set and release power state constraints when
	  it is needed by the device.

endif # PM

config PM_POLICY_LATENCY_STANDALONE
	bool "Allow gathering latency requirements in standalone mode"
	depends on !PM
	help
	  This option allows using the pm_policy_latency* APIs to gather latency
	  requirements on systems that do not support PM (e.g. systems whithout
	  CPU idle states). Because the API has a subscription mechanism, it can
	  be useful to perform system-level adjustments based on latency
	  requirements gathered from multiple system components.
