slitaz-tools annotate tinyutils/soundconf @ rev 183

Rewrited 'mountbox', better inerface, gen list automaicaly, add e2fsck and more...
author Christophe Lincoln <pankso@slitaz.org>
date Sun May 11 00:25:10 2008 +0200 (2008-05-11)
parents 3d38cb216bf1
children 92aedc898747
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@7 274 cfgfile="/etc/modprobe.conf"
pankso@7 275
pankso@7 276 # Check for dialog
pankso@7 277 if which dialog > /dev/null; then
pankso@7 278 DIALOG=dialog
pankso@7 279 else
pankso@7 280 xecho "Error, dialog or whiptail not found."
pankso@7 281 exit 1
pankso@7 282 fi
pankso@7 283
pankso@7 284 #
pankso@7 285 # remove the previous configuration by alsaconf
pankso@7 286 #
pankso@7 287 remove_ac_block() {
pankso@7 288 awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
pankso@7 289 }
pankso@7 290
pankso@7 291 #
pankso@7 292 # set default mixer volumes
pankso@7 293 #
pankso@7 294 set_mixers() {
pankso@7 295 amixer -s -q <<EOF
pankso@7 296 set Master 75% unmute
pankso@7 297 set Master -12dB
pankso@7 298 set 'Master Mono' 75% unmute
pankso@7 299 set 'Master Mono' -12dB
pankso@7 300 set Front 75% unmute
pankso@7 301 set Front -12dB
pankso@7 302 set PCM 90% unmute
pankso@7 303 set PCM 0dB
pankso@7 304 mixer Synth 90% unmute
pankso@7 305 mixer Synth 0dB
pankso@7 306 mixer CD 90% unmute
pankso@7 307 mixer CD 0dB
pankso@7 308 # mute mic
pankso@7 309 set Mic 0% mute
pankso@7 310 # ESS 1969 chipset has 2 PCM channels
pankso@7 311 set PCM,1 90% unmute
pankso@7 312 set PCM,1 0dB
pankso@7 313 # Trident/YMFPCI/emu10k1
pankso@7 314 set Wave 100% unmute
pankso@7 315 set Music 100% unmute
pankso@7 316 set AC97 100% unmute
pankso@7 317 # CS4237B chipset:
pankso@7 318 set 'Master Digital' 75% unmute
pankso@7 319 # Envy24 chips with analog outs
pankso@7 320 set DAC 90% unmute
pankso@7 321 set DAC -12dB
pankso@7 322 set DAC,0 90% unmute
pankso@7 323 set DAC,0 -12dB
pankso@7 324 set DAC,1 90% unmute
pankso@7 325 set DAC,1 -12dB
pankso@7 326 # some notebooks use headphone instead of master
pankso@7 327 set Headphone 75% unmute
pankso@7 328 set Headphone -12dB
pankso@7 329 set Playback 100% unmute
pankso@7 330 # turn off digital switches
pankso@7 331 set "SB Live Analog/Digital Output Jack" off
pankso@7 332 set "Audigy Analog/Digital Output Jack" off
pankso@7 333 EOF
pankso@7 334 }
pankso@7 335
pankso@7 336 # FAREWELL
pankso@7 337 farewell() {
pankso@7 338 local msg=$(gettext "
pankso@7 339
pankso@7 340 OK, sound driver is configured.
pankso@7 341
pankso@7 342 ALSA CONFIGURATOR
pankso@7 343
pankso@7 344 will prepare the card for playing now.
pankso@7 345
pankso@7 346 Now I'll run alsasound init script, then I'll use
pankso@7 347 amixer to raise the default volumes.
pankso@7 348 You can change the volume later via a mixer
pankso@7 349 program such as alsamixer or gamix.
pankso@7 350
pankso@7 351 ")
pankso@7 352 $DIALOG --msgbox "$msg" 17 60 || acex 0
pankso@7 353 }
pankso@7 354
pankso@7 355 # Exit function
pankso@7 356 acex() {
pankso@7 357 cleanup
pankso@7 358 clear
pankso@7 359 exit $1
pankso@7 360 }
pankso@7 361
pankso@7 362 #
pankso@7 363 # alsasound init script
pankso@7 364 #
pankso@7 365
pankso@7 366 #rcalsasound=/etc/init.d/alsa
pankso@7 367 rcalsasound=rcalsasound
pankso@7 368
pankso@7 369 # MAIN
pankso@7 370 if [ -d $PROCFS/asound ]; then
pankso@7 371 $rcalsasound stop >/dev/null 2>&1
pankso@7 372 $rcalsasound unload >/dev/null 2>&1
pankso@7 373 /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
pankso@7 374 fi
pankso@7 375
pankso@7 376
pankso@7 377 cleanup () {
pankso@7 378 killall -9 aplay arecord >/dev/null 2>&1
pankso@7 379 /sbin/modprobe -r isapnp >/dev/null 2>&1
pankso@7 380 /sbin/modprobe -r isa-pnp >/dev/null 2>&1
pankso@7 381 rm -f "$TMP" "$addcfg" "$FOUND" "$DUMP"
pankso@7 382 }
pankso@7 383 trap cleanup 0
pankso@7 384
pankso@7 385 TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 386 if [ $? -ne 0 ]; then
pankso@7 387 xecho "Can't create temp file, exiting..."
pankso@7 388 exit 1
pankso@7 389 fi
pankso@7 390 addcfg=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 391 if [ $? -ne 0 ]; then
pankso@7 392 xecho "Can't create temp file, exiting..."
pankso@7 393 exit 1
pankso@7 394 fi
pankso@7 395 FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 396 if [ $? -ne 0 ]; then
pankso@7 397 xecho "Can't create temp file, exiting..."
pankso@7 398 exit 1
pankso@7 399 fi
pankso@7 400 DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
pankso@7 401 if [ $? -ne 0 ]; then
pankso@7 402 xecho "Can't create temp file, exiting..."
pankso@7 403 exit 1
pankso@7 404 fi
pankso@7 405
pankso@7 406 # convert ISA PnP id number to string 'ABC'
pankso@7 407 convert_isapnp_id () {
pankso@7 408 if [ -z "$1" ]; then
pankso@7 409 echo "XXXX"
pankso@7 410 return
pankso@7 411 fi
pankso@7 412 let a='('$1'>>2) & 0x3f'
pankso@7 413 let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
pankso@7 414 let c='('$1'>> 8) & 0x1f'
pankso@7 415 strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
pankso@22 416 echo $strs | awk "{ printf \"%s%s%s\n\", \
pankso@22 417 substr(\$0,$a+1,1),substr(\$0,$b+1,1),substr(\$0,$c+1,1) }"
pankso@7 418 }
pankso@7 419
pankso@7 420 # swap high & low bytes
pankso@7 421 swap_number () {
pankso@7 422 if [ -z "$1" ]; then
pankso@7 423 echo "0000"
pankso@7 424 return
pankso@7 425 fi
pankso@7 426 let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
pankso@7 427 printf "%04x" $v
pankso@7 428 }
pankso@7 429
pankso@7 430 # build card database
pankso@7 431 # build_card_db filename
pankso@7 432 build_card_db () {
pankso@7 433 MODDIR=/lib/modules/`uname -r`
pankso@7 434 last_driver=""
pankso@7 435 echo -n > $1
pankso@7 436
pankso@7 437 # list pci cards
pankso@7 438 while read driver vendor device dummy; do
pankso@7 439 if expr $driver : 'snd-.*' >/dev/null ; then
pankso@7 440 if [ "$last_driver" != "$driver" ]; then
pankso@7 441 echo $driver.o
pankso@7 442 last_driver=$driver
pankso@7 443 fi
pankso@7 444 id1=`printf '0x%04x' $vendor`
pankso@7 445 id2=`printf '0x%04x' $device`
pankso@7 446 echo "PCI: $id1=$id2"
pankso@7 447 fi
pankso@7 448 done < $MODDIR/modules.pcimap >> $1
pankso@7 449
pankso@7 450 # list isapnp cards
pankso@7 451 while read driver cardvendor carddevice data vendor func; do
pankso@7 452 if expr $driver : 'snd-.*' >/dev/null ; then
pankso@7 453 if [ "$last_driver" != "$driver" ]; then
pankso@7 454 echo $driver.o
pankso@7 455 last_driver=$driver
pankso@7 456 fi
pankso@7 457 id1=`convert_isapnp_id $cardvendor`
pankso@7 458 dev1=`swap_number $carddevice`
pankso@7 459 id2=`convert_isapnp_id $vendor`
pankso@7 460 dev2=`swap_number $func`
pankso@7 461 echo "ISAPNP: $id1$dev1=$id2$dev2"
pankso@7 462 fi
pankso@7 463 done < $MODDIR/modules.isapnpmap >> $1
pankso@7 464 }
pankso@7 465
pankso@7 466 #
pascal@114 467 # probe this card
pascal@114 468 #
pascal@114 469 probe_this_card () {
pascal@114 470 echo -n '' > $FOUND
pascal@114 471 # list pci cards
pascal@114 472 grep snd-$1 /lib/modules/`uname -r`/modules.pcimap | \
pascal@114 473 while read driver vendor device dummy; do
pascal@114 474 if expr $driver : 'snd-.*' >/dev/null ; then
pascal@114 475 if [ "$last_driver" != "$driver" ]; then
pascal@114 476 echo $driver.o
pascal@114 477 last_driver=$driver
pascal@114 478 fi
pascal@114 479 id1=`printf '%04x' $vendor`
pascal@114 480 id2=`printf '%04x' $device`
pascal@114 481 echo "PCI: 0x$id1=0x$id2"
pascal@114 482 if $lspci -n 2>/dev/null | grep -q "$id1:$id2"; then
pascal@114 483 echo "$id1:$id2 $last_driver" >> $FOUND
pascal@114 484 fi
pascal@114 485 fi
pascal@114 486 done > /var/tmp/alsaconf.mycard
pascal@114 487 [ -s $FOUND ]
pascal@114 488 }
pascal@114 489
pascal@114 490 #
pankso@7 491 # probe cards
pankso@7 492 #
pankso@7 493 probe_cards () {
pankso@7 494 found="0"
pankso@7 495 test -r $PROCFS/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
pankso@7 496 test -r $PROCFS/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
pankso@7 497 if [ -r $PROCFS/isapnp ]; then
pankso@7 498 cat $PROCFS/isapnp >"$DUMP"
pankso@7 499 found="1"
pankso@7 500 elif [ -d $SYSFS/bus/pnp/devices ]; then
pankso@7 501 # use 2.6 kernel's sysfs output
pankso@7 502 # fake the isapnp dump
pankso@7 503 index=0
pankso@7 504 bindex=0
pankso@7 505 for d1 in $SYSFS/devices/pnp* ; do
pankso@7 506 for d2 in $d1/*:* ; do
pankso@7 507 if [ -r $d2/card_id ]; then
pankso@7 508 id=`cat $d2/card_id`
pankso@7 509 name=`cat $d2/name`
pankso@7 510 echo "Card $index '$id:$name' " >> "$DUMP"
pankso@7 511 index=$[$index+1]
pankso@7 512 found="1"
pankso@7 513 else if [ -r $d2/id ]; then
pankso@7 514 # FIXME: multiple id might be present (separated with new-line)
pankso@7 515 id=`head -n 1 $d2/id`
pankso@7 516 echo "BIOS $bindex '$id' " >> "$DUMP"
pankso@7 517 bindex=$[$bindex+1]
pankso@7 518 found="1"
pankso@7 519 fi
pankso@7 520 fi
pankso@7 521 done
pankso@7 522 done
pankso@7 523 fi
pankso@7 524 if [ "$found" = "0" ]; then
pankso@7 525 echo -n >"$DUMP"
pankso@7 526 fi
pankso@7 527 CARDID_DB=/var/tmp/alsaconf.cards
pankso@7 528 if [ ! -r $CARDID_DB ]; then
pankso@7 529 use_modinfo_db=1
pankso@7 530 fi
pankso@7 531 if [ $use_modinfo_db != 1 ]; then
pankso@7 532 if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
pankso@7 533 use_modinfo_db=1
pankso@7 534 fi
pankso@7 535 fi
pankso@7 536 if [ $use_modinfo_db = 1 ]; then
pankso@7 537 xecho "Building card database.."
pankso@7 538 build_card_db $CARDID_DB
pankso@7 539 fi
pankso@7 540 if [ ! -r $CARDID_DB ]; then
pankso@7 541 xecho "No card database is found.."
pankso@7 542 exit 1
pankso@7 543 fi
pankso@7 544 ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
pankso@7 545
pankso@7 546 msg=$(gettext "Searching sound cards")
pankso@7 547 awk '
pankso@7 548 BEGIN {
pankso@7 549 format="%-40s %s\n";
pankso@7 550 ncards='"$ncards"';
pankso@7 551 idx=0;
pankso@7 552 }
pankso@7 553 /^snd-.*\.o$/{
pankso@7 554 sub(/.o$/, "");
pankso@7 555 driver=$0;
pankso@7 556 perc=(idx * 100) / (ncards + 1);
pankso@7 557 print int(perc);
pankso@7 558 idx++;
pankso@7 559 }
pankso@7 560 /^[<literal space><literal tab>]*PCI: /{
pankso@7 561 gsub(/0x/, "");
pankso@7 562 gsub(/=/, ":");
pankso@7 563 x = sprintf ("'$lspci' -n 2>/dev/null| grep '"' 04..: '"' | grep %s", $2);
pankso@7 564 if (system (x) == 0)
pankso@7 565 printf "%s %s\n", $2, driver >>"'"$FOUND"'"
pankso@7 566 }
pankso@7 567 /^[<literal space><literal tab>]*ISAPNP: /{
pankso@7 568 id2 = substr($0, index($0, "=")+1);
pankso@7 569 gsub(/=.*/, "");
pankso@7 570 x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
pankso@7 571 if (system (x) == 0)
pankso@7 572 printf "%s %s\n", $2, driver >>"'"$FOUND"'"
pankso@7 573 else if (index($2, "ffff") > 0) {
pankso@7 574 x = sprintf ("grep '\''^BIOS [0-9]* .%s.'\'' '"$DUMP"'", id2);
pankso@7 575 if (system (x) == 0)
pankso@7 576 printf "%s %s\n", id2, driver >>"'"$FOUND"'"
pankso@7 577 }
pankso@7 578 }' < $CARDID_DB |\
pankso@92 579 $DIALOG --gauge "$msg" 15 70 5
pankso@7 580
pankso@7 581 #
pankso@7 582 # PowerMac
pankso@7 583 #
pankso@7 584 if grep -q MacRISC $PROCFS/cpuinfo; then
pankso@7 585 MODDIR=/lib/modules/`uname -r`
pankso@7 586 find $MODDIR -name 'snd-powermac*' -print | \
pankso@7 587 while read i; do
pankso@7 588 i=${i##*/}
pankso@7 589 i=${i%%.o}
pankso@7 590 i=${i%%.ko}
pankso@7 591 echo "PowerMac $i" >> $FOUND
pankso@7 592 done
pankso@7 593 fi
pankso@7 594
pankso@7 595 #
pankso@7 596 # Sparc
pankso@7 597 #
pankso@7 598 if grep -q Sparc $PROCFS/cpuinfo; then
pankso@7 599 test -r $PROCFS/openprom/name || /bin/mount -t openpromfs none $PROCFS/openprom >/dev/null 2>&1
pankso@7 600 # Check for an "audio" device
pankso@7 601 audio=
pankso@7 602 compat=
pankso@7 603 if test -r $PROCFS/openprom; then
pankso@7 604 audio=`find $PROCFS/openprom -follow -type d -name "audio*" -print`
pankso@7 605 fi
pankso@7 606 if test -n "$audio"; then
pankso@7 607 compat=`cat $audio/compatible`
pankso@7 608 compat=${compat#\'}
pankso@7 609 compat=${compat%\'}
pankso@7 610 compat=${compat#SUNW,}
pankso@7 611 fi
pankso@7 612 # Go through all cards we have
pankso@7 613 MODDIR=/lib/modules/`uname -r`
pankso@7 614 find $MODDIR -name 'snd-sun-*' -print | \
pankso@7 615 while read i; do
pankso@7 616 i=${i##*/}
pankso@7 617 i=${i%%.o}
pankso@7 618 i=${i%%.ko}
pankso@7 619 sdev=`echo ${i#snd-sun-} | tr "[a-z]" "[A-Z]"`
pankso@7 620
pankso@7 621 if test "$sdev" = "$compat"; then
pankso@7 622 echo "$sdev $i" >> $FOUND
pankso@7 623 elif test -r $PROCFS/openprom; then
pankso@7 624 find $PROCFS/openprom -follow -type d -name "SUNW,${sdev}*" \
pankso@7 625 -exec echo "$sdev $i" \; 2>/dev/null >> $FOUND
pankso@7 626 else
pankso@7 627 echo "$sdev $i" >> $FOUND
pankso@7 628 fi
pankso@7 629 done
pankso@7 630 fi
pankso@7 631 }
pankso@7 632
pankso@7 633 #
pankso@7 634 # look for a descriptive device name from the given device id
pankso@7 635 #
pankso@7 636 find_device_name () {
pankso@7 637 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 638 $lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. [^:]*: //g'
pankso@7 639 return
pankso@7 640 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 641 cardname=`grep '^Card [0-9]\+ .'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
pankso@7 642 echo $cardname
pankso@7 643 else
pankso@7 644 echo $1
pankso@7 645 fi
pankso@7 646 }
pankso@7 647
pankso@7 648 # get hwcfg file type from the given driver name
pankso@7 649 get_hwcfg_type () {
pankso@7 650 while read dev driver; do
pankso@7 651 if [ "$driver" = "$1" ]; then
pankso@7 652 case "$dev" in
pankso@7 653 *:*)
pankso@7 654 # FIXME: need to look around /sys/bus/pci/* (or use vpid-* ?)
pankso@7 655 devid=`$lspci -d "$dev" | head -n 1 | sed -e 's/ .*$//'`
pankso@7 656 case "$devid" in
pankso@7 657 *:*:*.*) ;;
pankso@7 658 *) devid="0000:$devid" ;;
pankso@7 659 esac
pankso@7 660 echo bus-pci-$devid
pankso@7 661 ;;
pankso@7 662 *)
pankso@7 663 echo $driver
pankso@7 664 ;;
pankso@7 665 esac
pankso@7 666 break
pankso@7 667 fi
pankso@7 668 done
pankso@7 669 }
pankso@7 670
pankso@7 671 # clean up all hwcfg-* files containing ALSA modules
pankso@7 672 # alsaconf sets up exclusively
pankso@7 673 cleanup_hwcfg () {
pankso@7 674 for i in /etc/sysconfig/hardware/hwcfg-*; do
pankso@7 675 grep -q "MODULE='snd-" $i && rm -f $i
pankso@7 676 done
pankso@7 677 }
pankso@7 678
pankso@7 679 #
pankso@7 680 # set up /etc/sysconfig/hardware/hwcfg-* stuff
pankso@7 681 #
pankso@7 682 setup_hwcfg () {
pankso@7 683 card=$1
pankso@7 684 cleanup_hwcfg
pankso@7 685 cfg=`echo "$devs_olist" | get_hwcfg_type $card`
pankso@7 686 echo "MODULE='$card'" > /etc/sysconfig/hardware/hwcfg-$cfg
pankso@7 687 echo "STARTMODE='auto'" >> /etc/sysconfig/hardware/hwcfg-$cfg
pankso@7 688 }
pankso@7 689
pankso@7 690
pankso@7 691 #
pankso@7 692 # Configure sound card and set mixer for SliTaz Live mode
pankso@7 693 #
pankso@7 694 ac_config_card () {
pankso@7 695
pankso@7 696 CARD_DRIVER=snd-$1
pankso@22 697 shift; CARD_OPTS="$*"
pankso@7 698 SOUND_CORE="snd"
pankso@7 699
pankso@7 700 # Keep card driver name in /var/lib to be used by boot scripts.
pankso@7 701 echo $CARD_DRIVER > /var/lib/sound-card-driver
pankso@7 702
pankso@97 703 modprobe $CARD_DRIVER >/dev/null 2>&1
pankso@7 704
pankso@7 705 # Sed /etc/rcS.conf to add driver in LOAD_MODULES
pankso@7 706 . /etc/rcS.conf
pankso@7 707 modules=`echo "$LOAD_MODULES" | sed s/$CARD_DRIVER//`
pankso@7 708 newmods="$modules $CARD_DRIVER"
pankso@7 709 sed -i s/"LOAD_MODULES=\"$LOAD_MODULES\""/"LOAD_MODULES=\"$newmods\""/ \
pankso@7 710 /etc/rcS.conf
pankso@7 711
pankso@7 712 # Set default mixer volumes
pankso@7 713 set_mixers
pankso@7 714
pankso@7 715 # Store
pankso@7 716 alsactl store
pankso@7 717 }
pankso@7 718
pankso@7 719 # check playback
pankso@7 720 # return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
pankso@7 721 ac_try_load () {
pankso@22 722 local p1=$1
pankso@22 723 shift
pankso@22 724 test -n "$LOGFILE" && echo "$p1 $*" >> "$LOGFILE"
pankso@22 725 /sbin/modprobe snd-$p1 $* >/dev/null 2>&1
pankso@22 726 if $lsmod | grep -q -E '^(snd-|snd_)'$p1' '; then
pankso@7 727 : ;
pankso@7 728 else
pankso@22 729 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 730 return 1
pankso@7 731 fi
pankso@7 732
pankso@7 733 # mute mixers
pankso@7 734 amixer set Master 0% mute >/dev/null 2>&1
pankso@7 735 amixer set PCM 0% mute >/dev/null 2>&1
pankso@7 736
pankso@7 737 # output 0.5 sec
pankso@7 738 head -c 4000 < /dev/zero | aplay -N -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
pankso@7 739 # remember pid
pankso@7 740 pp=$!
pankso@7 741 # sleep for 2 seconds (to be sure -- 1 sec would be enough)
pankso@7 742 sleep 2
pankso@7 743 # kill the child process if still exists.
pankso@7 744 kill -9 $pp > /dev/null 2>&1
pankso@7 745 st=$?
pankso@7 746 ac_cardname=`head -n 1 $PROCFS/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
pankso@22 747 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 748 if [ $st = 0 ]; then
pankso@7 749 # irq problem?
pankso@7 750 test -n "$LOGFILE" && echo "no playback return" >> "$LOGFILE"
pankso@7 751 return 2
pankso@7 752 else
pankso@7 753 # seems ok!
pankso@7 754 test -n "$LOGFILE" && echo "playback OK" >> "$LOGFILE"
pankso@7 755 return 0
pankso@7 756 fi
pankso@7 757 }
pankso@7 758
pankso@7 759 # check capture
pankso@7 760 # return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
pankso@7 761 # ac_try_capture card duplex opts
pankso@7 762 ac_try_capture () {
pankso@22 763 local p1=$1
pankso@22 764 local p2=$2
pankso@22 765 shift 2
pankso@22 766 test -n "$LOGFILE" && echo "$p1 $p2 $*" >> "$LOGFILE"
pankso@22 767 /sbin/modprobe snd-$p1 $* >/dev/null 2>&1
pankso@22 768 if $lsmod | grep -q -E '^(snd-|snd_)'$p1' '; then
pankso@7 769 : ;
pankso@7 770 else
pankso@22 771 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 772 return 1
pankso@7 773 fi
pankso@7 774
pankso@7 775 # mute mixers
pankso@7 776 amixer set Master 0% mute >/dev/null 2>&1
pankso@7 777 amixer set PCM 0% mute >/dev/null 2>&1
pankso@7 778
pankso@7 779 play_pid=0
pankso@22 780 if [ $p2 = yes ]; then
pankso@7 781 # try duplex - start dummy playing
pankso@7 782 aplay -N -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
pankso@7 783 play_pid=$!
pankso@7 784 fi
pankso@7 785 # record 1sec
pankso@7 786 arecord -N -d1 > /dev/null 2>&1 &
pankso@7 787 # remember pid
pankso@7 788 pp=$!
pankso@7 789 # sleep for 2 seconds
pankso@7 790 sleep 2
pankso@7 791 # kill the child process if still exists.
pankso@7 792 kill -9 $pp > /dev/null 2>&1
pankso@7 793 st=$?
pankso@7 794 # kill playback process if any
pankso@7 795 test $play_pid != 0 && kill -9 $play_pid
pankso@22 796 /sbin/modprobe -r snd-$p1 >/dev/null 2>&1
pankso@7 797 if [ $st = 0 ]; then
pankso@7 798 test -n "$LOGFILE" && echo "capture no return" >> "$LOGFILE"
pankso@7 799 return 2
pankso@7 800 else
pankso@7 801 test -n "$LOGFILE" && echo "capture OK" >> "$LOGFILE"
pankso@7 802 return 0
pankso@7 803 fi
pankso@7 804 }
pankso@7 805
pankso@7 806 get_dma_pair () {
pankso@7 807 case $1 in
pankso@7 808 0)
pankso@7 809 echo 1 3 5;;
pankso@7 810 1)
pankso@7 811 echo 0 3 5;;
pankso@7 812 3)
pankso@7 813 echo 1 0 5;;
pankso@7 814 5)
pankso@7 815 echo 3 1 0;;
pankso@7 816 esac
pankso@7 817 }
pankso@7 818
pankso@7 819 #
pankso@7 820 # check playback on specified irqs
pankso@7 821 #
pankso@7 822 # ac_try_irq card opts irqs...
pankso@7 823 # return 0 - OK, 1 - NG, 2 - not working (dma problem?)
pankso@7 824 #
pankso@7 825 ac_try_irq () {
pankso@22 826 local p2=$2
pankso@7 827 card=$1
pankso@7 828 opts="$2 ${mpfx}irq=$3"
pankso@7 829 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 830 result=$?
pankso@7 831 case $result in
pankso@7 832 0)
pankso@7 833 ac_opts="$opts"
pankso@7 834 return 0
pankso@7 835 ;;
pankso@7 836 2)
pankso@22 837 shift 3
pankso@22 838 for irq in $*; do
pankso@22 839 opts="$p2 ${mpfx}irq=$irq"
pankso@7 840 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 841 if [ $? = 0 ]; then
pankso@7 842 ac_opts="$opts"
pankso@7 843 return 0
pankso@7 844 fi
pankso@7 845 done
pankso@7 846 return 2
pankso@7 847 ;;
pankso@7 848 esac
pankso@7 849 return 1
pankso@7 850 }
pankso@7 851
pankso@7 852 #
pankso@7 853 # check playback/capture on dma1 & dma2 & specified irqs
pankso@7 854 #
pankso@7 855 # ac_try_dmas card opts irqs...
pankso@7 856 # return 0 - OK, 1 - NG
pankso@7 857 #
pankso@7 858 ac_try_dmas () {
pankso@22 859 local p1=$1
pankso@22 860 local p2=$2
pankso@22 861 shift 2
pankso@7 862 dma_list=`check_dma_avail 1 0 3 5`
pankso@22 863 for irq in $*; do
pankso@7 864 for dma1 in $dma_list; do
pankso@7 865 for dma2 in `get_dma_pair $dma1`; do
pankso@22 866 opts="$p2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
pankso@22 867 ac_try_load $p1 $opts >/dev/null 2>&1
pankso@7 868 result=$?
pankso@7 869 if [ $result = 1 ]; then
pankso@7 870 if [ $try_all_combination = 1 ]; then
pankso@7 871 continue
pankso@7 872 else
pankso@7 873 return 1
pankso@7 874 fi
pankso@7 875 elif [ $result = 0 ]; then
pankso@7 876 test -n "$LOGFILE" && echo "Now checking capture..." >> "$LOGFILE"
pankso@7 877 ac_opts="$opts"
pankso@22 878 ac_try_capture $p1 yes $opts >/dev/null 2>&1 && return 0
pankso@7 879 for d in yes no; do
pankso@7 880 for dma2 in $dma_list; do
pankso@7 881 if [ $dma1 != $dma2 ]; then
pankso@22 882 opts="$p2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
pankso@7 883 ac_opts="$opts"
pankso@22 884 ac_try_capture $p1 $d $opts >/dev/null 2>&1 && return 0
pankso@7 885 fi
pankso@7 886 done
pankso@7 887 done
pankso@7 888 return 0
pankso@7 889 fi
pankso@7 890 done
pankso@7 891 done
pankso@7 892 done
pankso@7 893 return 1
pankso@7 894 }
pankso@7 895
pankso@7 896 # check if the option $2 exists in card $1: set value $3
pankso@7 897 ac_check_option () {
pankso@7 898 if /sbin/modinfo -p snd-$1 | grep -q $2; then
pankso@7 899 echo "$2=$3"
pankso@7 900 fi
pankso@7 901 }
pankso@7 902
pankso@7 903 ac_try_card_sb8 () {
pankso@7 904 card=sb8
pankso@7 905 irq_list=`check_irq_avail 5 3 9 10 7`
pankso@7 906 for dma8 in `check_dma_avail 1 3`; do
pankso@7 907 opts="${mpfx}dma8=$dma8"
pankso@7 908 ac_try_irq $card "$opts" $irq_list && return 0
pankso@7 909 done
pankso@7 910 return 1
pankso@7 911 }
pankso@7 912
pankso@7 913 ac_try_card_sb16 () {
pankso@7 914 card=sb16
pankso@7 915 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 916 opts="$isapnp"
pankso@7 917 irq_list=`check_irq_avail 5 9 10 7 3`
pankso@7 918 dma_list=`check_dma_avail 0 1 3`
pankso@7 919 dma16_list=`check_dma_avail 5 6 7`
pankso@7 920 # at first try auto-probing by driver itself
pankso@7 921 ac_try_load $card $opts >/dev/null 2>&1
pankso@7 922 result=$?
pankso@7 923 case $result in
pankso@7 924 0)
pankso@7 925 ac_opts="$opts"
pankso@7 926 ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
pankso@7 927 for d in yes no; do
pankso@7 928 for dma8 in $dma_list; do
pankso@7 929 for irq in $irq_list; do
pankso@7 930 opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
pankso@7 931 ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
pankso@7 932 done
pankso@7 933 done
pankso@7 934 done
pankso@7 935 return 0
pankso@7 936 ;;
pankso@7 937 2)
pankso@7 938 for dma16 in $dma16_list; do
pankso@7 939 opts="${mpfx}dma16=$dma16 $isapnp"
pankso@7 940 if ac_try_irq $card "$opts" $irq_list ; then
pankso@7 941 ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
pankso@7 942 ac_opts_saved="$ac_opts"
pankso@7 943 for d in yes no; do
pankso@7 944 for dma8 in $dma_list; do
pankso@7 945 ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
pankso@7 946 ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
pankso@7 947 done
pankso@7 948 done
pankso@7 949 # return anyway here..
pankso@7 950 return 0
pankso@7 951 fi
pankso@7 952 done
pankso@7 953 ;;
pankso@7 954 esac
pankso@7 955 return 1
pankso@7 956 }
pankso@7 957
pankso@7 958 ac_try_card_es1688 () {
pankso@7 959 card=es1688
pankso@7 960 opts=""
pankso@7 961 irq_list=`check_irq_avail 5 9 10 7`
pankso@7 962 for dma8 in `check_dma_avail 1 3 0`; do
pankso@7 963 opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
pankso@7 964 ac_try_irq $card "$opts" $irq_list && return 0
pankso@7 965 done
pankso@7 966 return 1
pankso@7 967 }
pankso@7 968
pankso@7 969 ac_try_card_es18xx () {
pankso@7 970 card=es18xx
pankso@7 971 opts=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 972 ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
pankso@7 973 return 1
pankso@7 974 }
pankso@7 975
pankso@7 976 ac_try_card_cs4236 () {
pankso@7 977 card=cs4236
pankso@7 978 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 979 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 980 for cport in 0x538 0x210 0xf00; do
pankso@7 981 for port in 0x530 0x534; do
pankso@7 982 opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
pankso@7 983 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 984 done
pankso@7 985 done
pankso@7 986 return 1
pankso@7 987 }
pankso@7 988
pankso@7 989 ac_try_card_cs4232 () {
pankso@7 990 card=cs4232
pankso@7 991 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 992 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 993 for cport in 0x538 0x210 0xf00; do
pankso@7 994 for port in 0x530 0x534; do
pankso@7 995 opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
pankso@7 996 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 997 done
pankso@7 998 done
pankso@7 999 return 1
pankso@7 1000 }
pankso@7 1001
pankso@7 1002 ac_try_card_cs4231 () {
pankso@7 1003 card=cs4231
pankso@7 1004 irq_list=`check_irq_avail 5 7 9 11 12 15`
pankso@7 1005 for port in 0x530 0x534; do
pankso@7 1006 opts="${mpfx}port=$port"
pankso@7 1007 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 1008 done
pankso@7 1009 return 1
pankso@7 1010 }
pankso@7 1011
pankso@7 1012 ac_try_card_opl3sa2 () {
pankso@7 1013 card=opl3sa2
pankso@7 1014 irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
pankso@7 1015 isapnp=`ac_check_option $card ${mpfx}isapnp 0`
pankso@7 1016 for port in 0x370 0x538 0xf86 0x100; do
pankso@7 1017 for wss_port in 0x530 0xe80 0xf40 0x604; do
pankso@7 1018 opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
pankso@7 1019 ac_try_dmas $card "$opts" $irq_list && return 0
pankso@7 1020 done
pankso@7 1021 done
pankso@7 1022 return 1
pankso@7 1023 }
pankso@7 1024
pankso@7 1025 ac_config_legacy () {
pankso@7 1026 title=$(gettext "WARNING")
pankso@7 1027 msg=$(gettext "
pankso@7 1028 Probing legacy ISA cards might make
pankso@7 1029 your system unstable.
pankso@7 1030
pankso@7 1031 Do you want to proceed?
pankso@7 1032
pankso@7 1033 ")
pankso@7 1034 $DIALOG --title "$title" --yesno "$msg" 10 50 || acex 0
pankso@7 1035
pankso@7 1036 if [ x"$1" = x ]; then
pankso@7 1037 probe_list="$LEGACY_CARDS"
pankso@7 1038 else
pankso@7 1039 probe_list=$*
pankso@7 1040 fi
pankso@22 1041 menu_args=""
pankso@7 1042
pankso@7 1043 for card in $probe_list; do
pankso@7 1044 cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
pankso@7 1045 if [ x"$cardname" != x ]; then
pankso@22 1046 menu_args="$menu_args \"$card\" \"$cardname\" on"
pankso@7 1047 fi
pankso@7 1048 done
pankso@22 1049 if [ "$menu_args" = "" ]; then
pankso@7 1050 msg=$(gettext "No legacy drivers are available
pankso@7 1051 for your machine")
pankso@7 1052 $DIALOG --msgbox "$msg" 5 50
pankso@7 1053 return 1
pankso@7 1054 fi
pankso@7 1055 title=$(gettext "Driver Selection")
pankso@7 1056 msg=$(gettext " Probing legacy ISA cards
pankso@7 1057
pankso@7 1058 Please select the drivers to probe:")
pankso@92 1059 eval $DIALOG --title \"$title\" --checklist \"$msg\" 15 70 5 $menu_args 2> $FOUND || acex 0
pankso@7 1060
pankso@7 1061 if [ $try_all_combination != 1 ]; then
pankso@7 1062 msg=$(gettext "
pankso@7 1063 Shall I try all possible DMA and IRQ combinations?
pankso@7 1064 With this option, some unconventional configuration
pankso@7 1065 might be found, but it will take much longer time.")
pascal@110 1066 if $DIALOG --yesno "$msg" 15 70
pankso@7 1067 then
pankso@7 1068 try_all_combination=1
pankso@7 1069 fi
pankso@7 1070 fi
pankso@7 1071
pankso@7 1072 xecho "Probing legacy cards.. This may take a few minutes.."
pankso@7 1073 echo -n $(gettext "Probing: ")
pankso@7 1074 cards=`cat $FOUND | tr -d \"`
pankso@7 1075 for card in $cards; do
pankso@7 1076 echo -n " $card"
pankso@7 1077 ac_opts=""
pankso@7 1078 if eval ac_try_card_$card ; then
pankso@7 1079 xecho " : FOUND!!"
pankso@7 1080 ac_config_card $card $ac_opts
pankso@7 1081 return 0
pankso@7 1082 fi
pankso@7 1083 done
pankso@7 1084 echo
pankso@7 1085 title=$(gettext "Result")
pankso@7 1086 msg=$(gettext "No legacy cards found")
pankso@92 1087 $DIALOG --title "$title" --msgbox "$msg" 15 70 5
pankso@7 1088 return 1
pankso@7 1089 }
pankso@7 1090
pankso@7 1091 #
pankso@7 1092 # main part continued..
pankso@7 1093 #
pankso@7 1094
pankso@7 1095 if test -n "$LOGFILE" ; then
pankso@7 1096 touch "$LOGFILE"
pankso@7 1097 echo -n "Starting alsaconf: " >> "$LOGFILE"
pankso@7 1098 date >> "$LOGFILE"
pankso@7 1099 fi
pankso@7 1100
pankso@7 1101 if [ x"$legacy_probe_card" != x ]; then
pankso@7 1102 ac_opts=""
pankso@7 1103 if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
pankso@7 1104 echo "$ac_opts"
pankso@7 1105 echo "$ac_cardname"
pankso@7 1106 exit 0
pankso@7 1107 else
pankso@7 1108 echo "FAILED"
pankso@7 1109 exit 1
pankso@7 1110 fi
pankso@7 1111 fi
pankso@7 1112
pankso@7 1113
pankso@7 1114 if [ $do_legacy_only = 1 ]; then
pankso@7 1115 ac_config_legacy
pankso@7 1116 exit 0
pankso@7 1117 fi
pankso@7 1118
pascal@114 1119 if [ -n "$snd_module" ]; then
pascal@114 1120 if probe_this_card $snd_module; then
pascal@114 1121 ac_config_card $snd_module
pascal@114 1122 exit 0
pascal@114 1123 fi
pascal@114 1124 fi
pankso@7 1125 probe_cards
pankso@7 1126
pankso@22 1127 devs_found=""
pankso@7 1128 devs_olist=""
pankso@7 1129
pankso@7 1130 if [ -s "$FOUND" ]; then
pankso@7 1131 while read dev card ; do
pankso@7 1132 MODDIR=/lib/modules/`uname -r`
pankso@7 1133 find $MODDIR -type f | grep -q -E $card'\.(o|ko)' || continue
pankso@7 1134 cardname=`find_device_name $dev | cut -c 1-64`
pankso@7 1135 if [ -z "$cardname" ]; then
pankso@7 1136 cardname="$card"
pankso@7 1137 fi
pankso@7 1138 card=${card##snd-}
pankso@22 1139 devs_found="$devs_found $card \"$cardname\""
pankso@22 1140 #devs_devs=("${devs_devs[@]}" "$card" "$dev")
pankso@7 1141 done <"$FOUND"
pankso@7 1142 devs_olist=`cat $FOUND`
pankso@7 1143 fi
pankso@22 1144 if [ "$devs_found" != "" ]; then
pankso@7 1145 #
pankso@7 1146 # check for TP600E
pankso@7 1147 #
pankso@22 1148 if [ "${devs_found%% *}" = "cs46xx" ]; then
pankso@7 1149 if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
pankso@7 1150 msg=$(gettext "
pankso@7 1151 Looks like you having a Thinkpad 600E or 770 notebook.
pankso@7 1152 On this notebook, CS4236 driver should be used
pankso@7 1153 although CS46xx chip is detected.
pankso@7 1154
pankso@7 1155 Shall I try to snd-cs4236 driver and probe
pankso@7 1156 the legacy ISA configuration?")
pankso@7 1157 if $DIALOG --yesno "$msg" 13 60
pankso@7 1158 then
pankso@7 1159 try_all_combination=1
pankso@7 1160 ac_config_legacy cs4236
pankso@7 1161 exit 0
pankso@7 1162 fi
pankso@7 1163 elif $lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then
pankso@7 1164 msg=$(gettext "
pankso@7 1165 Looks like you having a Dell Dimension machine.
pankso@7 1166 On this machine, CS4232 driver should be used
pankso@7 1167 although CS46xx chip is detected.
pankso@7 1168
pankso@7 1169 Shall I try to snd-cs4232 driver and probe
pankso@7 1170 the legacy ISA configuration?")
pankso@7 1171 if $DIALOG --yesno "$msg" 13 60
pankso@7 1172 then
pankso@7 1173 try_all_combination=1
pankso@7 1174 ac_config_legacy cs4232
pankso@7 1175 exit 0
pankso@7 1176 fi
pankso@7 1177 fi
pankso@7 1178 fi
pankso@7 1179
pankso@22 1180 devs_found="$devs_found legacy 'Probe legacy ISA (non-PnP) chips'"
pankso@7 1181 title=$(gettext "Soundcard Selection")
pankso@7 1182 msg=$(gettext "
pankso@7 1183 Following card(s) are found on your system.
pankso@7 1184 Please skip or choose a soundcard to configure :
pankso@7 1185 ")
pankso@92 1186 eval $DIALOG --title \"$title\" --menu \"$msg\" 15 70 5 $devs_found 2> $FOUND || acex 0
pankso@7 1187 card=`head -n 1 $FOUND`
pankso@7 1188 if [ "$card" = "legacy" ]; then
pankso@7 1189 ac_config_legacy
pankso@7 1190 else
pankso@7 1191 ac_config_card "$card"
pankso@7 1192 fi
pankso@7 1193 exit 0
pankso@7 1194 else
pankso@7 1195 msg=$(gettext "
pankso@7 1196 No supported PnP or PCI card found.
pankso@7 1197
pankso@7 1198 Would you like to probe legacy ISA sound cards/chips?
pankso@7 1199
pankso@7 1200 ")
pascal@110 1201 if $DIALOG --yesno "$msg" 15 70 ; then
pankso@7 1202 ac_config_legacy
pankso@7 1203 exit 0
pankso@7 1204 fi
pankso@7 1205 fi
pankso@7 1206
pankso@7 1207 rm -f "$FOUND" "$DUMP"
pankso@7 1208 exit 0