Blame alsaconf/alsaconf.in

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