8fd23ece4e
alsa-* 1.2.6 breaks audio switching and microphones on several devices, with some outstanding issues still open upstream. This 'fork' is meant to be very short-lived, to restore audio on devices while we figure out how to fix it on 1.2.6. see: https://gitlab.com/postmarketOS/pmaports/-/issues/1334
90 lines
2.3 KiB
Text
90 lines
2.3 KiB
Text
#!/sbin/openrc-run
|
|
# $Header: /var/cvsroot/gentoo-x86/media-sound/alsa-utils/files/alsasound.initd-r6,v 1.1 2014/06/23 21:34:42 ssuominen Exp $
|
|
# Copyright 1999-2014 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
description="Save/Restore Sound Card State"
|
|
|
|
alsastatedir=/var/lib/alsa
|
|
alsascrdir=/etc/alsa.d
|
|
alsahomedir=/var/run/alsasound
|
|
|
|
extra_commands="save restore"
|
|
|
|
depend() {
|
|
need localmount
|
|
after bootmisc modules isapnp coldplug hotplug
|
|
}
|
|
|
|
restore() {
|
|
ebegin "Restoring Mixer Levels"
|
|
|
|
checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
|
|
|
|
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 ${alsactl_opts} -E HOME="${alsahomedir}" -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"
|
|
|
|
checkpath -q -d -m 0700 -o root:root ${alsahomedir} || return 1
|
|
|
|
mkdir -p "${alsastatedir}"
|
|
if ! alsactl ${alsactl_opts} -E HOME="${alsahomedir}" -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
|
|
}
|