Blame alsaconf/alsaconf.in

Packit Service a9274b
#!/bin/bash
Packit Service a9274b
#
Packit Service a9274b
#  ALSA Configurator
Packit Service a9274b
#
Packit Service a9274b
#  Copyright (c) 1999-2002  SuSE GmbH
Packit Service a9274b
#                           Jan ONDREJ
Packit Service a9274b
#
Packit Service a9274b
#  written by Takashi Iwai <tiwai@suse.de>
Packit Service a9274b
#             Bernd Kaindl <bk@suse.de>
Packit Service a9274b
#             Jan ONDREJ (SAL) <ondrejj@salstar.sk>
Packit Service a9274b
#
Packit Service a9274b
#  based on the original version of Jan ONDREJ's alsaconf for ALSA 0.4.
Packit Service a9274b
#
Packit Service a9274b
#  This program is free software; you can redistribute it and/or modify
Packit Service a9274b
#  it under the terms of the GNU General Public License as published by
Packit Service a9274b
#  the Free Software Foundation; either version 2 of the License, or
Packit Service a9274b
#  (at your option) any later version.
Packit Service a9274b
#
Packit Service a9274b
Packit Service a9274b
export TEXTDOMAIN=alsaconf
Packit Service a9274b
Packit Service a9274b
prefix=@prefix@
Packit Service a9274b
exec_prefix=@exec_prefix@
Packit Service a9274b
bindir=@bindir@
Packit Service a9274b
sbindir=@sbindir@
Packit Service a9274b
version=@VERSION@
Packit Service a9274b
USE_NLS=@USE_NLS@
Packit Service a9274b
Packit Service a9274b
# Useful for debugging
Packit Service a9274b
PROCFS="/proc"
Packit Service a9274b
SYSFS="/sys"
Packit Service a9274b
Packit Service a9274b
# i18n stuff
Packit Service a9274b
if test "$USE_NLS" = "yes" && type -p gettext > /dev/null; then
Packit Service a9274b
  xecho() {
Packit Service a9274b
    gettext -s "$*"
Packit Service a9274b
  }
Packit Service a9274b
else
Packit Service a9274b
  xecho() {
Packit Service a9274b
    echo "$*"
Packit Service a9274b
  }
Packit Service a9274b
  gettext() {
Packit Service a9274b
    echo -n "$*"
Packit Service a9274b
  }
Packit Service a9274b
fi
Packit Service a9274b
xmsg() {
Packit Service a9274b
  msg=$(gettext "$1")
Packit Service a9274b
  shift
Packit Service a9274b
  printf "$msg" $*
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# Check for GNU/Linux distributions
Packit Service a9274b
if [ -f /etc/SuSE-release ]; then
Packit Service a9274b
  distribution="suse"
Packit Service a9274b
  suse_version=$(grep 'VERSION = ' /etc/SuSE-release | sed -e s/'VERSION = '//)
Packit Service a9274b
elif [ -f /etc/UnitedLinux-release ]; then
Packit Service a9274b
  distribution="suse"
Packit Service a9274b
elif [ -f /etc/gentoo-release ]; then
Packit Service a9274b
  distribution="gentoo"
Packit Service a9274b
elif [ -f /etc/debian_version ]; then
Packit Service a9274b
  distribution="debian"
Packit Service a9274b
elif [ -f /etc/mandrake-release ]; then
Packit Service a9274b
  distribution="mandrake"
Packit Service a9274b
elif test -f /etc/redhat-release && grep -q "Red Hat" /etc/redhat-release; then
Packit Service a9274b
  distribution="redhat"
Packit Service a9274b
elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then
Packit Service a9274b
  distribution="fedora"
Packit Service a9274b
elif [ -f /etc/slackware-version -o -f /etc/slamd64-version ]; then
Packit Service a9274b
  distribution="slackware"
Packit Service a9274b
else
Packit Service a9274b
  distribution="unknown"
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
for prog in lspci lsmod; do
Packit Service a9274b
	for path in /sbin /usr/sbin /bin /usr/bin;do
Packit Service a9274b
		test -x $path/$prog && eval $prog=$path/$prog
Packit Service a9274b
	done
Packit Service a9274b
done
Packit Service a9274b
unset prog path
Packit Service a9274b
Packit Service a9274b
usage() {
Packit Service a9274b
    xecho "ALSA configurator"
Packit Service a9274b
    echo "  version $version"
Packit Service a9274b
    xecho "usage: alsaconf [options]
Packit Service a9274b
  -l|--legacy    check only legacy non-isapnp cards
Packit Service a9274b
  -m|--modinfo   read module descriptions instead of reading card db
Packit Service a9274b
  -s|--sound wav-file
Packit Service a9274b
                 use the specified wav file as a test sound
Packit Service a9274b
  -u|--uid uid   set the uid for the ALSA devices (default = 0) [obsoleted]
Packit Service a9274b
  -g|--gid gid   set the gid for the ALSA devices (default = 0) [obsoleted]
Packit Service a9274b
  -d|--devmode mode
Packit Service a9274b
                 set the permission for ALSA devices (default = 0666) [obs.]
Packit Service a9274b
  -r|--strict    set strict device mode (equiv. with -g 17 -d 0660) [obsoleted]
Packit Service a9274b
  -L|--log file  logging on the specified file (for debugging purpose only)
Packit Service a9274b
  -p|--probe card-name
Packit Service a9274b
                 probe a legacy non-isapnp card and print module options
Packit Service a9274b
  -P|--listprobe list the supported legacy card modules
Packit Service a9274b
  -c|--config file
Packit Service a9274b
                 specify the module config file
Packit Service a9274b
  -R|--resources list available DMA and IRQ resources with debug for legacy
Packit Service a9274b
  -h|--help      what you're reading"
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
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
Packit Service a9274b
eval set -- "$OPTS"
Packit Service a9274b
Packit Service a9274b
do_legacy_only=0
Packit Service a9274b
use_modinfo_db=0
Packit Service a9274b
alsa_uid=0
Packit Service a9274b
alsa_gid=0
Packit Service a9274b
alsa_mode=0666
Packit Service a9274b
legacy_probe_card=""
Packit Service a9274b
LOGFILE=""
Packit Service a9274b
TESTSOUND="@TESTSOUND@"
Packit Service a9274b
try_all_combination=0
Packit Service a9274b
resources="false"
Packit Service a9274b
Packit Service a9274b
# legacy support
Packit Service a9274b
LEGACY_CARDS="opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8"
Packit Service a9274b
Packit Service a9274b
while true ; do
Packit Service a9274b
    case "$1" in
Packit Service a9274b
    -l|--legacy)
Packit Service a9274b
	do_legacy_only=1; shift ;;
Packit Service a9274b
    -m|--modinfo)
Packit Service a9274b
	use_modinfo_db=1; shift ;;
Packit Service a9274b
    -s|--sound)
Packit Service a9274b
	TESTSOUND=$2; shift 2;;
Packit Service a9274b
    -h|--help)
Packit Service a9274b
	usage; exit 0 ;;
Packit Service a9274b
    -L|--log)
Packit Service a9274b
	LOGFILE="$2"; shift 2;;
Packit Service a9274b
    -p|--probe)
Packit Service a9274b
	legacy_probe_card="$2"; shift 2;;
Packit Service a9274b
    -P|--listprobe)
Packit Service a9274b
	echo "$LEGACY_CARDS"; exit 0;;
Packit Service a9274b
    -u|--uid)
Packit Service a9274b
	alsa_uid="$2"; shift 2;;
Packit Service a9274b
    -g|--gid)
Packit Service a9274b
	alsa_gid="$2"; shift 2;;
Packit Service a9274b
    -d|--devmode)
Packit Service a9274b
	alsa_mode="$2"; shift 2;;
Packit Service a9274b
    -r|--strict)
Packit Service a9274b
	alsa_uid=0; alsa_gid=17; alsa_mode=0660; shift;;
Packit Service a9274b
    -c|--config)
Packit Service a9274b
	cfgfile="$2"; shift 2;;
Packit Service a9274b
    -R|--resources)
Packit Service a9274b
        resources="true"; shift;;
Packit Service a9274b
    --) shift ; break ;;
Packit Service a9274b
    *) usage ; exit 1 ;;
Packit Service a9274b
    esac
