config PM
	bool "Power Management support"
	depends on !IA64_HP_SIM
	---help---
	  "Power Management" means that parts of your computer are shut
	  off or put into a power conserving "sleep" mode if they are not
	  being used.  There are two competing standards for doing this: APM
	  and ACPI.  If you want to use either one, say Y here and then also
	  to the requisite support below.

	  Power Management is most important for battery powered laptop
	  computers; if you have a laptop, check out the Linux Laptop home
	  page on the WWW at <http://www.linux-on-laptops.com/> or
	  Tuxmobil - Linux on Mobile Computers at <http://www.tuxmobil.org/>
	  and the Battery Powered Linux mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  Note that, even if you say N here, Linux on the x86 architecture
	  will issue the hlt instruction if nothing is to be done, thereby
	  sending the processor to sleep and saving power.

config PM_LEGACY
	bool "Legacy Power Management API (DEPRECATED)"
	depends on PM
	default n
	---help---
	   Support for pm_register() and friends.  This old API is obsoleted
	   by the driver model.

	   If unsure, say N.

config PM_DEBUG
	bool "Power Management Debug Support"
	depends on PM
	---help---
	This option enables various debugging support in the Power Management
	code. This is helpful when debugging and reporting PM bugs, like
	suspend support.

config PM_VERBOSE
	bool "Verbose Power Management debugging"
	depends on PM_DEBUG
	default n
	---help---
	This option enables verbose messages from the Power Management code.

config PM_TRACE
	bool "Suspend/resume event tracing"
	depends on PM_DEBUG && X86 && PM_SLEEP && EXPERIMENTAL
	default n
	---help---
	This enables some cheesy code to save 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).

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

		dmesg -s 1000000 | grep 'hash matches'

	CAUTION: this option will cause your machine's real-time clock to be
	set to an invalid time after a resume.

config PM_SLEEP_SMP
	bool
	depends on SUSPEND_SMP_POSSIBLE || HIBERNATION_SMP_POSSIBLE
	depends on PM_SLEEP
	select HOTPLUG_CPU
	default y

config PM_SLEEP
	bool
	depends on SUSPEND || HIBERNATION
	default y

config SUSPEND_UP_POSSIBLE
	bool
	depends on (X86 && !X86_VOYAGER) || PPC || ARM || BLACKFIN || MIPS \
		   || SUPERH || FRV
	depends on !SMP
	default y

config SUSPEND_SMP_POSSIBLE
	bool
	depends on (X86 && !X86_VOYAGER) \
		   || (PPC && (PPC_PSERIES || PPC_PMAC)) || ARM
	depends on SMP
	default y

config SUSPEND
	bool "Suspend to RAM and standby"
	depends on PM
	depends on SUSPEND_UP_POSSIBLE || SUSPEND_SMP_POSSIBLE
	default y
	---help---
	  Allow the system to enter sleep states in which main memory is
	  powered and thus its contents are preserved, such as the
	  suspend-to-RAM state (i.e. the ACPI S3 state).

config HIBERNATION_UP_POSSIBLE
	bool
	depends on X86 || PPC64_SWSUSP || PPC32
	depends on !SMP
	default y

config HIBERNATION_SMP_POSSIBLE
	bool
	depends on (X86 && !X86_VOYAGER) || PPC64_SWSUSP
	depends on SMP
	default y

config HIBERNATION
	bool "Hibernation (aka 'suspend to disk')"
	depends on PM && SWAP
	depends on HIBERNATION_UP_POSSIBLE || HIBERNATION_SMP_POSSIBLE
	---help---
	  Enable the suspend to disk (STD) functionality, which is usually
	  called "hibernation" in user interfaces.  STD checkpoints the
	  system and powers it off; and restores that checkpoint on reboot.

	  You can suspend your machine with 'echo disk > /sys/power/state'.
	  Alternatively, you can use the additional userland tools available
	  from <http://suspend.sf.net>.

	  In principle it does not require ACPI or APM, although for example
	  ACPI will be used for the final steps when it is available.  One
	  of the reasons to use software suspend is that the firmware hooks
	  for suspend states like suspend-to-RAM (STR) often don't work very
	  well with Linux.

	  It creates an image which is saved in your active swap. Upon the next
	  boot, pass the 'resume=/dev/swappartition' argument to the kernel to
	  have it detect the saved image, restore memory state from it, and
	  continue to run as before. If you do not want the previous state to
	  be reloaded, then use the 'noresume' kernel command line argument.
	  Note, however, that fsck will be run on your filesystems and you will
	  need to run mkswap against the swap partition used for the suspend.

	  It also works with swap files to a limited extent (for details see
	  <file:Documentation/power/swsusp-and-swap-files.txt>).

	  Right now you may boot without resuming and resume later but in the
	  meantime you cannot use the swap partition(s)/file(s) involved in
	  suspending.  Also in this case you must not use the filesystems
	  that were mounted before the suspend.  In particular, you MUST NOT
	  MOUNT any journaled filesystems mounted before the suspend or they
	  will get corrupted in a nasty way.

	  For more information take a look at <file:Documentation/power/swsusp.txt>.

config PM_STD_PARTITION
	string "Default resume partition"
	depends on HIBERNATION
	default ""
	---help---
	  The default resume partition is the partition that the suspend-
	  to-disk implementation will look for a suspended disk image. 

	  The partition specified here will be different for almost every user. 
	  It should be a valid swap partition (at least for now) that is turned
	  on before suspending. 

	  The partition specified can be overridden by specifying:

		resume=/dev/<other device> 

	  which will set the resume partition to the device specified. 

	  Note there is currently not a way to specify which device to save the
	  suspended image to. It will simply pick the first available swap 
	  device.

config APM_EMULATION
	tristate "Advanced Power Management Emulation"
	depends on PM && SYS_SUPPORTS_APM_EMULATION
	help
	  APM is a BIOS specification for saving power using several different
	  techniques. This is mostly useful for battery powered laptops with
	  APM compliant BIOSes. If you say Y here, the system time will be
	  reset after a RESUME operation, the /proc/apm device will provide
	  battery status information, and user-space programs will receive
	  notification of APM "events" (e.g. battery status change).

	  In order to use APM, you will need supporting software. For location
	  and more information, read <file:Documentation/pm.txt> and the
	  Battery Powered Linux mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  This driver does not spin down disk drives (see the hdparm(8)
	  manpage ("man 8 hdparm") for that), and it doesn't turn off
	  VESA-compliant "green" monitors.

	  Generally, if you don't have a battery in your machine, there isn't
	  much point in using this driver and you should say N. If you get
	  random kernel OOPSes or reboots that don't seem to be related to
	  anything, try disabling/enabling this option (or disabling/enabling
	  APM in your BIOS).
