What:		/sys/power/
Date:		August 2006
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power directory will contain files that will
		provide a unified interface to the power management
		subsystem.

What:		/sys/power/state
Date:		May 2014
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/state file controls system sleep states.
		Reading from this file returns the available sleep state
		labels, which may be "mem", "standby", "freeze" and "disk"
		(hibernation).  The meanings of the first three labels depend on
		the relative_sleep_states command line argument as follows:
		 1) relative_sleep_states = 1
		    "mem", "standby", "freeze" represent non-hibernation sleep
		    states from the deepest ("mem", always present) to the
		    shallowest ("freeze").  "standby" and "freeze" may or may
		    not be present depending on the capabilities of the
		    platform.  "freeze" can only be present if "standby" is
		    present.
		 2) relative_sleep_states = 0 (default)
		    "mem" - "suspend-to-RAM", present if supported.
		    "standby" - "power-on suspend", present if supported.
		    "freeze" - "suspend-to-idle", always present.

		Writing to this file one of these strings causes the system to
		transition into the corresponding state, if available.  See
		Documentation/power/states.txt for a description of what
		"suspend-to-RAM", "power-on suspend" and "suspend-to-idle" mean.

What:		/sys/power/disk
Date:		September 2006
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/disk file controls the operating mode of the
		suspend-to-disk mechanism.  Reading from this file returns
		the name of the method by which the system will be put to
		sleep on the next suspend.  There are four methods supported:
		'firmware' - means that the memory image will be saved to disk
		by some firmware, in which case we also assume that the
		firmware will handle the system suspend.
		'platform' - the memory image will be saved by the kernel and
		the system will be put to sleep by the platform driver (e.g.
		ACPI or other PM registers).
		'shutdown' - the memory image will be saved by the kernel and
		the system will be powered off.
		'reboot' - the memory image will be saved by the kernel and
		the system will be rebooted.

		Additionally, /sys/power/disk can be used to turn on one of the
		two testing modes of the suspend-to-disk mechanism: 'testproc'
		or 'test'.  If the suspend-to-disk mechanism is in the
		'testproc' mode, writing 'disk' to /sys/power/state will cause
		the kernel to disable nonboot CPUs and freeze tasks, wait for 5
		seconds, unfreeze tasks and enable nonboot CPUs.  If it is in
		the 'test' mode, writing 'disk' to /sys/power/state will cause
		the kernel to disable nonboot CPUs and freeze tasks, shrink
		memory, suspend devices, wait for 5 seconds, resume devices,
		unfreeze tasks and enable nonboot CPUs.  Then, we are able to
		look in the log messages and work out, for example, which code
		is being slow and which device drivers are misbehaving.

		The suspend-to-disk method may be chosen by writing to this
		file one of the accepted strings:

		'firmware'
		'platform'
		'shutdown'
		'reboot'
		'testproc'
		'test'

		It will only change to 'firmware' or 'platform' if the system
		supports that.

What:		/sys/power/image_size
Date:		August 2006
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/image_size file controls the size of the image
		created by the suspend-to-disk mechanism.  It can be written a
		string representing a non-negative integer that will be used
		as an upper limit of the image size, in bytes.  The kernel's
		suspend-to-disk code will do its best to ensure the image size
		will not exceed this number.  However, if it turns out to be
		impossible, the kernel will try to suspend anyway using the
		smallest image possible.  In particular, if "0" is written to
		this file, the suspend image will be as small as possible.

		Reading from this file will display the current image size
		limit, which is set to 500 MB by default.

What:		/sys/power/pm_trace
Date:		August 2006
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/pm_trace file controls the code which saves the
		last PM event point in the RTC across reboots, so that you can
		debug a machine that just hangs during suspend (or more
		commonly, during resume).  Namely, the RTC is only used to save
		the last PM event point if this file contains '1'.  Initially
		it contains '0' which may be changed to '1' by writing a
		string representing a nonzero integer into it.

		To use this debugging feature you should attempt to suspend
		the machine, then reboot it and run

		dmesg -s 1000000 | grep 'hash matches'

		If you do not get any matches (or they appear to be false
		positives), it is possible that the last PM event point
		referred to a device created by a loadable kernel module.  In
		this case cat /sys/power/pm_trace_dev_match (see below) after
		your system is started up and the kernel modules are loaded.

		CAUTION: Using it will cause your machine's real-time (CMOS)
		clock to be set to a random invalid time after a resume.

