#
# pidfile: /var/run/acpid.pid
+# Check for ACPI event-file support on kernel side
+[ -r /proc/acpi/event ] || exit 0
+
# Source function library.
. /etc/rc.d/init.d/functions
VARIOUS_MODULES=""
ASUS_LAPTOP=""
TOSHIBA_LAPTOP=""
+MODULES=""
# Configuration file.
. /etc/sysconfig/acpid
-RETVAL=0
-# See how we were called.
-case "$1" in
- start)
- # Start daemons.
- if [ ! -f /var/lock/subsys/acpid ]; then
- if [ ! -d /proc/acpi/button ]; then
- _modprobe ospm_button
- _modprobe button
- fi
- if [ "$(kernelverser)" -lt "002006" ] && is_yes "$MODPROBE_OSPM_SYSTEM"; then
- _modprobe single ospm_system
- fi
- # Load additional modules:
- if [ -n "$LAPTOP_MODULES" ]; then
- for i in $LAPTOP_MODULES; do
- _modprobe single $i
- done
+# As the name says. If the kernel supports modules,
+# it'll try to load the ones listed in "MODULES".
+load_modules() {
+ [ -f /proc/modules ] || return 0
+
+ if [ "$MODULES" = "all" ]; then
+ MODULES=$(sed -rn 's#^kernel/(drivers/acpi|drivers/misc/.*_acpi)/([^/]+/)*(.*)\.ko\.gz:.*#\3#p' /lib/modules/$(uname -r)/modules.dep)
+ else
+ # assemble from old lists
+ MODULES="$MODULES $LAPTOP_MODULES"
+ MODULES="$MODULES $VARIOUS_MODULES"
+ if is_yes "$ASUS_LAPTOP"; then
+ MODULES="$MODULES asus_acpi"
fi
- if [ -n "$VARIOUS_MODULES" ]; then
- for i in $VARIOUS_MODULES; do
- _modprobe single $i
- done
+ if is_yes "$TOSHIBA_LAPTOP"; then
+ MODULES="$MODULES toshiba_acpi"
fi
- # Determine if it's ASUS or TOSHIBA laptop
- if is_yes "$ASUS_LAPTOP"; then
- _modprobe asus_acpi
- elif is_yes "$TOSHIBA_LAPTOP"; then
- _modprobe toshiba_acpi
+ if is_yes "$IBM_LAPTOP"; then
+ MODULES="$MODULES ibm_acpi"
fi
- # starting:
- msg_starting acpid $PROGRAM_ARGS
- daemon acpid
- RETVAL=$?
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/acpid
- else
- msg_already_running acpid
+ # strip spaces
+ MODULES=$(echo ${MODULES})
fi
- ;;
- stop)
- # Stop daemons.
+
+ if [ -z "$MODULES" ]; then
+ return
+ fi
+
+ # see if the modules are already loaded
+ if [ "$(lsmod | grep -E '^('$(echo $MODULES | tr ' ' '|')')\b' | wc -l)" = "$(echo $MODULES | wc -w)" ]; then
+ return
+ fi
+
+ show "Loading ACPI modules..."; busy
+ modprobe --all $MODULES && ok || fail
+}
+
+# Start daemons.
+start() {
if [ -f /var/lock/subsys/acpid ]; then
- msg_stopping acpid
- killproc acpid
- rm -f /var/lock/subsys/acpid >/dev/null 2>&1
- else
- msg_not_running acpid
+ msg_already_running "ACPI Event Daemon"
+ return
fi
- ;;
- reload|force-reload)
+
+ load_modules
+
+ if is_yes "$NETLINK"; then
+ PROGRAM_ARGS="$PROGRAM_ARGS -n"
+ fi
+ if [ "$CLIENTMAX" ]; then
+ PROGRAM_ARGS="$PROGRAM_ARGS -C $CLIENTMAX"
+ fi
+
+ # starting:
+ msg_starting "ACPI Event Daemon"
+ daemon /usr/sbin/acpid $PROGRAM_ARGS
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && touch /var/lock/subsys/acpid
+}
+
+# Stop daemons.
+stop() {
+ if [ ! -f /var/lock/subsys/acpid ]; then
+ msg_not_running "ACPI Event Daemon"
+ return
+ fi
+
+ msg_stopping "ACPI Event Daemon"
+ killproc acpid
+ rm -f /var/lock/subsys/acpid >/dev/null 2>&1
+}
+
+condrestart() {
+ if [ ! -f /var/lock/subsys/acpid ]; then
+ msg_not_running "ACPI Event Daemon"
+ RETVAL=$1
+ return
+ fi
+
+ stop
+ start
+}
+
+reload() {
if [ -f /var/lock/subsys/acpid ]; then
- msg_reloading acpid
- killproc acpid -HUP
- RETVAL=$?
- else
- msg_not_running acpid >&2
- exit 7
+ msg_not_running "ACPI Event Daemon"
+ RETVAL=7
+ return
fi
+
+ msg_reloading "ACPI Event Daemon"
+ killproc acpid -HUP
+ RETVAL=$?
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
;;
restart)
- $0 stop
- $0 start
- exit $?
+ stop
+ start
+ ;;
+ try-restart)
+ condrestart 0
+ ;;
+ reload|force-reload)
+ reload
+ ;;
+ load-modules)
+ load_modules
;;
status)
status acpid
- exit $?
;;
*)
- msg_usage "$0 {start|stop|restart|reload|force-reload|status}"
+ msg_usage "$0 {start|stop|restart|try-restart|reload|force-reload|load-modules|status}"
exit 3
esac