diff options
Diffstat (limited to 'move/tree')
-rwxr-xr-x | move/tree/alsa_default.pl | 19 | ||||
-rwxr-xr-x | move/tree/sound.initscript | 116 |
2 files changed, 135 insertions, 0 deletions
diff --git a/move/tree/alsa_default.pl b/move/tree/alsa_default.pl new file mode 100755 index 000000000..927c8c1d3 --- /dev/null +++ b/move/tree/alsa_default.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl + +# state machine: +if (/\s*control\./) { + ($min, $max) = (0, 0); +} elsif (/\s*name '/) { + # skip masks + $ignore = /\s*name '.*(3D Control|mask|Exchange DAC|Output Jack)/; +} elsif (!$ignore) { + if (/s*comment.range '(\d+) - (\d+)'/) { + ($min, $max) = ($1, $2); + } elsif (/s*value/) { + # enable switches (we should really blacklist sb live and the like): + s/(value\w*\S*)\s* false/\1 true/; + # set volume to 67%: + my $val = $max*0.6; + s/(value\w*\S*)\s* 0/\1 $val/ + } +} diff --git a/move/tree/sound.initscript b/move/tree/sound.initscript new file mode 100755 index 000000000..756f22398 --- /dev/null +++ b/move/tree/sound.initscript @@ -0,0 +1,116 @@ +#!/bin/sh +# (c) MandrakeSoft, Chmouel Boudjnah <chmouel@mandrakesoft.com> +# $Id$ +# +# sound: This shell script launch the sound on your system. +# +# chkconfig: 2345 18 69 +# description: This shell script launch the sound on your system. + +. /etc/rc.d/init.d/functions + +PKLVL=$(cut -f1 /proc/sys/kernel/printk) +sysctl -n -w kernel.printk=0 + +function start_mixer () { + # ALSA + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ]; then + # is ALSA already configured ? + if [[ ! -r /etc/asound.state ]]; then + # provide decent default sound level for alsa drivers + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ];then + MIXER_SETTINGS=/root/tmp/asound.state_tmp + alsactl -f $MIXER_SETTINGS store + # set sensible defaults: + perl -pi /usr/bin/alsa_default.pl $MIXER_SETTINGS + action "Setting mixer settings" alsactl -f $MIXER_SETTINGS restore + rm -f $MIXER_SETTINGS + return 0 + fi + # if we've not alsa-utils, we'll fallback on OSS initialization below + else + # Not first boot: + # Done by alsa service but only if sound service is not + # enabled (hance this code path). + # We'll merge in back aksa service once mdk9.2 is released. + # [but we'll still handle both aumix & alsactl in order + # to manage packages removing / driver switch] + action "Loading mixer settings" /usr/sbin/alsactl restore + return 0 + fi + fi + # OSS + if egrep -q '(sparcaudio|sound)' /proc/devices 2>/dev/null && \ + [ "$retval" -eq 0 ] && [ -x /usr/bin/aumix ];then + if [ ! -r /etc/.aumixrc ];then + action "Setting mixer settings" /usr/bin/aumix -v80 -w80 -c80 + else + action "Loading mixer settings" /usr/bin/aumix -f /etc/.aumixrc -L + fi + fi +} + +function stop_mixer () { + if [ -d /proc/asound ] && [ -x /usr/sbin/alsactl ];then + # done by alsa service (to merge back after mdk9.2 release) + #action "Saving mixer settings" /usr/sbin/alsactl store + return 0; + fi + if egrep -q '(sparcaudio|sound)' /proc/devices 2>/dev/null && [ -x /usr/bin/aumix ];then + action "Saving mixer settings" /usr/bin/aumix -f /etc/.aumixrc -S + fi +} + +function module () { + opt="" + phrase=$1 + alias=$2 + [ -n "$3" ] && opt="-r" + module=`/sbin/modprobe -c | egrep -s "^alias( |\t)+"$alias"( |\t)+" | awk '{ print $3 }'` + if [ -n "$module" ] && [ "$module" != "off" ];then + action "$phrase ($module)" modprobe "$opt" $module + return $? + fi +} + +case $1 in + start) + retval=0 + if [ ! -d /proc/asound ];then + module "Loading sound module" sound || retval=1 + /sbin/modprobe -c | awk '/^((alias)|(probe)) +sound-slot-[0-9]/ {print $2}' | ( \ + while read line; do + [[ $line = snd-card-* ]] && continue #we do it via alsa script + module "Loading sound module" $line || retval=1 + done + ) + module "Loading midi module" midi + fi + start_mixer; + touch /var/lock/subsys/sound + ;; + stop) + # i should have the same semantic of alsa script than oss script, + # but i do not :-(, patches welcome. + stop_mixer; + rm -f /var/lock/subsys/sound + ;; + status) + if egrep -q '(sparcaudio|sound)' /proc/devices;then + gprintf "Sound loaded" + echo + fi + ;; + reload) + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: %s\n" "$(basename $0) {start|stop|restart|status}" + exit 0 +esac + +sysctl -n -w kernel.printk=$PKLVL +exit 0 |