Packit Service a9274b
done
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# probe legacy ISA cards
Packit Service a9274b
#
Packit Service a9274b
Packit Service a9274b
check_dma_avail () {
Packit Service a9274b
    list=""
Packit Service a9274b
    if [ -d $SYSFS/bus/pnp/devices ]; then
Packit Service a9274b
      for dma in $*; do
Packit Service a9274b
        ok="true"
Packit Service a9274b
        for i in $SYSFS/bus/pnp/devices/??:* ; do
Packit Service a9274b
          if grep -q "state = active" $i/resources ; then
Packit Service a9274b
            if grep -q '^dma '$dma'$' $i/resources; then
Packit Service a9274b
              ok="false"
Packit Service a9274b
            fi
Packit Service a9274b
          fi
Packit Service a9274b
        done
Packit Service a9274b
        if [ -r $PROCFS/dma ]; then
Packit Service a9274b
	  if grep -q '^ *'$dma': ' $PROCFS/dma ; then
Packit Service a9274b
            ok="false"
Packit Service a9274b
          fi
Packit Service a9274b
	fi
Packit Service a9274b
        if [ "$ok" = "true" ]; then
Packit Service a9274b
          list="$list $dma"
Packit Service a9274b
        fi
Packit Service a9274b
      done
Packit Service a9274b
    else
Packit Service a9274b
      if [ -r $PROCFS/dma ]; then
Packit Service a9274b
  	for dma in $*; do
Packit Service a9274b
	    grep -q '^ *'$dma': ' $PROCFS/dma || list="$list $dma"
Packit Service a9274b
	done
Packit Service a9274b
      fi
Packit Service a9274b
    fi
Packit Service a9274b
    if [ ! -z "$list" ]; then
Packit Service a9274b
      echo $list
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
check_irq_avail () {
Packit Service a9274b
    list=""
Packit Service a9274b
    if [ -d $SYSFS/bus/pnp/devices ]; then
Packit Service a9274b
      for irq in $*; do
Packit Service a9274b
        ok="true"
Packit Service a9274b
        for i in $SYSFS/bus/pnp/devices/??:* ; do
Packit Service a9274b
          if grep -q "state = active" $i/resources ; then
Packit Service a9274b
            if grep -q '^irq '$irq'$' $i/resources; then
Packit Service a9274b
              ok="false"
Packit Service a9274b
            fi
Packit Service a9274b
          fi
Packit Service a9274b
        done
Packit Service a9274b
        if [ -r $PROCFS/interrupts ]; then
Packit Service a9274b
	  if grep -q '^ *'$irq': ' $PROCFS/interrupts ; then
Packit Service a9274b
            ok="false"
Packit Service a9274b
          fi
Packit Service a9274b
	fi
Packit Service a9274b
        if [ "$ok" = "true" ]; then
Packit Service a9274b
          list="$list $irq"
Packit Service a9274b
        fi
Packit Service a9274b
      done
Packit Service a9274b
    else
Packit Service a9274b
      if [ -r $PROCFS/interrupts ]; then
Packit Service a9274b
	for irq in $*; do
Packit Service a9274b
	    grep -q '^ *'$irq': ' $PROCFS/interrupts || list="$list $irq"
Packit Service a9274b
	done
Packit Service a9274b
      fi
Packit Service a9274b
    fi
Packit Service a9274b
    if [ ! -z "$list" ]; then
Packit Service a9274b
      echo $list
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
#
Packit Service a9274b
#
Packit Service a9274b
Packit Service a9274b
if [ "$resources" = "true" ]; then
Packit Service a9274b
  if [ -d $SYSFS/bus/pnp/devices ]; then
Packit Service a9274b
    for i in $SYSFS/bus/pnp/devices/??:* ; do
Packit Service a9274b
      if [ "$resources" = "true" ]; then
Packit Service a9274b
        echo ">>>>> PnP file: $i/resources"
Packit Service a9274b
        cat $i/resources
Packit Service a9274b
      fi
Packit Service a9274b
    done
Packit Service a9274b
  fi
Packit Service a9274b
  if [ -r $PROCFS/dma ]; then
Packit Service a9274b
    echo ">>>>> Allocated dma channels:"
Packit Service a9274b
    cat $PROCFS/dma
Packit Service a9274b
  fi
Packit Service a9274b
  if [ -r $PROCFS/interrupts ]; then
Packit Service a9274b
    echo ">>>>> Allocated interrupt channels:"
Packit Service a9274b
    cat $PROCFS/interrupts
Packit Service a9274b
  fi
Packit Service a9274b
  echo -n "Valid DMA channels: "
Packit Service a9274b
  check_dma_avail 0 1 2 3 4 5 6 7
Packit Service a9274b
  echo -n "Valid IRQ channels: "
Packit Service a9274b
  check_irq_avail 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Packit Service a9274b
  exit 0
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
# Check for root privileges
Packit Service a9274b
if [ `id -u` -ne 0 ]; then
Packit Service a9274b
  xecho "You must be root to use this script."
Packit Service a9274b
  exit 1
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# check the snd_ prefix for ALSA module options
Packit Service a9274b
# snd_ prefix is obsoleted since 0.9.0rc4.
Packit Service a9274b
#
Packit Service a9274b
if /sbin/modinfo -p snd | grep -q snd_ ; then
Packit Service a9274b
  mpfx="snd_"
Packit Service a9274b
else
Packit Service a9274b
  mpfx=""
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
alsa_device_opts=""
Packit Service a9274b
if /sbin/modinfo -p snd | grep -q uid ; then
Packit Service a9274b
  if [ x"$alsa_uid" != x0 ]; then
Packit Service a9274b
    alsa_device_opts="$alsa_device_opts ${mpfx}device_uid=$alsa_uid"
Packit Service a9274b
  fi
Packit Service a9274b
  if [ x"$alsa_gid" != x0 ]; then
Packit Service a9274b
    alsa_device_opts="$alsa_device_opts ${mpfx}device_gid=$alsa_gid"
Packit Service a9274b
  fi
Packit Service a9274b
fi
Packit Service a9274b
if /sbin/modinfo -p snd | grep -q device_mode ; then
Packit Service a9274b
  if [ x"$alsa_mode" != x0 ]; then
Packit Service a9274b
    alsa_device_opts="$alsa_device_opts ${mpfx}device_mode=$alsa_mode"
Packit Service a9274b
  fi
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
case `uname -r` in
Packit Service a9274b
2.6.*)
Packit Service a9274b
  kernel="new"
Packit Service a9274b
  ;;
Packit Service a9274b
*)
Packit Service a9274b
  kernel="old"
Packit Service a9274b
  ;;
Packit Service a9274b
esac
Packit Service a9274b
Packit Service a9274b
# cfgfile = base config file to remove/update the sound setting
Packit Service a9274b
# cfgout = new config file to write the sound setting (if different from $cfgfile)
Packit Service a9274b
cfgout=""
Packit Service a9274b
cfgoldout=""
Packit Service a9274b
if [ -n "$cfgfile" ]; then
Packit Service a9274b
  if [ ! -r "$cfgfile" ]; then
Packit Service a9274b
    xecho "ERROR: The config file doesn't exist: "
Packit Service a9274b
    echo $cfgfile
Packit Service a9274b
    exit 1
Packit Service a9274b
  fi
Packit Service a9274b
else
Packit Service a9274b
if [ "$kernel" = "new" ]; then
Packit Service a9274b
  cfgfile="/etc/modprobe.conf"
Packit Service a9274b
  if [ -d /etc/modprobe.d ]; then
Packit Service a9274b
    cfgout="/etc/modprobe.d/50-sound.conf"
Packit Service a9274b
    cfgoldout="/etc/modprobe.d/sound"
Packit Service a9274b
    if [ ! -f $cfgout ]; then
Packit Service a9274b
	case "$(modprobe -V)" in
Packit Service a9274b
	"module-init-tools version "3.[789]*|\
Packit Service a9274b
	"module-init-tools version "3.1[0-9]*)
Packit Service a9274b
	  ;;
Packit Service a9274b
	"kmod version "*)
Packit Service a9274b
	  ;;
Packit Service a9274b
	*)
Packit Service a9274b
	  cfgout="/etc/modprobe.d/sound"
Packit Service a9274b
	  cfgoldout=""
Packit Service a9274b
	  ;;
Packit Service a9274b
	esac
Packit Service a9274b
    fi
Packit Service a9274b
  fi
Packit Service a9274b
elif [ "$distribution" = "debian" ]; then
Packit Service a9274b
  cfgfile="/etc/modutils/sound"
Packit Service a9274b
elif [ -e /etc/modules.conf ]; then
Packit Service a9274b
  cfgfile="/etc/modules.conf"
Packit Service a9274b
elif [ -e /etc/conf.modules ]; then
Packit Service a9274b
  cfgfile="/etc/conf.modules"
Packit Service a9274b
else
Packit Service a9274b
  cfgfile="/etc/modules.conf"
Packit Service a9274b
  touch /etc/modules.conf
Packit Service a9274b
fi
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
# Check for dialog, whiptail, gdialog, awk, ... ?
Packit Service a9274b
if type -p dialog > /dev/null; then
Packit Service a9274b
    DIALOG=dialog
Packit Service a9274b
else
Packit Service a9274b
  if type -p whiptail > /dev/null; then
Packit Service a9274b
    whiptail_wrapper() {
Packit Service a9274b
      X1="$1"
Packit Service a9274b
      X2="$2"
Packit Service a9274b
      if [ $1 = --yesno ]; then
Packit Service a9274b
        X3=`expr $3 + 2`
Packit Service a9274b
      else
Packit Service a9274b
        X3=$3
Packit Service a9274b
      fi
Packit Service a9274b
      shift 3
Packit Service a9274b
      whiptail "$X1" "$X2" $X3 "$@"
Packit Service a9274b
    }
