#!/bin/sh . "${PM_FUNCTIONS}" [ -d /sys/devices/system/cpu/ ] || exit $NA hibernate_cpufreq() { ( cd /sys/devices/system/cpu/ for x in cpu[0-9]*; do # if cpufreq is a symlink, it is handled by another cpu. Skip. [ -L "$x/cpufreq" ] && continue gov="$x/cpufreq/scaling_governor" # if we do not have a scaling_governor file, skip. [ -f "$gov" ] || continue # if our temporary governor is not available, skip. grep -q "$TEMPORARY_CPUFREQ_GOVERNOR" \ "$x/cpufreq/scaling_available_governors" || continue savestate "${x}_governor" $(cat "$gov") echo "$TEMPORARY_CPUFREQ_GOVERNOR" > "$gov" done ) } thaw_cpufreq() { ( cd /sys/devices/system/cpu/ for x in cpu[0-9]*/cpufreq/scaling_governor ; do [ -f "$x" ] || continue local gov="$(restorestate "${x%%/*}_governor")" [ -z "$gov" ] && continue echo "$gov" > "$x" done ) } case "$1" in suspend*|hibernate) hibernate_cpufreq ;; resume|thaw) thaw_cpufreq ;; *) exit $NA ;; esac