slitaz-tools annotate tinyutils/soundconf @ rev 697

Added tag 4.7 for changeset 83491d0ac7b1
author Christophe Lincoln <pankso@slitaz.org>
date Thu Mar 01 15:56:00 2012 +0100 (2012-03-01)
parents 92aedc898747
children 5bb075010572
rev   line source
pankso@22 1 #!/bin/ash
pankso@7 2 #
pankso@7 3 # ALSA Configurator - Modified for SliTaz GNU/Linux
pankso@7 4 # Last modif : 20071202
pankso@7 5 #
pankso@7 6 # Copyright (c) 1999-2002 SuSE GmbH
pankso@7 7 # Jan ONDREJ
pankso@7 8 #
pankso@7 9 # written by Takashi Iwai <tiwai@suse.de>
pankso@7 10 # Bernd Kaindl <bk@suse.de>
pankso@7 11 # Jan ONDREJ (SAL) <ondrejj@salstar.sk>
pankso@7 12 #
pankso@7 13 # based on the original version of Jan ONDREJ's alsaconf for ALSA 0.4.
pankso@7 14 #
pankso@7 15 # This program is free software; you can redistribute it and/or modify
pankso@7 16 # it under the terms of the GNU General Public License as published by
pankso@7 17 # the Free Software Foundation; either version 2 of the License, or
pankso@7 18 # (at your option) any later version.
pankso@7 19 #
pankso@7 20 . /etc/init.d/rc.functions
pankso@7 21
pankso@7 22 export TEXTDOMAIN=alsaconf
pankso@7 23
pankso@7 24 prefix=/usr
pankso@7 25 exec_prefix=${prefix}
pankso@7 26 bindir=${exec_prefix}/bin
pankso@7 27 sbindir=${exec_prefix}/sbin
pankso@7 28 version=1.0.15
pankso@7 29 USE_NLS=no
pankso@7 30
pankso@7 31 # Useful for debugging
pankso@7 32 PROCFS="/proc"
pankso@7 33 SYSFS="/sys"
pankso@7 34
pankso@7 35 # i18n stuff
pankso@7 36 xecho() {
pankso@7 37 echo "$*"
pankso@7 38 }
pankso@7 39 gettext() {
pankso@7 40 echo -n "$*"
pankso@7 41 }
pankso@22 42
pankso@7 43 xmsg() {
pankso@7 44 msg=$(gettext "$1")
pankso@7 45 shift
pankso@7 46 printf "$msg" $*
pankso@7 47 }
pankso@7 48
pankso@7 49 distribution="unknown"
pankso@7 50
pankso@7 51 for prog in lspci lsmod; do
pankso@7 52 for path in /sbin /usr/sbin /bin /usr/bin;do
pankso@7 53 test -x $path/$prog && eval $prog=$path/$prog
pankso@7 54 done
pankso@7 55 done
pankso@7 56 unset prog path
pankso@7 57
pankso@7 58 usage() {
pankso@7 59 xecho "ALSA configurator (modified for SliTaz GNU/Linux)"
pankso@7 60 echo " version $version"
pankso@7 61 xecho "usage: alsaconf [options]
pankso@7 62 -l|--legacy check only legacy non-isapnp cards
pankso@7 63 -m|--modinfo read module descriptions instead of reading card db
pankso@7 64 -s|--sound wav-file
pankso@7 65 use the specified wav file as a test sound
pankso@7 66 -u|--uid uid set the uid for the ALSA devices (default = 0) [obsoleted]
pankso@7 67 -g|--gid gid set the gid for the ALSA devices (default = 0) [obsoleted]
pankso@7 68 -d|--devmode mode
pankso@7 69 set the permission for ALSA devices (default = 0666) [obs.]
pankso@7 70 -r|--strict set strict device mode (equiv. with -g 17 -d 0660) [obsoleted]
pankso@7 71 -L|--log file logging on the specified file (for debugging purpose only)
pankso@7 72 -p|--probe card-name
pankso@7 73 probe a legacy non-isapnp card and print module options
pankso@7 74 -P|--listprobe list the supported legacy card modules
pankso@7 75 -c|--config file
pankso@7 76 specify the module config file
pankso@7 77 -R|--resources list available DMA and IRQ resources with debug for legacy
pascal@114 78 -M|--module load ALSA module device
pankso@7 79 -h|--help what you're reading"
pankso@7 80 }
pankso@7 81
pascal@114 82 OPTS=`getopt -o lmL:hp:Pu:g:d:rs:c:RM: --long legacy,modinfo,log:,help,probe:,listprobe,uid:,gid:,devmode:,strict,sound:,config:,resources,module: -n alsaconf -- "$@"` || exit 1
pankso@7 83 eval set -- "$OPTS"
pankso@7 84
pankso@7 85 do_legacy_only=0
pankso@7 86 use_modinfo_db=0
pankso@7 87 alsa_uid=0
pankso@7 88 alsa_gid=0
pankso@7 89 alsa_mode=0666
pankso@7 90 legacy_probe_card=""
pankso@7 91 LOGFILE=""
pankso@7 92 TESTSOUND="/usr/share/sounds/alsa/test.wav"
pankso@7 93 try_all_combination=0
pankso@7 94 resources="false"
pascal@114 95 snd_module=""
pankso@7 96
pankso@7 97 # legacy support
pankso@7 98 LEGACY_CARDS="opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8"
pankso@7 99
pankso@7 100 while true ; do
pankso@7 101 case "$1" in
pankso@7 102 -l|--legacy)
pankso@7 103 do_legacy_only=1; shift ;;
pankso@7 104 -m|--modinfo)
pankso@7 105 use_modinfo_db=1; shift ;;
pankso@7 106 -s|--sound)
pankso@7 107 TESTSOUND=$2; shift 2;;
pankso@7 108 -h|--help)
pankso@7 109 usage; exit 0 ;;
pankso@7 110 -L|--log)
pankso@7 111 LOGFILE="$2"; shift 2;;
pankso@7 112 -p|--probe)
pankso@7 113 legacy_probe_card="$2"; shift 2;;
pankso@7 114 -P|--listprobe)
pankso@7 115 echo "$LEGACY_CARDS"; exit 0;;
pankso@7 116 -u|--uid)
pankso@7 117 alsa_uid="$2"; shift 2;;
pankso@7 118 -g|--gid)
pankso@7 119 alsa_gid="$2"; shift 2;;
pankso@7 120 -d|--devmode)
pankso@7 121 alsa_mode="$2"; shift 2;;
pankso@7 122 -r|--strict)
pankso@7 123 alsa_uid=0; alsa_gid=17; alsa_mode=0660; shift;;
pankso@7 124 -c|--config)
pankso@7 125 cfgfile="$2"; shift 2;;
pankso@7 126 -R|--resources)
pankso@7 127 resources="true"; shift;;
pascal@114 128 -M|--module)
pascal@114 129 snd_module="$2"; shift 2;;
pankso@7 130 --) shift ; break ;;
pankso@7 131 *) usage ; exit 1 ;;
pankso@7 132 esac
pankso@7 133 done
pankso@7 134
pankso@7 135 #
pankso@7 136 # probe legacy ISA cards
pankso@7 137 #
pankso@7 138
pankso@7 139 check_dma_avail () {
pankso@7 140 list=""
pankso@7 141 if [ -d $SYSFS/bus/pnp/devices ]; then
pankso@7 142 for dma in $*; do
pankso@7 143 ok="true"
pankso@7 144 for i in $SYSFS/bus/pnp/devices/??:* ; do
pankso@7 145 if grep -q "state = active" $i/resources ; then
pankso@7 146 if grep -q '^dma '$dma'$' $i/resources; then
pankso@7 147 ok="false"
pankso@7 148 fi
pankso@7 149 fi
pankso@7 150 done
pankso@7 151 if [ -r $PROCFS/dma ]; then
pankso@7 152 if grep -q '^ *'$dma': ' $PROCFS/dma ; then
pankso@7 153 ok="false"
pankso@7 154 fi
pankso@7 155 fi
pankso@7 156 if [ "$ok" = "true" ]; then
pankso@7 157 list="$list $dma"
pankso@7 158 fi
pankso@7 159 done
pankso@7 160 else
pankso@7 161 if [ -r $PROCFS/dma ]; then
pankso@7 162 for dma in $*; do
pankso@7 163 grep -q '^ *'$dma': ' $PROCFS/dma || list="$list $dma"
pankso@7 164 done
pankso@7 165 fi
pankso@7 166 fi
pankso@7 167 if [ ! -z "$list" ]; then
pankso@7 168 echo $list
pankso@7 169 fi
pankso@7 170 }
pankso@7 171
pankso@7 172 check_irq_avail () {
pankso@7 173 list=""
pankso@7 174 if [ -d $SYSFS/bus/pnp/devices ]; then
pankso@7 175 for irq in $*; do
pankso@7 176 ok="true"
pankso@7 177 for i in $SYSFS/bus/pnp/devices/??:* ; do
pankso@7 178 if grep -q "state = active" $i/resources ; then
pankso@7 179 if grep -q '^irq '$irq'$' $i/resources; then
pankso@7 180 ok="false"
pankso@7 181 fi
pankso@7 182 fi
pankso@7 183 done
pankso@7 184 if [ -r $PROCFS/interrupts ]; then
pankso@7 185 if grep -q '^ *'$irq': ' $PROCFS/interrupts ; then
pankso@7 186 ok="false"
pankso@7 187 fi
pankso@7 188 fi
pankso@7 189 if [ "$ok" = "true" ]; then
pankso@7 190 list="$list $irq"
pankso@7 191 fi
pankso@7 192 done
pankso@7 193 else
pankso@7 194 if [ -r $PROCFS/interrupts ]; then
pankso@7 195 for irq in $*; do
pankso@7 196 grep -q '^ *'$irq': ' $PROCFS/interrupts || list="$list $irq"
pankso@7 197 done
pankso@7 198 fi
pankso@7 199 fi
pankso@7 200 if [ ! -z "$list" ]; then
pankso@7 201 echo $list
pankso@7 202 fi
pankso@7 203 }
pankso@7 204
pankso@7 205 #
pankso@7 206 #
pankso@7 207 #
pankso@7 208
pankso@7 209 if [ "$resources" = "true" ]; then
pankso@7 210 if [ -d $SYSFS/bus/pnp/devices ]; then
pankso@7 211 for i in $SYSFS/bus/pnp/devices/??:* ; do
pankso@7 212 if [ "$resources" = "true" ]; then
pankso@7 213 echo ">>>>> PnP file: $i/resources"
pankso@7 214 cat $i/resources
pankso@7 215 fi
pankso@7 216 done
pankso@7 217 fi
pankso@7 218 if [ -r $PROCFS/dma ]; then
pankso@7 219 echo ">>>>> Allocated dma channels:"
pankso@7 220 cat $PROCFS/dma
pankso@7 221 fi
pankso@7 222 if [ -r $PROCFS/interrupts ]; then
pankso@7 223 echo ">>>>> Allocated interrupt channels:"
pankso@7 224 cat $PROCFS/interrupts
pankso@7 225 fi
pankso@7 226 echo -n "Valid DMA channels: "
pankso@7 227 check_dma_avail 0 1 2 3 4 5 6 7
pankso@7 228 echo -n "Valid IRQ channels: "
pankso@7 229 check_irq_avail 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
pankso@7 230 exit 0
pankso@7 231 fi
pankso@7 232
pankso@7 233 # Check for root privileges
pankso@7 234 if [ `id -u` -ne 0 ]; then
pankso@7 235 xecho "You must be root to use this script."
pankso@7 236 exit 1
pankso@7 237 fi
pankso@7 238
pankso@7 239 #
pankso@7 240 # check the snd_ prefix for ALSA module options
pankso@7 241 # snd_ prefix is obsoleted since 0.9.0rc4.
pankso@7 242 #
pankso@7 243 if /sbin/modinfo -p snd | grep -q snd_ ; then
pankso@7 244 mpfx="snd_"
pankso@7 245 else
pankso@7 246 mpfx=""
pankso@7 247 fi
pankso@7 248
pankso@7 249 alsa_device_opts=""
pankso@7 250 if /sbin/modinfo -p snd | grep -q uid ; then
pankso@7 251 if [ x"$alsa_uid" != x0 ]; then
pankso@7 252 alsa_device_opts="$alsa_device_opts ${mpfx}device_uid=$alsa_uid"
pankso@7 253 fi
pankso@7 254 if [ x"$alsa_gid" != x0 ]; then
pankso@7 255 alsa_device_opts="$alsa_device_opts ${mpfx}device_gid=$alsa_gid"
pankso@7 256 fi
pankso@7 257 fi
pankso@7 258 if /sbin/modinfo -p snd | grep -q device_mode ; then
pankso@7 259 if [ x"$alsa_mode" != x0 ]; then
pankso@7 260 alsa_device_opts="$alsa_device_opts ${mpfx}device_mode=$alsa_mode"
pankso@7 261 fi
pankso@7 262 fi
pankso@7 263
pankso@7 264 case `uname -r` in
pankso@7 265 2.6.*)
pankso@7 266 kernel="new"
pankso@7 267 ;;
pankso@7 268 *)
pankso@7 269 kernel="old"
pankso@7 270 ;;
pankso@7 271 esac
pankso@7 272
pankso@7 273 # cfgfile = base config file to remove/update the sound setting
pankso@629 274 cfgfile="/etc/sound.conf"
pankso@7 275
pankso@629 276 DIALOG=dialog
pankso@7 277
pankso@7 278 #
pankso@7 279 # remove the previous configuration by alsaconf
pankso@7 280 #
pankso@7 281 remove_ac_block() {
pankso@7 282 awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
pankso@7 283 }
pankso@7 284
pankso@7 285 #
pankso@629 286 # set default mixer volumes with SliTaz setmixer script
pankso@7 287 #
pankso@7 288 set_mixers() {
pankso@629 289 setmixer
pankso@7 290 }
pankso@7 291
pankso@7 292 # FAREWELL
pankso@7 293 farewell() {
pankso@7 294 local msg=$(gettext "
pankso@7 295
pankso@7 296 OK, sound driver is configured.
pankso@7 297
pankso@7 298 ALSA CONFIGURATOR
pankso@7 299
pankso@7 300 will prepare the card for playing now.
pankso@7 301
pankso@7 302 Now I'll run alsasound init script, then I'll use
pankso@7 303 amixer to raise the default volumes.
pankso@7 304 You can change the volume later via a mixer
pankso@7 305 program such as alsamixer or gamix.
pankso@7 306
pankso@7 307 ")
pankso@7 308 $DIALOG --msgbox "$msg" 17 60 || acex 0
pankso@7 309 }
pankso@7 310
pankso@7 311 # Exit function
pankso@7 312 acex() {
pankso@7 313 cleanup
pankso@7 314 clear
pankso@7 315 exit $1
pankso@7 316 }
pankso@7 317
pankso@7 318 #
pankso@7 319 # alsasound init script
pankso@7 320 #
pankso@7 321
pankso@7 322 #rcalsasound=/etc/init.d/alsa
pankso@7 323 rcalsasound=rcalsasound
pankso@7 324
pankso@7 325 # MAIN
pankso@7 326 if [ -d $PROCFS/asound ]; then
pankso@7 327 $rcalsasound stop >/dev/null 2>&1
pankso@7 328 $rcalsasound unload >/dev/null 2>&1
pankso@7 329 /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
pankso@7 330 fi
pankso@7 331
pankso@7 332
pankso@7 333 cleanup () {
pankso@7 334 killall -9 aplay arecord >/dev/null 2>&1
pankso@7 335 /sbin/modprobe -r isapnp >/dev/null 2>&1
pankso@7 336 /sbin/modprobe -r isa-pnp >/dev/null 2>&1
pankso@7 337 rm -f "$TMP" "$addcfg" "$FOUND" "$DUMP"
pankso@7 338 }
pankso@7 339 trap cleanup 0
pankso@7 340
pankso@7 341 TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 342 if [ $? -ne 0 ]; then
pankso@7 343 xecho "Can't create temp file, exiting..."
pankso@7 344 exit 1
pankso@7 345 fi
pankso@7 346 addcfg=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 347 if [ $? -ne 0 ]; then
pankso@7 348 xecho "Can't create temp file, exiting..."
pankso@7 349 exit 1
pankso@7 350 fi
pankso@7 351 FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 352 if [ $? -ne 0 ]; then
pankso@7 353 xecho "Can't create temp file, exiting..."
pankso@7 354 exit 1
pankso@7 355 fi
pankso@7 356 DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 357 if [ $? -ne 0 ]; then
pankso@7 358 xecho "Can't create temp file, exiting..."
pankso@7 359 exit 1
pankso@7 360 fi
pankso@7 361
pankso@7 362 # convert ISA PnP id number to string 'ABC'
pankso@7 363 convert_isapnp_id () {
pankso@7 364 if [ -z "$1" ]; then
pankso@7 365 echo "XXXX"
pankso@7 366 return
pankso@7 367 fi
pankso@7 368 let a='('$1'>>2) & 0x3f'
pankso@7 369 let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
pankso@7 370 let c='('$1'>> 8) & 0x1f'
pankso@7 371 strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
pankso@22 372 echo $strs | awk "{ printf \"%s%s%s\n\", \
pankso@22 373 substr(\$0,$a+1,1),substr(\$0,$b+1,1),substr(\$0,$c+1,1) }"
pankso@7 374 }
pankso@7 375
pankso@7 376 # swap high & low bytes
pankso@7 377 swap_number () {
pankso@7 378 if [ -z "$1" ]; then
pankso@7 379 echo "0000"
pankso@7 380 return
pankso@7 381 fi
pankso@7 382 let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
pankso@7 383 printf "%04x" $v
pankso@7 384 }
pankso@7 385
pankso@7 386 # build card database
pankso@7 387 # build_card_db filename
pankso@7 388 build_card_db () {
pankso@7 389 MODDIR=/lib/modules/`uname -r`
pankso@7 390 last_driver=""
pankso@7 391 echo -n > $1
pankso@7 392
pankso@7 393 # list pci cards
pankso@7 394 while read driver vendor device dummy; do
pankso@7 395 if expr $driver : 'snd-.*' >/dev/null ; then
pankso@7 396 if [ "$last_driver" != "$driver" ]; then
pankso@7 397 echo $driver.o
pankso@7 398 last_driver=$driver
pankso@7 399 fi
pankso@7 400 id1=`printf '0x%04x' $vendor`
pankso@7 401 id2=`printf '0x%04x' $device`
pankso@7 402 echo "PCI: $id1=$id2"
pankso@7 403 fi
pankso@7 404 done < $MODDIR/modules.pcimap >> $1
pankso@7 405
pankso@7 406 # list isapnp cards
pankso@7 407 while read driver cardvendor carddevice data vendor func; do
pankso@7 408 if expr $driver : 'snd-.*' >/dev/null ; then
pankso@7 409 if [ "$last_driver" != "$driver" ]; then
pankso@7 410 echo $driver.o
pankso@7 411 last_driver=$driver
pankso@7 412 fi
pankso@7 413 id1=`convert_isapnp_id $cardvendor`
pankso@7 414 dev1=`swap_number $carddevice`
pankso@7 415 id2=`convert_isapnp_id $vendor`
pankso@7 416 dev2=`swap_number $func`
pankso@7 417 echo "ISAPNP: $id1$dev1=$id2$dev2"
pankso@7 418 fi
pankso@7 419 done < $MODDIR/modules.isapnpmap >> $1
pankso@7 420 }
pankso@7 421
pankso@7 422 #
pascal@114 423 # probe this card
pascal@114 424 #
pascal@114 425 probe_this_card () {
pascal@114 426 echo -n '' > $FOUND
pascal@114 427 # list pci cards
pascal@114 428 grep snd-$1 /lib/modules/`uname -r`/modules.pcimap | \
pascal@114 429 while read driver vendor device dummy; do
pascal@114 430 if expr $driver : 'snd-.*' >/dev/null ; then
pascal@114 431 if [ "$last_driver" != "$driver" ]; then
pascal@114 432 echo $driver.o
pascal@114 433 last_driver=$driver
pascal@114 434 fi
pascal@114 435 id1=`printf '%04x' $vendor`
pascal@114 436 id2=`printf '%04x' $device`
pascal@114 437 echo "PCI: 0x$id1=0x$id2"
pascal@114 438 if $lspci -n 2>/dev/null | grep -q "$id1:$id2"; then
pascal@114 439 echo "$id1:$id2 $last_driver" >> $FOUND
pascal@114 440 fi
pascal@114 441 fi
pascal@114 442 done > /var/tmp/alsaconf.mycard
pascal@114 443 [ -s $FOUND ]
pascal@114 444 }
pascal@114 445
pascal@114 446 #
pankso@7 447 # probe cards
pankso@7 448 #
pankso@7 449 probe_cards () {
pankso@7 450 found="0"
pankso@7 451 test -r $PROCFS/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
pankso@7 452 test -r $PROCFS/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
pankso@7 453 if [ -r $PROCFS/isapnp ]; then
pankso@7 454 cat $PROCFS/isapnp >"$DUMP"
pankso@7 455 found="1"
pankso@7 456 elif [ -d $SYSFS/bus/pnp/devices ]; then
pankso@7 457 # use 2.6 kernel's sysfs output
pankso@7 458 # fake the isapnp dump
pankso@7 459 index=0
pankso@7 460 bindex=0
pankso@7 461 for d1 in $SYSFS/devices/pnp* ; do
pankso@7 462 for d2 in $d1/*:* ; do
pankso@7 463 if [ -r $d2/card_id ]; then
pankso@7 464 id=`cat $d2/card_id`
pankso@7 465 name=`cat $d2/name`
pankso@7 466 echo "Card $index '$id:$name' " >> "$DUMP"
pankso@7 467 index=$[$index+1]
pankso@7 468 found="1"
pankso@7 469 else if [ -r $d2/id ]; then
pankso@7 470 # FIXME: multiple id might be present (separated with new-line)
pankso@7 471 id=`head -n 1 $d2/id`
pankso@7 472 echo "BIOS $bindex '$id' " >> "$DUMP"
pankso@7 473 bindex=$[$bindex+1]
pankso@7 474 found="1"
pankso@7 475 fi
pankso@7 476 fi
pankso@7 477 done
pankso@7 478 done
pankso@7 479 fi
pankso@7 480 if [ "$found" = "0" ]; then
pankso@7 481 echo -n >"$DUMP"
pankso@7 482 fi
pankso@7 483 CARDID_DB=/var/tmp/alsaconf.cards
pankso@7 484 if [ ! -r $CARDID_DB ]; then
pankso@7 485 use_modinfo_db=1
pankso@7 486 fi
pankso@7 487 if [ $use_modinfo_db != 1 ]; then
pankso@7 488 if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
pankso@7 489 use_modinfo_db=1
pankso@7 490 fi
pankso@7 491 fi
pankso@7 492 if [ $use_modinfo_db = 1 ]; then
pankso@7 493 xecho "Building card database.."
pankso@7 494 build_card_db $CARDID_DB
pankso@7 495 fi
pankso@7 496 if [ ! -r $CARDID_DB ]; then
pankso@7 497 xecho "No card database is found.."
pankso@7 498 exit 1
pankso@7 499 fi
pankso@7 500 ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
pankso@7 501
pankso@7 502 msg=$(gettext "Searching sound cards")
pankso@7 503 awk '
pankso@7 504 BEGIN {
pankso@7 505 format="%-40s %s\n";
pankso@7 506 ncards='"$ncards"';
pankso@7 507 idx=0;
pankso@7 508 }
pankso@7 509 /^snd-.*\.o$/{
pankso@7 510 sub(/.o$/, "");
pankso@7 511 driver=$0;
pankso@7 512 perc=(idx * 100) / (ncards + 1);
pankso@7 513 print int(perc);
pankso@7 514 idx++;
pankso@7 515 }
pankso@7 516 /^[<literal space><literal tab>]*PCI: /{
pankso@7 517 gsub(/0x/, "");
pankso@7 518 gsub(/=/, ":");
pankso@7 519 x = sprintf ("'$lspci' -n 2>/dev/null| grep '"' 04..: '"' | grep %s", $2);
pankso@7 520 if (system (x) == 0)
pankso@7 521 printf "%s %s\n", $2, driver >>"'"$FOUND"'"
pankso@7 522 }
pankso@7 523 /^[<literal space><literal tab>]*ISAPNP: /{
pankso@7 524 id2 = substr($0, index($0, "=")+1);
pankso@7 525 gsub(/=.*/, "");
pankso@7 526 x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
pankso@7 527 if (system (x) == 0)
pankso@7 528 printf "%s %s\n", $2, driver >>"'"$FOUND"'"
pankso@7 529 else if (index($2, "ffff") > 0) {
pankso@7 530 x = sprintf ("grep '\''^BIOS [0-9]* .%s.'\'' '"$DUMP"'", id2);
pankso@7 531 if (system (x) == 0)
pankso@7 532 printf "%s %s\n", id2, driver >>"'"$FOUND"'"
pankso@7 533 }
pankso@7 534 }' < $CARDID_DB |\
pankso@92 535 $DIALOG --gauge "$msg" 15 70 5
pankso@7 536
pankso@7 537 #
pankso@7 538 # PowerMac
pankso@7 539 #
pankso@7 540 if grep -q MacRISC $PROCFS/cpuinfo; then
pankso@7 541 MODDIR=/lib/modules/`uname -r`
pankso@7 542 find $MODDIR -name 'snd-powermac*' -print | \
pankso@7 543 while read i; do
pankso@7 544 i=${i##*/}
pankso@7 545 i=${i%%.o}
pankso@7 546 i=${i%%.ko}
pankso@7 547 echo "PowerMac $i" >> $FOUND
pankso@7 548 done
pankso@7 549 fi
pankso@7 550
pankso@7 551 #
pankso@7 552 # Sparc
pankso@7 553 #
pankso@7 554 if grep -q Sparc $PROCFS/cpuinfo; then
pankso@7 555 test -r $PROCFS/openprom/name || /bin/mount -t openpromfs none $PROCFS/openprom >/dev/null 2>&1
pankso@7 556 # Check for an "audio" device
pankso@7 557 audio=
pankso@7 558 compat=
pankso@7 559 if test -r $PROCFS/openprom; then
pankso@7 560 audio=`find $PROCFS/openprom -follow -type d -name "audio*" -print`
pankso@7 561 fi
pankso@7 562 if test -n "$audio"; then
pankso@7 563 compat=`cat $audio/compatible`
pankso@7 564 compat=${compat#\'}
pankso@7 565 compat=${compat%\'}
pankso@7 566 compat=${compat#SUNW,}
pankso@7 567 fi
pankso@7 568 # Go through all cards we have
pankso@7 569 MODDIR=/lib/modules/`uname -r`
pankso@7 570 find $MODDIR -name 'snd-sun-*' -print | \
pankso@7 571 while read i; do
pankso@7 572 i=${i##*/}
pankso@7 573 i=${i%%.o}
pankso@7 574 i=${i%%.ko}
pankso@7 575 sdev=`echo ${i#snd-sun-} | tr "[a-z]" "[A-Z]"`
pankso@7 576
pankso@7 577 if test "$sdev" = "$compat"; then
pankso@7 578 echo "$sdev $i" >> $FOUND
pankso@7 579 elif test -r $PROCFS/openprom; then
pankso@7 580 find $PROCFS/openprom -follow -type d -name "SUNW,${sdev}*" \
pankso@7 581 -exec echo "$sdev $i" \; 2>/dev/null >> $FOUND
pankso@7 582 else
pankso@7 583 echo "$sdev $i" >> $FOUND
pankso@7 584 fi
pankso@7 585 done
pankso@7 586 fi
pankso@7 587 }
pankso@7 588
pankso@7 589 #
pankso@7 590 # look for a descriptive device name from the given device id
pankso@7 591 #
pankso@7 592 find_device_name () {
pankso@7 593 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
pankso@7 594 $lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. [^:]*: //g'
pankso@7 595 return
pankso@7 596 elif expr "$1" : '[A-Z@][A-Z@][A-Z@][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
pankso@7 597 cardname=`grep '^Card [0-9]\+ .'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
pankso@7 598 echo $cardname
pankso@7 599 else
pankso@7 600 echo $1
pankso@7 601 fi
pankso@7 602 }
pankso@7 603
pankso@7 604 # get hwcfg file type from the given driver name
pankso@7 605 get_hwcfg_type () {
pankso@7 606 while read dev driver; do
pankso@7 607 if [ "$driver" = "$1" ]; then
pankso@7 608 case "$dev" in
pankso@7 609 *:*)
pankso@7 610 # FIXME: need to look around /sys/bus/pci/* (or use vpid-* ?)
pankso@7 611 devid=`$lspci -d "$dev" | head -n 1 | sed -e 's/ .*$//'`
pankso@7 612 case "$devid" in
pankso@7 613 *:*:*.*) ;;
pankso@7 614 *) devid="0000:$devid" ;;
pankso@7 615 esac
pankso@7 616 echo bus-pci-$devid
pankso@7 617 ;;
pankso@7 618 *)
pankso@7 619 echo $driver
pankso@7 620 ;;
pankso@7 621 esac
pankso@7 622 break
pankso@7 623 fi
pankso@7 624 done
pankso@7 625 }
pankso@7 626
pankso@7 627 # clean up all hwcfg-* files containing ALSA modules
pankso@7 628 # alsaconf sets up exclusively
pankso@7 629 cleanup_hwcfg () {
pankso@7 630 for i in /etc/sysconfig/hardware/hwcfg-*; do
pankso@7 631 grep -q "MODULE='snd-" $i && rm -f $i
pankso@7 632 done
pankso@7 633 }
pankso@7 634
pankso@7 635 #
pankso@7 636 # set up /etc/sysconfig/hardware/hwcfg-* stuff
pankso@7 637 #
pankso@7 638 setup_hwcfg () {
pankso@7 639 card=$1
pankso@7 640 cleanup_hwcfg
pankso@7 641 cfg=`echo "$devs_olist" | get_hwcfg_type $card`
pankso@7 642 echo "MODULE='$card'" > /etc/sysconfig/hardware/hwcfg-$cfg
pankso@7 643 echo "STARTMODE='auto'" >> /etc/sysconfig/hardware/hwcfg-$cfg
pankso@7 644 }
pankso@7 645
pankso@7 646
pankso@7 647 #
pankso@7 648 # Configure sound card and set mixer for SliTaz Live mode
pankso@7 649 #
pankso@7 650 ac_config_card () {
pankso@7 651
pankso@7 652 CARD_DRIVER=snd-$1
pankso@22 653 shift; CARD_OPTS="$*"
pankso@7 654 SOUND_CORE="snd"
pankso@7 655
pankso@7 656 # Keep card driver name in /var/lib to be used by boot scripts.
pankso@7 657 echo $CARD_DRIVER > /var/lib/sound-card-driver
pankso@7 658
pankso@97 659 modprobe $CARD_DRIVER >/dev/null 2>&1
pankso@7 660
pankso@7 661 # Sed /etc/rcS.conf to add driver in LOAD_MODULES
pankso@7 662 . /etc/rcS.conf
pankso@7 663 modules=`echo "$LOAD_MODULES" | sed s/$CARD_DRIVER//`
pankso@7 664 newmods="$modules $CARD_DRIVER"
pankso@7 665 sed -i s/"LOAD_MODULES=\"$LOAD_MODULES\""/"LOAD_MODULES=\"$newmods\""/ \
pankso@7 666 /etc/rcS.conf
pankso@7 667
pankso@7 668 # Set default mixer volumes
pankso@7 669 set_mixers
pankso@7 670
pankso@7 671 # Store
pankso@7 672 alsactl store
pankso@7 673 }
pankso@7 674
pankso@7 675 # check playback
pankso@7 676 # return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
pankso@7 677 ac_try_load () {
pankso@22 678 local p1=$1
pankso@22 679 shift
pankso@22 680 test -n "$LOGFILE" && echo "$p1 $*" >> "$LOGFILE"
pankso@22 681 /sbin/modprobe snd-$p1 $* >/dev/null 2>&1
pankso@22 682 if $lsmod | grep -q -E '^(snd-|snd_)'$p1' '; then
pankso@7 683 : ;
pankso@7 684 else
pankso@22 685 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 686 return 1
pankso@7 687 fi
pankso@7 688
pankso@7 689 # mute mixers
pankso@7 690 amixer set Master 0% mute >/dev/null 2>&1
pankso@7 691 amixer set PCM 0% mute >/dev/null 2>&1
pankso@7 692
pankso@7 693 # output 0.5 sec
pankso@7 694 head -c 4000 < /dev/zero | aplay -N -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
pankso@7 695 # remember pid
pankso@7 696 pp=$!
pankso@7 697 # sleep for 2 seconds (to be sure -- 1 sec would be enough)
pankso@7 698 sleep 2
pankso@7 699 # kill the child process if still exists.
pankso@7 700 kill -9 $pp > /dev/null 2>&1
pankso@7 701 st=$?
pankso@7 702 ac_cardname=`head -n 1 $PROCFS/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
pankso@22 703 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 704 if [ $st = 0 ]; then
pankso@7 705 # irq problem?
pankso@7 706 test -n "$LOGFILE" && echo "no playback return" >> "$LOGFILE"
pankso@7 707 return 2
pankso@7 708 else
pankso@7 709 # seems ok!
pankso@7 710 test -n "$LOGFILE" && echo "playback OK" >> "$LOGFILE"
pankso@7 711 return 0
pankso@7 712 fi
pankso@7 713 }
pankso@7 714
pankso@7 715 # check capture
pankso@7 716 # return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
pankso@7 717 # ac_try_capture card duplex opts
pankso@7 718 ac_try_capture () {
pankso@22 719 local p1=$1
pankso@22 720 local p2=$2
pankso@22 721 shift 2
pankso@22 722 test -n "$LOGFILE" && echo "$p1 $p2 $*" >> "$LOGFILE"
pankso@22 723 /sbin/modprobe snd-$p1 $* >/dev/null 2>&1
pankso@22 724 if $lsmod | grep -q -E '^(snd-|snd_)'$p1' '; then
pankso@7 725 : ;
pankso@7 726 else
pankso@22 727 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 728 return 1
pankso@7 729 fi
pankso@7 730
pankso@7 731 # mute mixers
pankso@7 732 amixer set Master 0% mute >/dev/null 2>&1
pankso@7 733 amixer set PCM 0% mute >/dev/null 2>&1
pankso@7 734
pankso@7 735 play_pid=0
pankso@22 736 if [ $p2 = yes ]; then
pankso@7 737 # try duplex - start dummy playing
pankso@7 738 aplay -N -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
pankso@7 739 play_pid=$!
pankso@7 740 fi
pankso@7 741 # record 1sec
pankso@7 742 arecord -N -d1 > /dev/null 2>&1 &
pankso@7 743 # remember pid
pankso@7 744 pp=$!
pankso@7 745 # sleep for 2 seconds
pankso@7 746 sleep 2
pankso@7 747 # kill the child process if still exists.
pankso@7 748 kill -9 $pp > /dev/null 2>&1
pankso@7 749 st=$?
pankso@7 750 # kill playback process if any
pankso@7 751 test $play_pid != 0 && kill -9 $play_pid
pankso@22 752 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 753 if [ $st = 0 ]; then
pankso@7 754 test -n "$LOGFILE" && echo "capture no return" >> "$LOGFILE"
pankso@7 755 return 2
pankso@7 756 else
pankso@7 757 test -n "$LOGFILE" && echo "capture OK" >> "$LOGFILE"
pankso@7 758 return 0
pankso@7 759 fi
pankso@7 760 }
pankso@7 761
pankso@7 762 get_dma_pair () {
pankso@7 763 case $1 in
pankso@7 764 0)
pankso@7 765 echo 1 3 5;;
pankso@7 766 1)
pankso@7 767 echo 0 3 5;;
pankso@7 768 3)
pankso@7 769 echo 1 0 5;;
pankso@7 770 5)
pankso@7 771 echo 3 1 0;;
pankso@7 772 esac
pankso@7 773 }
pankso@7 774
pankso@7 775 #
pankso@7 776 # check playback on specified irqs
pankso@7 777 #
pankso@7 778 # ac_try_irq card opts irqs...
pankso@7 779 # return 0 - OK, 1 - NG, 2 - not working (dma problem?)
pankso@7 780 #
pankso@7 781 ac_try_irq () {
pankso@22 782 local p2=$2
pankso@7 783 card=$1
pankso@7 784 opts="$2 ${mpfx}irq=$3"
pankso@7 785 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 786 result=$?
pankso@7 787 case $result in
pankso@7 788 0)
pankso@7 789 ac_opts="$opts"
pankso@7 790 return 0
pankso@7 791 ;;
pankso@7 792 2)
pankso@22 793 shift 3
pankso@22 794 for irq in $*; do
pankso@22 795 opts="$p2 ${mpfx}irq=$irq"
pankso@7 796 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 797 if [ $? = 0 ]; then
pankso@7 798 ac_opts="$opts"
pankso@7 799 return 0
pankso@7 800 fi
pankso@7 801 done
pankso@7 802 return 2
pankso@7 803 ;;
pankso@7 804 esac
pankso@7 805 return 1
pankso@7 806 }
pankso@7 807
pankso@7 808 #
pankso@7 809 # check playback/capture on dma1 & dma2 & specified irqs
pankso@7 810 #
pankso@7 811 # ac_try_dmas card opts irqs...
pankso@7 812 # return 0 - OK, 1 - NG
pankso@7 813 #
pankso@7 814 ac_try_dmas () {
pankso@22 815 local p1=$1
pankso@22 816 local p2=$2
pankso@22 817 shift 2
pankso@7 818 dma_list=`check_dma_avail 1 0 3 5`
pankso@22 819 for irq in $*; do
pankso@7 820 for dma1 in $dma_list; do
pankso@7 821 for dma2 in `get_dma_pair $dma1`; do
pankso@22 822 opts="$p2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
pankso@22 823 ac_try_load $p1 $opts >/dev/null 2>&1
pankso@7 824 result=$?
pankso@7 825 if [ $result = 1 ]; then
pankso@7 826 if [ $try_all_combination = 1 ]; then
pankso@7 827 continue
pankso@7 828 else
pankso@7 829 return 1
pankso@7 830 fi
pankso@7 831 elif [ $result = 0 ]; then
pankso@7 832 test -n "$LOGFILE" && echo "Now checking capture..." >> "$LOGFILE"
pankso@7 833 ac_opts="$opts"
pankso@22 834 ac_try_capture $p1 yes $opts >/dev/null 2>&1 && return 0
pankso@7 835 for d in yes no; do
pankso@7 836 for dma2 in $dma_list; do
pankso@7 837 if [ $dma1 != $dma2 ]; then
pankso@22 838 opts="$p2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
pankso@7 839 ac_opts="$opts"
pankso@22 840 ac_try_capture $p1 $d $opts >/dev/null 2>&1 && return 0
pankso@7 841 fi
pankso@7 842 done
pankso@7 843 done
pankso@7 844 return 0
pankso@7 845 fi
pankso@7 846 done
pankso@7 847 done
pankso@7 848 done
pankso@7 849 return 1
pankso@7 850 }
pankso@7 851
pankso@7 852 # check if the option $2 exists in card $1: set value $3
pankso@7 853 ac_check_option () {
pankso@7 854 if /sbin/modinfo -p snd-$1 | grep -q $2; then
pankso@7 855 echo "$2=$3"
pankso@7 856 fi
pankso@7 857 }
pankso@7 858
pankso@7 859 ac_try_card_sb8 () {
pankso@7 860 card=sb8
pankso@7 861 irq_list=`check_irq_avail 5 3 9 10 7`
pankso@7 862 for dma8 in `check_dma_avail 1 3`; do
pankso@7 863 opts="${mpfx}dma8=$dma8"
pankso@7 864 ac_try_irq $card "$opts" $irq_list && return 0
pankso@7 865 done
pankso@7 866 return 1
pankso@7 867 }
pankso@7 868
pankso@7 869 ac_try_card_sb16 () {
pankso@7 870 card=sb16
pankso@7 871 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 872 opts="$isapnp"
pankso@7 873 irq_list=`check_irq_avail 5 9 10 7 3`
pankso@7 874 dma_list=`check_dma_avail 0 1 3`
pankso@7 875 dma16_list=`check_dma_avail 5 6 7`
pankso@7 876 # at first try auto-probing by driver itself
pankso@7 877 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 878 result=$?
pankso@7 879 case $result in
pankso@7 880 0)
pankso@7 881 ac_opts="$opts"
pankso@7 882 ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
pankso@7 883 for d in yes no; do
pankso@7 884 for dma8 in $dma_list; do
pankso@7 885 for irq in $irq_list; do
pankso@7 886 opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
pankso@7 887 ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
pankso@7 888 done
pankso@7 889 done
pankso@7 890 done
pankso@7 891 return 0
pankso@7 892 ;;
pankso@7 893 2)
pankso@7 894 for dma16 in $dma16_list; do
pankso@7 895 opts="${mpfx}dma16=$dma16 $isapnp"
pankso@7 896 if ac_try_irq $card "$opts" $irq_list ; then
pankso@7 897 ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
pankso@7 898 ac_opts_saved="$ac_opts"
pankso@7 899 for d in yes no; do
pankso@7 900 for dma8 in $dma_list; do
pankso@7 901 ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
pankso@7 902 ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
pankso@7 903 done
pankso@7 904 done
pankso@7 905 # return anyway here..
pankso@7 906 return 0
pankso@7 907 fi
pankso@7 908 done
pankso@7 909 ;;
pankso@7 910 esac
pankso@7 911 return 1
pankso@7 912 }
pankso@7 913
pankso@7 914 ac_try_card_es1688 () {
pankso@7 915 card=es1688
pankso@7 916 opts=""
pankso@7 917 irq_list=`check_irq_avail 5 9 10 7`
pankso@7 918 for dma8 in `check_dma_avail 1 3 0`; do
pankso@7 919 opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
pankso@7 920 ac_try_irq $card "$opts" $irq_list && return 0
pankso@7 921 done
pankso@7 922 return 1
pankso@7 923 }
pankso@7 924
pankso@7 925 ac_try_card_es18xx () {
pankso@7 926 card=es18xx
pankso@7 927 opts=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 928 ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
pankso@7 929 return 1
pankso@7 930 }
pankso@7 931
pankso@7 932 ac_try_card_cs4236 () {
pankso@7 933 card=cs4236
pankso@7 934 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 935 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 936 for cport in 0x538 0x210 0xf00; do
pankso@7 937 for port in 0x530 0x534; do
pankso@7 938 opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
pankso@7 939 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 940 done
pankso@7 941 done
pankso@7 942 return 1
pankso@7 943 }
pankso@7 944
pankso@7 945 ac_try_card_cs4232 () {
pankso@7 946 card=cs4232
pankso@7 947 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 948 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 949 for cport in 0x538 0x210 0xf00; do
pankso@7 950 for port in 0x530 0x534; do
pankso@7 951 opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
pankso@7 952 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 953 done
pankso@7 954 done
pankso@7 955 return 1
pankso@7 956 }
pankso@7 957
pankso@7 958 ac_try_card_cs4231 () {
pankso@7 959 card=cs4231
pankso@7 960 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 961 for port in 0x530 0x534; do
pankso@7 962 opts="${mpfx}port=$port"
pankso@7 963 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 964 done
pankso@7 965 return 1
pankso@7 966 }
pankso@7 967
pankso@7 968 ac_try_card_opl3sa2 () {
pankso@7 969 card=opl3sa2
pankso@7 970 irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
pankso@7 971 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 972 for port in 0x370 0x538 0xf86 0x100; do
pankso@7 973 for wss_port in 0x530 0xe80 0xf40 0x604; do
pankso@7 974 opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
pankso@7 975 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 976 done
pankso@7 977 done
pankso@7 978 return 1
pankso@7 979 }
pankso@7 980
pankso@7 981 ac_config_legacy () {
pankso@7 982 title=$(gettext "WARNING")
pankso@7 983 msg=$(gettext "
pankso@7 984 Probing legacy ISA cards might make
pankso@7 985 your system unstable.
pankso@7 986
pankso@7 987 Do you want to proceed?
pankso@7 988
pankso@7 989 ")
pankso@7 990 $DIALOG --title "$title" --yesno "$msg" 10 50 || acex 0
pankso@7 991
pankso@7 992 if [ x"$1" = x ]; then
pankso@7 993 probe_list="$LEGACY_CARDS"
pankso@7 994 else
pankso@7 995 probe_list=$*
pankso@7 996 fi
pankso@22 997 menu_args=""
pankso@7 998
pankso@7 999 for card in $probe_list; do
pankso@7 1000 cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
pankso@7 1001 if [ x"$cardname" != x ]; then
pankso@22 1002 menu_args="$menu_args \"$card\" \"$cardname\" on"
pankso@7 1003 fi
pankso@7 1004 done
pankso@22 1005 if [ "$menu_args" = "" ]; then
pankso@7 1006 msg=$(gettext "No legacy drivers are available
pankso@7 1007 for your machine")
pankso@7 1008 $DIALOG --msgbox "$msg" 5 50
pankso@7 1009 return 1
pankso@7 1010 fi
pankso@7 1011 title=$(gettext "Driver Selection")
pankso@7 1012 msg=$(gettext " Probing legacy ISA cards
pankso@7 1013
pankso@7 1014 Please select the drivers to probe:")
pankso@92 1015 eval $DIALOG --title \"$title\" --checklist \"$msg\" 15 70 5 $menu_args 2> $FOUND || acex 0
pankso@7 1016
pankso@7 1017 if [ $try_all_combination != 1 ]; then
pankso@7 1018 msg=$(gettext "
pankso@7 1019 Shall I try all possible DMA and IRQ combinations?
pankso@7 1020 With this option, some unconventional configuration
pankso@7 1021 might be found, but it will take much longer time.")
pascal@110 1022 if $DIALOG --yesno "$msg" 15 70
pankso@7 1023 then
pankso@7 1024 try_all_combination=1
pankso@7 1025 fi
pankso@7 1026 fi
pankso@7 1027
pankso@7 1028 xecho "Probing legacy cards.. This may take a few minutes.."
pankso@7 1029 echo -n $(gettext "Probing: ")
pankso@7 1030 cards=`cat $FOUND | tr -d \"`
pankso@7 1031 for card in $cards; do
pankso@7 1032 echo -n " $card"
pankso@7 1033 ac_opts=""
pankso@7 1034 if eval ac_try_card_$card ; then
pankso@7 1035 xecho " : FOUND!!"
pankso@7 1036 ac_config_card $card $ac_opts
pankso@7 1037 return 0
pankso@7 1038 fi
pankso@7 1039 done
pankso@7 1040 echo
pankso@7 1041 title=$(gettext "Result")
pankso@7 1042 msg=$(gettext "No legacy cards found")
pankso@92 1043 $DIALOG --title "$title" --msgbox "$msg" 15 70 5
pankso@7 1044 return 1
pankso@7 1045 }
pankso@7 1046
pankso@7 1047 #
pankso@7 1048 # main part continued..
pankso@7 1049 #
pankso@7 1050
pankso@7 1051 if test -n "$LOGFILE" ; then
pankso@7 1052 touch "$LOGFILE"
pankso@7 1053 echo -n "Starting alsaconf: " >> "$LOGFILE"
pankso@7 1054 date >> "$LOGFILE"
pankso@7 1055 fi
pankso@7 1056
pankso@7 1057 if [ x"$legacy_probe_card" != x ]; then
pankso@7 1058 ac_opts=""
pankso@7 1059 if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
pankso@7 1060 echo "$ac_opts"
pankso@7 1061 echo "$ac_cardname"
pankso@7 1062 exit 0
pankso@7 1063 else
pankso@7 1064 echo "FAILED"
pankso@7 1065 exit 1
pankso@7 1066 fi
pankso@7 1067 fi
pankso@7 1068
pankso@7 1069
pankso@7 1070 if [ $do_legacy_only = 1 ]; then
pankso@7 1071 ac_config_legacy
pankso@7 1072 exit 0
pankso@7 1073 fi
pankso@7 1074
pascal@114 1075 if [ -n "$snd_module" ]; then
pascal@114 1076 if probe_this_card $snd_module; then
pascal@114 1077 ac_config_card $snd_module
pascal@114 1078 exit 0
pascal@114 1079 fi
pascal@114 1080 fi
pankso@7 1081 probe_cards
pankso@7 1082
pankso@22 1083 devs_found=""
pankso@7 1084 devs_olist=""
pankso@7 1085
pankso@7 1086 if [ -s "$FOUND" ]; then
pankso@7 1087 while read dev card ; do
pankso@7 1088 MODDIR=/lib/modules/`uname -r`
pankso@7 1089 find $MODDIR -type f | grep -q -E $card'\.(o|ko)' || continue
pankso@7 1090 cardname=`find_device_name $dev | cut -c 1-64`
pankso@7 1091 if [ -z "$cardname" ]; then
pankso@7 1092 cardname="$card"
pankso@7 1093 fi
pankso@7 1094 card=${card##snd-}
pankso@22 1095 devs_found="$devs_found $card \"$cardname\""
pankso@22 1096 #devs_devs=("${devs_devs[@]}" "$card" "$dev")
pankso@7 1097 done <"$FOUND"
pankso@7 1098 devs_olist=`cat $FOUND`
pankso@7 1099 fi
pankso@22 1100 if [ "$devs_found" != "" ]; then
pankso@7 1101 #
pankso@7 1102 # check for TP600E
pankso@7 1103 #
pankso@22 1104 if [ "${devs_found%% *}" = "cs46xx" ]; then
pankso@7 1105 if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
pankso@7 1106 msg=$(gettext "
pankso@7 1107 Looks like you having a Thinkpad 600E or 770 notebook.
pankso@7 1108 On this notebook, CS4236 driver should be used
pankso@7 1109 although CS46xx chip is detected.
pankso@7 1110
pankso@7 1111 Shall I try to snd-cs4236 driver and probe
pankso@7 1112 the legacy ISA configuration?")
pankso@7 1113 if $DIALOG --yesno "$msg" 13 60
pankso@7 1114 then
pankso@7 1115 try_all_combination=1
pankso@7 1116 ac_config_legacy cs4236
pankso@7 1117 exit 0
pankso@7 1118 fi
pankso@7 1119 elif $lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then
pankso@7 1120 msg=$(gettext "
pankso@7 1121 Looks like you having a Dell Dimension machine.
pankso@7 1122 On this machine, CS4232 driver should be used
pankso@7 1123 although CS46xx chip is detected.
pankso@7 1124
pankso@7 1125 Shall I try to snd-cs4232 driver and probe
pankso@7 1126 the legacy ISA configuration?")
pankso@7 1127 if $DIALOG --yesno "$msg" 13 60
pankso@7 1128 then
pankso@7 1129 try_all_combination=1
pankso@7 1130 ac_config_legacy cs4232
pankso@7 1131 exit 0
pankso@7 1132 fi
pankso@7 1133 fi
pankso@7 1134 fi
pankso@7 1135
pankso@22 1136 devs_found="$devs_found legacy 'Probe legacy ISA (non-PnP) chips'"
pankso@7 1137 title=$(gettext "Soundcard Selection")
pankso@7 1138 msg=$(gettext "
pankso@7 1139 Following card(s) are found on your system.
pankso@7 1140 Please skip or choose a soundcard to configure :
pankso@7 1141 ")
pankso@92 1142 eval $DIALOG --title \"$title\" --menu \"$msg\" 15 70 5 $devs_found 2> $FOUND || acex 0
pankso@7 1143 card=`head -n 1 $FOUND`
pankso@7 1144 if [ "$card" = "legacy" ]; then
pankso@7 1145 ac_config_legacy
pankso@7 1146 else
pankso@7 1147 ac_config_card "$card"
pankso@7 1148 fi
pankso@7 1149 exit 0
pankso@7 1150 else
pankso@7 1151 msg=$(gettext "
pankso@7 1152 No supported PnP or PCI card found.
pankso@7 1153
pankso@7 1154 Would you like to probe legacy ISA sound cards/chips?
pankso@7 1155
pankso@7 1156 ")
pascal@110 1157 if $DIALOG --yesno "$msg" 15 70 ; then
pankso@7 1158 ac_config_legacy
pankso@7 1159 exit 0
pankso@7 1160 fi
pankso@7 1161 fi
pankso@7 1162
pankso@7 1163 rm -f "$FOUND" "$DUMP"
pankso@7 1164 exit 0