84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			84 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | #!/sbin/runscript | ||
|  | # $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd-r5,v 1.1 2012/02/20 09:03:53 chainsaw Exp $ | ||
|  | # Copyright 1999-2012 Gentoo Foundation | ||
|  | # Distributed under the terms of the GNU General Public License v2 | ||
|  | 
 | ||
|  | alsastatedir=/var/lib/alsa | ||
|  | alsascrdir=/etc/alsa.d | ||
|  | 
 | ||
|  | extra_commands="save restore" | ||
|  | 
 | ||
|  | depend() { | ||
|  | 	need localmount | ||
|  | 	after bootmisc modules isapnp coldplug hotplug | ||
|  | } | ||
|  | 
 | ||
|  | restore() { | ||
|  | 	ebegin "Restoring Mixer Levels" | ||
|  | 
 | ||
|  | 	if [ ! -r "${alsastatedir}/asound.state" ] ; then | ||
|  | 		ewarn "No mixer config in ${alsastatedir}/asound.state, you have to unmute your card!" | ||
|  | 		eend 0 | ||
|  | 		return 0 | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	local cards="$(sed -n -e 's/ *\([[:digit:]]*\) .*/\1/p' /proc/asound/cards)" | ||
|  | 	local CARDNUM | ||
|  | 	for cardnum in ${cards}; do | ||
|  | 		[ -e /dev/snd/controlC${cardnum} ] || sleep 2 | ||
|  | 		[ -e /dev/snd/controlC${cardnum} ] || sleep 2 | ||
|  | 		[ -e /dev/snd/controlC${cardnum} ] || sleep 2 | ||
|  | 		[ -e /dev/snd/controlC${cardnum} ] || sleep 2 | ||
|  | 		alsactl -I -f "${alsastatedir}/asound.state" restore ${cardnum} \ | ||
|  | 			|| ewarn "Errors while restoring defaults, ignoring" | ||
|  | 	done | ||
|  | 
 | ||
|  | 	for ossfile in "${alsastatedir}"/oss/card*_pcm* ; do | ||
|  | 		[ -e "${ossfile}" ] || continue | ||
|  | 		# We use cat because I'm not sure if cp works properly on /proc | ||
|  | 		local procfile=${ossfile##${alsastatedir}/oss} | ||
|  | 		procfile="$(echo "${procfile}" | sed -e 's,_,/,g')" | ||
|  | 		if [ -e /proc/asound/"${procfile}"/oss ] ; then | ||
|  | 		    cat "${ossfile}" > /proc/asound/"${procfile}"/oss  | ||
|  | 		fi | ||
|  | 	done | ||
|  | 
 | ||
|  | 	eend 0 | ||
|  | } | ||
|  | 
 | ||
|  | save() { | ||
|  | 	ebegin "Storing ALSA Mixer Levels" | ||
|  | 
 | ||
|  | 	mkdir -p "${alsastatedir}" | ||
|  | 	if ! alsactl -f "${alsastatedir}/asound.state" store; then | ||
|  | 		eerror "Error saving levels." | ||
|  | 		eend 1 | ||
|  | 		return 1 | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	for ossfile in /proc/asound/card*/pcm*/oss; do | ||
|  | 		[ -e "${ossfile}" ] || continue | ||
|  | 		local device=${ossfile##/proc/asound/} ; device=${device%%/oss} | ||
|  | 		device="$(echo "${device}" | sed -e 's,/,_,g')" | ||
|  | 		mkdir -p "${alsastatedir}/oss/" | ||
|  | 		cp "${ossfile}" "${alsastatedir}/oss/${device}" | ||
|  | 	done | ||
|  | 
 | ||
|  | 	eend 0 | ||
|  | } | ||
|  | 
 | ||
|  | start() { | ||
|  | 	if [ "${RESTORE_ON_START}" = "yes" ]; then | ||
|  | 		restore | ||
|  | 	fi | ||
|  | 
 | ||
|  | 	return 0 | ||
|  | } | ||
|  | 
 | ||
|  | stop() { | ||
|  | 	if [ "${SAVE_ON_STOP}" = "yes" ]; then | ||
|  | 		save | ||
|  | 	fi | ||
|  | 	return 0 | ||
|  | } |