[Pkg-alsa-devel] [Debian ALSA CVS] debian/alsa-utils/debian/patches (2 files)
Thomas Hood
jdthood-guest@haydn.debian.org
Mon, 06 Sep 2004 15:21:38 -0600
Date: Monday, September 6, 2004 @ 15:21:38
Author: jdthood-guest
Path: /cvsroot/pkg-alsa/debian/alsa-utils/debian/patches
Added: 92_debian_alsaconf_restore.dpatch
Modified: 00list
Add 92_debian_alsaconf_restore which makes alsaconf set up the module loader to run "alsactl restore" post install
-----------------------------------+
00list | 1
92_debian_alsaconf_restore.dpatch | 37 ++++++++++++++++++++++++++++++++++++
2 files changed, 38 insertions(+)
Index: debian/alsa-utils/debian/patches/00list
diff -u debian/alsa-utils/debian/patches/00list:1.9 debian/alsa-utils/debian/patches/00list:1.10
--- debian/alsa-utils/debian/patches/00list:1.9 Mon Sep 6 15:07:40 2004
+++ debian/alsa-utils/debian/patches/00list Mon Sep 6 15:21:35 2004
@@ -5,3 +5,4 @@
90_debian_alsaconf_cfgfile
90_debian_alsaconf_notouch
91_debian_alsaconf_noclear
+92_debian_alsaconf_restore
Index: debian/alsa-utils/debian/patches/92_debian_alsaconf_restore.dpatch
diff -u /dev/null debian/alsa-utils/debian/patches/92_debian_alsaconf_restore.dpatch:1.1
--- /dev/null Mon Sep 6 15:21:38 2004
+++ debian/alsa-utils/debian/patches/92_debian_alsaconf_restore.dpatch Mon Sep 6 15:21:35 2004
@@ -0,0 +1,1220 @@
+#! /bin/sh -e
+## 92_debian_alsaconf_restore.dpatch by <jdthood@yahoo.co.uk>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -lt 1 ]; then
+ echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+ -patch) patch -p1 ${patch_opts} < $0;;
+ -unpatch) patch -R -p1 ${patch_opts} < $0;;
+ *)
+ echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/jdthood/src/pkg-alsa/debian/alsa-utils/alsaconf/alsaconf.in alsa-utils/alsaconf/alsaconf.in
+--- /home/jdthood/src/pkg-alsa/debian/alsa-utils/alsaconf/alsaconf.in 2004-09-06 23:20:16.000000000 +0200
++++ alsa-utils/alsaconf/alsaconf.in 2004-09-06 23:20:36.000000000 +0200
+@@ -617,6 +617,13 @@
+ if [ -n "$CARD_OPTS" ]; then
+ echo "options $CARD_DRIVER $CARD_OPTS" >> $addcfg
+ fi
++ if [ "$kernel" = old ] ; then
++ echo "post-install $CARD_DRIVER /usr/sbin/alsactl restore
++#pre-remove $CARD_DRIVER /usr/sbin/alsactl store" >> $addcfg
++ else
++ echo "install $CARD_DRIVER /sbin/modprobe --ignore-install $CARD_DRIVER && /usr/sbin/alsactl restore
++#remove $CARD_DRIVER /usr/sbin/alsactl store ; /sbin/modprobe --remove --ignore-remove $CARD_DRIVER" >> $addcfg
++ fi
+ if [ -z "$cfgout" ]; then
+ echo "$ACE
+ " >> $addcfg
+diff -urNad /home/jdthood/src/pkg-alsa/debian/alsa-utils/alsaconf/alsaconf.in.orig alsa-utils/alsaconf/alsaconf.in.orig
+--- /home/jdthood/src/pkg-alsa/debian/alsa-utils/alsaconf/alsaconf.in.orig 1970-01-01 01:00:00.000000000 +0100
++++ alsa-utils/alsaconf/alsaconf.in.orig 2004-09-06 23:20:16.000000000 +0200
+@@ -0,0 +1,1174 @@
++#!/bin/bash
++#
++# ALSA Configurator
++#
++# Copyright (c) 1999-2002 SuSE GmbH
++# Jan ONDREJ
++#
++# written by Takashi Iwai <tiwai@suse.de>
++# Bernd Kaindl <bk@suse.de>
++# Jan ONDREJ (SAL) <ondrejj@salstar.sk>
++#
++# based on the original version of Jan ONDREJ's alsaconf for ALSA 0.4.
++#
++# 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.
++#
++
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++bindir=@bindir@
++sbindir=@sbindir@
++version=@VERSION@
++
++# Check for GNU/Linux distributions
++if [ -f /etc/SuSE-release -o -f /etc/UnitedLinux-release ]; then
++ distribution="suse"
++elif [ -f /etc/gentoo-release ]; then
++ distribution="gentoo"
++elif [ -f /etc/debian_version ]; then
++ distribution="debian"
++elif [ -f /etc/mandrake-release ]; then
++ distribution="mandrake"
++elif [ -f /etc/redhat-release -a `grep -c "Red Hat" /etc/redhat-release 2>/dev/null` -ne 0 ]; then
++ distribution="redhat"
++elif [ -f /etc/fedora-release -a `grep -c "Fedora" /etc/fedora-release 2>/dev/null` -ne 0 ]; then
++ distribution="fedora"
++else
++ distribution="unknown"
++fi
++
++usage() {
++ echo "ALSA configurator version $version"
++ echo "usage: alsaconf [options]"
++ echo " -l|--legacy check only legacy non-isapnp cards"
++ echo " -m|--modinfo read module descriptions instead of reading card db"
++ echo " -s|--sound wav-file"
++ echo " use the specified wav file as a test sound"
++ echo " -u|--uid uid set the uid for the ALSA devices (default = 0) [obsoleted]"
++ echo " -g|--gid gid set the gid for the ALSA devices (default = 0) [obsoleted]"
++ echo " -d|--devmode mode"
++ echo " set the permission for ALSA devices (default = 0666) [obs.]"
++ echo " -r|--strict set strict device mode (equiv. with -g 17 -d 0660) [obsoleted]"
++ echo " -L|--log logging on $LOGFILE"
++ echo " -p|--probe card-name"
++ echo " probe a legacy non-isapnp card and print module options"
++ echo " -P|--listprobe list the supported legacy card modules"
++ echo " -h|--help what you're reading"
++ exit 1
++}
++
++clear() {
++ # Run the real clear command here if you prefer to hide error messages
++ echo
++}
++
++OPTS=`getopt -o lmLhp:Pu:g:d:rs: --long legacy,modinfo,log,help,probe,listprobe,uid,gid,devmode,strict,sound -n alsaconf -- "$@"` || exit 1
++eval set -- "$OPTS"
++
++do_legacy_only=0
++use_modinfo_db=0
++do_logging=0
++alsa_uid=0
++alsa_gid=29
++alsa_mode=0660
++legacy_probe_card=""
++LOGFILE="/tmp/alsaconf.log"
++TESTSOUND="@TESTSOUND@"
++try_all_combination=0
++
++# legacy support
++LEGACY_CARDS="opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8"
++
++while true ; do
++ case "$1" in
++ -l|--legacy)
++ do_legacy_only=1; shift ;;
++ -m|--modifno)
++ use_modinfo_db=1; shift ;;
++ -s|--sound)
++ TESTSOUND=$2; shift 2;;
++ -h|--help)
++ usage; exit 1 ;;
++ -L|--log)
++ do_logging=1; rm -f $LOGFILE; shift;;
++ -p|--probe)
++ legacy_probe_card="$2"; shift 2;;
++ -P|--listprobe)
++ echo "$LEGACY_CARDS"; exit 0;;
++ -u|--uid)
++ alsa_uid="$2"; shift 2;;
++ -g|--gid)
++ alsa_gid="$2"; shift 2;;
++ -d|--devmode)
++ alsa_mode="$2"; shift 2;;
++ -r|--strict)
++ alsa_uid=0; alsa_gid=17; alsa_mode=0660; shift;;
++ --) shift ; break ;;
++ *) usage ; exit 1 ;;
++ esac
++done
++
++# Check for root privileges
++if [ `id -u` -ne 0 ]; then
++ echo "You must be root to use this script."
++ exit 1
++fi
++
++#
++# check the snd_ prefix for ALSA module options
++# snd_ prefix is obsoleted since 0.9.0rc4.
++#
++if modinfo -p snd | grep -q snd_ ; then
++ mpfx="snd_"
++else
++ mpfx=""
++fi
++
++alsa_device_opts=""
++if modinfo -p snd | grep -q uid ; then
++ if [ x"$alsa_uid" != x0 ]; then
++ alsa_device_opts="$alsa_device_opts ${mpfx}device_uid=$alsa_uid"
++ fi
++ if [ x"$alsa_gid" != x0 ]; then
++ alsa_device_opts="$alsa_device_opts ${mpfx}device_gid=$alsa_gid"
++ fi
++fi
++if modinfo -p snd | grep -q device_mode ; then
++ if [ x"$alsa_mode" != x0 ]; then
++ alsa_device_opts="$alsa_device_opts ${mpfx}device_mode=$alsa_mode"
++ fi
++fi
++
++case `uname -r` in
++2.6.*)
++ kernel="new"
++ ;;
++*)
++ kernel="old"
++ ;;
++esac
++
++# cfgfile = base config file to remove/update the sound setting
++# cfgout = new config file to write the sound setting (if different from $cfgfile)
++if [ "$distribution" = "gentoo" ]; then
++ cfgfile="/etc/modules.d/alsa"
++elif [ "$kernel" = "new" ]; then
++ if [ -d /etc/modprobe.d ]; then
++ cfgout="/etc/modprobe.d/sound"
++ fi
++ cfgfile="/etc/modprobe.conf"
++elif [ "$distribution" = "debian" ]; then
++ cfgfile="/etc/modutils/alsa-base"
++elif [ -e /etc/modules.conf ]; then
++ cfgfile="/etc/modules.conf"
++elif [ -e /etc/conf.modules ]; then
++ cfgfile="/etc/conf.modules"
++else
++ cfgfile="/etc/modules.conf"
++ touch /etc/modules.conf
++fi
++
++# Check for dialog, whiptail, gdialog, awk, ... ?
++if which dialog > /dev/null; then
++ DIALOG=dialog
++else
++ if which whiptail > /dev/null; then
++ whiptail_wrapper() {
++ X1="$1"
++ X2="$2"
++ if [ $1 = --yesno ]; then
++ X3=`expr $3 + 2`
++ else
++ X3=$3
++ fi
++ shift 3
++ whiptail "$X1" "$X2" $X3 "$@"
++ }
++ DIALOG=whiptail_wrapper
++ else
++ echo "Error, dialog or whiptail not found."
++ exit 1
++ fi
++fi
++if which awk > /dev/null; then :
++else
++ echo "Error, awk not found. Can't continue."
++ exit 1
++fi
++
++#
++# remove entries by yast2 sound configurator
++#
++remove_y2_block() {
++ awk '
++ /^alias sound-slot-[0-9]/ { next }
++ /^alias char-major-116 / { next }
++ /^alias char-major-14 / { next }
++ /^alias snd-card-[0-9] / { next }
++ /^options snd / { next }
++ /^options snd-/ { next }
++ /^options off / { next }
++ /^alias sound-service-[0-9]/ { next }
++ /^# YaST2: sound / { next }
++ { print }'
++}
++
++#
++# remove entries by sndconfig sound configurator
++#
++# found strings to search for in WriteConfModules,
++# from sndconfig 0.68-4 (rawhide version)
++
++remove_sndconfig_block() {
++ awk '
++ /^alias sound-slot-0/ { modulename = $3 ; next }
++ /^alias sound-slot-[0-9]/ { next }
++ /^post-install sound-slot-[0-9] / { next }
++ /^pre-remove sound-slot-[0-9] / { next }
++ /^options sound / { next }
++ /^alias synth0 opl3/ { next }
++ /^options opl3 / { next }
++ /^alias midi / { mididev = $3 ; next }
++ /^options / { if ($2 == mididev) next }
++ /^pre-install / { if ($2 == mididev) next }
++ /^alias synth0 / { synth = $3 ; next }
++ /^post-install / { if ($2 == synth) next }
++ /^options sb / { next }
++ /^post-install .+ \/bin\/modprobe "aci"/ { if ($2 == modulename) next }
++ /^options adlib_card / { next }
++ /^options .+ isapnp=1/ { if ($2 == modulename) next }
++ /^options i810_audio / { next }
++ /^options / {if ($2 == modulename) next }
++ { print }'
++}
++
++#
++# remove the previous configuration by alsaconf
++#
++remove_ac_block() {
++ awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
++}
++
++#
++# set default mixer volumes
++#
++mixer() {
++ amixer set "$1" "$2" unmute >/dev/null 2>&1
++ amixer set "$1" unmute >/dev/null 2>&1
++}
++
++set_mixers() {
++ mixer Master 75%
++ mixer PCM 90%
++ mixer Synth 90%
++ mixer CD 90%
++ # mute mic
++ amixer set Mic 0% mute >/dev/null 2>&1
++ # ESS 1969 chipset has 2 PCM channels
++ mixer PCM,1 90%
++ # Trident/YMFPCI/emu10k1
++ mixer Wave 100%
++ mixer Music 100%
++ mixer AC97 100%
++ # CS4237B chipset:
++ mixer 'Master Digital' 75%
++ # Envy24 chips with analog outs
++ mixer DAC 90%
++ mixer DAC,0 90%
++ mixer DAC,1 90%
++ # some notebooks use headphone instead of master
++ mixer Headphone 75%
++ mixer Playback 100%
++ # turn off digital switches
++ amixer set "SB Live Analog/Digital Output Jack" off >/dev/null 2>&1
++ amixer set "Audigy Analog/Digital Output Jack" off >/dev/null 2>&1
++}
++
++
++# INTRO
++intro() {
++$DIALOG --msgbox "
++ ALSA CONFIGURATOR
++ v$version
++
++ This script is a configurator for
++ Advanced Linux Sound Architecture (ALSA) driver.
++
++
++ If ALSA is already running, you should close all sound
++ apps now and stop the sound driver.
++ alsaconf will try to do this, but it's not 100% sure.
++" 20 63 || acex 0
++}
++
++# FAREWELL
++farewell() {
++$DIALOG --msgbox "
++
++ $*
++
++ ALSA CONFIGURATOR
++
++ will prepare the card for playing now.
++
++ Now I'll run '`basename $rcalsasound` start', then I'll use
++ amixer to raise the default volumes.
++ You can change the volume later via a mixer
++ program such as alsamixer or gamix.
++
++" 17 60 || acex 0
++}
++
++# Exit function
++acex() {
++ cleanup
++ clear
++ exit $1
++}
++
++#
++# search for alsasound init script
++#
++
++if [ "$distribution" = "debian" ]; then
++ rcalsasound=/etc/init.d/alsa
++elif [ -x /etc/init.d/alsasound ]; then
++ rcalsasound=/etc/init.d/alsasound
++elif [ -x /usr/sbin/rcalsasound ]; then
++ rcalsasound=/usr/sbin/rcalsasound
++elif [ -x /sbin/rcalsasound ]; then
++ rcalsasound=/sbin/rcalsasound
++elif [ -x /etc/rc.d/init.d/alsasound ]; then
++ rcalsasound=/etc/rc.d/init.d/alsasound
++elif [ -x /etc/init.d/alsa ]; then
++ rcalsasound=/etc/init.d/alsa
++else
++ rcalsasound=rcalsasound
++fi
++
++
++# MAIN
++if [ -d /proc/asound ]; then
++ $rcalsasound stop >/dev/null 2>&1
++ /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
++fi
++
++
++
++TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
++if [ $? -ne 0 ]; then
++ echo "$0: Can't create temp file, exiting..."
++ exit 1
++fi
++FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
++if [ $? -ne 0 ]; then
++ echo "$0: Can't create temp file, exiting..."
++ exit 1
++fi
++DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
++if [ $? -ne 0 ]; then
++ echo "$0: Can't create temp file, exiting..."
++ exit 1
++fi
++cleanup () {
++ killall -9 aplay arecord >/dev/null 2>&1
++ /sbin/modprobe -r isapnp >/dev/null 2>&1
++ /sbin/modprobe -r isa-pnp >/dev/null 2>&1
++ rm -f "$TMP" "$FOUND" "$DUMP"
++}
++trap cleanup 0
++
++# convert ISA PnP id number to string 'ABC'
++convert_isapnp_id () {
++ if [ -z "$1" ]; then
++ echo "XXXX"
++ return
++ fi
++ let a='('$1'>>2) & 0x3f'
++ let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
++ let c='('$1'>> 8) & 0x1f'
++ strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++ echo ${strs:$a:1}${strs:$b:1}${strs:$c:1}
++}
++
++# swap high & low bytes
++swap_number () {
++ if [ -z "$1" ]; then
++ echo "0000"
++ return
++ fi
++ let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
++ printf "%04x" $v
++}
++
++# build card database
++# build_card_db filename
++build_card_db () {
++ MODDIR=/lib/modules/`uname -r`
++ last_driver=""
++ echo -n > $1
++
++ # list pci cards
++ while read driver vendor device dummy; do
++ if expr $driver : 'snd-.*' >/dev/null ; then
++ if [ "$last_driver" != "$driver" ]; then
++ echo $driver.o
++ last_driver=$driver
++ fi
++ id1=`printf '0x%04x' $vendor`
++ id2=`printf '0x%04x' $device`
++ echo "PCI: $id1=$id2"
++ fi
++ done < $MODDIR/modules.pcimap >> $1
++
++ # list isapnp cards
++ while read driver cardvendor carddevice data vendor func; do
++ if expr $driver : 'snd-.*' >/dev/null ; then
++ if [ "$last_driver" != "$driver" ]; then
++ echo $driver.o
++ last_driver=$driver
++ fi
++ id1=`convert_isapnp_id $cardvendor`
++ dev1=`swap_number $carddevice`
++ id2=`convert_isapnp_id $vendor`
++ dev2=`swap_number $func`
++ echo "ISAPNP: $id1$dev1=$id2$dev2"
++ fi
++ done < $MODDIR/modules.isapnpmap >> $1
++}
++
++#
++# probe cards
++#
++probe_cards () {
++ test -r /proc/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
++ test -r /proc/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
++ if [ -r /proc/isapnp ]; then
++ cat /proc/isapnp >"$DUMP"
++ elif [ -d /sys/bus/pnp/devices/00:01.00 ]; then
++ # use 2.6 kernel's sysfs output
++ # fake the isapnp dump
++ # unfortunately, there is no card name information!
++ ( cd /sys/bus/pnp/devices
++ for i in *:*.00; do
++ id=`cat $i/id`
++ echo "Card 0 '$id:ISAPnP $id' " >> "$DUMP"
++ done
++ )
++ else
++ echo -n >"$DUMP"
++ fi
++ CARDID_DB=/var/tmp/alsaconf.cards
++ if [ ! -r $CARDID_DB ]; then
++ use_modinfo_db=1
++ fi
++ if [ $use_modinfo_db != 1 ]; then
++ if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
++ use_modinfo_db=1
++ fi
++ fi
++ if [ $use_modinfo_db = 1 ]; then
++ echo "Building card database.."
++ build_card_db $CARDID_DB
++ fi
++ if [ ! -r $CARDID_DB ]; then
++ echo "No card database is found.."
++ exit 1
++ fi
++ ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
++
++ awk '
++BEGIN {
++ format="%-40s %s\n";
++ ncards='"$ncards"';
++ idx=0;
++}
++/^snd-.*\.o$/{
++ sub(/.o$/, "");
++ driver=$0;
++ perc=(idx * 100) / (ncards + 1);
++ print int(perc);
++ idx++;
++}
++/^[<literal space><literal tab>]*PCI: /{
++ gsub(/0x/, "");
++ gsub(/=/, ":");
++ x = sprintf ("'/usr/bin/lspci' -n | grep '"' 0401: '"' | grep %s", $2);
++ if (system (x) == 0)
++ printf "%s %s\n", $2, driver >>"'"$FOUND"'"
++}
++/^[<literal space><literal tab>]*ISAPNP: /{
++ gsub(/=.*/, "");
++ x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
++ if (system (x) == 0)
++ printf "%s %s\n", $2, driver >>"'"$FOUND"'"
++}' < $CARDID_DB |\
++ $DIALOG --gauge "Searching sound cards" 6 40 0
++
++ #
++ # PowerMac
++ #
++ if grep -q MacRISC /proc/cpuinfo; then
++ /sbin/modprobe -a -l | grep 'snd-powermac' | \
++ while read i; do
++ i=${i##*/}
++ i=${i%%.o}
++ i=${i%%.ko}
++ echo "PowerMac $i" >> $FOUND
++ done
++ fi
++}
++
++#
++# look for a descriptive device name from the given device id
++#
++find_device_name () {
++ if expr "$1" : '[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
++ /usr/bin/lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. Multimedia audio controller: //g'
++ return
++ elif expr "$1" : '[A-Z@][A-Z@][A-Z@][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
++ cardname=`grep '^Card [0-9]\+ '\'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
++ echo $cardname
++ else
++ echo $1
++ fi
++}
++
++#
++# configure and try test sound
++#
++ac_config_card () {
++
++ CARD_DRIVER=snd-$1
++ CARD_OPTS="${*:2}"
++
++ if [ -n "$cfgout" ]; then
++ addcfg="$cfgout"
++ else
++ addcfg="$cfgfile"
++ fi
++ # Configuration done
++ $DIALOG --yesno "
++Configuring $CARD_DRIVER
++Do you want to modify ${addcfg}?" 8 50 || acex 0
++ clear
++
++ # Copy conf.modules and make changes.
++ ACB="# --- BEGIN: Generated by ALSACONF, do not edit. ---"
++ ACE="# --- END: Generated by ALSACONF, do not edit. ---"
++
++ # Detect 2.2.X kernel
++ KVER=`uname -r | tr ".-" " "`
++ KVER1=`echo $KVER | cut -d" " -f1`
++ KVER2=`echo $KVER | cut -d" " -f2`
++ if [ $KVER1 -ge 2 ] && [ $KVER2 -ge 2 ]; then
++ SOUND_CORE="soundcore"
++ else
++ SOUND_CORE="snd"
++ fi
++
++ if [ "$distribution" = "redhat" -o "$distribution" = "fedora" ] ; then
++ if [ -r $cfgfile ] ; then
++ remove_ac_block < $cfgfile | remove_sndconfig_block | uniq > $TMP
++ else
++ rm -f $TMP
++ fi
++ else
++ if [ -r $cfgfile ] ; then
++ remove_ac_block < $cfgfile | remove_y2_block | uniq > $TMP
++ else
++ rm -f $TMP
++ fi
++ fi
++
++ if [ -n "$cfgout" ]; then
++ rm -f "$cfgout"
++ : > "$cfgout"
++ addcfg="$cfgout"
++ else
++ addcfg="$TMP"
++ touch "$TMP"
++ echo "$ACB
++# --- ALSACONF verion $version ---" >> $addcfg
++ fi
++
++ if [ -z "$have_alias" -a "$kernel" = "new" ]; then
++ if grep -q char-major-116 /lib/modules/`uname -r`/modules.alias; then
++ have_alias="yes"
++ fi
++ fi
++ if [ -z "$have_alias" ]; then
++echo "alias char-major-116 snd
++alias char-major-14 $SOUND_CORE
++alias sound-service-0-0 snd-mixer-oss
++alias sound-service-0-1 snd-seq-oss
++alias sound-service-0-3 snd-pcm-oss
++alias sound-service-0-8 snd-seq-oss
++alias sound-service-0-12 snd-pcm-oss" >> $addcfg
++ fi
++ if [ -n "$alsa_device_opts" ]; then
++ echo "options snd $alsa_device_opts" >> $addcfg
++ fi
++echo "alias snd-card-0 $CARD_DRIVER
++alias sound-slot-0 $CARD_DRIVER" >> $addcfg
++ if [ -n "$CARD_OPTS" ]; then
++ echo "options $CARD_DRIVER $CARD_OPTS" >> $addcfg
++ fi
++ if [ -z "$cfgout" ]; then
++ echo "$ACE
++" >> $addcfg
++ fi
++
++ if [ -r $TMP ]; then
++ if [ ! -r $cfgfile ] || ! cmp -s $TMP $cfgfile ; then
++ cp -f $TMP $cfgfile
++ fi
++ else
++ [ -r $cfgfile ] && : > $cfgfile
++ fi
++
++ /sbin/depmod -a 2>/dev/null
++
++ # remove yast2 entries (- only for suse distro)
++ if [ -f /var/lib/YaST/unique.inf ]; then
++ awk '
++BEGIN { in_sound=0; }
++/^\[sound\]$/ { print; in_sound=1; next; }
++/^\[.+\]$/ { print; in_sound=0; next; }
++{ if (in_sound == 0) { print; } }
++' < /var/lib/YaST/unique.inf > $TMP
++ cp -f $TMP /var/lib/YaST/unique.inf
++ fi
++
++ farewell "OK, driver $CARD_DRIVER is configured."
++ clear
++ if [ "$distribution" = "gentoo" ]; then
++ echo Running modules-update...
++ modules-update
++ elif [ "$distribution" = "debian" ]; then
++ echo Running update-modules...
++ update-modules
++ fi
++ echo Loading driver...
++ $rcalsasound start
++ echo Setting default volumes...
++ if [ -x $bindir/set_default_volume ]; then
++ $bindir/set_default_volume -f
++ else
++ set_mixers
++ fi
++ if [ -f $TESTSOUND ]; then
++ if $DIALOG --yesno "
++ The mixer is set up now for for playing.
++ Shall I try to play a sound sample now?
++
++ NOTE:
++If you have a big amplifier, lower your volumes or say no.
++ Otherwise check that your speaker volume is open,
++ and look if you can hear test sound.
++" 13 65
++ then
++ clear
++ echo
++ aplay $TESTSOUND
++ fi
++ fi
++ if [ ! -r /var/lib/alsa/asound.state ]; then
++ echo "Saving the mixer setup used for this in /var/lib/alsa/asound.state."
++ $sbindir/alsactl store
++ fi
++ clear
++ cat <<END
++===============================================================================
++
++ Now ALSA is ready to use.
++ For adjustment of volumes, use your favorite mixer.
++
++ Have a lot of fun!
++
++END
++}
++
++
++#
++# probe legacy ISA cards
++#
++
++check_dma_avail () {
++ if [ -r /proc/dma ]; then
++ list=""
++ for dma in $*; do
++ grep '^ *'$dma': ' /proc/dma >/dev/null 2>&1 || list="$list $dma"
++ done
++ echo $list
++ fi
++}
++
++check_irq_avail () {
++ if [ -r /proc/interrupts ]; then
++ list=""
++ for irq in $*; do
++ grep '^ *'$irq': ' /proc/interrupts >/dev/null 2>&1 || list="$list $irq"
++ done
++ echo $list
++ fi
++}
++
++# check playback
++# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
++ac_try_load () {
++ test $do_logging = 1 && echo "$1 ${*:2}" >> $LOGFILE
++ /sbin/modprobe snd-$1 ${*:2} >/dev/null 2>&1
++ if /bin/lsmod | grep -E '^(snd-|snd_)'$1' ' >/dev/null 2>&1; then
++ : ;
++ else
++ modprobe -r snd-$1 >/dev/null 2>&1
++ return 1
++ fi
++
++ # mute mixers
++ amixer set Master 0% mute >/dev/null 2>&1
++ amixer set PCM 0% mute >/dev/null 2>&1
++
++ # output 0.5 sec
++ head -c 4000 < /dev/zero | aplay -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
++ # remember pid
++ pp=$!
++ # sleep for 2 seconds (to be sure -- 1 sec would be enough)
++ sleep 2
++ # kill the child process if still exists.
++ kill -9 $pp > /dev/null 2>&1
++ st=$?
++ ac_cardname=`head -n 1 /proc/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
++ /sbin/modprobe -r snd-$1 >/dev/null 2>&1
++ if [ $st = 0 ]; then
++ # irq problem?
++ test $do_logging = 1 && echo "no playback return" >> $LOGFILE
++ return 2
++ else
++ # seems ok!
++ test $do_logging = 1 && echo "playback OK" >> $LOGFILE
++ return 0
++ fi
++}
++
++# check capture
++# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
++# ac_try_capture card duplex opts
++ac_try_capture () {
++ test $do_logging = 1 && echo "$1 ${*:2}" >> $LOGFILE
++ /sbin/modprobe snd-$1 ${*:3} >/dev/null 2>&1
++ if /bin/lsmod | grep -E '^(snd-|snd_)'$1' ' >/dev/null 2>&1; then
++ : ;
++ else
++ modprobe -r snd-$1 >/dev/null 2>&1
++ return 1
++ fi
++
++ # mute mixers
++ amixer set Master 0% mute >/dev/null 2>&1
++ amixer set PCM 0% mute >/dev/null 2>&1
++
++ play_pid=0
++ if [ $2 = yes ]; then
++ # try duplex - start dummy playing
++ aplay -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
++ play_pid=$!
++ fi
++ # record 1sec
++ arecord -d1 > /dev/null 2>&1 &
++ # remember pid
++ pp=$!
++ # sleep for 2 seconds
++ sleep 2
++ # kill the child process if still exists.
++ kill -9 $pp > /dev/null 2>&1
++ st=$?
++ # kill playback process if any
++ test $play_pid != 0 && kill -9 $play_pid
++ /sbin/modprobe -r snd-$1 >/dev/null 2>&1
++ if [ $st = 0 ]; then
++ test $do_logging = 1 && echo "capture no return" >> $LOGFILE
++ return 2
++ else
++ test $do_logging = 1 && echo "capture OK" >> $LOGFILE
++ return 0
++ fi
++}
++
++get_dma_pair () {
++ case $1 in
++ 0)
++ echo 1 3 5;;
++ 1)
++ echo 0 3 5;;
++ 3)
++ echo 1 0 5;;
++ 5)
++ echo 3 1 0;;
++ esac
++}
++
++#
++# check playback on specified irqs
++#
++# ac_try_irq card opts irqs...
++# return 0 - OK, 1 - NG, 2 - not working (dma problem?)
++#
++ac_try_irq () {
++ card=$1
++ opts="$2 ${mpfx}irq=$3"
++ ac_try_load $card $opts >/dev/null 2>&1
++ result=$?
++ case $result in
++ 0)
++ ac_opts="$opts"
++ return 0
++ ;;
++ 2)
++ for irq in ${*:4}; do
++ opts="$2 ${mpfx}irq=$irq"
++ ac_try_load $card $opts >/dev/null 2>&1
++ if [ $? = 0 ]; then
++ ac_opts="$opts"
++ return 0
++ fi
++ done
++ return 2
++ ;;
++ esac
++ return 1
++}
++
++#
++# check playback/capture on dma1 & dma2 & specified irqs
++#
++# ac_try_dmas card opts irqs...
++# return 0 - OK, 1 - NG
++#
++ac_try_dmas () {
++ dma_list=`check_dma_avail 1 0 3 5`
++ for irq in ${*:3}; do
++ for dma1 in $dma_list; do
++ for dma2 in `get_dma_pair $dma1`; do
++ opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
++ ac_try_load $1 $opts >/dev/null 2>&1
++ result=$?
++ if [ $result = 1 ]; then
++ if [ $try_all_combination = 1 ]; then
++ continue
++ else
++ return 1
++ fi
++ elif [ $result = 0 ]; then
++ test $do_logging = 1 && echo "Now checking capture..." >> $LOGFILE
++ ac_opts="$opts"
++ ac_try_capture $1 yes $opts >/dev/null 2>&1 && return 0
++ for d in yes no; do
++ for dma2 in $dma_list; do
++ if [ $dma1 != $dma2 ]; then
++ opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
++ ac_opts="$opts"
++ ac_try_capture $1 $d $opts >/dev/null 2>&1 && return 0
++ fi
++ done
++ done
++ return 0
++ fi
++ done
++ done
++ done
++ return 1
++}
++
++# check if the option $2 exists in card $1: set value $3
++ac_check_option () {
++ if modinfo -p snd-$1 | grep $2 > /dev/null 2>&1 ; then
++ echo "$2=$3"
++ fi
++}
++
++ac_try_card_sb8 () {
++ card=sb8
++ irq_list=`check_irq_avail 5 3 9 10 7`
++ for dma8 in `check_dma_avail 1 3`; do
++ opts="${mpfx}dma8=$dma8"
++ ac_try_irq $card "$opts" $irq_list && return 0
++ done
++ return 1
++}
++
++ac_try_card_sb16 () {
++ card=sb16
++ isapnp=`ac_check_option $card ${mpfx}isapnp 0`
++ opts="$isapnp"
++ irq_list=`check_irq_avail 5 9 10 7 3`
++ dma_list=`check_dma_avail 0 1 3`
++ dma16_list=`check_dma_avail 5 6 7`
++ # at first try auto-probing by driver itself
++ ac_try_load $card $opts >/dev/null 2>&1
++ result=$?
++ case $result in
++ 0)
++ ac_opts="$opts"
++ ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
++ for d in yes no; do
++ for dma8 in $dma_list; do
++ for irq in $irq_list; do
++ opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
++ ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
++ done
++ done
++ done
++ return 0
++ ;;
++ 2)
++ for dma16 in $dma16_list; do
++ opts="${mpfx}dma16=$dma16 $isapnp"
++ if ac_try_irq $card "$opts" $irq_list ; then
++ ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
++ ac_opts_saved="$ac_opts"
++ for d in yes no; do
++ for dma8 in $dma_list; do
++ ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
++ ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
++ done
++ done
++ # return anyway here..
++ return 0
++ fi
++ done
++ ;;
++ esac
++ return 1
++}
++
++ac_try_card_es1688 () {
++ card=es1688
++ opts=""
++ irq_list=`check_irq_avail 5 9 10 7`
++ for dma8 in `check_dma_avail 1 3 0`; do
++ opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
++ ac_try_irq $card "$opts" $irq_list && return 0
++ done
++ return 1
++}
++
++ac_try_card_es18xx () {
++ card=es18xx
++ opts=`ac_check_option $card ${mpfx}isapnp 0`
++ ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
++ return 1
++}
++
++ac_try_card_cs4236 () {
++ card=cs4236
++ irq_list=`check_irq_avail 5 7 9 11 12 15`
++ isapnp=`ac_check_option $card ${mpfx}isapnp 0`
++ for cport in 0x538 0x210 0xf00; do
++ for port in 0x530 0x534; do
++ opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
++ ac_try_dmas $card "$opts" $irq_list && return 0
++ done
++ done
++ return 1
++}
++
++ac_try_card_cs4232 () {
++ card=cs4232
++ irq_list=`check_irq_avail 5 7 9 11 12 15`
++ isapnp=`ac_check_option $card ${mpfx}isapnp 0`
++ for cport in 0x538 0x210 0xf00; do
++ for port in 0x530 0x534; do
++ opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
++ ac_try_dmas $card "$opts" $irq_list && return 0
++ done
++ done
++ return 1
++}
++
++ac_try_card_cs4231 () {
++ card=cs4231
++ irq_list=`check_irq_avail 5 7 9 11 12 15`
++ for port in 0x530 0x534; do
++ opts="${mpfx}port=$port"
++ ac_try_dmas $card "$opts" $irq_list && return 0
++ done
++ return 1
++}
++
++ac_try_card_opl3sa2 () {
++ card=opl3sa2
++ irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
++ isapnp=`ac_check_option $card ${mpfx}isapnp 0`
++ for port in 0x370 0x538 0xf86 0x100; do
++ for wss_port in 0x530 0xe80 0xf40 0x604; do
++ opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
++ ac_try_dmas $card "$opts" $irq_list && return 0
++ done
++ done
++ return 1
++}
++
++ac_config_legacy () {
++
++ $DIALOG --title "WARNING" --yesno "
++ Probing legacy ISA cards might make
++ your system unstable.
++
++ Are you sure to proceed?
++
++" 10 50 || acex 0
++
++ if [ x"$1" = x ]; then
++ probe_list="$LEGACY_CARDS"
++ else
++ probe_list=$*
++ fi
++ menu_args=()
++
++ for card in $probe_list; do
++ cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
++ if [ x"$cardname" != x ]; then
++ menu_args=("${menu_args[@]}" "$card" "$cardname" "on")
++ fi
++ done
++ if [ x$menu_args = x ]; then
++ $DIALOG --msgbox "No legacy drivers are available
++ for your machine" 5 50
++ return 1
++ fi
++ $DIALOG --title "Driver Selection" --checklist \
++" Probing legacy ISA cards
++
++ Please select the drivers to probe:" \
++ 17 64 8 "${menu_args[@]}" 2> $FOUND || acex 0
++
++ if [ $try_all_combination != 1 ]; then
++ if $DIALOG --yesno "
++ Shall I try all possible DMA and IRQ combinations?
++ With this option, some unconventional configuration
++ might be found, but it will take much longer time." 10 60
++ then
++ try_all_combination=1
++ fi
++ fi
++
++ echo "Probing legacy cards.. This may take a few minutes.."
++ echo -n "Probing: "
++ cards=`cat $FOUND | tr -d \"`
++ for card in $cards; do
++ echo -n " $card"
++ ac_opts=""
++ if eval ac_try_card_$card ; then
++ echo ' : FOUND!!'
++ ac_config_card $card $ac_opts
++ return 0
++ fi
++ done
++ echo
++ $DIALOG --title "Result" --msgbox "No legacy cards found" 5 50
++ return 1
++}
++
++#
++# main part continued..
++#
++
++if [ x"$legacy_probe_card" != x ]; then
++ ac_opts=""
++ if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
++ echo "$ac_opts"
++ echo "$ac_cardname"
++ exit 0
++ else
++ echo "FAILED"
++ exit 1
++ fi
++fi
++
++intro
++
++if [ $do_legacy_only = 1 ]; then
++ ac_config_legacy
++ exit 0
++fi
++
++probe_cards
++
++devs_found=()
++
++if [ -s "$FOUND" ]; then
++ while read dev card ; do
++ /sbin/modprobe -a -l | grep -E $card'\.(o|ko)' >/dev/null 2>&1 || continue
++ cardname=`find_device_name $dev | cut -c 1-64`
++ if [ -z "$cardname" ]; then
++ cardname="$card"
++ fi
++ card=${card##snd-}
++ devs_found=("${devs_found[@]}" "$card" "$cardname")
++ done <"$FOUND"
++fi
++if [ x$devs_found != x ]; then
++ #
++ # check for TP600E
++ #
++ if [ ${devs_found[0]} = cs46xx ]; then
++ if /usr/bin/lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
++ if $DIALOG --yesno "
++ Looks like you having a Thinkpad 600E or 770 notebook.
++ On this notebook, CS4236 driver should be used
++ although CS46xx chip is detected.
++
++ Shall I try to snd-cs4236 driver and probe
++ the legacy ISA configuration?" 13 60
++ then
++ try_all_combination=1
++ ac_config_legacy cs4236
++ exit 0
++ fi
++ elif /usr/bin/lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then
++ if $DIALOG --yesno "
++ Looks like you having a Dell Dimension machine.
++ On this machine, CS4232 driver should be used
++ although CS46xx chip is detected.
++
++ Shall I try to snd-cs4232 driver and probe
++ the legacy ISA configuration?" 13 60
++ then
++ try_all_combination=1
++ ac_config_legacy cs4232
++ exit 0
++ fi
++ fi
++ fi
++
++ devs_found=("${devs_found[@]}" "legacy" "Probe legacy ISA (non-PnP) chips")
++ $DIALOG --title "Soundcard Selection" --menu "
++ Following card(s) are found on your system.
++ Choose a soundcard to configure:
++" 17 76 8 "${devs_found[@]}" 2> $FOUND || acex 0
++ card=`head -n 1 $FOUND`
++ if [ "$card" = "legacy" ]; then
++ ac_config_legacy
++ else
++ ac_config_card "$card"
++ fi
++ exit 0
++else
++ if $DIALOG --yesno "
++ No supported PnP or PCI card found.
++
++ Would you like to probe legacy ISA sound cards/chips?
++
++" 9 60 ; then
++ ac_config_legacy
++ exit 0
++ fi
++fi
++
++rm -f "$FOUND" "$DUMP"
++exit 0