What;		/sys/power/pm_trace_dev_match
Date:		October 2010
Contact:	James Hogan <james@albanarts.com>
Description:
		The /sys/power/pm_trace_dev_match file contains the name of the
		device associated with the last PM event point saved in the RTC
		across reboots when pm_trace has been used.  More precisely it
		contains the list of current devices (including those
		registered by loadable kernel modules since boot) which match
		the device hash in the RTC at boot, with a newline after each
		one.

		The advantage of this file over the hash matches printed to the
		kernel log (see /sys/power/pm_trace), is that it includes
		devices created after boot by loadable kernel modules.

		Due to the small hash size necessary to fit in the RTC, it is
		possible that more than one device matches the hash, in which
		case further investigation is required to determine which
		device is causing the problem.  Note that genuine RTC clock
		values (such as when pm_trace has not been used), can still
		match a device and output it's name here.

What:		/sys/power/pm_async
Date:		January 2009
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/pm_async file controls the switch allowing the
		user space to enable or disable asynchronous suspend and resume
		of devices.  If enabled, this feature will cause some device
		drivers' suspend and resume callbacks to be executed in parallel
		with each other and with the main suspend thread.  It is enabled
		if this file contains "1", which is the default.  It may be
		disabled by writing "0" to this file, in which case all devices
		will be suspended and resumed synchronously.

What:		/sys/power/wakeup_count
Date:		July 2010
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/wakeup_count file allows user space to put the
		system into a sleep state while taking into account the
		concurrent arrival of wakeup events.  Reading from it returns
		the current number of registered wakeup events and it blocks if
		some wakeup events are being processed at the time the file is
		read from.  Writing to it will only succeed if the current
		number of wakeup events is equal to the written value and, if
		successful, will make the kernel abort a subsequent transition
		to a sleep state if any wakeup events are reported after the
		write has returned.

What:		/sys/power/reserved_size
Date:		May 2011
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/reserved_size file allows user space to control
		the amount of memory reserved for allocations made by device
		drivers during the "device freeze" stage of hibernation.  It can
		be written a string representing a non-negative integer that
		will be used as the amount of memory to reserve for allocations
		made by device drivers' "freeze" callbacks, in bytes.

		Reading from this file will display the current value, which is
		set to 1 MB by default.

What:		/sys/power/autosleep
Date:		April 2012
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/autosleep file can be written one of the strings
		returned by reads from /sys/power/state.  If that happens, a
		work item attempting to trigger a transition of the system to
		the sleep state represented by that string is queued up.  This
		attempt will only succeed if there are no active wakeup sources
		in the system at that time.  After every execution, regardless
		of whether or not the attempt to put the system to sleep has
		succeeded, the work item requeues itself until user space
		writes "off" to /sys/power/autosleep.

		Reading from this file causes the last string successfully
		written to it to be returned.

What:		/sys/power/wake_lock
Date:		February 2012
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/wake_lock file allows user space to create
		wakeup source objects and activate them on demand (if one of
		those wakeup sources is active, reads from the
		/sys/power/wakeup_count file block or return false).  When a
		string without white space is written to /sys/power/wake_lock,
		it will be assumed to represent a wakeup source name.  If there
		is a wakeup source object with that name, it will be activated
		(unless active already).  Otherwise, a new wakeup source object
		will be registered, assigned the given name and activated.
		If a string written to /sys/power/wake_lock contains white
		space, the part of the string preceding the white space will be
		regarded as a wakeup source name and handled as descrived above.
		The other part of the string will be regarded as a timeout (in
		nanoseconds) such that the wakeup source will be automatically
		deactivated after it has expired.  The timeout, if present, is
		set regardless of the current state of the wakeup source object
		in question.

		Reads from this file return a string consisting of the names of
		wakeup sources created with the help of it that are active at
		the moment, separated with spaces.


What:		/sys/power/wake_unlock
Date:		February 2012
Contact:	Rafael J. Wysocki <rjw@rjwysocki.net>
Description:
		The /sys/power/wake_unlock file allows user space to deactivate
		wakeup sources created with the help of /sys/power/wake_lock.
		When a string is written to /sys/power/wake_unlock, it will be
		assumed to represent the name of a wakeup source to deactivate.
		If a wakeup source object of that name exists and is active at
		the moment, it will be deactivated.

		Reads from this file return a string consisting of the names of
		wakeup sources created with the help of /sys/power/wake_lock
		that are inactive at the moment, separated with spaces.

What:		/sys/power/pm_print_times
Date:		May 2012
Contact:	Sameer Nanda <snanda@chromium.org>
Description:
		The /sys/power/pm_print_times file allows user space to
		control whether the time taken by devices to suspend and
		resume is printed.  These prints are useful for hunting down
		devices that take too long to suspend or resume.

		Writing a "1" enables this printing while writing a "0"
		disables it.  The default value is "0".  Reading from this file
		will display the current value.
