#!/bin/sh

RESUME_DEV=""

check_suspend()
{
	[ -c /dev/pmu ] || grep -q mem /sys/power/state
}

do_suspend()
{
	echo -n "mem" > /sys/power/state
}

find_resume_dev()
{
	local CONF_RESUME_DEV=`sed -rne 's,^resume device\s*=\s*(/.*),\1,;T;p' /etc/suspend.conf`
	if [ -z "$CONF_RESUME_DEV" ]; then
		RESUME_DEV=`sed -rne 's/.*\bresume=(\S*).*/\1/;T;p' /proc/cmdline`
	fi
	if [[ "$RESUME_DEV" == LABEL=* || "$RESUME_DEV" == UUID=* ]]; then
		RESUME_DEV=$(/sbin/blkid -l -o device -t "${RESUME_DEV}")
	fi
	[ -n "$RESUME_DEV" -o -n "$CONF_RESUME_DEV" ]
}

check_hibernate()
{
	[ -f /sys/power/disk ] && \
	grep -q disk /sys/power/state && \
	[ -c /dev/snapshot ] &&
	command_exists s2disk && find_resume_dev
}

do_hibernate()
{
	s2disk $RESUME_DEV
}

check_suspend_hybrid()
{
	grep -q mem /sys/power/state && \
	command_exists s2both && \
	check_hibernate
}

do_suspend_hybrid()
{
	s2both --force $RESUME_DEV
}
