#!/bin/sh
# power - starts either acpi or apm daemon
#
# chkconfig: 2345 64 10
# description: optimises power consumption, specially for laptops
# config: /etc/sysconfig/powersave
#		
# Do not load RH compatibility interface.
WITHOUT_RC_COMPAT=1

CONFIG=/etc/powersave

# Source function library.
. /etc/init.d/functions

RETVAL=0
LOCKFILE=/var/lock/subsys/powersaved
POWERSAVED_BIN=/usr/sbin/powersaved
POWERSAVE_BIN=/usr/bin/powersave
ACPID_BIN=/usr/sbin/acpid
CPUFREQ_DETECT=/usr/sbin/cpufreq-detect.sh
test -x $POWERSAVED_BIN || exit 5
test -r $CONFIG || exit 6
SourceIfNotEmpty $CONFIG/common
SourceIfNotEmpty $CONFIG/cpufreq
POWERSAVED_OPTS=" -f /var/run/acpid.socket -c /etc/powersave"
LIBDIR=lib
[ -d /usr/lib64/powersave ] && LIBDIR=lib64

start()
{
    if [ -x $ACPID_BIN ]; then
	if status --expect-user root -- $ACPID_BIN >/dev/null 2>&1; then
	    stop_daemon --expect-user root -- $ACPID_BIN
	    [ -f /var/lock/subsys/acpid ] && rm -f /var/lock/subsys/acpid
	fi

	start_daemon --expect-user root -- $ACPID_BIN -c /etc/acpi/events.ignore
    fi

    # set thermal polling frequency
    # this should be managed by the daemon later
    for x in /proc/acpi/thermal_zone/*; do
	[ -w $x/polling_frequency ] && echo 5 >$x/polling_frequency
    done
    modprobe cpufreq_userspace &>/dev/null
    modprobe cpufreq_ondemand &>/dev/null
    modprobe cpufreq_conservative &>/dev/null
    modprobe cpufreq_powersave &>/dev/null
    modprobe ac &>/dev/null
    $CPUFREQ_DETECT

    usleep 10000

    [ -n "$DEBUG" ] && POWERSAVED_OPTS="$POWERSAVED_OPTS -v $DEBUG"
    start_daemon --lockfile "$LOCKFILE"  -- $POWERSAVED_BIN -d -x /usr/$LIBDIR/powersave/scripts $POWERSAVED_OPTS
    RETVAL=$?
}
stop()
{
    if [ -x $ACPID_BIN ];then
	stop_daemon --expect-user root -- $ACPID_BIN
    fi 
    stop_daemon --lockfile "$LOCKFILE" -- $POWERSAVED_BIN
}

restart()
{
    stop
    sleep 1
    start
}

reload()
{
    stop
    start
}

# See how we were called.
case "$1" in
    start|stop|reload|restart|abort)
    "$1"
    ;;
    condstop)
    if [ -e "$LOCKFILE" ]; then
	stop
    fi
    ;;
    condrestart)
    if [ -e "$LOCKFILE" ]; then
	restart
    fi
    ;;
    condreload)
    if [ -e "$LOCKFILE" ]; then
	reload
    fi
    ;;
    status)
    if [ -x "$ACPID_BIN" ]; then
	status --expect-user root -- $ACPID_BIN
    fi
    status --expect-user root -- $POWERSAVED_BIN
    RETVAL=$?
    ;;
    *)
    msg_usage "${0##*/} {start|stop|adjust|reload|restart|abort|check|flush|condstop|condrestart|condreload|status}"
    RETVAL=1
esac

exit $RETVAL
