]> git.pld-linux.org Git - packages/acpid.git/blobdiff - acpid.init
- use functions, add load-modules
[packages/acpid.git] / acpid.init
index 9d150f626e126ac0869eacbf74412e28ba958ebe..fa78f9627ddfd4dda7d872869b2db5fd7f2b8091 100644 (file)
@@ -8,6 +8,9 @@
 #
 # 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
 
@@ -16,80 +19,133 @@ LAPTOP_MODULES=""
 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
 
This page took 0.083076 seconds and 4 git commands to generate.