[Pm-utils] [PATCH 4/6] Move the check_ functions to pm-functions.

Victor Lowther victor.lowther at gmail.com
Wed Sep 17 20:22:53 PDT 2008


Also conditionalize the do_ functions in the sleep modules.  Now, we only
declare the actual do_ functions if the system can in fact sleep using
the requested method.
---
 pm/module.d/kernel   |   62 ++++++++++++++-----------------------
 pm/module.d/tuxonice |   57 +++++++++++++----------------------
 pm/module.d/uswsusp  |   82 +++++++++++++++++++++++++------------------------
 pm/pm-functions.in   |    7 ++++
 4 files changed, 94 insertions(+), 114 deletions(-)

diff --git a/pm/module.d/kernel b/pm/module.d/kernel
dissimilarity index 96%
index 88a9e5d..ee71278 100755
--- a/pm/module.d/kernel
+++ b/pm/module.d/kernel
@@ -1,38 +1,24 @@
-#!/bin/sh
-
-check_suspend()
-{
-	[ -c /dev/pmu ] || grep -q mem /sys/power/state
-}
-
-do_suspend()
-{
-	if [ -c /dev/pmu ]; then
-		pm-pmu --suspend
-	else
-		echo -n "mem" > /sys/power/state
-	fi
-}
-
-check_hibernate()
-{
-	[ -f /sys/power/disk ] && grep -q disk /sys/power/state
-}
-
-do_hibernate()
-{
-	[ -n "${HIBERNATE_MODE}" ] && \
-	grep -qw "${HIBERNATE_MODE}" /sys/power/disk && \
-	echo -n "${HIBERNATE_MODE}" > /sys/power/disk
-	echo -n "disk" > /sys/power/state
-}
-
-check_suspend_hybrid()
-{
-	return 1
-}
-
-do_suspend_hybrid()
-{
-	return 1
-}
+#!/bin/sh
+
+if [ -z "$SUSPEND_MODULE" ]; then
+	if grep -q mem /sys/power/state; then
+		SUSPEND_MODULE="kernel"
+		do_suspend() { echo -n "mem" >/sys/power/state; }
+	elif [ -c /dev/pmu ] && pm-pmu --check; then
+		SUSPEND_MODULE="kernel"
+		do_suspend() { pm-pmu --suspend; }
+	fi
+fi
+
+if [ -z "$HIBERNATE_MODULE" ] && \
+	[ -f /sys/power/disk ] && \
+	grep -q disk /sys/power/state; then
+	HIBERNATE_MODULE="kernel"
+	do_hibernate()
+	{
+		[ -n "${HIBERNATE_MODE}" ] && \
+		grep -qw "${HIBERNATE_MODE}" /sys/power/disk && \
+		echo -n "${HIBERNATE_MODE}" > /sys/power/disk
+		echo -n "disk" > /sys/power/state
+	}
+fi
diff --git a/pm/module.d/tuxonice b/pm/module.d/tuxonice
index 57b7bb8..f4e3de9 100755
--- a/pm/module.d/tuxonice
+++ b/pm/module.d/tuxonice
@@ -11,41 +11,26 @@ for loc in "/sys/power/tuxonice" "/sys/power/suspend2"; do
 	[ -d "${loc}" ] && { TUXONICE_LOC="${loc}"; break; }
 done 
 
-check_suspend()
-{
-	[ -c /dev/pmu ] || grep -q mem /sys/power/state
-}
+if [ -z "$HIBERNATE_MODULE" -a -n "$TUXONICE_LOC" ] && \
+	[ -f "${TUXONICE_LOC}/do_hibernate" ]; then
+	HIBERNATE_METHOD="tuxonice"
+	do_hibernate()
+	{
+		echo 5 > "${TUXONICE_LOC}/powerdown_method"
+		echo anything > "${TUXONICE_LOC}/do_hibernate"
+	}
+fi
 
-do_suspend()
-{
-	if [ -c /dev/pmu ]; then
-		pm-pmu --suspend
-	else
-		echo -n "mem" > /sys/power/state
-	fi
-}
-
-check_hibernate()
-{
-	[ -f "${TUXONICE_LOC}/do_hibernate" ]
-}
-
-do_hibernate()
-{
-	echo 5 > "${TUXONICE_LOC}/powerdown_method"
-	echo anything > "${TUXONICE_LOC}/do_hibernate"
-}
-
-check_suspend_hybrid()
-{
+if [ -z "$SUSPEND_HYBRID_MODULE" -a -n "$TUXONICE_LOC" ] && \
 	grep -q mem /sys/power/state && \
-	[ -f "${TUXONICE_LOC}/do_hibernate" ]
-}
-do_suspend_hybrid()
-{
-	echo 3 >"${TUXONICE_LOC}/powerdown_method"
-	echo anything >"${TUXONICE_LOC}/do_hibernate"
-	[ -f /sys/power/tuxonice/did_suspend_to_both ] && \
-	    [ "$(cat /sys/power/tuxonice/did_suspend_to_both)" != "1" ] && \
-	    REVERSE="thaw"
-}
+	[ -f "${TUXONICE_LOC}/do_hibernate" ]; then
+	SUSPEND_HYBRID_METHOD="tuxonice"
+	do_suspend_hybrid()
+	{
+		echo 3 >"${TUXONICE_LOC}/powerdown_method"
+		echo anything >"${TUXONICE_LOC}/do_hibernate"
+		[ -f /sys/power/tuxonice/did_suspend_to_both ] && \
+	    	[ "$(cat /sys/power/tuxonice/did_suspend_to_both)" != "1" ] && \
+	    	REVERSE="thaw"
+	}
+fi
diff --git a/pm/module.d/uswsusp b/pm/module.d/uswsusp
index 615da3a..1bb1e68 100755
--- a/pm/module.d/uswsusp
+++ b/pm/module.d/uswsusp
@@ -33,44 +33,6 @@ uswsusp_get_quirks()
 	[ "$QUIRK_NONE" = "true" ] && OPTS=""
 }
 
