diff options
Diffstat (limited to 'abs/core/alsa-utils/alsa')
-rwxr-xr-x | abs/core/alsa-utils/alsa | 48 |
1 files changed, 27 insertions, 21 deletions
diff --git a/abs/core/alsa-utils/alsa b/abs/core/alsa-utils/alsa index 08f76af..1e7b57f 100755 --- a/abs/core/alsa-utils/alsa +++ b/abs/core/alsa-utils/alsa @@ -7,50 +7,56 @@ case "$1" in start) stat_busy "Restoring ALSA Levels" - /usr/sbin/alsactl $ALSA_ARGS restore - if [ $? -gt 0 ]; then - stat_fail - else + if [[ ! -e /var/lib/alsa/asound.state ]]; then + /usr/sbin/alsactl $ALSA_ARGS store || { stat_fail; exit 1; } + fi + if /usr/sbin/alsactl $ALSA_ARGS restore; then stat_done add_daemon alsa + else + stat_fail + exit 1 fi POWERSAVE=${POWERSAVE:-0} - if [ -e /sys/module/snd_ac97_codec/parameters/power_save \ - -a $POWERSAVE -ne 0 ]; then + if [[ -e /sys/module/snd_ac97_codec/parameters/power_save ]] \ + && (( $POWERSAVE )); then echo $POWERSAVE > /sys/module/snd_ac97_codec/parameters/power_save - [ -c /dev/dsp ] && echo 1 > /dev/dsp + [[ -c /dev/dsp ]] && echo 1 > /dev/dsp fi - - if [ -e /sys/module/snd_hda_intel/parameters/power_save \ - -a $POWERSAVE -ne 0 ]; then + if [[ -e /sys/module/snd_hda_intel/parameters/power_save ]] \ + && (( $POWERSAVE )); then echo $POWERSAVE > /sys/module/snd_hda_intel/parameters/power_save - [ -c /dev/dsp ] && echo 1 > /dev/dsp + [[ -c /dev/dsp ]] && echo 1 > /dev/dsp fi ;; stop) SAVE_VOLUME=${SAVE_VOLUME:-yes} - if [ "$SAVE_VOLUME" == "yes" ]; then + if [[ "$SAVE_VOLUME" = "yes" ]]; then stat_busy "Saving ALSA Levels" - /usr/sbin/alsactl $ALSA_ARGS store + /usr/sbin/alsactl $ALSA_ARGS store || { stat_fail; exit 1; } else stat_busy "Stopping ALSA" fi if [ "$MUTE_VOLUME" == "yes" ]; then - /usr/bin/amixer -q set Master 0 mute - fi - if [ $? -gt 0 ]; then - stat_fail - else - stat_done - rm_daemon alsa + /usr/bin/amixer -q set Master 0 mute || { stat_fail; exit 1; } fi + stat_done + rm_daemon alsa ;; restart) $0 stop sleep 1 $0 start ;; + force-restart) + stat_busy "Trying to TERM or KILL processes that are blocking ALSA..." + FILES="$(ls -1 /dev/snd/* | grep -vi control)" + fuser -k -SIGTERM $FILES + fuser -k $FILES + stat_done + $0 restart + ;; *) - echo "usage: $0 {start|stop|restart}" + echo "usage: $0 {start|stop|restart|force-restart}" esac |