X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=alsasound.init;h=6c66b7e5bd8fd4c5d638e0b9a8a944fb9abaf7f6;hb=refs%2Ftags%2Fauto%2Fth%2Falsa-utils-1.2.1-1;hp=a4907cb35fde2462b76d94fa8028acbff8750093;hpb=8e5b403607549a774d33b31b8471adbfaac323c6;p=packages%2Falsa-utils.git diff --git a/alsasound.init b/alsasound.init index a4907cb..6c66b7e 100644 --- a/alsasound.init +++ b/alsasound.init @@ -3,9 +3,7 @@ # alsasound This shell script takes care of starting and stopping \ # ALSA sound driver. # -# This script requires /usr/sbin/alsactl program from alsa-utils package. -# -# Copyright (c) by Jaroslav Kysela +# Copyright (c) by Jaroslav Kysela # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,40 +28,25 @@ # Source function library. . /etc/rc.d/init.d/functions -alsactl=/usr/sbin/alsactl - -if [ -r /etc/modules.conf ]; then -MODULES_CONF=/etc/modules.conf -else -MODULES_CONF=/etc/conf.modules -fi - driver_start() { # # insert all sound modules # - if OLDLOGLEV=$(awk '{print $1}' < /proc/sys/kernel/printk 2> /dev/null); then - /sbin/loglevel 1 - fi - awk '$1 == "alias" && $3 != "off" && ($2 ~ /^snd-card-[0-9]$/ || $2 ~ /^sound-service-[0-9]-[0-9]+$/) {print $2}' < $MODULES_CONF | \ + modprobe -c | awk '$1 == "alias" && $3 != "off" && ($2 ~ /^snd-card-[0-9]$/) {print $3}' | \ + while read line; do \ + msg_starting "sound driver: $line" + busy + /sbin/modprobe $line + ok + done + modprobe -c | awk '$1 == "alias" && $3 != "off" && ($2 ~ /^sound-service-[0-9]-[0-9]+$/) {print $3}' | \ while read line; do \ msg_starting "sound driver: $line" busy /sbin/modprobe $line ok done - if [ -n "$OLDLOGLEV" ]; then - /sbin/loglevel "$OLDLOGLEV" - fi - # - # restore driver settings - # - if [ -x $alsactl ]; then - $alsactl restore - else - show "ERROR: alsactl not found"; fail - fi } detect_stop() @@ -71,21 +54,13 @@ detect_stop() # # remove all sound modules # - /sbin/lsmod | awk '/^snd/ { print $0 }' | while read line; do \ - /sbin/rmmod `echo $line | cut -d ' ' -f 1`; \ + /sbin/lsmod | awk '/^(snd|ac97_bus)/ { print $1 }' | while read module; do \ + /sbin/rmmod $module done } driver_stop() { - # - # store driver settings - # - if [ -x $alsactl ]; then - $alsactl store - else - show '!!!alsactl not found!!!'; fail - fi # # remove all sound modules # @@ -100,10 +75,8 @@ detect_start() /sbin/modprobe snd-detect } -# See how we were called. -case "$1" in - start) - # Start driver. +# Start driver. +start() { if [ ! -d /proc/asound ]; then driver_start if [ -d /proc/asound ]; then @@ -113,7 +86,7 @@ case "$1" in fi else if [ -f /proc/asound/detect ]; then - show "Shutting down sound detect module:" + show "Shutting down sound detect module" detect_stop ok driver_start @@ -126,11 +99,17 @@ case "$1" in msg_already_running "ALSA driver" fi fi - ;; - stop) - # Stop daemons. + # "restore" is handled via udev if running; if not, do it manually + if is_no "$START_UDEV" && [ -f /var/lib/alsa/asound.state ]; then + sleep 1 + /sbin/alsactl restore + fi +} + +# Stop daemons. +stop() { if [ -d /proc/asound ]; then - show "Shutting down sound driver:" + show "Shutting down sound driver" busy if [ -f /proc/asound/detect ]; then detect_stop @@ -145,17 +124,42 @@ case "$1" in else msg_not_running "ALSA driver" fi +} + +condrestart() { + if [ -f /var/lock/subsys/alsasound ]; then + stop + start + else + msg_not_running "ALSA driver" + RETVAL=$1 + fi +} + + +# See how we were called. +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + try-restart) + condrestart 0 ;; - restart|force-reload) - $0 stop - $0 start - exit $? + force-reload) + condrestart 7 ;; status) # TODO ;; *) - msg_usage "$0 {start|stop|restart|force-reload|status}" + msg_usage "$0 {start|stop|restart|try-restart|force-reload|status}" exit 3 esac