diff --git a/.alsa-utils.metadata b/.alsa-utils.metadata index 08c12c1..1a39e85 100644 --- a/.alsa-utils.metadata +++ b/.alsa-utils.metadata @@ -1 +1 @@ -ced2769a2de140c7b7d9c06373d0d9d2b6d3ed01 SOURCES/alsa-utils-1.0.28.tar.bz2 +a5fb61b41685001c9a2a41a38e61cdaf7e60ef2e SOURCES/alsa-utils-1.1.1.tar.bz2 diff --git a/.gitignore b/.gitignore index 3a7d72c..1667f88 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/alsa-utils-1.0.28.tar.bz2 +SOURCES/alsa-utils-1.1.1.tar.bz2 diff --git a/SOURCES/alsa-delay.1 b/SOURCES/alsa-delay.1 new file mode 100644 index 0000000..eafa81f --- /dev/null +++ b/SOURCES/alsa-delay.1 @@ -0,0 +1,78 @@ +.TH ALSA-DELAY 1 "6 Jane 2016" +.SH NAME +alsadelay \- a command to (re)initialize sound hardware + +.SH SYNOPSIS +\fBalsa-delay\fP \fI[options]\fP \fIrequested_delay_in_ms\fP [\fIoutput_card\fP[,\fIdevice\fP]] + +.SH DESCRIPTION +\fBalsa-delay\fP is a command\-line utility to setup an audio +delay. The snd-aloop ALSA driver is used to send all PCM streams +back to the user space and the alsaloop utility is used to send +this stream to a real hardware. + +The parameter \fIoutput_card\fP is ALSA card index (number) or +string card identifier. The parameter \fIdevice\fP is ALSA device number. + +Use \fIaplay -l\fP to list available cards and devices. + + +.SH OPTIONS +.TP +\fI\-\-h,\-\-help\fP +Print help. +.TP +\fI\-\-q,\-\-quiet\fP +Quiet mode. +.TP +\fI\-\-y,\-\-yes\fP +Do not ask any questions - answer is always yes. +.TP +\fI\-\-c,\-\-clean\fP +Clean temporary directory. +.TP +\fI\-\-r,\-\-remove\fP +Remove the alsa-delay config modifications (modprobe, pulse-audio). +.TP +\fI\-\-tmpdir=\fP +Set temporary directory. + +.SH OPTIONS (for alsaloop daemon) +.TP +\fI\-\-pdevice=\fP +Force playback device. +.TP +\fI\-\-cdevice=\fP +Force capture device. +.TP +\fI\-\-pctl=\fP +Force playback control device. +.TP +\fI\-\-cctl=\fP +Force capture control device. +.TP +\fI\-\-one=\fP +Pass this argument to last thread. +.TP +\fI\-\-arg=\fP +Pass this argument to all threads. +.TP +\fI\-\-mix=\fP +Redirect ALSA mixer controls to OSS mixer (default is Master). +.TP +\fI\-\-pa\fP +Redirect pulse-audio to alsaloop. + +.SH NOTE + +For devices, the string %s is replaced with the card index +and second string %s is replaced with the device index +and third string %s is replaced the substream index (0-7). + +Example: hw:%s,%s,%s (card, device, substream) + +.SH SEE ALSO +\fB +alsaloop(1) +amixer(1) +alsamixer(1) diff --git a/SOURCES/alsa-restore.service b/SOURCES/alsa-restore.service index 4e9466b..0411c99 100644 --- a/SOURCES/alsa-restore.service +++ b/SOURCES/alsa-restore.service @@ -4,14 +4,13 @@ # [Unit] -Description=Restore Sound Card State +Description=Save/Restore Sound Card State ConditionPathExists=!/etc/alsa/state-daemon.conf -DefaultDependencies=no After=alsa-state.service -Before=shutdown.target -Conflicts=shutdown.target [Service] Type=oneshot +RemainAfterExit=true ExecStart=-/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfile=/lib/alsa/init/00main restore +ExecStop=/sbin/alsactl -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf store StandardOutput=syslog diff --git a/SOURCES/alsa-state.service b/SOURCES/alsa-state.service index 9b906de..f917da8 100644 --- a/SOURCES/alsa-state.service +++ b/SOURCES/alsa-state.service @@ -6,10 +6,7 @@ [Unit] Description=Manage Sound Card State (restore and store) ConditionPathExists=/etc/alsa/state-daemon.conf -DefaultDependencies=no After=sysinit.target -Before=shutdown.target -Conflicts=shutdown.target [Service] Type=simple diff --git a/SOURCES/alsa-utils-1.0.28-duration.patch b/SOURCES/alsa-utils-1.0.28-duration.patch deleted file mode 100644 index 199c901..0000000 --- a/SOURCES/alsa-utils-1.0.28-duration.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 8f361d83cfcb39887f5fc591633e68d9448e3425 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 1 Oct 2014 15:43:57 +0200 -Subject: [PATCH] Revert "aplay: fix pcm_read() return value" - -This reverts commit 8aa13eec80eac312e4b99423909387660fb99b8f. - -The semantics for pcm_read() and pcm_readv() was changed, but the -callers expect the exact frame count as requested. It's possible -to fix callers, but the fix is more complicated than to revert the -change. Note that '-d' processing was broken in some cases. - -Note: The reverted commit allows that the return value might be -greater than requested (see the first condition in read routines). ---- - aplay/aplay.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/aplay/aplay.c b/aplay/aplay.c -index 30d3f31..e58e1bc 100644 ---- a/aplay/aplay.c -+++ b/aplay/aplay.c -@@ -2039,7 +2039,7 @@ static ssize_t pcm_read(u_char *data, size_t rcount) - data += r * bits_per_frame / 8; - } - } -- return result; -+ return rcount; - } - - static ssize_t pcm_readv(u_char **data, unsigned int channels, size_t rcount) -@@ -2084,7 +2084,7 @@ static ssize_t pcm_readv(u_char **data, unsigned int channels, size_t rcount) - count -= r; - } - } -- return result; -+ return rcount; - } - - /* --- -1.9.3 - diff --git a/SOURCES/alsa-utils-1.0.28-post.patch b/SOURCES/alsa-utils-1.0.28-post.patch deleted file mode 100644 index 1e7caef..0000000 --- a/SOURCES/alsa-utils-1.0.28-post.patch +++ /dev/null @@ -1,1314 +0,0 @@ -diff --git a/Makefile.am b/Makefile.am -index f25eee2..248eb11 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,6 +1,6 @@ - AM_CPPFLAGS=-I$(top_srcdir)/include - --SUBDIRS = include alsactl alsaucm utils m4 po -+SUBDIRS = include alsactl alsaucm utils m4 po alsa-info - if ALSAMIXER - SUBDIRS += alsamixer - endif -diff --git a/alsa-info/Makefile.am b/alsa-info/Makefile.am -new file mode 100644 -index 0000000..1a47e60 ---- /dev/null -+++ b/alsa-info/Makefile.am -@@ -0,0 +1 @@ -+sbin_SCRIPTS = alsa-info.sh -diff --git a/alsa-info/alsa-info.sh b/alsa-info/alsa-info.sh -new file mode 100755 -index 0000000..acd8495 ---- /dev/null -+++ b/alsa-info/alsa-info.sh -@@ -0,0 +1,943 @@ -+#!/bin/bash -+ -+SCRIPT_VERSION=0.4.64 -+CHANGELOG="http://www.alsa-project.org/alsa-info.sh.changelog" -+ -+################################################################################# -+#Copyright (C) 2007 Free Software Foundation. -+ -+#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 -+#the Free Software Foundation; either version 2 of the License, or -+#(at your option) any later version. -+ -+#This program is distributed in the hope that it will be useful, -+#but WITHOUT ANY WARRANTY; without even the implied warranty of -+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+#GNU General Public License for more details. -+ -+#You should have received a copy of the GNU General Public License -+#along with this program; if not, write to the Free Software -+#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+################################################################################## -+ -+#The script was written for 2 main reasons: -+# 1. Remove the need for the devs/helpers to ask several questions before we can easily help the user. -+# 2. Allow newer/inexperienced ALSA users to give us all the info we need to help them. -+ -+#Set the locale (this may or may not be a good idea.. let me know) -+export LC_ALL=C -+ -+#Change the PATH variable, so we can run lspci (needed for some distros) -+PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin -+BGTITLE="ALSA-Info v $SCRIPT_VERSION" -+PASTEBINKEY="C9cRIO8m/9y8Cs0nVs0FraRx7U0pHsuc" -+#Define some simple functions -+ -+pbcheck(){ -+ [[ $UPLOAD = "no" ]] && return -+ -+ if [[ -z $PASTEBIN ]]; then -+ [[ $(ping -c1 www.alsa-project.org) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes" -+ else -+ [[ $(ping -c1 www.pastebin.ca) ]] || KEEP_FILES="yes" UPLOAD="no" PBERROR="yes" -+ fi -+} -+ -+update() { -+ SHFILE=`mktemp -t alsa-info.XXXXXXXXXX` || exit 1 -+ wget -O $SHFILE "http://www.alsa-project.org/alsa-info.sh" >/dev/null 2>&1 -+ REMOTE_VERSION=`grep SCRIPT_VERSION $SHFILE |head -n1 |sed 's/.*=//'` -+ if [ "$REMOTE_VERSION" != "$SCRIPT_VERSION" ]; then -+ if [[ -n $DIALOG ]] -+ then -+ OVERWRITE= -+ if [ -w $0 ]; then -+ dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to install it?\nNOTICE: The original file $0 will be overwritten!" 0 0 -+ DIALOG_EXIT_CODE=$? -+ if [[ $DIALOG_EXIT_CODE = 0 ]]; then -+ OVERWRITE=yes -+ fi -+ fi -+ if [ -z "$OVERWRITE" ]; then -+ dialog --yesno "Newer version of ALSA-Info has been found\n\nDo you wish to download it?" 0 0 -+ DIALOG_EXIT_CODE=$? -+ fi -+ if [[ $DIALOG_EXIT_CODE = 0 ]] -+ then -+ echo "Newer version detected: $REMOTE_VERSION" -+ echo "To view the ChangeLog, please visit $CHANGELOG" -+ if [ "$OVERWRITE" = "yes" ]; then -+ cp $SHFILE $0 -+ echo "ALSA-Info script has been updated to v $REMOTE_VERSION" -+ echo "Please re-run the script" -+ rm $SHFILE 2>/dev/null -+ else -+ echo "ALSA-Info script has been downloaded as $SHFILE." -+ echo "Please re-run the script from new location." -+ fi -+ exit -+ else -+ rm $SHFILE 2>/dev/null -+ fi -+ else -+ echo "Newer version detected: $REMOTE_VERSION" -+ echo "To view the ChangeLog, please visit $CHANGELOG" -+ if [ -w $0 ]; then -+ echo "The original file $0 will be overwritten!" -+ echo -n "If you do not like to proceed, press Ctrl-C now.." ; read inp -+ cp $SHFILE $0 -+ echo "ALSA-Info script has been updated. Please re-run it." -+ rm $SHFILE 2>/dev/null -+ else -+ echo "ALSA-Info script has been downloaded $SHFILE." -+ echo "Please, re-run it from new location." -+ fi -+ exit -+ fi -+ else -+ rm $SHFILE 2>/dev/null -+ fi -+} -+ -+cleanup() { -+ if [ -n "$TEMPDIR" -a "$KEEP_FILES" != "yes" ]; then -+ rm -rf "$TEMPDIR" 2>/dev/null -+ fi -+ test -n "$KEEP_OUTPUT" || rm -f "$NFILE" -+} -+ -+ -+withaplay() { -+ echo "!!Aplay/Arecord output" >> $FILE -+ echo "!!--------------------" >> $FILE -+ echo "" >> $FILE -+ echo "APLAY" >> $FILE -+ echo "" >> $FILE -+ aplay -l >> $FILE 2>&1 -+ echo "" >> $FILE -+ echo "ARECORD" >> $FILE -+ echo "" >> $FILE -+ arecord -l >> $FILE 2>&1 -+ echo "" >> $FILE -+} -+ -+withlsmod() { -+ echo "!!All Loaded Modules" >> $FILE -+ echo "!!------------------" >> $FILE -+ echo "" >> $FILE -+ lsmod |awk {'print $1'} >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+} -+ -+withamixer() { -+ echo "!!Amixer output" >> $FILE -+ echo "!!-------------" >> $FILE -+ echo "" >> $FILE -+ for i in `grep "]: " /proc/asound/cards | awk -F ' ' '{ print $1} '` ; do -+ CARD_NAME=`grep "^ *$i " $TEMPDIR/alsacards.tmp|awk {'print $2'}` -+ echo "!!-------Mixer controls for card $i $CARD_NAME]" >> $FILE -+ echo "" >>$FILE -+ amixer -c$i info>> $FILE 2>&1 -+ amixer -c$i>> $FILE 2>&1 -+ echo "" >> $FILE -+ done -+ echo "" >> $FILE -+} -+ -+withalsactl() { -+ echo "!!Alsactl output" >> $FILE -+ echo "!!--------------" >> $FILE -+ echo "" >> $FILE -+ exe="" -+ if [ -x /usr/sbin/alsactl ]; then -+ exe="/usr/sbin/alsactl" -+ fi -+ if [ -x /usr/local/sbin/alsactl ]; then -+ exe="/usr/local/sbin/alsactl" -+ fi -+ if [ -z "$exe" ]; then -+ exe=`whereis alsactl | cut -d ' ' -f 2` -+ fi -+ $exe -f $TEMPDIR/alsactl.tmp store -+ echo "--startcollapse--" >> $FILE -+ cat $TEMPDIR/alsactl.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+} -+ -+withdevices() { -+ echo "!!ALSA Device nodes" >> $FILE -+ echo "!!-----------------" >> $FILE -+ echo "" >> $FILE -+ ls -la /dev/snd/* >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+} -+ -+withconfigs() { -+if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] || [[ -e $HOME/.asoundrc.asoundconf ]] -+then -+ echo "!!ALSA configuration files" >> $FILE -+ echo "!!------------------------" >> $FILE -+ echo "" >> $FILE -+ -+ #Check for ~/.asoundrc -+ if [[ -e $HOME/.asoundrc ]] -+ then -+ echo "!!User specific config file (~/.asoundrc)" >> $FILE -+ echo "" >> $FILE -+ cat $HOME/.asoundrc >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+ fi -+ #Check for .asoundrc.asoundconf (seems to be Ubuntu specific) -+ if [[ -e $HOME/.asoundrc.asoundconf ]] -+ then -+ echo "!!asoundconf-generated config file" >> $FILE -+ echo "" >> $FILE -+ cat $HOME/.asoundrc.asoundconf >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+ fi -+ #Check for /etc/asound.conf -+ if [[ -e /etc/asound.conf ]] -+ then -+ echo "!!System wide config file (/etc/asound.conf)" >> $FILE -+ echo "" >> $FILE -+ cat /etc/asound.conf >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+ fi -+fi -+} -+ -+withsysfs() { -+ local i f -+ local printed="" -+ for i in /sys/class/sound/*; do -+ case "$i" in -+ */hwC?D?) -+ if [ -f $i/init_pin_configs ]; then -+ if [ -z "$printed" ]; then -+ echo "!!Sysfs Files" >> $FILE -+ echo "!!-----------" >> $FILE -+ echo "" >> $FILE -+ fi -+ for f in init_pin_configs driver_pin_configs user_pin_configs init_verbs hints; do -+ echo "$i/$f:" >> $FILE -+ cat $i/$f >> $FILE -+ echo >> $FILE -+ done -+ printed=yes -+ fi -+ ;; -+ esac -+ done -+ if [ -n "$printed" ]; then -+ echo "" >> $FILE -+ fi -+} -+ -+withdmesg() { -+ echo "!!ALSA/HDA dmesg" >> $FILE -+ echo "!!--------------" >> $FILE -+ echo "" >> $FILE -+ dmesg | grep -C1 -E 'ALSA|HDA|HDMI|snd[_-]|sound|hda.codec|hda.intel' >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+} -+ -+withall() { -+ withdevices -+ withconfigs -+ withaplay -+ withamixer -+ withalsactl -+ withlsmod -+ withsysfs -+ withdmesg -+ WITHALL="no" -+} -+ -+get_alsa_library_version() { -+ ALSA_LIB_VERSION=`grep VERSION_STR /usr/include/alsa/version.h 2>/dev/null|awk {'print $3'}|sed 's/"//g'` -+ -+ if [ -z "$ALSA_LIB_VERSION" ]; then -+ if [ -f /etc/lsb-release ]; then -+ . /etc/lsb-release -+ case "$DISTRIB_ID" in -+ Ubuntu) -+ if which dpkg > /dev/null ; then -+ ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -` -+ fi -+ -+ if [ "$ALSA_LIB_VERSION" = "" ]; then -+ ALSA_LIB_VERSION="" -+ fi -+ return -+ ;; -+ *) -+ return -+ ;; -+ esac -+ elif [ -f /etc/debian_version ]; then -+ if which dpkg > /dev/null ; then -+ ALSA_LIB_VERSION=`dpkg -l libasound2 | tail -1 | awk '{print $3}' | cut -f 1 -d -` -+ fi -+ -+ if [ "$ALSA_LIB_VERSION" = "" ]; then -+ ALSA_LIB_VERSION="" -+ fi -+ return -+ fi -+ fi -+} -+ -+ -+#Run checks to make sure the programs we need are installed. -+LSPCI=$(which lspci 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); -+TPUT=$(which tput 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); -+DIALOG=$(which dialog 2>/dev/null | sed 's|^[^/]*||' 2>/dev/null); -+ -+#Check to see if sysfs is enabled in the kernel. We'll need this later on -+SYSFS=$(mount |grep sysfs|awk {'print $3'}); -+ -+#Check modprobe config files for sound related options -+SNDOPTIONS=$(modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p') -+ -+KEEP_OUTPUT= -+NFILE="" -+ -+PASTEBIN="" -+WWWSERVICE="www.alsa-project.org" -+WELCOME="yes" -+PROCEED="yes" -+UPLOAD="ask" -+REPEAT="" -+while [ -z "$REPEAT" ]; do -+REPEAT="no" -+case "$1" in -+ --update|--help|--about) -+ WELCOME="no" -+ PROCEED="no" -+ ;; -+ --upload) -+ UPLOAD="yes" -+ WELCOME="no" -+ ;; -+ --no-upload) -+ UPLOAD="no" -+ WELCOME="no" -+ ;; -+ --pastebin) -+ PASTEBIN="yes" -+ WWWSERVICE="pastebin" -+ ;; -+ --no-dialog) -+ DIALOG="" -+ REPEAT="" -+ shift -+ ;; -+ --stdout) -+ DIALOG="" -+ UPLOAD="no" -+ WELCOME="no" -+ TOSTDOUT="yes" -+ ;; -+esac -+done -+ -+ -+#Script header output. -+if [ "$WELCOME" = "yes" ]; then -+greeting_message="\ -+ -+This script visits the following commands/files to collect diagnostic -+information about your ALSA installation and sound related hardware. -+ -+ dmesg -+ lspci -+ lsmod -+ aplay -+ amixer -+ alsactl -+ /proc/asound/ -+ /sys/class/sound/ -+ ~/.asoundrc (etc.) -+ -+See '$0 --help' for command line options. -+" -+if [ -n "$DIALOG" ]; then -+ dialog --backtitle "$BGTITLE" \ -+ --title "ALSA-Info script v $SCRIPT_VERSION" \ -+ --msgbox "$greeting_message" 20 80 -+else -+ echo "ALSA Information Script v $SCRIPT_VERSION" -+ echo "--------------------------------" -+ echo "$greeting_message" -+fi # dialog -+fi # WELCOME -+ -+#Set the output file -+TEMPDIR=`mktemp -t -d alsa-info.XXXXXXXXXX` || exit 1 -+FILE="$TEMPDIR/alsa-info.txt" -+if [ -z "$NFILE" ]; then -+ NFILE=`mktemp -t alsa-info.txt.XXXXXXXXXX` || exit 1 -+fi -+ -+trap cleanup 0 -+ -+if [ "$PROCEED" = "yes" ]; then -+ -+if [ -z "$LSPCI" ]; then -+ if [ -d /sys/bus/pci ]; then -+ echo "This script requires lspci. Please install it, and re-run this script." -+ exit 0 -+ fi -+fi -+ -+#Fetch the info and store in temp files/variables -+DISTRO=`grep -ihs "buntu\|SUSE\|Fedora\|PCLinuxOS\|MEPIS\|Mandriva\|Debian\|Damn\|Sabayon\|Slackware\|KNOPPIX\|Gentoo\|Zenwalk\|Mint\|Kubuntu\|FreeBSD\|Puppy\|Freespire\|Vector\|Dreamlinux\|CentOS\|Arch\|Xandros\|Elive\|SLAX\|Red\|BSD\|KANOTIX\|Nexenta\|Foresight\|GeeXboX\|Frugalware\|64\|SystemRescue\|Novell\|Solaris\|BackTrack\|KateOS\|Pardus" /etc/{issue,*release,*version}` -+KERNEL_VERSION=`uname -r` -+KERNEL_PROCESSOR=`uname -p` -+KERNEL_MACHINE=`uname -m` -+KERNEL_OS=`uname -o` -+[[ `uname -v | grep SMP` ]] && KERNEL_SMP="Yes" || KERNEL_SMP="No" -+ALSA_DRIVER_VERSION=`cat /proc/asound/version |head -n1|awk {'print $7'} |sed 's/\.$//'` -+get_alsa_library_version -+ALSA_UTILS_VERSION=`amixer -v |awk {'print $3'}` -+LAST_CARD=$((`grep "]: " /proc/asound/cards | wc -l` - 1 )) -+ -+ESDINST=$(which esd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+PAINST=$(which pulseaudio 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+ARTSINST=$(which artsd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+JACKINST=$(which jackd 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+ROARINST=$(which roard 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+DMIDECODE=$(which dmidecode 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null) -+ -+#Check for DMI data -+if [ -d /sys/class/dmi/id ]; then -+ # No root privileges are required when using sysfs method -+ DMI_SYSTEM_MANUFACTURER=$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null) -+ DMI_SYSTEM_PRODUCT_NAME=$(cat /sys/class/dmi/id/product_name 2>/dev/null) -+ DMI_SYSTEM_PRODUCT_VERSION=$(cat /sys/class/dmi/id/product_version 2>/dev/null) -+ DMI_SYSTEM_FIRMWARE_VERSION=$(cat /sys/class/dmi/id/bios_version 2>/dev/null) -+elif [ -x $DMIDECODE ]; then -+ DMI_SYSTEM_MANUFACTURER=$($DMIDECODE -s system-manufacturer 2>/dev/null) -+ DMI_SYSTEM_PRODUCT_NAME=$($DMIDECODE -s system-product-name 2>/dev/null) -+ DMI_SYSTEM_PRODUCT_VERSION=$($DMIDECODE -s system-version 2>/dev/null) -+ DMI_SYSTEM_FIRMWARE_VERSION=$($DMIDECODE -s bios-version 2>/dev/null) -+fi -+ -+cat /proc/asound/modules 2>/dev/null|awk {'print $2'}>$TEMPDIR/alsamodules.tmp -+cat /proc/asound/cards >$TEMPDIR/alsacards.tmp -+if [[ ! -z "$LSPCI" ]]; then -+lspci |grep -i "multi\|audio">$TEMPDIR/lspci.tmp -+fi -+ -+#Check for HDA-Intel cards codec#* -+cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null -+ -+#Check for AC97 cards codec -+cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null -+cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null -+ -+#Check for USB mixer setup -+cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null -+ -+#Fetch the info, and put it in $FILE in a nice readable format. -+if [[ -z $PASTEBIN ]]; then -+echo "upload=true&script=true&cardinfo=" > $FILE -+else -+echo "name=$USER&type=33&description=/tmp/alsa-info.txt&expiry=&s=Submit+Post&content=" > $FILE -+fi -+echo "!!################################" >> $FILE -+echo "!!ALSA Information Script v $SCRIPT_VERSION" >> $FILE -+echo "!!################################" >> $FILE -+echo "" >> $FILE -+echo "!!Script ran on: `LANG=C TZ=UTC date`" >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!Linux Distribution" >> $FILE -+echo "!!------------------" >> $FILE -+echo "" >> $FILE -+echo $DISTRO >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!DMI Information" >> $FILE -+echo "!!---------------" >> $FILE -+echo "" >> $FILE -+echo "Manufacturer: $DMI_SYSTEM_MANUFACTURER" >> $FILE -+echo "Product Name: $DMI_SYSTEM_PRODUCT_NAME" >> $FILE -+echo "Product Version: $DMI_SYSTEM_PRODUCT_VERSION" >> $FILE -+echo "Firmware Version: $DMI_SYSTEM_FIRMWARE_VERSION" >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!Kernel Information" >> $FILE -+echo "!!------------------" >> $FILE -+echo "" >> $FILE -+echo "Kernel release: $KERNEL_VERSION" >> $FILE -+echo "Operating System: $KERNEL_OS" >> $FILE -+echo "Architecture: $KERNEL_MACHINE" >> $FILE -+echo "Processor: $KERNEL_PROCESSOR" >> $FILE -+echo "SMP Enabled: $KERNEL_SMP" >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!ALSA Version" >> $FILE -+echo "!!------------" >> $FILE -+echo "" >> $FILE -+echo "Driver version: $ALSA_DRIVER_VERSION" >> $FILE -+echo "Library version: $ALSA_LIB_VERSION" >> $FILE -+echo "Utilities version: $ALSA_UTILS_VERSION" >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!Loaded ALSA modules" >> $FILE -+echo "!!-------------------" >> $FILE -+echo "" >> $FILE -+cat $TEMPDIR/alsamodules.tmp >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!Sound Servers on this system" >> $FILE -+echo "!!----------------------------" >> $FILE -+echo "" >> $FILE -+if [[ -n $PAINST ]];then -+[[ `pgrep '^(.*/)?pulseaudio$'` ]] && PARUNNING="Yes" || PARUNNING="No" -+echo "Pulseaudio:" >> $FILE -+echo " Installed - Yes ($PAINST)" >> $FILE -+echo " Running - $PARUNNING" >> $FILE -+echo "" >> $FILE -+fi -+if [[ -n $ESDINST ]];then -+[[ `pgrep '^(.*/)?esd$'` ]] && ESDRUNNING="Yes" || ESDRUNNING="No" -+echo "ESound Daemon:" >> $FILE -+echo " Installed - Yes ($ESDINST)" >> $FILE -+echo " Running - $ESDRUNNING" >> $FILE -+echo "" >> $FILE -+fi -+if [[ -n $ARTSINST ]];then -+[[ `pgrep '^(.*/)?artsd$'` ]] && ARTSRUNNING="Yes" || ARTSRUNNING="No" -+echo "aRts:" >> $FILE -+echo " Installed - Yes ($ARTSINST)" >> $FILE -+echo " Running - $ARTSRUNNING" >> $FILE -+echo "" >> $FILE -+fi -+if [[ -n $JACKINST ]];then -+[[ `pgrep '^(.*/)?jackd$'` ]] && JACKRUNNING="Yes" || JACKRUNNING="No" -+echo "Jack:" >> $FILE -+echo " Installed - Yes ($JACKINST)" >> $FILE -+echo " Running - $JACKRUNNING" >> $FILE -+echo "" >> $FILE -+fi -+if [[ -n $ROARINST ]];then -+[[ `pgrep '^(.*/)?roard$'` ]] && ROARRUNNING="Yes" || ROARRUNNING="No" -+echo "RoarAudio:" >> $FILE -+echo " Installed - Yes ($ROARINST)" >> $FILE -+echo " Running - $ROARRUNNING" >> $FILE -+echo "" >> $FILE -+fi -+if [[ -z "$PAINST" && -z "$ESDINST" && -z "$ARTSINST" && -z "$JACKINST" && -z "$ROARINST" ]];then -+echo "No sound servers found." >> $FILE -+echo "" >> $FILE -+fi -+echo "" >> $FILE -+echo "!!Soundcards recognised by ALSA" >> $FILE -+echo "!!-----------------------------" >> $FILE -+echo "" >> $FILE -+cat $TEMPDIR/alsacards.tmp >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+ -+if [[ ! -z "$LSPCI" ]]; then -+echo "!!PCI Soundcards installed in the system" >> $FILE -+echo "!!--------------------------------------" >> $FILE -+echo "" >> $FILE -+cat $TEMPDIR/lspci.tmp >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+echo "!!Advanced information - PCI Vendor/Device/Subsystem ID's" >> $FILE -+echo "!!-------------------------------------------------------" >> $FILE -+echo "" >> $FILE -+lspci -vvn |grep -A1 040[1-3] >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+fi -+ -+if [ "$SNDOPTIONS" ] -+then -+echo "!!Modprobe options (Sound related)" >> $FILE -+echo "!!--------------------------------" >> $FILE -+echo "" >> $FILE -+modprobe -c|sed -n 's/^options \(snd[-_][^ ]*\)/\1:/p' >> $FILE -+echo "" >> $FILE -+echo "" >> $FILE -+fi -+ -+if [ -d "$SYSFS" ] -+then -+echo "!!Loaded sound module options" >> $FILE -+echo "!!---------------------------" >> $FILE -+echo "" >> $FILE -+for mod in `cat /proc/asound/modules|awk {'print $2'}`;do -+echo "!!Module: $mod" >> $FILE -+for params in `echo $SYSFS/module/$mod/parameters/*`; do -+ echo -ne "\t"; -+ echo "$params : `cat $params`" | sed 's:.*/::'; -+done >> $FILE -+echo "" >> $FILE -+done -+echo "" >> $FILE -+fi -+ -+if [ -s "$TEMPDIR/alsa-hda-intel.tmp" ]; then -+ echo "!!HDA-Intel Codec information" >> $FILE -+ echo "!!---------------------------" >> $FILE -+ echo "--startcollapse--" >> $FILE -+ echo "" >> $FILE -+ cat $TEMPDIR/alsa-hda-intel.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+fi -+ -+if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then -+ echo "!!AC97 Codec information" >> $FILE -+ echo "!!----------------------" >> $FILE -+ echo "--startcollapse--" >> $FILE -+ echo "" >> $FILE -+ cat $TEMPDIR/alsa-ac97.tmp >> $FILE -+ echo "" >> $FILE -+ cat $TEMPDIR/alsa-ac97-regs.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+fi -+ -+if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then -+ echo "!!USB Mixer information" >> $FILE -+ echo "!!---------------------" >> $FILE -+ echo "--startcollapse--" >> $FILE -+ echo "" >> $FILE -+ cat $TEMPDIR/alsa-usbmixer.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+fi -+ -+#If no command line options are specified, then run as though --with-all was specified -+if [ -z "$1" ]; then -+ update -+ pbcheck -+fi -+ -+fi # proceed -+ -+#loop through command line arguments, until none are left. -+if [ -n "$1" ]; then -+ until [ -z "$1" ] -+ do -+ case "$1" in -+ --pastebin) -+ update -+ pbcheck -+ ;; -+ --update) -+ update -+ exit -+ ;; -+ --upload) -+ UPLOAD="yes" -+ ;; -+ --no-upload) -+ UPLOAD="no" -+ ;; -+ --output) -+ shift -+ NFILE="$1" -+ KEEP_OUTPUT="yes" -+ ;; -+ --debug) -+ echo "Debugging enabled. $FILE and $TEMPDIR will not be deleted" -+ KEEP_FILES="yes" -+ echo "" -+ ;; -+ --with-all) -+ withall -+ ;; -+ --with-aplay) -+ withaplay -+ WITHALL="no" -+ ;; -+ --with-amixer) -+ withamixer -+ WITHALL="no" -+ ;; -+ --with-alsactl) -+ withalsactl -+ WITHALL="no" -+ ;; -+ --with-devices) -+ withdevices -+ WITHALL="no" -+ ;; -+ --with-dmesg) -+ withdmesg -+ WITHALL="no" -+ ;; -+ --with-configs) -+ WITHALL="no" -+ if [[ -e $HOME/.asoundrc ]] || [[ -e /etc/asound.conf ]] -+ then -+ echo "!!ALSA configuration files" >> $FILE -+ echo "!!------------------------" >> $FILE -+ echo "" >> $FILE -+ -+ #Check for ~/.asoundrc -+ if [[ -e $HOME/.asoundrc ]] -+ then -+ echo "!!User specific config file ($HOME/.asoundrc)" >> $FILE -+ echo "" >> $FILE -+ cat $HOME/.asoundrc >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+ fi -+ -+ #Check for /etc/asound.conf -+ if [[ -e /etc/asound.conf ]] -+ then -+ echo "!!System wide config file (/etc/asound.conf)" >> $FILE -+ echo "" >> $FILE -+ cat /etc/asound.conf >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+ fi -+ fi -+ ;; -+ --stdout) -+ UPLOAD="no" -+ if [ -z "$WITHALL" ]; then -+ withall -+ fi -+ cat $FILE -+ rm $FILE -+ ;; -+ --about) -+ echo "Written/Tested by the following users of #alsa on irc.freenode.net:" -+ echo "" -+ echo " wishie - Script author and developer / Testing" -+ echo " crimsun - Various script ideas / Testing" -+ echo " gnubien - Various script ideas / Testing" -+ echo " GrueMaster - HDA Intel specific items / Testing" -+ echo " olegfink - Script update function" -+ echo " TheMuso - display to stdout functionality" -+ exit 0 -+ ;; -+ *) -+ echo "alsa-info.sh version $SCRIPT_VERSION" -+ echo "" -+ echo "Available options:" -+ echo " --with-aplay (includes the output of aplay -l)" -+ echo " --with-amixer (includes the output of amixer)" -+ echo " --with-alsactl (includes the output of alsactl)" -+ echo " --with-configs (includes the output of ~/.asoundrc and" -+ echo " /etc/asound.conf if they exist)" -+ echo " --with-devices (shows the device nodes in /dev/snd/)" -+ echo " --with-dmesg (shows the ALSA/HDA kernel messages)" -+ echo "" -+ echo " --output FILE (specify the file to output for no-upload mode)" -+ echo " --update (check server for script updates)" -+ echo " --upload (upload contents to remote server)" -+ echo " --no-upload (do not upload contents to remote server)" -+ echo " --pastebin (use http://pastebin.ca) as remote server" -+ echo " instead www.alsa-project.org" -+ echo " --stdout (print alsa information to standard output" -+ echo " instead of a file)" -+ echo " --about (show some information about the script)" -+ echo " --debug (will run the script as normal, but will not" -+ echo " delete $FILE)" -+ exit 0 -+ ;; -+ esac -+ shift 1 -+ done -+fi -+ -+if [ "$PROCEED" = "no" ]; then -+ exit 1 -+fi -+ -+if [ -z "$WITHALL" ]; then -+ withall -+fi -+ -+if [ "$UPLOAD" = "ask" ]; then -+ if [ -n "$DIALOG" ]; then -+ dialog --backtitle "$BGTITLE" --title "Information collected" --yes-label " UPLOAD / SHARE " --no-label " SAVE LOCALLY " --defaultno --yesno "\n\nAutomatically upload ALSA information to $WWWSERVICE?" 10 80 -+ DIALOG_EXIT_CODE=$? -+ if [ $DIALOG_EXIT_CODE != 0 ]; then -+ UPLOAD="no" -+ else -+ UPLOAD="yes" -+ fi -+ else -+ echo -n "Automatically upload ALSA information to $WWWSERVICE? [y/N] : " -+ read -e CONFIRM -+ if [ "$CONFIRM" != "y" ]; then -+ UPLOAD="no" -+ else -+ UPLOAD="yes" -+ fi -+ fi -+ -+fi -+ -+if [ "$UPLOAD" = "no" ]; then -+ -+ if [ -z "$TOSTDOUT" ]; then -+ mv -f $FILE $NFILE || exit 1 -+ KEEP_OUTPUT="yes" -+ fi -+ -+ if [[ -n $DIALOG ]] -+ then -+ if [[ -n $PBERROR ]]; then -+ dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "An error occurred while contacting the $WWWSERVICE.\n Your information was NOT automatically uploaded.\n\nYour ALSA information is in $NFILE" 10 100 -+ else -+ dialog --backtitle "$BGTITLE" --title "Information collected" --msgbox "\n\nYour ALSA information is in $NFILE" 10 60 -+ fi -+ else -+ echo -+ -+ if [[ -n $PBERROR ]]; then -+ echo "An error occurred while contacting the $WWWSERVICE." -+ echo "Your information was NOT automatically uploaded." -+ echo "" -+ echo "Your ALSA information is in $NFILE" -+ echo "" -+ else -+ if [ -z "$TOSTDOUT" ]; then -+ echo "" -+ echo "Your ALSA information is in $NFILE" -+ echo "" -+ fi -+ fi -+ fi -+ -+ exit -+ -+fi # UPLOAD -+ -+#Test that wget is installed, and supports --post-file. Upload $FILE if it does, and prompt user to upload file if it doesnt. -+if -+WGET=$(which wget 2>/dev/null| sed 's|^[^/]*||' 2>/dev/null); [[ -n "${WGET}" ]] && [[ -x "${WGET}" ]] && [[ `wget --help |grep post-file` ]] -+then -+ -+if [[ -n $DIALOG ]] -+then -+ -+if [[ -z $PASTEBIN ]]; then -+ wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://www.alsa-project.org/cardinfo-db/" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit" -+ { for i in 10 20 30 40 50 60 70 80 90; do -+ echo $i -+ sleep 0.2 -+ done -+ echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.alsa-project.org ..." 6 70 0 -+else -+ wget -O - --tries=5 --timeout=60 --post-file=$FILE "http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY&encrypt=t&encryptpw=blahblah" &>$TEMPDIR/wget.tmp || echo "Upload failed; exit" -+ { for i in 10 20 30 40 50 60 70 80 90; do -+ echo $i -+ sleep 0.2 -+ done -+ echo; } |dialog --backtitle "$BGTITLE" --guage "Uploading information to www.pastebin.ca ..." 6 70 0 -+fi -+ -+dialog --backtitle "$BGTITLE" --title "Information uploaded" --yesno "Would you like to see the uploaded information?" 5 100 -+DIALOG_EXIT_CODE=$? -+if [ $DIALOG_EXIT_CODE = 0 ]; then -+ grep -v "alsa-info.txt" $FILE >$TEMPDIR/uploaded.txt -+ dialog --backtitle "$BGTITLE" --textbox $TEMPDIR/uploaded.txt 0 0 -+fi -+ -+clear -+ -+# no dialog -+else -+ -+if [[ -z $PASTEBIN ]]; then -+ echo -n "Uploading information to www.alsa-project.org ... " -+ wget -O - --tries=5 --timeout=60 --post-file=$FILE http://www.alsa-project.org/cardinfo-db/ &>$TEMPDIR/wget.tmp & -+else -+ echo -n "Uploading information to www.pastebin.ca ... " -+ wget -O - --tries=5 --timeout=60 --post-file=$FILE http://pastebin.ca/quiet-paste.php?api=$PASTEBINKEY &>$TEMPDIR/wget.tmp & -+fi -+ -+#Progess spinner for wget transfer. -+i=1 -+sp="/-\|" -+echo -n ' ' -+while pgrep wget &>/dev/null -+do -+ echo -en "\b${sp:i++%${#sp}:1}" -+done -+ -+echo -e "\b Done!" -+echo "" -+ -+fi #dialog -+ -+#See if tput is available, and use it if it is. -+if [ -n "$TPUT" ]; then -+ if [[ -z $PASTEBIN ]]; then -+ FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2 ; tput sgr0` -+ else -+ FINAL_URL=`tput setaf 1; grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p';tput sgr0` -+ fi -+else -+ if [[ -z $PASTEBIN ]]; then -+ FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | cut -d ' ' -f 2` -+ else -+ FINAL_URL=`grep "SUCCESS:" $TEMPDIR/wget.tmp | sed -n 's/.*\:\([0-9]\+\).*/http:\/\/pastebin.ca\/\1/p'` -+ fi -+fi -+ -+# Output the URL of the uploaded file. -+echo "Your ALSA information is located at $FINAL_URL" -+echo "Please inform the person helping you." -+echo "" -+ -+# We couldnt find a suitable wget, so tell the user to upload manually. -+else -+ mv -f $FILE $NFILE || exit 1 -+ KEEP_OUTPUT="yes" -+ if [[ -z $DIALOG ]] -+ then -+ if [[ -z $PASTEBIN ]]; then -+ echo "" -+ echo "Could not automatically upload output to http://www.alsa-project.org" -+ echo "Possible reasons are:" -+ echo " 1. Couldnt find 'wget' in your PATH" -+ echo " 2. Your version of wget is less than 1.8.2" -+ echo "" -+ echo "Please manually upload $NFILE to http://www.alsa-project.org/cardinfo-db/ and submit your post." -+ echo "" -+ else -+ echo "" -+ echo "Could not automatically upload output to http://www.pastebin.ca" -+ echo "Possible reasons are:" -+ echo " 1. Couldnt find 'wget' in your PATH" -+ echo " 2. Your version of wget is less than 1.8.2" -+ echo "" -+ echo "Please manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." -+ echo "" -+ fi -+ else -+ if [[ -z $PASTEBIN ]]; then -+ dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.alsa-project.org.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.alsa-project,org/cardinfo-db/ and submit your post." 25 100 -+ else -+ dialog --backtitle "$BGTITLE" --msgbox "Could not automatically upload output to http://www.pastebin.ca.\nPossible reasons are:\n\n 1. Couldn't find 'wget' in your PATH\n 2. Your version of wget is less than 1.8.2\n\nPlease manually upload $NFILE to http://www.pastebin.ca/upload.php and submit your post." 25 100 -+ fi -+ fi -+fi -diff --git a/alsactl/state.c b/alsactl/state.c -index c33f501..e0c6f2e 100644 ---- a/alsactl/state.c -+++ b/alsactl/state.c -@@ -1626,7 +1626,7 @@ int save_state(const char *file, const char *cardname) - snd_output_close(out); - if (err < 0) { - error("snd_config_save: %s", snd_strerror(err)); -- } else { -+ } else if (nfile) { - err = rename(nfile, file); - if (err < 0) - error("rename failed: %s (%s)", strerror(-err), file); -diff --git a/alsamixer/mainloop.c b/alsamixer/mainloop.c -index 351f57f..79d81a9 100644 ---- a/alsamixer/mainloop.c -+++ b/alsamixer/mainloop.c -@@ -29,6 +29,7 @@ - #include "widget.h" - #include "mixer_widget.h" - #include "mixer_display.h" -+#include "mixer_controls.h" - #include "mainloop.h" - - static WINDOW *curses_initialized; -diff --git a/configure.ac b/configure.ac -index a4d2db3..3c7032b 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -360,4 +360,4 @@ AC_OUTPUT(Makefile alsactl/Makefile alsactl/init/Makefile \ - utils/alsa-utils.spec seq/Makefile seq/aconnect/Makefile \ - seq/aplaymidi/Makefile seq/aseqdump/Makefile seq/aseqnet/Makefile \ - speaker-test/Makefile speaker-test/samples/Makefile \ -- alsaloop/Makefile) -+ alsaloop/Makefile alsa-info/Makefile) -From 1363f852e92c1c913474fc015f9da12d1e93d750 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 24 Sep 2014 10:35:53 +0200 -Subject: [PATCH] alsactl: Fix the file locking routines (for the state - management) - ---- - alsactl/alsactl.h | 3 ++- - alsactl/lock.c | 41 +++++++++++++++++++++++++++++++---------- - alsactl/state.c | 22 +++++++++++++--------- - 3 files changed, 46 insertions(+), 20 deletions(-) - -diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h -index 76e8c36..bd9bf23 100644 ---- a/alsactl/alsactl.h -+++ b/alsactl/alsactl.h -@@ -25,7 +25,8 @@ void dbg_(const char *fcn, long line, const char *fmt, ...); - #endif - - int init(const char *file, const char *cardname); --int state_lock(const char *file, int lock, int timeout); -+int state_lock(const char *file, int timeout); -+int state_unlock(int fd, const char *file); - int save_state(const char *file, const char *cardname); - int load_state(const char *file, const char *initfile, const char *cardname, - int do_init); -diff --git a/alsactl/lock.c b/alsactl/lock.c -index 6f85f20..9d7efcc 100644 ---- a/alsactl/lock.c -+++ b/alsactl/lock.c -@@ -30,7 +30,7 @@ - #include - #include "alsactl.h" - --static int state_lock_(const char *file, int lock, int timeout) -+static int state_lock_(const char *file, int lock, int timeout, int _fd) - { - int fd = -1, err = 0; - struct flock lck; -@@ -50,9 +50,14 @@ static int state_lock_(const char *file, int lock, int timeout) - snprintf(lcktxt, sizeof(lcktxt), "%10li\n", (long)getpid()); - } else { - snprintf(lcktxt, sizeof(lcktxt), "%10s\n", ""); -+ fd = _fd; - } - while (fd < 0 && timeout-- > 0) { - fd = open(nfile, O_RDWR); -+ if (!lock && fd < 0) { -+ err = -EIO; -+ goto out; -+ } - if (fd < 0) { - fd = open(nfile, O_RDWR|O_CREAT|O_EXCL, 0644); - if (fd < 0) { -@@ -74,12 +79,12 @@ static int state_lock_(const char *file, int lock, int timeout) - err = -errno; - goto out; - } -- if (st.st_size != 11) { -+ if (st.st_size != 11 || !lock) { - if (write(fd, lcktxt, 11) != 11) { - err = -EIO; - goto out; - } -- if (lseek(fd, 0, SEEK_SET)) { -+ if (lock && lseek(fd, 0, SEEK_SET)) { - err = -errno; - goto out; - } -@@ -96,21 +101,37 @@ static int state_lock_(const char *file, int lock, int timeout) - err = -EBUSY; - goto out; - } -- if (write(fd, lcktxt, 11) != 11) { -- err = -EIO; -- goto out; -+ if (lock) { -+ if (write(fd, lcktxt, 11) != 11) { -+ err = -EIO; -+ goto out; -+ } -+ return fd; - } -+ err = 0; -+ - out: -+ if (fd >= 0) -+ close(fd); -+ return err; -+} -+ -+int state_lock(const char *file, int timeout) -+{ -+ int err; -+ -+ err = state_lock_(file, 1, timeout, -1); -+ if (err < 0) -+ error("file %s lock error: %s", file, strerror(-err)); - return err; - } - --int state_lock(const char *file, int lock, int timeout) -+int state_unlock(int _fd, const char *file) - { - int err; - -- err = state_lock_(file, lock, timeout); -+ err = state_lock_(file, 0, 10, _fd); - if (err < 0) -- error("file %s %slock error: %s", file, -- lock ? "" : "un", strerror(-err)); -+ error("file %s unlock error: %s", file, strerror(-err)); - return err; - } -diff --git a/alsactl/state.c b/alsactl/state.c -index e0c6f2e..0c89703 100644 ---- a/alsactl/state.c -+++ b/alsactl/state.c -@@ -1544,6 +1544,7 @@ int save_state(const char *file, const char *cardname) - snd_output_t *out; - int stdio; - char *nfile = NULL; -+ int lock_fd = -EINVAL; - - err = snd_config_top(&config); - if (err < 0) { -@@ -1555,12 +1556,16 @@ int save_state(const char *file, const char *cardname) - nfile = malloc(strlen(file) + 5); - if (nfile == NULL) { - error("No enough memory..."); -+ err = -ENOMEM; - goto out; - } - strcpy(nfile, file); - strcat(nfile, ".new"); -- if (state_lock(file, 1, 10) != 0) -+ lock_fd = state_lock(file, 10); -+ if (lock_fd < 0) { -+ err = lock_fd; - goto out; -+ } - } - if (!stdio && (err = snd_input_stdio_open(&in, file, "r")) >= 0) { - err = snd_config_load(config, in); -@@ -1632,8 +1637,8 @@ int save_state(const char *file, const char *cardname) - error("rename failed: %s (%s)", strerror(-err), file); - } - out: -- if (!stdio) -- state_lock(file, 0, 10); -+ if (!stdio && lock_fd >= 0) -+ state_unlock(lock_fd, file); - free(nfile); - snd_config_delete(config); - snd_config_update_free_global(); -@@ -1646,7 +1651,7 @@ int load_state(const char *file, const char *initfile, const char *cardname, - int err, finalerr = 0; - snd_config_t *config; - snd_input_t *in; -- int stdio, locked = 0; -+ int stdio, lock_fd = -EINVAL; - - err = snd_config_top(&config); - if (err < 0) { -@@ -1657,15 +1662,14 @@ int load_state(const char *file, const char *initfile, const char *cardname, - if (stdio) { - err = snd_input_stdio_attach(&in, stdin, 0); - } else { -- err = state_lock(file, 1, 10); -- locked = err >= 0; -- err = err >= 0 ? snd_input_stdio_open(&in, file, "r") : err; -+ lock_fd = state_lock(file, 10); -+ err = lock_fd >= 0 ? snd_input_stdio_open(&in, file, "r") : lock_fd; - } - if (err >= 0) { - err = snd_config_load(config, in); - snd_input_close(in); -- if (locked) -- state_lock(file, 0, 10); -+ if (lock_fd >= 0) -+ state_unlock(lock_fd, file); - if (err < 0) { - error("snd_config_load error: %s", snd_strerror(err)); - goto out; --- -1.9.3 - -From 74e5d57c999f8afed4f87046dcac84f6709b9196 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 24 Sep 2014 10:46:02 +0200 -Subject: [PATCH 1/2] alsactl: aded missing monitor() prototype - ---- - alsactl/alsactl.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/alsactl/alsactl.h b/alsactl/alsactl.h -index bd9bf23..4f969ec 100644 ---- a/alsactl/alsactl.h -+++ b/alsactl/alsactl.h -@@ -31,6 +31,7 @@ int save_state(const char *file, const char *cardname); - int load_state(const char *file, const char *initfile, const char *cardname, - int do_init); - int power(const char *argv[], int argc); -+int monitor(const char *name); - int state_daemon(const char *file, const char *cardname, int period, - const char *pidfile); - int state_daemon_kill(const char *pidfile, const char *cmd); --- -1.9.3 - - -From da7a2f91de1c2089bf2b4ba247807cb716f30424 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 24 Sep 2014 10:47:48 +0200 -Subject: [PATCH 2/2] speaker-text: fix simple signess assignment warning - ---- - speaker-test/speaker-test.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/speaker-test/speaker-test.c b/speaker-test/speaker-test.c -index 362efa7..ccf2671 100644 ---- a/speaker-test/speaker-test.c -+++ b/speaker-test/speaker-test.c -@@ -113,7 +113,7 @@ static snd_pcm_t *pcm_handle = NULL; - #ifdef CONFIG_SUPPORT_CHMAP - static snd_pcm_chmap_t *channel_map; - static int channel_map_set; --static unsigned int *ordered_channels; -+static int *ordered_channels; - #endif - - static const char *const channel_name[MAX_CHANNELS] = { --- -1.9.3 - -From 17d4a5dd35e3e72a194ca295da98e62060a180a8 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 24 Sep 2014 10:50:54 +0200 -Subject: [PATCH 1/2] monitor: fix clang warning - Declared variable-length - array (VLA) has zero size - ---- - alsactl/monitor.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/alsactl/monitor.c b/alsactl/monitor.c -index 536176d..29379ad 100644 ---- a/alsactl/monitor.c -+++ b/alsactl/monitor.c -@@ -91,7 +91,7 @@ int monitor(const char *name) - snd_ctl_t *ctls[MAX_CARDS]; - int ncards = 0; - int show_cards; -- int i, err; -+ int i, err = 0; - - if (!name) { - int card = -1; -@@ -117,7 +117,7 @@ int monitor(const char *name) - show_cards = 0; - } - -- for (;;) { -+ for (;ncards > 0;) { - struct pollfd fds[ncards]; - - for (i = 0; i < ncards; i++) --- -1.9.3 - - -From 89a4f490bd974e454d82942100f241bb1a2270f3 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Wed, 24 Sep 2014 10:52:17 +0200 -Subject: [PATCH 2/2] =?UTF-8?q?alsactl:=20coverity=20-=20missing=5Fva=5Fen?= - =?UTF-8?q?d=20=E2=80=93=20va=5Fend=20was=20not=20called=20for=20"ap"?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - alsactl/utils.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/alsactl/utils.c b/alsactl/utils.c -index b5d183c..304df7c 100644 ---- a/alsactl/utils.c -+++ b/alsactl/utils.c -@@ -157,8 +157,8 @@ void cerror_(const char *fcn, long line, int cond, const char *fmt, ...) - fprintf(stderr, "%s: %s:%ld: ", command, fcn, line); - vfprintf(stderr, fmt, ap); - putc('\n', stderr); -- va_end(ap); - } -+ va_end(ap); - } - - void dbg_(const char *fcn, long line, const char *fmt, ...) -@@ -174,6 +174,6 @@ void dbg_(const char *fcn, long line, const char *fmt, ...) - fprintf(stderr, "%s: %s:%ld: ", command, fcn, line); - vfprintf(stderr, fmt, ap); - putc('\n', stderr); -- va_end(ap); - } -+ va_end(ap); - } --- -1.9.3 - diff --git a/SOURCES/alsa-utils-1.1.1-post.patch b/SOURCES/alsa-utils-1.1.1-post.patch new file mode 100644 index 0000000..d8991df --- /dev/null +++ b/SOURCES/alsa-utils-1.1.1-post.patch @@ -0,0 +1,377 @@ +From 85827fbb642463ab724a9471a7a88f93fa2a217d Mon Sep 17 00:00:00 2001 +From: David Fries +Date: Wed, 13 Apr 2016 23:32:46 -0500 +Subject: [PATCH 1/4] aplay: fix lurking capture file overwrite bug + +If -d was given to arecord while commit +8aa13eec80eac312e4b99423909387660fb99b8f (now reverted) was in effect, +the last read would be shorter than the chunk size, but pcm_read would +read and return the chunk size, the samples were discarded, and +capture() continued in a loop because count never reached 0. arecord +opens a new file each loop iteration, if arecord is dynamically naming +files, --use-strftime option or beyond the wave 2GB limit, this will +generate a series of header only wave files. If the file is unique +the originally recorded data is lost and it will continue overwriting +the same file with a header only wave file. + +While the current pcm_read can't fail (it can exit), it is better to +just fix this lurking bug in case it is "fixed" again. + +Signed-off-by: Takashi Iwai +--- + aplay/aplay.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/aplay/aplay.c b/aplay/aplay.c +index 7acaa83..2da7dda 100644 +--- a/aplay/aplay.c ++++ b/aplay/aplay.c +@@ -3067,11 +3067,14 @@ static void capture(char *orig_name) + size_t c = (rest <= (off64_t)chunk_bytes) ? + (size_t)rest : chunk_bytes; + size_t f = c * 8 / bits_per_frame; +- if (pcm_read(audiobuf, f) != f) ++ if (pcm_read(audiobuf, f) != f) { ++ in_aborting = 1; + break; ++ } + if (write(fd, audiobuf, c) != c) { + perror(name); +- prg_exit(EXIT_FAILURE); ++ in_aborting = 1; ++ break; + } + count -= c; + rest -= c; +@@ -3091,7 +3094,7 @@ static void capture(char *orig_name) + } + + if (in_aborting) +- break; ++ prg_exit(EXIT_FAILURE); + + /* repeat the loop when format is raw without timelimit or + * requested counts of data are recorded +-- +2.5.5 + + +From 569f2c116ee30de8a16fef0822e13dd33a41f33e Mon Sep 17 00:00:00 2001 +From: "Lu, Han" +Date: Sun, 17 Apr 2016 09:26:45 +0800 +Subject: [PATCH 2/4] alsabat: add terminate status check for capture thread + +In loopback test, alsabat use pthread_join(pthread_t thread, **retval) +to wait for the capture thread to terminate. If the capture thread was +canceled, PTHREAD_CANCELED is placed in *retval, and the access to the +**retval will fail. Add status check to prevent illegal access to the +**retval. + +Signed-off-by: Lu, Han +Signed-off-by: Takashi Iwai +--- + bat/bat.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/bat/bat.c b/bat/bat.c +index e824065..1afdcb4 100644 +--- a/bat/bat.c ++++ b/bat/bat.c +@@ -192,6 +192,12 @@ static void test_loopback(struct bat *bat) + exit(EXIT_FAILURE); + } + ++ /* check if capture thread is canceled or not */ ++ if (thread_result_capture == PTHREAD_CANCELED) { ++ fprintf(bat->log, _("Capture canceled.\n")); ++ return; ++ } ++ + /* check capture status */ + if (*thread_result_capture != 0) { + fprintf(bat->err, _("Exit capture thread fail: %d\n"), +-- +2.5.5 + + +From 9e196efda4463452db51e295cd57bbf0bdaa4715 Mon Sep 17 00:00:00 2001 +From: "vivian,zhang" +Date: Tue, 31 May 2016 15:31:32 +0800 +Subject: [PATCH 3/4] alsabat: add buffer size and period size settings + +Add buffer size and period size settings in alsabat. +With -E and -B options, alsabat performs the test with +specified buffer size and period size + +Signed-off-by: Zhang Vivian +Acked-by: Liam Girdwood +Signed-off-by: Takashi Iwai +--- + bat/alsa.c | 95 ++++++++++++++++++++++++++++++++++++++++------------------ + bat/bat.c | 18 +++++++++-- + bat/common.h | 8 +++++ + bat/tinyalsa.c | 5 +++- + 4 files changed, 94 insertions(+), 32 deletions(-) + +diff --git a/bat/alsa.c b/bat/alsa.c +index 75158cb..0a37714 100644 +--- a/bat/alsa.c ++++ b/bat/alsa.c +@@ -74,6 +74,8 @@ static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm) + snd_pcm_format_t format; + unsigned int buffer_time = 0; + unsigned int period_time = 0; ++ snd_pcm_uframes_t buffer_size = 0; ++ snd_pcm_uframes_t period_size = 0; + unsigned int rate; + int err; + const char *device_name = snd_pcm_name(sndpcm->handle); +@@ -145,39 +147,71 @@ static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm) + return -EINVAL; + } + +- if (snd_pcm_hw_params_get_buffer_time_max(params, +- &buffer_time, 0) < 0) { +- fprintf(bat->err, _("Get parameter from device error: ")); +- fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), +- buffer_time, +- device_name, snd_strerror(err), err); +- return -EINVAL; +- } ++ if (bat->buffer_size > 0 && bat->period_size == 0) ++ bat->period_size = bat->buffer_size / DIV_BUFFERTIME; + +- if (buffer_time > MAX_BUFFERTIME) +- buffer_time = MAX_BUFFERTIME; ++ if (bat->buffer_size > 0) { ++ buffer_size = bat->buffer_size; ++ period_size = bat->period_size; + +- period_time = buffer_time / DIV_BUFFERTIME; ++ fprintf(bat->log, _("Set period size: %d buffer size: %d\n"), ++ (int) period_size, (int) buffer_size); + +- /* Set buffer time and period time */ +- err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle, params, +- &buffer_time, 0); +- if (err < 0) { +- fprintf(bat->err, _("Set parameter to device error: ")); +- fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), +- buffer_time, +- device_name, snd_strerror(err), err); +- return err; +- } ++ err = snd_pcm_hw_params_set_buffer_size_near(sndpcm->handle, ++ params, &buffer_size); ++ if (err < 0) { ++ fprintf(bat->err, _("Set parameter to device error: ")); ++ fprintf(bat->err, _("buffer size: %d %s: %s(%d)\n"), ++ (int) buffer_size, ++ device_name, snd_strerror(err), err); ++ return err; ++ } + +- err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle, params, +- &period_time, 0); +- if (err < 0) { +- fprintf(bat->err, _("Set parameter to device error: ")); +- fprintf(bat->err, _("period time: %d %s: %s(%d)\n"), +- period_time, +- device_name, snd_strerror(err), err); +- return err; ++ err = snd_pcm_hw_params_set_period_size_near(sndpcm->handle, ++ params, &period_size, 0); ++ if (err < 0) { ++ fprintf(bat->err, _("Set parameter to device error: ")); ++ fprintf(bat->err, _("period size: %d %s: %s(%d)\n"), ++ (int) period_size, ++ device_name, snd_strerror(err), err); ++ return err; ++ } ++ } else { ++ if (snd_pcm_hw_params_get_buffer_time_max(params, ++ &buffer_time, 0) < 0) { ++ fprintf(bat->err, ++ _("Get parameter from device error: ")); ++ fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), ++ buffer_time, ++ device_name, snd_strerror(err), err); ++ return -EINVAL; ++ } ++ ++ if (buffer_time > MAX_BUFFERTIME) ++ buffer_time = MAX_BUFFERTIME; ++ ++ period_time = buffer_time / DIV_BUFFERTIME; ++ ++ /* Set buffer time and period time */ ++ err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle, ++ params, &buffer_time, 0); ++ if (err < 0) { ++ fprintf(bat->err, _("Set parameter to device error: ")); ++ fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"), ++ buffer_time, ++ device_name, snd_strerror(err), err); ++ return err; ++ } ++ ++ err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle, ++ params, &period_time, 0); ++ if (err < 0) { ++ fprintf(bat->err, _("Set parameter to device error: ")); ++ fprintf(bat->err, _("period time: %d %s: %s(%d)\n"), ++ period_time, ++ device_name, snd_strerror(err), err); ++ return err; ++ } + } + + /* Write the parameters to the driver */ +@@ -214,6 +248,9 @@ static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm) + return -EINVAL; + } + ++ fprintf(bat->log, _("Get period size: %d buffer size: %d\n"), ++ (int) sndpcm->period_size, (int) sndpcm->buffer_size); ++ + err = snd_pcm_format_physical_width(format); + if (err < 0) { + fprintf(bat->err, _("Invalid parameters: ")); +diff --git a/bat/bat.c b/bat/bat.c +index 1afdcb4..cd4ea2d 100644 +--- a/bat/bat.c ++++ b/bat/bat.c +@@ -292,6 +292,8 @@ _("Usage: alsabat [-options]...\n" + " -k parameter for frequency detecting threshold\n" + " -F target frequency\n" + " -p total number of periods to play/capture\n" ++" -B buffer size in frames\n" ++" -E period size in frames\n" + " --log=# file that both stdout and strerr redirecting to\n" + " --file=# file for playback\n" + " --saveplay=# file that storing playback content, for debug\n" +@@ -324,6 +326,8 @@ static void set_defaults(struct bat *bat) + bat->capture.device = NULL; + bat->buf = NULL; + bat->local = false; ++ bat->buffer_size = 0; ++ bat->period_size = 0; + #ifdef HAVE_LIBTINYALSA + bat->channels = 2; + bat->playback.fct = &playback_tinyalsa; +@@ -342,8 +346,8 @@ static void set_defaults(struct bat *bat) + + static void parse_arguments(struct bat *bat, int argc, char *argv[]) + { +- int c, option_index; +- static const char short_options[] = "D:P:C:f:n:F:c:r:s:k:p:lth"; ++ int c, option_index, err; ++ static const char short_options[] = "D:P:C:f:n:F:c:r:s:k:p:B:E:lth"; + static const struct option long_options[] = { + {"help", 0, 0, 'h'}, + {"log", 1, 0, OPT_LOG}, +@@ -414,6 +418,16 @@ static void parse_arguments(struct bat *bat, int argc, char *argv[]) + bat->periods_total = atoi(optarg); + bat->period_is_limited = true; + break; ++ case 'B': ++ err = atoi(optarg); ++ bat->buffer_size = err >= MIN_BUFFERSIZE ++ && err < MAX_BUFFERSIZE ? err : 0; ++ break; ++ case 'E': ++ err = atoi(optarg); ++ bat->period_size = err >= MIN_PERIODSIZE ++ && err < MAX_PERIODSIZE ? err : 0; ++ break; + case 'h': + default: + usage(bat); +diff --git a/bat/common.h b/bat/common.h +index b789af5..ad02a5a 100644 +--- a/bat/common.h ++++ b/bat/common.h +@@ -46,6 +46,12 @@ + #define DIV_BUFFERTIME 8 + /* margin to avoid sign inversion when generate sine wav */ + #define RANGE_FACTOR 0.95 ++#define MAX_BUFFERSIZE 200000 ++#define MIN_BUFFERSIZE 32 ++#define MAX_PERIODSIZE 200000 ++#define MIN_PERIODSIZE 32 ++/* default period size for tinyalsa */ ++#define TINYALSA_PERIODSIZE 1024 + + #define EBATBASE 1000 + #define ENOPEAK (EBATBASE + 1) +@@ -152,6 +158,8 @@ struct bat { + int frame_size; /* size of frame */ + int sample_size; /* size of sample */ + enum _bat_pcm_format format; /* PCM format */ ++ int buffer_size; /* buffer size in frames */ ++ int period_size; /* period size in frames */ + + float sigma_k; /* threshold for peak detection */ + float target_freq[MAX_CHANNELS]; +diff --git a/bat/tinyalsa.c b/bat/tinyalsa.c +index ea5f848..a19dd90 100644 +--- a/bat/tinyalsa.c ++++ b/bat/tinyalsa.c +@@ -57,7 +57,10 @@ static int init_config(struct bat *bat, struct pcm_config *config) + { + config->channels = bat->channels; + config->rate = bat->rate; +- config->period_size = 1024; ++ if (bat->period_size > 0) ++ config->period_size = bat->period_size; ++ else ++ config->period_size = TINYALSA_PERIODSIZE; + config->period_count = 4; + config->start_threshold = 0; + config->stop_threshold = 0; +-- +2.5.5 + + +From 2b3adf8668ab4e0e57168725f2562006bb5472ef Mon Sep 17 00:00:00 2001 +From: "Lu, Han" +Date: Wed, 1 Jun 2016 16:54:28 +0800 +Subject: [PATCH 4/4] alsabat: fix a possible memory leak + +Fix a possible memory leak in generate_sine_wave(). Memory free was +ignored when the function return an error. + +Signed-off-by: Lu, Han +Signed-off-by: Takashi Iwai +--- + bat/signal.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/bat/signal.c b/bat/signal.c +index a47ba97..61d2824 100644 +--- a/bat/signal.c ++++ b/bat/signal.c +@@ -168,16 +168,17 @@ int generate_sine_wave(struct bat *bat, int frames, void *buf) + /* reorder samples to interleaved mode */ + err = reorder(bat, sinus_f, frames); + if (err != 0) +- return err; ++ goto exit; + + /* adjust amplitude and offset of waveform */ + err = adjust_waveform(bat, sinus_f, frames); + if (err != 0) +- return err; ++ goto exit; + + bat->convert_float_to_sample(sinus_f, buf, frames, bat->channels); + ++exit: + free(sinus_f); + +- return 0; ++ return err; + } +-- +2.5.5 + diff --git a/SPECS/alsa-utils.spec b/SPECS/alsa-utils.spec index 16b0149..911ff3a 100644 --- a/SPECS/alsa-utils.spec +++ b/SPECS/alsa-utils.spec @@ -1,10 +1,10 @@ -%define baseversion 1.0.28 +%define baseversion 1.1.1 #define fixversion .1 Summary: Advanced Linux Sound Architecture (ALSA) utilities Name: alsa-utils Version: %{baseversion}%{?fixversion} -Release: 4%{?dist} +Release: 1%{?dist} License: GPLv2+ Group: Applications/Multimedia URL: http://www.alsa-project.org/ @@ -12,13 +12,13 @@ Source: ftp://ftp.alsa-project.org/pub/utils/alsa-utils-%{version}.tar.bz2 Source4: alsaunmute Source5: alsaunmute.1 Source7: alsa-delay +Source8: alsa-delay.1 Source10: alsa.rules Source11: alsactl.conf Source20: alsa-restore.service Source21: alsa-store.service Source22: alsa-state.service -Patch0: alsa-utils-1.0.28-post.patch -Patch1: alsa-utils-1.0.28-duration.patch +Patch0: alsa-utils-1.1.1-post.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: alsa-lib-devel >= %{baseversion} BuildRequires: libsamplerate-devel @@ -38,7 +38,6 @@ Architecture (ALSA). %prep %setup -q -n %{name}-%{version} %patch0 -p1 -b .post -%patch1 -p1 -b .duration %build %configure CFLAGS="$RPM_OPT_FLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" --disable-alsaconf \ @@ -86,6 +85,7 @@ ln -s alsa-info %{buildroot}/usr/sbin/alsa-info.sh # Install alsa-delay script install -p -m 755 %{SOURCE7} %{buildroot}/usr/bin/alsa-delay +install -p -m 644 %{SOURCE8} %{buildroot}/%{_mandir}/man1/alsa-delay.1 %files -f %{name}.lang %defattr(-,root,root,-) @@ -94,7 +94,6 @@ install -p -m 755 %{SOURCE7} %{buildroot}/usr/bin/alsa-delay %{_prefix}/lib/udev/rules.d/* %{_unitdir}/* %{_unitdir}/basic.target.wants/* -%{_unitdir}/shutdown.target.wants/* %{_prefix}/lib/alsa/init/* %{_bindir}/* %{_sbindir}/* @@ -122,6 +121,11 @@ if [ -s /etc/asound.state -a ! -s /var/lib/alsa/asound.state ] ; then fi %changelog +* Mon Jun 6 2016 Jaroslav Kysela - 1.1.1-1 +- Updated to 1.1.1 +- Add alsa-delay man page +- Resolves: rhbz#1264129 + * Fri Dec 12 2014 Jaroslav Kysela - 1.0.28-4 - Fixed aplay -d regression - Resolves: rhbz#1172189 @@ -346,7 +350,7 @@ fi - added more funcionality to salsa (save/load sound settings), moved volume settings to /etc/alsa/ -* Thu Apr 10 2007 Martin Stransky 1.0.14-0.4.rc2 +* Tue Apr 10 2007 Martin Stransky 1.0.14-0.4.rc2 - added support for large files - minor fix in alsaunmute - fixed #209239 - alsaconf: Stale language-dependent files