#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig SYS_POWER_MANAGEMENT
	bool "Power management"
	select TICKLESS_IDLE
	help
	  This option enables the board to implement extra power management
	  policies whenever the kernel becomes idle. The kernel informs the
	  power management subsystem of the number of ticks until the next kernel
	  timer is due to expire.

if SYS_POWER_MANAGEMENT
choice POWER_MANAGEMENT_CONTROL
	prompt "Power Management Control"
	default PM_CONTROL_APP
	help
	  Select the Application managed or OS managed power saving
	  mechanism.

config PM_CONTROL_APP
	bool
	prompt "Handled at Application level"
	help
	  This option enables the Application to handle all the Power
	  Management flows for the platform.

config PM_CONTROL_OS
	bool
	prompt "Handle at OS level"
	help
	  This option allows the OS to handle all the Power
	  Management flows for the platform.

endchoice # POWER_MANAGEMENT_CONTROL

config SYS_POWER_LOW_POWER_STATE
	bool "Low power state"
	depends on SYS_POWER_LOW_POWER_STATE_SUPPORTED
	help
	  This option enables the kernel to interface with a power manager
	  application.  This permits the system to enter a custom CPU low power
	  state when the kernel becomes idle. The low power state could be any of
	  the CPU low power states supported by the processor.  Generally the one
	  saving most power.

config SYS_POWER_DEEP_SLEEP
	bool "Deep sleep state"
	depends on SYS_POWER_DEEP_SLEEP_SUPPORTED
	help
	  This option enables the kernel to interface with a power manager
	  application. This permits the system to enter a Deep sleep state
	  supported by the SOC where the system clock is turned off while RAM is
	  retained. This state would be entered when the kernel becomes idle for
	  extended periods and would have a high wake latency.  Resume would be
	  from the reset vector same as cold boot. The interface allows
	  restoration of states that were saved at the time of suspend.

endif # SYS_POWER_MANAGEMENT

config DEVICE_POWER_MANAGEMENT
	bool "Device power management"
	help
	  This option enables the device power management interface.  The
	  interface consists of hook functions implemented by device drivers
	  that get called by the power manager application when the system
	  is going to suspend state or resuming from suspend state. This allows
	  device drivers to do any necessary power management operations
	  like turning off device clocks and peripherals. The device drivers
	  may also save and restore states in these hook functions.
