| #!/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. |
| # |
| |
| export TEXTDOMAIN=alsaconf |
| |
| prefix=@prefix@ |
| exec_prefix=@exec_prefix@ |
| bindir=@bindir@ |
| sbindir=@sbindir@ |
| version=@VERSION@ |
| USE_NLS=@USE_NLS@ |
| |
| # Useful for debugging |
| PROCFS="/proc" |
| SYSFS="/sys" |
| |
| # i18n stuff |
| if test "$USE_NLS" = "yes" && type -p gettext > /dev/null; then |
| xecho() { |
| gettext -s "$*" |
| } |
| else |
| xecho() { |
| echo "$*" |
| } |
| gettext() { |
| echo -n "$*" |
| } |
| fi |
| xmsg() { |
| msg=$(gettext "$1") |
| shift |
| printf "$msg" $* |
| } |
| |
| # Check for GNU/Linux distributions |
| if [ -f /etc/SuSE-release ]; then |
| distribution="suse" |
| suse_version=$(grep 'VERSION = ' /etc/SuSE-release | sed -e s/'VERSION = '//) |
| elif [ -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 test -f /etc/redhat-release && grep -q "Red Hat" /etc/redhat-release; then |
| distribution="redhat" |
| elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then |
| distribution="fedora" |
| elif [ -f /etc/slackware-version -o -f /etc/slamd64-version ]; then |
| distribution="slackware" |
| else |
| distribution="unknown" |
| fi |
| |
| for prog in lspci lsmod; do |
| for path in /sbin /usr/sbin /bin /usr/bin;do |
| test -x $path/$prog && eval $prog=$path/$prog |
| done |
| done |
| unset prog path |
| |
| usage() { |
| xecho "ALSA configurator" |
| echo " version $version" |
| xecho "usage: alsaconf [options] |
| -l|--legacy check only legacy non-isapnp cards |
| -m|--modinfo read module descriptions instead of reading card db |
| -s|--sound wav-file |
| use the specified wav file as a test sound |
| -u|--uid uid set the uid for the ALSA devices (default = 0) [obsoleted] |
| -g|--gid gid set the gid for the ALSA devices (default = 0) [obsoleted] |
| -d|--devmode mode |
| set the permission for ALSA devices (default = 0666) [obs.] |
| -r|--strict set strict device mode (equiv. with -g 17 -d 0660) [obsoleted] |
| -L|--log file logging on the specified file (for debugging purpose only) |
| -p|--probe card-name |
| probe a legacy non-isapnp card and print module options |
| -P|--listprobe list the supported legacy card modules |
| -c|--config file |
| specify the module config file |
| -R|--resources list available DMA and IRQ resources with debug for legacy |
| -h|--help what you're reading" |
| } |
| |
| OPTS=`getopt -o lmL:hp:Pu:g:d:rs:c:R --long legacy,modinfo,log:,help,probe:,listprobe,uid:,gid:,devmode:,strict,sound:,config:,resources -n alsaconf -- "$@"` || exit 1 |
| eval set -- "$OPTS" |
| |
| do_legacy_only=0 |
| use_modinfo_db=0 |
| alsa_uid=0 |
| alsa_gid=0 |
| alsa_mode=0666 |
| legacy_probe_card="" |
| LOGFILE="" |
| TESTSOUND="@TESTSOUND@" |
| try_all_combination=0 |
| resources="false" |
| |
| # 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|--modinfo) |
| use_modinfo_db=1; shift ;; |
| -s|--sound) |
| TESTSOUND=$2; shift 2;; |
| -h|--help) |
| usage; exit 0 ;; |
| -L|--log) |
| LOGFILE="$2"; shift 2;; |
| -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;; |
| -c|--config) |
| cfgfile="$2"; shift 2;; |
| -R|--resources) |
| resources="true"; shift;; |
| --) shift ; break ;; |
| *) usage ; exit 1 ;; |
| esac |
| done |
| |
| # |
| # probe legacy ISA cards |
| # |
| |
| check_dma_avail () { |
| list="" |
| if [ -d $SYSFS/bus/pnp/devices ]; then |
| for dma in $*; do |
| ok="true" |
| for i in $SYSFS/bus/pnp/devices/??:* ; do |
| if grep -q "state = active" $i/resources ; then |
| if grep -q '^dma '$dma'$' $i/resources; then |
| ok="false" |
| fi |
| fi |
| done |
| if [ -r $PROCFS/dma ]; then |
| if grep -q '^ *'$dma': ' $PROCFS/dma ; then |
| ok="false" |
| fi |
| fi |
| if [ "$ok" = "true" ]; then |
| list="$list $dma" |
| fi |
| done |
| else |
| if [ -r $PROCFS/dma ]; then |
| for dma in $*; do |
| grep -q '^ *'$dma': ' $PROCFS/dma || list="$list $dma" |
| done |
| fi |
| fi |
| if [ ! -z "$list" ]; then |
| echo $list |
| fi |
| } |
| |
| check_irq_avail () { |
| list="" |
| if [ -d $SYSFS/bus/pnp/devices ]; then |
| for irq in $*; do |
| ok="true" |
| for i in $SYSFS/bus/pnp/devices/??:* ; do |
| if grep -q "state = active" $i/resources ; then |
| if grep -q '^irq '$irq'$' $i/resources; then |
| ok="false" |
| fi |
| fi |
| done |
| if [ -r $PROCFS/interrupts ]; then |
| if grep -q '^ *'$irq': ' $PROCFS/interrupts ; then |
| ok="false" |
| fi |
| fi |
| if [ "$ok" = "true" ]; then |
| list="$list $irq" |
| fi |
| done |
| else |
| if [ -r $PROCFS/interrupts ]; then |
| for irq in $*; do |
| grep -q '^ *'$irq': ' $PROCFS/interrupts || list="$list $irq" |
| done |
| fi |
| fi |
| if [ ! -z "$list" ]; then |
| echo $list |
| fi |
| } |
| |
| # |
| # |
| # |
| |
| if [ "$resources" = "true" ]; then |
| if [ -d $SYSFS/bus/pnp/devices ]; then |
| for i in $SYSFS/bus/pnp/devices/??:* ; do |
| if [ "$resources" = "true" ]; then |
| echo ">>>>> PnP file: $i/resources" |
| cat $i/resources |
| fi |
| done |
| fi |
| if [ -r $PROCFS/dma ]; then |
| echo ">>>>> Allocated dma channels:" |
| cat $PROCFS/dma |
| fi |
| if [ -r $PROCFS/interrupts ]; then |
| echo ">>>>> Allocated interrupt channels:" |
| cat $PROCFS/interrupts |
| fi |
| echo -n "Valid DMA channels: " |
| check_dma_avail 0 1 2 3 4 5 6 7 |
| echo -n "Valid IRQ channels: " |
| check_irq_avail 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
| exit 0 |
| fi |
| |
| # Check for root privileges |
| if [ `id -u` -ne 0 ]; then |
| xecho "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 /sbin/modinfo -p snd | grep -q snd_ ; then |
| mpfx="snd_" |
| else |
| mpfx="" |
| fi |
| |
| alsa_device_opts="" |
| if /sbin/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 /sbin/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) |
| cfgout="" |
| cfgoldout="" |
| if [ -n "$cfgfile" ]; then |
| if [ ! -r "$cfgfile" ]; then |
| xecho "ERROR: The config file doesn't exist: " |
| echo $cfgfile |
| exit 1 |
| fi |
| else |
| if [ "$distribution" = "gentoo" ]; then |
| cfgfile="/etc/modules.d/alsa" |
| elif [ "$kernel" = "new" ]; then |
| cfgfile="/etc/modprobe.conf" |
| if [ -d /etc/modprobe.d ]; then |
| cfgout="/etc/modprobe.d/50-sound.conf" |
| cfgoldout="/etc/modprobe.d/sound" |
| if [ ! -f $cfgout ]; then |
| modver=$(modprobe -V | sed -e's/^module-init-tools version //') |
| case "$modver" in |
| 3.[789]*) |
| ;; |
| *) |
| cfgout="/etc/modprobe.d/sound" |
| cfgoldout="" |
| ;; |
| esac |
| fi |
| fi |
| elif [ "$distribution" = "debian" ]; then |
| cfgfile="/etc/modutils/sound" |
| 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 |
| fi |
| |
| # Check for dialog, whiptail, gdialog, awk, ... ? |
| if type -p dialog > /dev/null; then |
| DIALOG=dialog |
| else |
| if type -p 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 |
| xecho "Error, dialog or whiptail not found." |
| exit 1 |
| fi |
| fi |
| if type -p awk > /dev/null; then : |
| else |
| xecho "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 |
| # |
| set_mixers() { |
| amixer -s -q <<EOF |
| set Master 75% unmute |
| set Master -12dB |
| set 'Master Mono' 75% unmute |
| set 'Master Mono' -12dB |
| set Front 75% unmute |
| set Front -12dB |
| set PCM 90% unmute |
| set PCM 0dB |
| mixer Synth 90% unmute |
| mixer Synth 0dB |
| mixer CD 90% unmute |
| mixer CD 0dB |
| # mute mic |
| set Mic 0% mute |
| # ESS 1969 chipset has 2 PCM channels |
| set PCM,1 90% unmute |
| set PCM,1 0dB |
| # Trident/YMFPCI/emu10k1 |
| set Wave 100% unmute |
| set Music 100% unmute |
| set AC97 100% unmute |
| # CS4237B chipset: |
| set 'Master Digital' 75% unmute |
| # Envy24 chips with analog outs |
| set DAC 90% unmute |
| set DAC -12dB |
| set DAC,0 90% unmute |
| set DAC,0 -12dB |
| set DAC,1 90% unmute |
| set DAC,1 -12dB |
| # some notebooks use headphone instead of master |
| set Headphone 75% unmute |
| set Headphone -12dB |
| set Playback 100% unmute |
| # turn off digital switches |
| set "SB Live Analog/Digital Output Jack" off |
| set "Audigy Analog/Digital Output Jack" off |
| EOF |
| } |
| |
| |
| # INTRO |
| intro() { |
| local msg=$(xmsg " |
| ALSA CONFIGURATOR |
| version %s |
| |
| 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." $version) |
| $DIALOG --msgbox "$msg" 20 63 || acex 0 |
| } |
| |
| # FAREWELL |
| farewell() { |
| local msg=$(gettext " |
| |
| OK, sound driver is configured. |
| |
| ALSA CONFIGURATOR |
| |
| will prepare the card for playing now. |
| |
| Now I'll run alsasound init script, 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. |
| |
| ") |
| $DIALOG --msgbox "$msg" 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/rc.d/rc.alsa ]; then |
| rcalsasound=/etc/rc.d/rc.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 $PROCFS/asound ]; then |
| $rcalsasound stop >/dev/null 2>&1 |
| $rcalsasound unload >/dev/null 2>&1 |
| /sbin/rmmod dmasound dmasound_awacs 2>/dev/null |
| 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" "$addcfg" "$FOUND" "$DUMP" |
| } |
| trap cleanup 0 |
| |
| TMP=`mktemp -q /tmp/alsaconf.XXXXXX` |
| if [ $? -ne 0 ]; then |
| xecho "Can't create temp file, exiting..." |
| exit 1 |
| fi |
| addcfg=`mktemp -q /tmp/alsaconf.XXXXXX` |
| if [ $? -ne 0 ]; then |
| xecho "Can't create temp file, exiting..." |
| exit 1 |
| fi |
| FOUND=`mktemp -q /tmp/alsaconf.XXXXXX` |
| if [ $? -ne 0 ]; then |
| xecho "Can't create temp file, exiting..." |
| exit 1 |
| fi |
| DUMP=`mktemp -q /tmp/alsaconf.XXXXXX` |
| if [ $? -ne 0 ]; then |
| xecho "Can't create temp file, exiting..." |
| exit 1 |
| fi |
| |
| # 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 () { |
| found="0" |
| test -r $PROCFS/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1 |
| test -r $PROCFS/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1 |
| if [ -r $PROCFS/isapnp ]; then |
| cat $PROCFS/isapnp >"$DUMP" |
| found="1" |
| elif [ -d $SYSFS/bus/pnp/devices ]; then |
| # use 2.6 kernel's sysfs output |
| # fake the isapnp dump |
| index=0 |
| bindex=0 |
| for d1 in $SYSFS/devices/pnp* ; do |
| for d2 in $d1/*:* ; do |
| if [ -r $d2/card_id ]; then |
| id=`cat $d2/card_id` |
| name=`cat $d2/name` |
| echo "Card $index '$id:$name' " >> "$DUMP" |
| index=$[$index+1] |
| found="1" |
| else if [ -r $d2/id ]; then |
| # FIXME: multiple id might be present (separated with new-line) |
| id=`head -n 1 $d2/id` |
| echo "BIOS $bindex '$id' " >> "$DUMP" |
| bindex=$[$bindex+1] |
| found="1" |
| fi |
| fi |
| done |
| done |
| fi |
| if [ "$found" = "0" ]; then |
| 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 |
| xecho "Building card database.." |
| build_card_db $CARDID_DB |
| fi |
| if [ ! -r $CARDID_DB ]; then |
| xecho "No card database is found.." |
| exit 1 |
| fi |
| ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w` |
| |
| msg=$(gettext "Searching sound cards") |
| 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 ("'$lspci' -n 2>/dev/null| grep '"' 04..: '"' | grep %s", $2); |
| if (system (x) == 0) |
| printf "%s %s\n", $2, driver >>"'"$FOUND"'" |
| } |
| /^[<literal space><literal tab>]*ISAPNP: /{ |
| id2 = substr($0, index($0, "=")+1); |
| gsub(/=.*/, ""); |
| x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2); |
| if (system (x) == 0) |
| printf "%s %s\n", $2, driver >>"'"$FOUND"'" |
| else if (index($2, "ffff") > 0) { |
| x = sprintf ("grep '\''^BIOS [0-9]* .%s.'\'' '"$DUMP"'", id2); |
| if (system (x) == 0) |
| printf "%s %s\n", id2, driver >>"'"$FOUND"'" |
| } |
| }' < $CARDID_DB |\ |
| $DIALOG --gauge "$msg" 6 40 0 |
| |
| # |
| # PowerMac |
| # |
| if grep -q MacRISC $PROCFS/cpuinfo; then |
| MODDIR=/lib/modules/`uname -r` |
| find $MODDIR -name 'snd-powermac*' -print | \ |
| while read i; do |
| i=${i##*/} |
| i=${i%%.o} |
| i=${i%%.ko} |
| echo "PowerMac $i" >> $FOUND |
| done |
| fi |
| |
| # |
| # Sparc |
| # |
| if grep -q Sparc $PROCFS/cpuinfo; then |
| test -r $PROCFS/openprom/name || /bin/mount -t openpromfs none $PROCFS/openprom >/dev/null 2>&1 |
| # Check for an "audio" device |
| audio= |
| compat= |
| if test -r $PROCFS/openprom; then |
| audio=`find $PROCFS/openprom -follow -type d -name "audio*" -print` |
| fi |
| if test -n "$audio"; then |
| compat=`cat $audio/compatible` |
| compat=${compat#\'} |
| compat=${compat%\'} |
| compat=${compat#SUNW,} |
| fi |
| # Go through all cards we have |
| MODDIR=/lib/modules/`uname -r` |
| find $MODDIR -name 'snd-sun-*' -print | \ |
| while read i; do |
| i=${i##*/} |
| i=${i%%.o} |
| i=${i%%.ko} |
| sdev=`echo ${i#snd-sun-} | tr "[a-z]" "[A-Z]"` |
| |
| if test "$sdev" = "$compat"; then |
| echo "$sdev $i" >> $FOUND |
| elif test -r $PROCFS/openprom; then |
| find $PROCFS/openprom -follow -type d -name "SUNW,${sdev}*" \ |
| -exec echo "$sdev $i" \; 2>/dev/null >> $FOUND |
| else |
| echo "$sdev $i" >> $FOUND |
| fi |
| 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 |
| $lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. [^:]*: //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 |
| } |
| |
| # get hwcfg file type from the given driver name |
| get_hwcfg_type () { |
| while read dev driver; do |
| if [ "$driver" = "$1" ]; then |
| case "$dev" in |
| *:*) |
| # FIXME: need to look around /sys/bus/pci/* (or use vpid-* ?) |
| devid=`$lspci -d "$dev" | head -n 1 | sed -e 's/ .*$//'` |
| case "$devid" in |
| *:*:*.*) ;; |
| *) devid="0000:$devid" ;; |
| esac |
| echo bus-pci-$devid |
| ;; |
| *) |
| echo $driver |
| ;; |
| esac |
| break |
| fi |
| done |
| } |
| |
| # clean up all hwcfg-* files containing ALSA modules |
| # alsaconf sets up exclusively |
| cleanup_hwcfg () { |
| for i in /etc/sysconfig/hardware/hwcfg-*; do |
| grep -q "MODULE='snd-" $i && rm -f $i |
| done |
| } |
| |
| # |
| # set up /etc/sysconfig/hardware/hwcfg-* stuff |
| # |
| setup_hwcfg () { |
| card=$1 |
| cleanup_hwcfg |
| cfg=`echo "$devs_olist" | get_hwcfg_type $card` |
| echo "MODULE='$card'" > /etc/sysconfig/hardware/hwcfg-$cfg |
| echo "STARTMODE='auto'" >> /etc/sysconfig/hardware/hwcfg-$cfg |
| } |
| |
| |
| # |
| # configure and try test sound |
| # |
| ac_config_card () { |
| |
| CARD_DRIVER=snd-$1 |
| CARD_OPTS="${*:2}" |
| |
| if [ -n "$cfgout" ]; then |
| msg=$(xmsg " |
| Configuring %s |
| Do you want to modify %s (and %s if present)?" $CARD_DRIVER $cfgout $cfgfile) |
| $DIALOG --yesno "$msg" 10 50 || acex 0 |
| else |
| msg=$(xmsg " |
| Configuring %s |
| Do you want to modify %s?" $CARD_DRIVER $cfgfile) |
| $DIALOG --yesno "$msg" 8 50 || acex 0 |
| fi |
| 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 [ -r $cfgfile ] ; then |
| if [ "$distribution" = "redhat" -o "$distribution" = "fedora" ] ; then |
| remove_ac_block < $cfgfile | remove_sndconfig_block | uniq > $TMP |
| else |
| remove_ac_block < $cfgfile | remove_y2_block | uniq > $TMP |
| fi |
| 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 [ -n "$cfgout" ]; then |
| [ ! -r "$cfgfile" ] || cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$cfgfile" |
| cmp -s "$addcfg" "$cfgout" || cat "$addcfg" > "$cfgout" |
| test -n "$cfgoldout" && rm -f "$cfgoldout" |
| else |
| echo "$ACB |
| # --- ALSACONF version $version ---" >> $TMP |
| cat "$addcfg" >> "$TMP" |
| echo "$ACE |
| " >> $TMP |
| cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$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 |
| |
| # set up /etc/sysconfig/hardware/* |
| if [ "$distribution" = "suse" ]; then |
| case "$suse_version" in |
| 10.[012]*|10) |
| setup_hwcfg $CARD_DRIVER |
| ;; |
| esac |
| fi |
| |
| farewell |
| clear |
| case "$distribution" in |
| gentoo | debian) |
| xecho "Running update-modules..." |
| update-modules |
| ;; |
| esac |
| if [ -x $rcalsasound ] ; then |
| echo Loading driver... |
| $rcalsasound restart |
| fi |
| echo Setting default volumes... |
| if [ -x $bindir/set_default_volume ]; then |
| $bindir/set_default_volume -f |
| else |
| set_mixers |
| fi |
| if [ -f $TESTSOUND ]; then |
| msg=$(gettext " |
| 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. |
| ") |
| if $DIALOG --yesno "$msg" 13 65 |
| then |
| clear |
| echo |
| aplay -N $TESTSOUND |
| fi |
| fi |
| mkdir -p -m 0755 @ASOUND_STATE_DIR@ |
| if [ ! -r @ASOUND_STATE_DIR@/asound.state ]; then |
| xecho "Saving the mixer setup used for this in @ASOUND_STATE_DIR@/asound.state." |
| $sbindir/alsactl store |
| fi |
| clear |
| xecho " |
| =============================================================================== |
| |
| Now ALSA is ready to use. |
| For adjustment of volumes, use your favorite mixer. |
| |
| Have a lot of fun! |
| |
| " |
| } |
| |
| # check playback |
| # return 0 - OK, 1 - NG, 2 - not working (irq/dma problem) |
| ac_try_load () { |
| test -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE" |
| /sbin/modprobe snd-$1 ${*:2} >/dev/null 2>&1 |
| if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then |
| : ; |
| else |
| /sbin/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 -N -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 $PROCFS/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'` |
| /sbin/modprobe -r snd-$1 >/dev/null 2>&1 |
| if [ $st = 0 ]; then |
| # irq problem? |
| test -n "$LOGFILE" && echo "no playback return" >> "$LOGFILE" |
| return 2 |
| else |
| # seems ok! |
| test -n "$LOGFILE" && 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 -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE" |
| /sbin/modprobe snd-$1 ${*:3} >/dev/null 2>&1 |
| if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then |
| : ; |
| else |
| /sbin/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 -N -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 & |
| play_pid=$! |
| fi |
| # record 1sec |
| arecord -N -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 -n "$LOGFILE" && echo "capture no return" >> "$LOGFILE" |
| return 2 |
| else |
| test -n "$LOGFILE" && 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 -n "$LOGFILE" && 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 /sbin/modinfo -p snd-$1 | grep -q $2; 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 () { |
| title=$(gettext "WARNING") |
| msg=$(gettext " |
| Probing legacy ISA cards might make |
| your system unstable. |
| |
| Do you want to proceed? |
| |
| ") |
| $DIALOG --title "$title" --yesno "$msg" 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 |
| msg=$(gettext "No legacy drivers are available |
| for your machine") |
| $DIALOG --msgbox "$msg" 5 50 |
| return 1 |
| fi |
| title=$(gettext "Driver Selection") |
| msg=$(gettext " Probing legacy ISA cards |
| |
| Please select the drivers to probe:") |
| $DIALOG --title "$title" --checklist "$msg" \ |
| 17 64 8 "${menu_args[@]}" 2> $FOUND || acex 0 |
| |
| if [ $try_all_combination != 1 ]; then |
| msg=$(gettext " |
| 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.") |
| if $DIALOG --yesno "$msg" 10 60 |
| then |
| try_all_combination=1 |
| fi |
| fi |
| |
| xecho "Probing legacy cards.. This may take a few minutes.." |
| echo -n $(gettext "Probing: ") |
| cards=`cat $FOUND | tr -d \"` |
| for card in $cards; do |
| echo -n " $card" |
| ac_opts="" |
| if eval ac_try_card_$card ; then |
| xecho " : FOUND!!" |
| ac_config_card $card $ac_opts |
| return 0 |
| fi |
| done |
| echo |
| title=$(gettext "Result") |
| msg=$(gettext "No legacy cards found") |
| $DIALOG --title "$title" --msgbox "$msg" 5 50 |
| return 1 |
| } |
| |
| # |
| # main part continued.. |
| # |
| |
| if test -n "$LOGFILE" ; then |
| touch "$LOGFILE" |
| echo -n "Starting alsaconf: " >> "$LOGFILE" |
| date >> "$LOGFILE" |
| fi |
| |
| 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=() |
| devs_olist="" |
| |
| if [ -s "$FOUND" ]; then |
| while read dev card ; do |
| MODDIR=/lib/modules/`uname -r` |
| find $MODDIR -type f | grep -q -E $card'\.(o|ko)' || 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") |
| devs_devs=("${devs_devs[@]}" "$card" "$dev") |
| done <"$FOUND" |
| devs_olist=`cat $FOUND` |
| fi |
| if [ x$devs_found != x ]; then |
| # |
| # check for TP600E |
| # |
| if [ ${devs_found[0]} = cs46xx ]; then |
| if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then |
| msg=$(gettext " |
| 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?") |
| if $DIALOG --yesno "$msg" 13 60 |
| then |
| try_all_combination=1 |
| ac_config_legacy cs4236 |
| exit 0 |
| fi |
| elif $lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then |
| msg=$(gettext " |
| 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?") |
| if $DIALOG --yesno "$msg" 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") |
| title=$(gettext "Soundcard Selection") |
| msg=$(gettext " |
| Following card(s) are found on your system. |
| Choose a soundcard to configure: |
| ") |
| $DIALOG --title "$title" --menu "$msg" 17 76 8 "${devs_found[@]}" --output-fd 3 3> $FOUND || acex 0 |
| card=`head -n 1 $FOUND` |
| if [ "$card" = "legacy" ]; then |
| ac_config_legacy |
| else |
| ac_config_card "$card" |
| fi |
| exit 0 |
| else |
| msg=$(gettext " |
| No supported PnP or PCI card found. |
| |
| Would you like to probe legacy ISA sound cards/chips? |
| |
| ") |
| if $DIALOG --yesno "$msg" 9 60 ; then |
| ac_config_legacy |
| exit 0 |
| fi |
| fi |
| |
| rm -f "$FOUND" "$DUMP" |
| exit 0 |