The Linux kernel uses several power management strategies:

  • Suspend to memory allows for the system to sleep waiting for an event. On suspend, all system devices, including CPU and memory, enter low power mode. On resume, the system will continue from the same state it was in before it suspended.

  • Power off, which brings the system to a halt until an event wakes the system. On power off the system power remains enabled and the system is placed on its lowest consumption mode. On wake up, the bootloader starts up again and the system is initialized.

Suspend to memory

The Linux kernel can also perform a suspend to memory or suspend to RAM operation. When entering this low-power mode, the system state is kept in self-refreshing RAM while the system enters a low-power-consumption mode. The system resumes when a previously selected interrupt is received, restores the previous state, and continues running from where it left off. There is often a trade-off between the depth of the low-power mode and the speed at which the system can resume.

Entering suspend mode

To enter suspend mode:

  • Run /bin/standby from the command line, or

  • Briefly (less than two seconds) press the power key

Resume events

The system can resume from any interrupt-generating event, including:

  • Internal RTC alarm

  • External RTC alarm

  • Power key event

  • Wake on LAN (if supported by the driver)

The following wake-up sources are enabled by default:

  • Power key

  • Internal RTC alarm

See Configuring wake-up sources for additional details.

Power off

The Linux kernel can perform a power-off operation that places the Power Management IC (PMIC) in power off mode, disabling all power sources that are not needed for wake up.

Entering power off

To enter power off mode you can do one of the following:

  • Run the command poweroff from the command line to perform a controlled software power-off sequence.

Wake up events

You can wake up the target from power-off mode with an interrupt event to the PMIC, but not to the CPU as it will not be powered. These include:

  • Power key event

  • Internal RTC alarm

  • External RTC alarm

The power key will always wake up the system.

Configuring wake-up sources

GPIO resume from suspend

CPU GPIOs as wake-up source

CPU GPIOs can only act as wake-up sources if they have been configured to send an input key event to the system via a driver such as gpio-keys. To do so, add an entry like this to the device tree:

/ {
	...

	gpio-keys {
		compatible = "gpio-keys";
		power {
			label = "Power Button";
			gpios = <&gpio2 20 1>;
			linux,code = <116>; /* KEY_POWER */
			gpio-key,wakeup;
		};
	};

	...
};
Triggering the GPIO during suspend wakes the system up. Triggering the GPIO when the system is running also sends the KEY_POWER event, which powers the system off.

RTC alarm resume

To enable the RTC wake alarm to trigger in 60 seconds:

  • Enable the RTC device as a wake-up source:

    # echo enabled > /sys/class/rtc/rtc0/device/power/wakeup
  • Program the time when the alarm should trigger an interrupt (format is seconds since the epoch or, if there’s a leading +, seconds in the future or, if there’s a leading +=, seconds ahead of the current alarm):

    # echo +60 > /sys/class/rtc/rtc0/wakealarm