-check_suspend()
-{
-	command_exists s2ram || return 1
-	[ -c /dev/pmu ] || grep -q mem /sys/power/state
-}
-
-do_suspend()
-{
-	uswsusp_get_quirks
-	s2ram --force $OPTS
-}
-
-check_hibernate()
-{
-	[ -f /sys/power/disk ] && \
-	grep -q disk /sys/power/state && \
-	[ -c /dev/snapshot ] &&
-	command_exists s2disk	
-}
-
-do_hibernate()
-{
-	s2disk
-}
-
-check_suspend_hybrid()
-{
-	grep -q mem /sys/power/state && \
-	command_exists s2both && \
-	check_hibernate
-}
-
-do_suspend_hybrid()
-{
-	uswsusp_get_quirks
-	s2both --force $OPTS 
-}
-
 uswsusp_help()
 {
 	echo  # first echo makes it look nicer.
@@ -90,5 +52,45 @@ uswsusp_help()
 	echo "  --quirk-none"
 }
 
-add_module_help uswsusp_help
-add_before_hooks uswsusp_hooks
+if [ -z "$SUSPEND_METHOD" ] && command_exists s2ram && \
+	( grep -q mem /sys/power/state || \
+		( [ -c /dev/pmu ] && pm-pmu --check; ); ); then
+	SUSPEND_METHOD="uswsusp"
+	do_suspend()
+	{
+		uswsusp_get_quirks
+		s2ram --force $OPTS
+	}
+	if [ "$METHOD" = "suspend" ]; then
+		add_before_hooks uswsusp_hooks
+		add_module_help uswsusp_help
+	fi
+fi
+
+if [ -z "$HIBERNATE_METHOD" ] && \
+	[ -f /sys/power/disk ] && \
+	grep -q disk /sys/power/state && \
+	[ -c /dev/snapshot ] &&
+	command_exists s2disk; then
+	HIBERNATE_METHOD="uswsusp"
+	do_hibernate()
+	{
+		s2disk
+	}
+fi
+
+if [ -z "$SUSPEND_HYBRID_METHOD" ] && 
+	grep -q mem /sys/power/state && \
+	command_exists s2both && \
+	check_hibernate; then
+	SUSPEND_HYBRID_METHOD="uswsusp"
+	do_suspend_hybrid()
+	{
+		uswsusp_get_quirks
+		s2both --force $OPTS 
+	}
+	if [ "$METHOD" = "suspend_hybrid" ]; then
+		add_before_hooks uswsusp_hooks
+		add_module_help uswsusp_help
+	fi
+fi
diff --git a/pm/pm-functions.in b/pm/pm-functions.in
index a9c8912..54c5fca 100644
--- a/pm/pm-functions.in
+++ b/pm/pm-functions.in
@@ -46,6 +46,9 @@ INHIBIT="${STORAGEDIR}/inhibit"
 PM_CMDLINE="$*"
 BEFORE_HOOKS=""
 MODULE_HELP=""
+SUSPEND_MODULE=""
+HIBERNATE_MODULE=""
+SUSPEND_HYBRID_MODULE=""
 
 # when loading configuration files, allow stash-specific ones
 # to override the pm-utils global ones.
@@ -233,6 +236,10 @@ init_logfile()
 	exec > "$1" 2>&1
 }
 
+check_suspend() { [ -n "$SUSPEND_MODULE" ]; }
+check_hibernate() { [ -n "$HIBERNATE_MODULE" ]; }
+check_suspend_hybrid() { [ -n "$SUSPEND_HYBRID_MODULE" ]; }
+
 SLEEP_FUNCTIONS="${PM_UTILS_LIBDIR}/module.d/${SLEEP_MODULE}"
 [ -f "${SLEEP_FUNCTIONS}" ] || { 
 	echo "Requested sleep module $SLEEP_MODULE not available."
-- 
1.5.6.5



More information about the Pm-utils mailing list