Packit Service a9274b
    DIALOG=whiptail_wrapper
Packit Service a9274b
  else
Packit Service a9274b
    xecho "Error, dialog or whiptail not found."
Packit Service a9274b
    exit 1
Packit Service a9274b
  fi
Packit Service a9274b
fi
Packit Service a9274b
if type -p awk > /dev/null; then :
Packit Service a9274b
else
Packit Service a9274b
  xecho "Error, awk not found. Can't continue."
Packit Service a9274b
  exit 1
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# remove entries by yast2 sound configurator
Packit Service a9274b
#
Packit Service a9274b
remove_y2_block() {
Packit Service a9274b
    awk '
Packit Service a9274b
    /^alias sound-slot-[0-9]/ { next }
Packit Service a9274b
    /^alias char-major-116 / { next }
Packit Service a9274b
    /^alias char-major-14 / { next }
Packit Service a9274b
    /^alias snd-card-[0-9] / { next }
Packit Service a9274b
    /^options snd / { next }
Packit Service a9274b
    /^options snd-/ { next }
Packit Service a9274b
    /^options off / { next }
Packit Service a9274b
    /^alias sound-service-[0-9]/ { next }
Packit Service a9274b
    /^# YaST2: sound / { next }
Packit Service a9274b
   { print }'
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# remove entries by sndconfig sound configurator
Packit Service a9274b
#
Packit Service a9274b
# found strings to search for in WriteConfModules, 
Packit Service a9274b
# from sndconfig 0.68-4 (rawhide version)
Packit Service a9274b
Packit Service a9274b
remove_sndconfig_block() {
Packit Service a9274b
    awk '
Packit Service a9274b
    /^alias sound-slot-0/ { modulename = $3 ; next }
Packit Service a9274b
    /^alias sound-slot-[0-9]/ { next }
Packit Service a9274b
    /^post-install sound-slot-[0-9] / { next }
Packit Service a9274b
    /^pre-remove sound-slot-[0-9] / { next }
Packit Service a9274b
    /^options sound / { next }
Packit Service a9274b
    /^alias synth0 opl3/ { next }
Packit Service a9274b
    /^options opl3 / { next }
Packit Service a9274b
    /^alias midi / { mididev = $3 ; next }
Packit Service a9274b
    /^options / { if ($2 == mididev) next }
Packit Service a9274b
    /^pre-install / { if ($2 == mididev) next }
Packit Service a9274b
    /^alias synth0 / { synth = $3 ; next }
Packit Service a9274b
    /^post-install / { if ($2 == synth) next }
Packit Service a9274b
    /^options sb / { next }
Packit Service a9274b
    /^post-install .+ \/bin\/modprobe "aci"/ { if ($2 == modulename) next }
Packit Service a9274b
    /^options adlib_card / { next }
Packit Service a9274b
    /^options .+ isapnp=1/ { if ($2 == modulename) next }
Packit Service a9274b
    /^options i810_audio / { next }
Packit Service a9274b
    /^options / {if ($2 == modulename) next }
Packit Service a9274b
   { print }'
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# remove the previous configuration by alsaconf
Packit Service a9274b
#
Packit Service a9274b
remove_ac_block() {
Packit Service a9274b
    awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# set default mixer volumes
Packit Service a9274b
#
Packit Service a9274b
set_mixers() {
Packit Service a9274b
    amixer -s -q <
Packit Service a9274b
set Master 75% unmute
Packit Service a9274b
set Master -12dB
Packit Service a9274b
set 'Master Mono' 75% unmute
Packit Service a9274b
set 'Master Mono' -12dB
Packit Service a9274b
set Front 75% unmute
Packit Service a9274b
set Front -12dB
Packit Service a9274b
set PCM 90% unmute
Packit Service a9274b
set PCM 0dB
Packit Service a9274b
mixer Synth 90% unmute
Packit Service a9274b
mixer Synth 0dB
Packit Service a9274b
mixer CD 90% unmute
Packit Service a9274b
mixer CD 0dB
Packit Service a9274b
# mute mic
Packit Service a9274b
set Mic 0% mute
Packit Service a9274b
# ESS 1969 chipset has 2 PCM channels
Packit Service a9274b
set PCM,1 90% unmute
Packit Service a9274b
set PCM,1 0dB
Packit Service a9274b
# Trident/YMFPCI/emu10k1
Packit Service a9274b
set Wave 100% unmute
Packit Service a9274b
set Music 100% unmute
Packit Service a9274b
set AC97 100% unmute
Packit Service a9274b
# CS4237B chipset:
Packit Service a9274b
set 'Master Digital' 75% unmute
Packit Service a9274b
# Envy24 chips with analog outs
Packit Service a9274b
set DAC 90% unmute
Packit Service a9274b
set DAC -12dB
Packit Service a9274b
set DAC,0 90% unmute
Packit Service a9274b
set DAC,0 -12dB
Packit Service a9274b
set DAC,1 90% unmute
Packit Service a9274b
set DAC,1 -12dB
Packit Service a9274b
# some notebooks use headphone instead of master
Packit Service a9274b
set Headphone 75% unmute
Packit Service a9274b
set Headphone -12dB
Packit Service a9274b
set Playback 100% unmute
Packit Service a9274b
# turn off digital switches
Packit Service a9274b
set "SB Live Analog/Digital Output Jack" off
Packit Service a9274b
set "Audigy Analog/Digital Output Jack" off
Packit Service a9274b
EOF
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
# INTRO
Packit Service a9274b
intro() {
Packit Service a9274b
  local msg=$(xmsg "
Packit Service a9274b
                   ALSA  CONFIGURATOR
Packit Service a9274b
                   version %s
Packit Service a9274b
Packit Service a9274b
            This script is a configurator for
Packit Service a9274b
    Advanced Linux Sound Architecture (ALSA) driver.
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
  If ALSA is already running, you should close all sound
Packit Service a9274b
  apps now and stop the sound driver.
Packit Service a9274b
  alsaconf will try to do this, but it's not 100%% sure." $version)
Packit Service a9274b
  $DIALOG --msgbox "$msg" 20 63 || acex 0
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# FAREWELL
Packit Service a9274b
farewell() {
Packit Service a9274b
  local msg=$(gettext "
Packit Service a9274b
Packit Service a9274b
     OK, sound driver is configured.
Packit Service a9274b
Packit Service a9274b
                  ALSA  CONFIGURATOR
Packit Service a9274b
Packit Service a9274b
          will prepare the card for playing now.
Packit Service a9274b
Packit Service a9274b
     Now I'll run alsasound init script, then I'll use
Packit Service a9274b
     amixer to raise the default volumes.
Packit Service a9274b
     You can change the volume later via a mixer
Packit Service a9274b
     program such as alsamixer or gamix.
Packit Service a9274b
  
Packit Service a9274b
  ")
Packit Service a9274b
  $DIALOG --msgbox "$msg" 17 60 || acex 0
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# Exit function
Packit Service a9274b
acex() {
Packit Service a9274b
  cleanup
Packit Service a9274b
  clear
Packit Service a9274b
  exit $1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# search for alsasound init script
Packit Service a9274b
#
Packit Service a9274b
Packit Service a9274b
if [ "$distribution" = "debian" ]; then
Packit Service a9274b
    rcalsasound=/etc/init.d/alsa
Packit Service a9274b
elif [ -x /etc/rc.d/rc.alsa ]; then
Packit Service a9274b
    rcalsasound=/etc/rc.d/rc.alsa
Packit Service a9274b
elif [ -x /etc/init.d/alsasound ]; then
Packit Service a9274b
    rcalsasound=/etc/init.d/alsasound
Packit Service a9274b
elif [ -x /usr/sbin/rcalsasound ]; then
Packit Service a9274b
    rcalsasound=/usr/sbin/rcalsasound
Packit Service a9274b
elif [ -x /sbin/rcalsasound ]; then
Packit Service a9274b
    rcalsasound=/sbin/rcalsasound
Packit Service a9274b
elif [ -x /etc/rc.d/init.d/alsasound ]; then
Packit Service a9274b
    rcalsasound=/etc/rc.d/init.d/alsasound
Packit Service a9274b
elif [ -x /etc/init.d/alsa ]; then
Packit Service a9274b
    rcalsasound=/etc/init.d/alsa
Packit Service a9274b
else
Packit Service a9274b
    rcalsasound=rcalsasound
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
    
Packit Service a9274b
# MAIN
Packit Service a9274b
if [ -d $PROCFS/asound ]; then
Packit Service a9274b
  $rcalsasound stop >/dev/null 2>&1
Packit Service a9274b
  $rcalsasound unload >/dev/null 2>&1
Packit Service a9274b
  /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
cleanup () {
Packit Service a9274b
    killall -9 aplay arecord >/dev/null 2>&1
Packit Service a9274b
    /sbin/modprobe -r isapnp >/dev/null 2>&1
Packit Service a9274b
    /sbin/modprobe -r isa-pnp >/dev/null 2>&1
Packit Service a9274b
    rm -f "$TMP" "$addcfg" "$FOUND" "$DUMP"
Packit Service a9274b
}
Packit Service a9274b
trap cleanup 0 
Packit Service a9274b
Packit Service a9274b
TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
Packit Service a9274b
if [ $? -ne 0 ]; then
Packit Service a9274b
	xecho "Can't create temp file, exiting..."
Packit Service a9274b
        exit 1
Packit Service a9274b
fi
Packit Service a9274b
addcfg=`mktemp -q /tmp/alsaconf.XXXXXX`
Packit Service a9274b
if [ $? -ne 0 ]; then
Packit Service a9274b
	xecho "Can't create temp file, exiting..."
Packit Service a9274b
        exit 1
Packit Service a9274b
fi
Packit Service a9274b
FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
Packit Service a9274b
if [ $? -ne 0 ]; then
Packit Service a9274b
	xecho "Can't create temp file, exiting..."
Packit Service a9274b
        exit 1
Packit Service a9274b
fi
Packit Service a9274b
DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
Packit Service a9274b
if [ $? -ne 0 ]; then
Packit Service a9274b
	xecho "Can't create temp file, exiting..."
Packit Service a9274b
        exit 1
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
# convert ISA PnP id number to string 'ABC'
Packit Service a9274b
convert_isapnp_id () {
Packit Service a9274b
    if [ -z "$1" ]; then
Packit Service a9274b
	echo "XXXX"
Packit Service a9274b
	return
Packit Service a9274b
    fi
Packit Service a9274b
    let a='('$1'>>2) & 0x3f'
Packit Service a9274b
    let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
Packit Service a9274b
    let c='('$1'>> 8) & 0x1f'
Packit Service a9274b
    strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
Packit Service a9274b
    echo ${strs:$a:1}${strs:$b:1}${strs:$c:1}
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# swap high & low bytes
Packit Service a9274b
swap_number () {
Packit Service a9274b
    if [ -z "$1" ]; then
Packit Service a9274b
	echo "0000"
Packit Service a9274b
	return
Packit Service a9274b
    fi
Packit Service a9274b
    let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
Packit Service a9274b
    printf "%04x" $v
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# build card database
Packit Service a9274b
# build_card_db filename
Packit Service a9274b
build_card_db () {
Packit Service a9274b
    MODDIR=/lib/modules/`uname -r`
Packit Service a9274b
    last_driver=""
Packit Service a9274b
    echo -n > $1
Packit Service a9274b
Packit Service a9274b
    # list pci cards
Packit Service a9274b
    while read driver vendor device dummy; do
Packit Service a9274b
	if expr $driver : 'snd-.*' >/dev/null ; then
Packit Service a9274b
	    if [ "$last_driver" != "$driver" ]; then
Packit Service a9274b
		echo $driver.o
Packit Service a9274b
		last_driver=$driver
Packit Service a9274b
	    fi
Packit Service a9274b
	    id1=`printf '0x%04x' $vendor`
Packit Service a9274b
	    id2=`printf '0x%04x' $device`
Packit Service a9274b
	    echo "PCI: $id1=$id2"
Packit Service a9274b
	fi
Packit Service a9274b
    done < $MODDIR/modules.pcimap >> $1
Packit Service a9274b
Packit Service a9274b
    # list isapnp cards
Packit Service a9274b
    while read driver cardvendor carddevice data vendor func; do
Packit Service a9274b
	if expr $driver : 'snd-.*' >/dev/null ; then
Packit Service a9274b
	    if [ "$last_driver" != "$driver" ]; then
Packit Service a9274b
		echo $driver.o
Packit Service a9274b
		last_driver=$driver
Packit Service a9274b
	    fi
Packit Service a9274b
	    id1=`convert_isapnp_id $cardvendor`
Packit Service a9274b
	    dev1=`swap_number $carddevice`
Packit Service a9274b
	    id2=`convert_isapnp_id $vendor`
Packit Service a9274b
	    dev2=`swap_number $func`
Packit Service a9274b
	    echo "ISAPNP: $id1$dev1=$id2$dev2"
Packit Service a9274b
	fi
Packit Service a9274b
    done < $MODDIR/modules.isapnpmap >> $1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# probe cards
Packit Service a9274b
#
Packit Service a9274b
probe_cards () {
Packit Service a9274b
    found="0"
Packit Service a9274b
    test -r $PROCFS/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
Packit Service a9274b
    test -r $PROCFS/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
Packit Service a9274b
    if [ -r $PROCFS/isapnp ]; then
Packit Service a9274b
	cat $PROCFS/isapnp >"$DUMP"
Packit Service a9274b
	found="1"
Packit Service a9274b
    elif [ -d $SYSFS/bus/pnp/devices ]; then
Packit Service a9274b
	# use 2.6 kernel's sysfs output
Packit Service a9274b
	# fake the isapnp dump
Packit Service a9274b
	index=0
Packit Service a9274b
	bindex=0
Packit Service a9274b
	for d1 in $SYSFS/devices/pnp* ; do
Packit Service a9274b
	  for d2 in $d1/*:* ; do
Packit Service a9274b
	    if [ -r $d2/card_id ]; then
Packit Service a9274b
	      id=`cat $d2/card_id`
Packit Service a9274b
	      name=`cat $d2/name`
Packit Service a9274b
	      echo "Card $index '$id:$name' " >> "$DUMP"
Packit Service a9274b
	      index=$[$index+1]
Packit Service a9274b
	      found="1"
Packit Service a9274b
	    else if [ -r $d2/id ]; then
Packit Service a9274b
	      # FIXME: multiple id might be present (separated with new-line)
Packit Service a9274b
	      id=`head -n 1 $d2/id`
Packit Service a9274b
	      echo "BIOS $bindex '$id' " >> "$DUMP"
Packit Service a9274b
	      bindex=$[$bindex+1]
Packit Service a9274b
	      found="1"
Packit Service a9274b
	    fi
Packit Service a9274b
	    fi
Packit Service a9274b
	  done
Packit Service a9274b
	done
Packit Service a9274b
    fi
Packit Service a9274b
    if [ "$found" = "0" ]; then
Packit Service a9274b
      echo -n >"$DUMP"
Packit Service a9274b
    fi 
Packit Service a9274b
    CARDID_DB=/var/tmp/alsaconf.cards
Packit Service a9274b
    if [ ! -r $CARDID_DB ]; then
Packit Service a9274b
        use_modinfo_db=1
Packit Service a9274b
    fi
Packit Service a9274b
    if [ $use_modinfo_db != 1 ]; then
Packit Service a9274b
	if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
Packit Service a9274b
	    use_modinfo_db=1
Packit Service a9274b
	fi
Packit Service a9274b
    fi
Packit Service a9274b
    if [ $use_modinfo_db = 1 ]; then
Packit Service a9274b
	xecho "Building card database.."
Packit Service a9274b
	build_card_db $CARDID_DB
Packit Service a9274b
    fi
Packit Service a9274b
    if [ ! -r $CARDID_DB ]; then
Packit Service a9274b
	xecho "No card database is found.."
Packit Service a9274b
	exit 1
Packit Service a9274b
    fi
Packit Service a9274b
    ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
Packit Service a9274b
Packit Service a9274b
    msg=$(gettext "Searching sound cards")
Packit Service a9274b
    awk '
Packit Service a9274b
BEGIN {
Packit Service a9274b
	format="%-40s %s\n";
Packit Service a9274b
	ncards='"$ncards"';
Packit Service a9274b
	idx=0;
Packit Service a9274b
}
Packit Service a9274b
/^snd-.*\.o$/{
Packit Service a9274b
	sub(/.o$/, "");
Packit Service a9274b
	driver=$0;
Packit Service a9274b
	perc=(idx * 100) / (ncards + 1);
Packit Service a9274b
	print int(perc);
Packit Service a9274b
	idx++;
Packit Service a9274b
}
Packit Service a9274b
/^[<literal space><literal tab>]*PCI: /{
Packit Service a9274b
	gsub(/0x/, "");
Packit Service a9274b
	gsub(/=/, ":");
Packit Service a9274b
	x = sprintf ("'$lspci' -n 2>/dev/null| grep '"' 04..: '"' | grep %s", $2);
Packit Service a9274b
	if (system (x) == 0)
Packit Service a9274b
		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
Packit Service a9274b
}
Packit Service a9274b
/^[<literal space><literal tab>]*ISAPNP: /{
Packit Service a9274b
	id2 = substr($0, index($0, "=")+1);
Packit Service a9274b
	gsub(/=.*/, "");
Packit Service a9274b
	x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
Packit Service a9274b
	if (system (x) == 0)
Packit Service a9274b
		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
Packit Service a9274b
	else if (index($2, "ffff") > 0) {
Packit Service a9274b
		x = sprintf ("grep '\''^BIOS [0-9]* .%s.'\'' '"$DUMP"'", id2);
Packit Service a9274b
		if (system (x) == 0)
Packit Service a9274b
			printf "%s %s\n", id2, driver >>"'"$FOUND"'"
Packit Service a9274b
	}
Packit Service a9274b
}' < $CARDID_DB |\
Packit Service a9274b
    $DIALOG --gauge "$msg" 6 40 0
Packit Service a9274b
Packit Service a9274b
    #
Packit Service a9274b
    # PowerMac
Packit Service a9274b
    #
Packit Service a9274b
    if grep -q MacRISC $PROCFS/cpuinfo; then
Packit Service a9274b
	MODDIR=/lib/modules/`uname -r`
Packit Service a9274b
	find $MODDIR -name 'snd-powermac*' -print | \
Packit Service a9274b
	while read i; do
Packit Service a9274b
	    i=${i##*/}
Packit Service a9274b
	    i=${i%%.o}
Packit Service a9274b
	    i=${i%%.ko}
Packit Service a9274b
	    echo "PowerMac $i" >> $FOUND
Packit Service a9274b
	done
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    #
Packit Service a9274b
    # Sparc
Packit Service a9274b
    #
Packit Service a9274b
    if grep -q Sparc $PROCFS/cpuinfo; then
Packit Service a9274b
	test -r $PROCFS/openprom/name || /bin/mount -t openpromfs none $PROCFS/openprom >/dev/null 2>&1
Packit Service a9274b
	# Check for an "audio" device
Packit Service a9274b
	audio=
Packit Service a9274b
	compat=
Packit Service a9274b
	if test -r $PROCFS/openprom; then
Packit Service a9274b
	    audio=`find $PROCFS/openprom -follow -type d -name "audio*" -print`
Packit Service a9274b
	fi
Packit Service a9274b
	if test -n "$audio"; then
Packit Service a9274b
	    compat=`cat $audio/compatible`
Packit Service a9274b
	    compat=${compat#\'}
Packit Service a9274b
	    compat=${compat%\'}
Packit Service a9274b
	    compat=${compat#SUNW,}
Packit Service a9274b
	fi
Packit Service a9274b
	# Go through all cards we have
Packit Service a9274b
	MODDIR=/lib/modules/`uname -r`
Packit Service a9274b
	find $MODDIR -name 'snd-sun-*' -print | \
Packit Service a9274b
	while read i; do
Packit Service a9274b
	    i=${i##*/}
Packit Service a9274b
	    i=${i%%.o}
Packit Service a9274b
	    i=${i%%.ko}
Packit Service a9274b
	    sdev=`echo ${i#snd-sun-} | tr "[a-z]" "[A-Z]"`
Packit Service a9274b
Packit Service a9274b
	    if test "$sdev" = "$compat"; then
Packit Service a9274b
		echo "$sdev $i" >> $FOUND
Packit Service a9274b
	    elif test -r $PROCFS/openprom; then
Packit Service a9274b
		find $PROCFS/openprom -follow -type d -name "SUNW,${sdev}*" \
Packit Service a9274b
		    -exec echo "$sdev $i" \; 2>/dev/null >> $FOUND
Packit Service a9274b
	    else
Packit Service a9274b
		echo "$sdev $i" >> $FOUND
Packit Service a9274b
	    fi
Packit Service a9274b
	done
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# look for a descriptive device name from the given device id
Packit Service a9274b
#
Packit Service a9274b
find_device_name () {
Packit Service a9274b
    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
Packit Service a9274b
	$lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. [^:]*: //g'
Packit Service a9274b
	return
Packit Service a9274b
    elif expr "$1" : '[A-Z@][A-Z@][A-Z@][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
Packit Service a9274b
	cardname=`grep '^Card [0-9]\+ .'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
Packit Service a9274b
	echo $cardname
Packit Service a9274b
    else
Packit Service a9274b
	echo $1
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# get hwcfg file type from the given driver name
Packit Service a9274b
get_hwcfg_type () {
Packit Service a9274b
    while read dev driver; do
Packit Service a9274b
	if [ "$driver" = "$1" ]; then
Packit Service a9274b
	    case "$dev" in
Packit Service a9274b
	    *:*)
Packit Service a9274b
		# FIXME: need to look around /sys/bus/pci/* (or use vpid-* ?)
Packit Service a9274b
		devid=`$lspci -d "$dev" | head -n 1 | sed -e 's/ .*$//'`
Packit Service a9274b
		case "$devid" in
Packit Service a9274b
		*:*:*.*) ;;
Packit Service a9274b
		*) devid="0000:$devid" ;;
Packit Service a9274b
		esac
Packit Service a9274b
		echo bus-pci-$devid
Packit Service a9274b
		;;
Packit Service a9274b
	    *)
Packit Service a9274b
		echo $driver
Packit Service a9274b
		;;
Packit Service a9274b
	    esac
Packit Service a9274b
	    break
Packit Service a9274b
	fi
Packit Service a9274b
    done
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# clean up all hwcfg-* files containing ALSA modules
Packit Service a9274b
# alsaconf sets up exclusively
Packit Service a9274b
cleanup_hwcfg () {
Packit Service a9274b
    for i in /etc/sysconfig/hardware/hwcfg-*; do
Packit Service a9274b
	grep -q "MODULE='snd-" $i && rm -f $i
Packit Service a9274b
    done
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# set up /etc/sysconfig/hardware/hwcfg-* stuff
Packit Service a9274b
#
Packit Service a9274b
setup_hwcfg () {
Packit Service a9274b
    card=$1
Packit Service a9274b
    cleanup_hwcfg
Packit Service a9274b
    cfg=`echo "$devs_olist" | get_hwcfg_type $card`
Packit Service a9274b
    echo "MODULE='$card'" > /etc/sysconfig/hardware/hwcfg-$cfg
Packit Service a9274b
    echo "STARTMODE='auto'" >> /etc/sysconfig/hardware/hwcfg-$cfg
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# configure and try test sound
Packit Service a9274b
#
Packit Service a9274b
ac_config_card () {
Packit Service a9274b
Packit Service a9274b
    CARD_DRIVER=snd-$1
Packit Service a9274b
    CARD_OPTS="${*:2}"
Packit Service a9274b
Packit Service a9274b
    if [ -n "$cfgout" ]; then
Packit Service a9274b
	msg=$(xmsg "
Packit Service a9274b
Configuring %s
Packit Service a9274b
Do you want to modify %s (and %s if present)?" $CARD_DRIVER $cfgout $cfgfile)
Packit Service a9274b
        $DIALOG --yesno "$msg" 10 50 || acex 0
Packit Service a9274b
    else
Packit Service a9274b
	msg=$(xmsg "
Packit Service a9274b
Configuring %s
Packit Service a9274b
Do you want to modify %s?" $CARD_DRIVER $cfgfile)
Packit Service a9274b
        $DIALOG --yesno "$msg" 8 50 || acex 0
Packit Service a9274b
    fi
Packit Service a9274b
    clear
Packit Service a9274b
Packit Service a9274b
    # Copy conf.modules and make changes.
Packit Service a9274b
    ACB="# --- BEGIN: Generated by ALSACONF, do not edit. ---"
Packit Service a9274b
    ACE="# --- END: Generated by ALSACONF, do not edit. ---"
Packit Service a9274b
Packit Service a9274b
    # Detect 2.2.X kernel
Packit Service a9274b
    KVER=`uname -r | tr ".-" "  "`
Packit Service a9274b
    KVER1=`echo $KVER | cut -d" " -f1`
Packit Service a9274b
    KVER2=`echo $KVER | cut -d" " -f2`
Packit Service a9274b
    if [ $KVER1 -ge 2 ] && [ $KVER2 -ge 2 ]; then
Packit Service a9274b
	SOUND_CORE="soundcore"
Packit Service a9274b
    else
Packit Service a9274b
	SOUND_CORE="snd"
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    if [ -r $cfgfile ] ; then
Packit Service a9274b
        if [ "$distribution" = "redhat" -o "$distribution" = "fedora" ] ; then
Packit Service a9274b
            remove_ac_block < $cfgfile | remove_sndconfig_block | uniq > $TMP
Packit Service a9274b
        else
Packit Service a9274b
	    remove_ac_block < $cfgfile | remove_y2_block | uniq > $TMP
Packit Service a9274b
        fi
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    if [ -z "$have_alias" -a "$kernel" = "new" ]; then
Packit Service a9274b
	if grep -q char-major-116 /lib/modules/`uname -r`/modules.alias; then
Packit Service a9274b
	    have_alias="yes"
Packit Service a9274b
	fi
Packit Service a9274b
    fi
Packit Service a9274b
    if [ -z "$have_alias" ]; then
Packit Service a9274b
echo "alias char-major-116 snd
Packit Service a9274b
alias char-major-14 $SOUND_CORE
Packit Service a9274b
alias sound-service-0-0 snd-mixer-oss
Packit Service a9274b
alias sound-service-0-1 snd-seq-oss
Packit Service a9274b
alias sound-service-0-3 snd-pcm-oss
Packit Service a9274b
alias sound-service-0-8 snd-seq-oss
Packit Service a9274b
alias sound-service-0-12 snd-pcm-oss" >> $addcfg
Packit Service a9274b
    fi
Packit Service a9274b
    if [ -n "$alsa_device_opts" ]; then
Packit Service a9274b
	echo "options snd $alsa_device_opts" >> $addcfg
Packit Service a9274b
    fi
Packit Service a9274b
echo "alias snd-card-0 $CARD_DRIVER
Packit Service a9274b
alias sound-slot-0 $CARD_DRIVER" >> $addcfg
Packit Service a9274b
    if [ -n "$CARD_OPTS" ]; then
Packit Service a9274b
	echo "options $CARD_DRIVER $CARD_OPTS" >> $addcfg
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    if [ -n "$cfgout" ]; then
Packit Service a9274b
	[ ! -r "$cfgfile" ] || cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$cfgfile"
Packit Service a9274b
	cmp -s "$addcfg" "$cfgout" || cat "$addcfg" > "$cfgout"
Packit Service a9274b
	test -n "$cfgoldout" && rm -f "$cfgoldout"
Packit Service a9274b
    else
Packit Service a9274b
	echo "$ACB
Packit Service a9274b
# --- ALSACONF version $version ---" >> $TMP
Packit Service a9274b
        cat "$addcfg" >> "$TMP"
Packit Service a9274b
	echo "$ACE
Packit Service a9274b
" >> $TMP
Packit Service a9274b
        cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$cfgfile"
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    /sbin/depmod -a 2>/dev/null
Packit Service a9274b
Packit Service a9274b
    # remove yast2 entries (- only for suse distro)
Packit Service a9274b
    if [ -f /var/lib/YaST/unique.inf ]; then
Packit Service a9274b
	awk '
Packit Service a9274b
BEGIN { in_sound=0; }
Packit Service a9274b
/^\[sound\]$/ { print; in_sound=1; next; }
Packit Service a9274b
/^\[.+\]$/ { print; in_sound=0; next; }
Packit Service a9274b
{ if (in_sound == 0) { print; } }
Packit Service a9274b
' < /var/lib/YaST/unique.inf > $TMP
Packit Service a9274b
	cp -f $TMP /var/lib/YaST/unique.inf
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    # set up /etc/sysconfig/hardware/*
Packit Service a9274b
    if [ "$distribution" = "suse" ]; then
Packit Service a9274b
	case "$suse_version" in
Packit Service a9274b
	10.[012]*|10)
Packit Service a9274b
	    setup_hwcfg $CARD_DRIVER
Packit Service a9274b
	    ;;
Packit Service a9274b
	esac
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    farewell
Packit Service a9274b
    clear
Packit Service a9274b
    case "$distribution" in
Packit Service a9274b
    gentoo | debian)
Packit Service a9274b
	xecho "Running update-modules..."
Packit Service a9274b
	update-modules
Packit Service a9274b
	;;
Packit Service a9274b
    esac
Packit Service a9274b
    if [ -x $rcalsasound ] ; then
Packit Service a9274b
      echo Loading driver...
Packit Service a9274b
      $rcalsasound restart
Packit Service a9274b
    fi
Packit Service a9274b
    echo Setting default volumes...
Packit Service a9274b
    if [ -x $bindir/set_default_volume ]; then
Packit Service a9274b
	$bindir/set_default_volume -f
Packit Service a9274b
    else
Packit Service a9274b
	set_mixers
Packit Service a9274b
    fi
Packit Service a9274b
    if [ -f $TESTSOUND ]; then
Packit Service a9274b
      msg=$(gettext "
Packit Service a9274b
       The mixer is set up now for for playing.
Packit Service a9274b
       Shall I try to play a sound sample now?
Packit Service a9274b
Packit Service a9274b
                           NOTE:
Packit Service a9274b
If you have a big amplifier, lower your volumes or say no.
Packit Service a9274b
    Otherwise check that your speaker volume is open,
Packit Service a9274b
          and look if you can hear test sound.
Packit Service a9274b
")
Packit Service a9274b
      if $DIALOG --yesno "$msg" 13 65 
Packit Service a9274b
      then
Packit Service a9274b
          clear
Packit Service a9274b
	  echo
Packit Service a9274b
	  aplay -N $TESTSOUND
Packit Service a9274b
      fi
Packit Service a9274b
    fi
Packit Service a9274b
    mkdir -p -m 0755 @ASOUND_STATE_DIR@
Packit Service a9274b
    if [ ! -r @ASOUND_STATE_DIR@/asound.state ]; then
Packit Service a9274b
	xecho "Saving the mixer setup used for this in @ASOUND_STATE_DIR@/asound.state."
Packit Service a9274b
	$sbindir/alsactl store
Packit Service a9274b
    fi
Packit Service a9274b
    clear
Packit Service a9274b
    xecho "
Packit Service a9274b
===============================================================================
Packit Service a9274b
Packit Service a9274b
 Now ALSA is ready to use.
Packit Service a9274b
 For adjustment of volumes, use your favorite mixer.
Packit Service a9274b
Packit Service a9274b
 Have a lot of fun!
Packit Service a9274b
Packit Service a9274b
"
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# check playback
Packit Service a9274b
# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
Packit Service a9274b
ac_try_load () {
Packit Service a9274b
    test -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE"
Packit Service a9274b
    /sbin/modprobe snd-$1 ${*:2} >/dev/null 2>&1
Packit Service a9274b
    if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then
Packit Service a9274b
	: ;
Packit Service a9274b
    else
Packit Service a9274b
	/sbin/modprobe -r snd-$1 >/dev/null 2>&1
Packit Service a9274b
	return 1
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    # mute mixers
Packit Service a9274b
    amixer set Master 0% mute >/dev/null 2>&1
Packit Service a9274b
    amixer set PCM 0% mute >/dev/null 2>&1
Packit Service a9274b
    
Packit Service a9274b
    # output 0.5 sec
Packit Service a9274b
    head -c 4000 < /dev/zero | aplay -N -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
Packit Service a9274b
    # remember pid
Packit Service a9274b
    pp=$!
Packit Service a9274b
    # sleep for 2 seconds (to be sure -- 1 sec would be enough)
Packit Service a9274b
    sleep 2
Packit Service a9274b
    # kill the child process if still exists.
Packit Service a9274b
    kill -9 $pp > /dev/null 2>&1
Packit Service a9274b
    st=$?
Packit Service a9274b
    ac_cardname=`head -n 1 $PROCFS/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
Packit Service a9274b
    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
Packit Service a9274b
    if [ $st = 0 ]; then
Packit Service a9274b
	# irq problem?
Packit Service a9274b
	test -n "$LOGFILE" && echo "no playback return" >> "$LOGFILE"
Packit Service a9274b
	return 2
Packit Service a9274b
    else
Packit Service a9274b
	# seems ok!
Packit Service a9274b
	test -n "$LOGFILE" && echo "playback OK" >> "$LOGFILE"
Packit Service a9274b
	return 0
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# check capture
Packit Service a9274b
# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
Packit Service a9274b
# ac_try_capture card duplex opts
Packit Service a9274b
ac_try_capture () {
Packit Service a9274b
    test -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE"
Packit Service a9274b
    /sbin/modprobe snd-$1 ${*:3} >/dev/null 2>&1
Packit Service a9274b
    if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then
Packit Service a9274b
	: ;
Packit Service a9274b
    else
Packit Service a9274b
	/sbin/modprobe -r snd-$1 >/dev/null 2>&1
Packit Service a9274b
	return 1
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    # mute mixers
Packit Service a9274b
    amixer set Master 0% mute >/dev/null 2>&1
Packit Service a9274b
    amixer set PCM 0% mute >/dev/null 2>&1
Packit Service a9274b
Packit Service a9274b
    play_pid=0
Packit Service a9274b
    if [ $2 = yes ]; then
Packit Service a9274b
	# try duplex - start dummy playing
Packit Service a9274b
	aplay -N -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
Packit Service a9274b
	play_pid=$!
Packit Service a9274b
    fi
Packit Service a9274b
    # record 1sec
Packit Service a9274b
    arecord -N -d1 > /dev/null 2>&1 &
Packit Service a9274b
    # remember pid
Packit Service a9274b
    pp=$!
Packit Service a9274b
    # sleep for 2 seconds
Packit Service a9274b
    sleep 2
Packit Service a9274b
    # kill the child process if still exists.
Packit Service a9274b
    kill -9 $pp > /dev/null 2>&1
Packit Service a9274b
    st=$?
Packit Service a9274b
    # kill playback process if any
Packit Service a9274b
    test $play_pid != 0 && kill -9 $play_pid
Packit Service a9274b
    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
Packit Service a9274b
    if [ $st = 0 ]; then
Packit Service a9274b
	test -n "$LOGFILE" && echo "capture no return" >> "$LOGFILE"
Packit Service a9274b
	return 2
Packit Service a9274b
    else
Packit Service a9274b
	test -n "$LOGFILE" && echo "capture OK" >> "$LOGFILE"
Packit Service a9274b
	return 0
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
get_dma_pair () {
Packit Service a9274b
    case $1 in
Packit Service a9274b
    0)
Packit Service a9274b
	echo 1 3 5;;
Packit Service a9274b
    1)
Packit Service a9274b
	echo 0 3 5;;
Packit Service a9274b
    3)
Packit Service a9274b
	echo 1 0 5;;
Packit Service a9274b
    5)
Packit Service a9274b
	echo 3 1 0;;
Packit Service a9274b
    esac
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# check playback on specified irqs
Packit Service a9274b
#
Packit Service a9274b
# ac_try_irq card opts irqs...
Packit Service a9274b
# return 0 - OK, 1 - NG, 2 - not working (dma problem?)
Packit Service a9274b
#
Packit Service a9274b
ac_try_irq () {
Packit Service a9274b
    card=$1
Packit Service a9274b
    opts="$2 ${mpfx}irq=$3"
Packit Service a9274b
    ac_try_load $card $opts >/dev/null 2>&1
Packit Service a9274b
    result=$?
Packit Service a9274b
    case $result in
Packit Service a9274b
    0)
Packit Service a9274b
	ac_opts="$opts"
Packit Service a9274b
	return 0
Packit Service a9274b
	;;
Packit Service a9274b
    2)
Packit Service a9274b
	for irq in ${*:4}; do
Packit Service a9274b
	    opts="$2 ${mpfx}irq=$irq"
Packit Service a9274b
	    ac_try_load $card $opts >/dev/null 2>&1
Packit Service a9274b
	    if [ $? = 0 ]; then
Packit Service a9274b
		ac_opts="$opts"
Packit Service a9274b
		return 0
Packit Service a9274b
	    fi
Packit Service a9274b
	done
Packit Service a9274b
	return 2
Packit Service a9274b
	;;
Packit Service a9274b
    esac
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# check playback/capture on dma1 & dma2 & specified irqs
Packit Service a9274b
#
Packit Service a9274b
# ac_try_dmas card opts irqs...
Packit Service a9274b
# return 0 - OK, 1 - NG
Packit Service a9274b
#
Packit Service a9274b
ac_try_dmas () {
Packit Service a9274b
    dma_list=`check_dma_avail 1 0 3 5`
Packit Service a9274b
    for irq in ${*:3}; do
Packit Service a9274b
	for dma1 in $dma_list; do
Packit Service a9274b
	    for dma2 in `get_dma_pair $dma1`; do
Packit Service a9274b
		opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
Packit Service a9274b
		ac_try_load $1 $opts >/dev/null 2>&1
Packit Service a9274b
		result=$?
Packit Service a9274b
		if [ $result = 1 ]; then
Packit Service a9274b
		    if [ $try_all_combination = 1 ]; then
Packit Service a9274b
			continue
Packit Service a9274b
		    else
Packit Service a9274b
			return 1
Packit Service a9274b
		    fi
Packit Service a9274b
		elif [ $result = 0 ]; then
Packit Service a9274b
		    test -n "$LOGFILE" && echo "Now checking capture..." >> "$LOGFILE"
Packit Service a9274b
		    ac_opts="$opts"
Packit Service a9274b
		    ac_try_capture $1 yes $opts >/dev/null 2>&1 && return 0
Packit Service a9274b
		    for d in yes no; do
Packit Service a9274b
			for dma2 in $dma_list; do
Packit Service a9274b
			    if [ $dma1 != $dma2 ]; then
Packit Service a9274b
				opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
Packit Service a9274b
				ac_opts="$opts"
Packit Service a9274b
				ac_try_capture $1 $d $opts >/dev/null 2>&1 && return 0
Packit Service a9274b
			    fi
Packit Service a9274b
			done
Packit Service a9274b
		    done
Packit Service a9274b
		    return 0
Packit Service a9274b
		fi
Packit Service a9274b
	    done
Packit Service a9274b
	done
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
# check if the option $2 exists in card $1: set value $3
Packit Service a9274b
ac_check_option () {
Packit Service a9274b
    if /sbin/modinfo -p snd-$1 | grep -q $2; then
Packit Service a9274b
      echo "$2=$3"
Packit Service a9274b
    fi
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_sb8 () {
Packit Service a9274b
    card=sb8
Packit Service a9274b
    irq_list=`check_irq_avail 5 3 9 10 7`
Packit Service a9274b
    for dma8 in `check_dma_avail 1 3`; do
Packit Service a9274b
	opts="${mpfx}dma8=$dma8"
Packit Service a9274b
	ac_try_irq $card "$opts" $irq_list && return 0
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_sb16 () {
Packit Service a9274b
    card=sb16
Packit Service a9274b
    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
Packit Service a9274b
    opts="$isapnp"
Packit Service a9274b
    irq_list=`check_irq_avail 5 9 10 7 3`
Packit Service a9274b
    dma_list=`check_dma_avail 0 1 3`
Packit Service a9274b
    dma16_list=`check_dma_avail 5 6 7`
Packit Service a9274b
    # at first try auto-probing by driver itself
Packit Service a9274b
    ac_try_load $card $opts >/dev/null 2>&1
Packit Service a9274b
    result=$?
Packit Service a9274b
    case $result in
Packit Service a9274b
    0)
Packit Service a9274b
	ac_opts="$opts"
Packit Service a9274b
	ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
Packit Service a9274b
	for d in yes no; do
Packit Service a9274b
	    for dma8 in $dma_list; do
Packit Service a9274b
		for irq in $irq_list; do
Packit Service a9274b
		    opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
Packit Service a9274b
		    ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
Packit Service a9274b
		done
Packit Service a9274b
	    done
Packit Service a9274b
	done
Packit Service a9274b
	return 0
Packit Service a9274b
	;;
Packit Service a9274b
    2)
Packit Service a9274b
	for dma16 in $dma16_list; do
Packit Service a9274b
	    opts="${mpfx}dma16=$dma16 $isapnp"
Packit Service a9274b
	    if ac_try_irq $card "$opts" $irq_list ; then
Packit Service a9274b
		ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
Packit Service a9274b
		ac_opts_saved="$ac_opts"
Packit Service a9274b
		for d in yes no; do
Packit Service a9274b
		    for dma8 in $dma_list; do
Packit Service a9274b
			ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
Packit Service a9274b
			ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
Packit Service a9274b
		    done
Packit Service a9274b
		done
Packit Service a9274b
		# return anyway here..
Packit Service a9274b
		return 0
Packit Service a9274b
	    fi
Packit Service a9274b
	done
Packit Service a9274b
	;;
Packit Service a9274b
    esac
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_es1688 () {
Packit Service a9274b
    card=es1688
Packit Service a9274b
    opts=""
Packit Service a9274b
    irq_list=`check_irq_avail 5 9 10 7`
Packit Service a9274b
    for dma8 in `check_dma_avail 1 3 0`; do
Packit Service a9274b
	opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
Packit Service a9274b
	ac_try_irq $card "$opts" $irq_list && return 0
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_es18xx () {
Packit Service a9274b
    card=es18xx
Packit Service a9274b
    opts=`ac_check_option $card ${mpfx}isapnp 0`
Packit Service a9274b
    ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_cs4236 () {
Packit Service a9274b
    card=cs4236
Packit Service a9274b
    irq_list=`check_irq_avail 5 7 9 11 12 15`
Packit Service a9274b
    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
Packit Service a9274b
    for cport in 0x538 0x210 0xf00; do
Packit Service a9274b
	for port in 0x530 0x534; do
Packit Service a9274b
	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
Packit Service a9274b
	    ac_try_dmas $card "$opts" $irq_list && return 0
Packit Service a9274b
	done
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_cs4232 () {
Packit Service a9274b
    card=cs4232
Packit Service a9274b
    irq_list=`check_irq_avail 5 7 9 11 12 15`
Packit Service a9274b
    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
Packit Service a9274b
    for cport in 0x538 0x210 0xf00; do
Packit Service a9274b
	for port in 0x530 0x534; do
Packit Service a9274b
	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
Packit Service a9274b
	    ac_try_dmas $card "$opts" $irq_list && return 0
Packit Service a9274b
	done
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_cs4231 () {
Packit Service a9274b
    card=cs4231
Packit Service a9274b
    irq_list=`check_irq_avail 5 7 9 11 12 15`
Packit Service a9274b
    for port in 0x530 0x534; do
Packit Service a9274b
	opts="${mpfx}port=$port"
Packit Service a9274b
	ac_try_dmas $card "$opts" $irq_list && return 0
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_try_card_opl3sa2 () {
Packit Service a9274b
    card=opl3sa2
Packit Service a9274b
    irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
Packit Service a9274b
    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
Packit Service a9274b
    for port in 0x370 0x538 0xf86 0x100; do
Packit Service a9274b
	for wss_port in 0x530 0xe80 0xf40 0x604; do
Packit Service a9274b
	    opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
Packit Service a9274b
	    ac_try_dmas $card "$opts" $irq_list && return 0
Packit Service a9274b
	done
Packit Service a9274b
    done
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
ac_config_legacy () {
Packit Service a9274b
   title=$(gettext "WARNING")
Packit Service a9274b
   msg=$(gettext "
Packit Service a9274b
   Probing legacy ISA cards might make
Packit Service a9274b
   your system unstable.
Packit Service a9274b
Packit Service a9274b
        Do you want to proceed?
Packit Service a9274b
Packit Service a9274b
")
Packit Service a9274b
    $DIALOG --title "$title" --yesno "$msg" 10 50 || acex 0
Packit Service a9274b
Packit Service a9274b
    if [ x"$1" = x ]; then
Packit Service a9274b
	probe_list="$LEGACY_CARDS"
Packit Service a9274b
    else
Packit Service a9274b
	probe_list=$*
Packit Service a9274b
    fi
Packit Service a9274b
    menu_args=()
Packit Service a9274b
Packit Service a9274b
    for card in $probe_list; do
Packit Service a9274b
	cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
Packit Service a9274b
	if [ x"$cardname" != x ]; then
Packit Service a9274b
	    menu_args=("${menu_args[@]}" "$card" "$cardname" "on")
Packit Service a9274b
	fi
Packit Service a9274b
    done
Packit Service a9274b
    if [ x$menu_args = x ]; then
Packit Service a9274b
	msg=$(gettext "No legacy drivers are available
Packit Service a9274b
   for your machine")
Packit Service a9274b
	$DIALOG --msgbox "$msg" 5 50
Packit Service a9274b
	return 1
Packit Service a9274b
    fi
Packit Service a9274b
    title=$(gettext "Driver Selection")
Packit Service a9274b
    msg=$(gettext "           Probing legacy ISA cards
Packit Service a9274b
Packit Service a9274b
        Please select the drivers to probe:")
Packit Service a9274b
    $DIALOG --title "$title" --checklist "$msg" \
Packit Service a9274b
	17 64 8 "${menu_args[@]}" 2> $FOUND || acex 0
Packit Service a9274b
Packit Service a9274b
    if [ $try_all_combination != 1 ]; then
Packit Service a9274b
	msg=$(gettext "
Packit Service a9274b
 Shall I try all possible DMA and IRQ combinations?
Packit Service a9274b
 With this option, some unconventional configuration
Packit Service a9274b
 might be found, but it will take much longer time.")
Packit Service a9274b
	if $DIALOG --yesno "$msg" 10 60
Packit Service a9274b
	    then
Packit Service a9274b
	    try_all_combination=1
Packit Service a9274b
	fi
Packit Service a9274b
    fi
Packit Service a9274b
Packit Service a9274b
    xecho "Probing legacy cards..   This may take a few minutes.."
Packit Service a9274b
    echo -n $(gettext "Probing: ")
Packit Service a9274b
    cards=`cat $FOUND | tr -d \"`
Packit Service a9274b
    for card in $cards; do
Packit Service a9274b
	echo -n " $card"
Packit Service a9274b
	ac_opts=""
Packit Service a9274b
	if eval ac_try_card_$card ; then
Packit Service a9274b
	    xecho " : FOUND!!"
Packit Service a9274b
	    ac_config_card $card $ac_opts
Packit Service a9274b
	    return 0
Packit Service a9274b
	fi
Packit Service a9274b
    done
Packit Service a9274b
    echo
Packit Service a9274b
    title=$(gettext "Result")
Packit Service a9274b
    msg=$(gettext "No legacy cards found")
Packit Service a9274b
    $DIALOG --title "$title" --msgbox "$msg" 5 50
Packit Service a9274b
    return 1
Packit Service a9274b
}
Packit Service a9274b
Packit Service a9274b
#
Packit Service a9274b
# main part continued..
Packit Service a9274b
#
Packit Service a9274b
Packit Service a9274b
if test -n "$LOGFILE" ; then
Packit Service a9274b
    touch "$LOGFILE"
Packit Service a9274b
    echo -n "Starting alsaconf: " >> "$LOGFILE"
Packit Service a9274b
    date >> "$LOGFILE"
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
if [ x"$legacy_probe_card" != x ]; then
Packit Service a9274b
    ac_opts=""
Packit Service a9274b
    if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
Packit Service a9274b
	echo "$ac_opts"
Packit Service a9274b
	echo "$ac_cardname"
Packit Service a9274b
	exit 0
Packit Service a9274b
    else
Packit Service a9274b
	echo "FAILED"
Packit Service a9274b
	exit 1
Packit Service a9274b
    fi
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
intro
Packit Service a9274b
Packit Service a9274b
if [ $do_legacy_only = 1 ]; then
Packit Service a9274b
    ac_config_legacy
Packit Service a9274b
    exit 0
Packit Service a9274b
fi
Packit Service a9274b
    
Packit Service a9274b
probe_cards
Packit Service a9274b
Packit Service a9274b
devs_found=()
Packit Service a9274b
devs_olist=""
Packit Service a9274b
Packit Service a9274b
if [ -s "$FOUND" ]; then
Packit Service a9274b
    while read dev card ; do
Packit Service a9274b
	MODDIR=/lib/modules/`uname -r`
Packit Service a9274b
	find $MODDIR -type f | grep -q -E $card'\.(o|ko)' || continue
Packit Service a9274b
	cardname=`find_device_name $dev | cut -c 1-64`
Packit Service a9274b
	if [ -z "$cardname" ]; then
Packit Service a9274b
	    cardname="$card"
Packit Service a9274b
	fi
Packit Service a9274b
	card=${card##snd-}
Packit Service a9274b
	devs_found=("${devs_found[@]}" "$card" "$cardname")
Packit Service a9274b
	devs_devs=("${devs_devs[@]}" "$card" "$dev")
Packit Service a9274b
    done <"$FOUND"
Packit Service a9274b
    devs_olist=`cat $FOUND`
Packit Service a9274b
fi
Packit Service a9274b
if [ x$devs_found != x ]; then
Packit Service a9274b
    #
Packit Service a9274b
    # check for TP600E
Packit Service a9274b
    #
Packit Service a9274b
    if [ ${devs_found[0]} = cs46xx ]; then
Packit Service a9274b
	if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
Packit Service a9274b
	    msg=$(gettext "
Packit Service a9274b
 Looks like you having a Thinkpad 600E or 770 notebook.
Packit Service a9274b
 On this notebook, CS4236 driver should be used
Packit Service a9274b
 although CS46xx chip is detected.
Packit Service a9274b
Packit Service a9274b
 Shall I try to snd-cs4236 driver and probe
Packit Service a9274b
 the legacy ISA configuration?")
Packit Service a9274b
	    if $DIALOG --yesno "$msg" 13 60
Packit Service a9274b
	    then
Packit Service a9274b
		try_all_combination=1
Packit Service a9274b
		ac_config_legacy cs4236
Packit Service a9274b
		exit 0
Packit Service a9274b
	    fi
Packit Service a9274b
	elif $lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then
Packit Service a9274b
	    msg=$(gettext "
Packit Service a9274b
 Looks like you having a Dell Dimension machine.
Packit Service a9274b
 On this machine, CS4232 driver should be used
Packit Service a9274b
 although CS46xx chip is detected.
Packit Service a9274b
Packit Service a9274b
 Shall I try to snd-cs4232 driver and probe
Packit Service a9274b
 the legacy ISA configuration?")
Packit Service a9274b
	    if $DIALOG --yesno "$msg" 13 60
Packit Service a9274b
	    then
Packit Service a9274b
		try_all_combination=1
Packit Service a9274b
		ac_config_legacy cs4232
Packit Service a9274b
		exit 0
Packit Service a9274b
	    fi
Packit Service a9274b
        fi	
Packit Service a9274b
    fi
Packit Service a9274b
   
Packit Service a9274b
    devs_found=("${devs_found[@]}" "legacy" "Probe legacy ISA (non-PnP) chips")
Packit Service a9274b
    title=$(gettext "Soundcard Selection")
Packit Service a9274b
    msg=$(gettext "
Packit Service a9274b
         Following card(s) are found on your system.
Packit Service a9274b
         Choose a soundcard to configure:
Packit Service a9274b
")
Packit Service a9274b
    $DIALOG --title "$title" --menu "$msg" 17 76 8 "${devs_found[@]}" --output-fd 3 3> $FOUND || acex 0
Packit Service a9274b
    card=`head -n 1 $FOUND`
Packit Service a9274b
    if [ "$card" = "legacy" ]; then
Packit Service a9274b
	ac_config_legacy
Packit Service a9274b
    else
Packit Service a9274b
	ac_config_card "$card"
Packit Service a9274b
    fi
Packit Service a9274b
    exit 0
Packit Service a9274b
else
Packit Service a9274b
    msg=$(gettext "
Packit Service a9274b
        No supported PnP or PCI card found.
Packit Service a9274b
Packit Service a9274b
 Would you like to probe legacy ISA sound cards/chips?
Packit Service a9274b
Packit Service a9274b
")
Packit Service a9274b
    if $DIALOG --yesno "$msg" 9 60 ; then
Packit Service a9274b
	ac_config_legacy
Packit Service a9274b
	exit 0
Packit Service a9274b
    fi
Packit Service a9274b
fi
Packit Service a9274b
Packit Service a9274b
rm -f "$FOUND" "$DUMP"
Packit Service a9274b
exit 0