Next Previous Contents

9. Soundcards.

These seem to be the cause of most problems. Just remember that for a card to work, the card must be accessible to the kernel (that's what isapnp is for) and it must have the correct driver and it mustn't conflict with any other devices.

If you suspect driver problems etc, you may wish to join the sound mailing list at linux-sound@vger.rutgers.edu.

The later 2.1 kernels have a new sound driver, see the documentation in the /usr/src/linux/Documentation/sound directory.

Sound drivers have greatly improved with the v2.2 kernels, so you may find it worthwhile investigating these. Look in the kernel sources at Documentation/sound/Introduction, and any other documentation in there relevant to your card.

See also the http://www.linux.org.uk/OSS/ for sound drivers etc.

For the latest sound drivers, look at http://www.alsa-project.org/. These drivers can be built to do their own PnP, so if all you have is a sound card, you may not even need to use isapnptools.

There is an article on configuring ISA PnP sound cards at http://www2.linuxjournal.com/lj-issues/issue64/3269.html, in the August 1999 on-line issue of the Linux Journal (issue #64).

See also Common problems.

9.1 I've got an AWE32/AWE64, but Linux doesn't recognise it.

[According to Stefan Markgraf, the AWE64 suffers the same problem described below, where the two ports at 0xA20 and 0xE20 are not mentioned in the resource dump.]

It turns out this is the case for all CTL0021 devices whether on an AWE32, AWE64 or other. You will have to manually add the missing ports.

I've had some great feedback from agriffin@cpcug.org on this: (and a couple of corrections from Takashi Iwai)

I have been able to get my SoundBlaster AWE 32 pnp configured and with drivers from Takashi Iwai, I now get some of the best sounds ever. (At least on any of the machines here.)

I have included both the original output from pnpdump and the conf that I use to get things working. Note that the dump does not detect the I/O ports at 0xA20 and 0xE20. The manual that came with the card lists these ports and a note in one of the newsgroups show that all three of the AWE I/O ports need to be configured.

Before adding the two I/O ports, the isapnp /etc/<pnpdump created file editted to activate the card> does not report anything unusual, but when I modprobe -a sound, syslog contains two lines:

        AWE32 not found
        AWE32: not detected

and the output from cat /dev/sndstst in this case is:

Sound Driver:3.5.4-960630 (Tue Jan 28 21:37:47 EST 1997 root,
Linux palis 2.1.23 #1 Tue Jan 28 19:29:03 EST 1997 i586)
Kernel: Linux palis 2.0.28 #3 Tue Jan 28 21:38:48 EST 1997 i586
Config options: a80002

Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401

Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:
0: Yamaha OPL-3

Midi devices:
0: Sound Blaster 16

Timers:
0: System clock

Mixers:
0: Sound Blaster

Now, when the two I/O ports (0xA20 and 0XE20) are included in the isapnp.conf, syslog has:

        AWE32 Sound Driver v0.3.2 (DRAM 2048K)

and the output from /dev/sndstat shows:

Sound Driver:3.5.4-960630 (Tue Jan 28 21:37:47 EST 1997 root,
Linux palis 2.1.23 #1 Tue Jan 28 19:29:03 EST 1997 i586)
Kernel: Linux palis 2.0.28 #3 Tue Jan 28 21:38:48 EST 1997 i586
Config options: a80002

Installed drivers:
Type 1: OPL-2/OPL-3 FM
Type 2: Sound Blaster
Type 7: SB MPU-401

Card config:
Sound Blaster at 0x220 irq 5 drq 1,5
SB MPU-401 at 0x330 irq 5 drq 0
OPL-2/OPL-3 FM at 0x388 drq 0

Audio devices:
0: Sound Blaster 16 (4.13)

Synth devices:
0: Yamaha OPL-3
1: AWE32 Driver v0.3.2 (DRAM 2048k)

Midi devices:
0: Sound Blaster 16

Timers:
0: System clock

Mixers:
0: Sound Blaster

The output from pnpdump (before configuration).

# This is free software, see the sources for details.
# This software has NO WARRANTY, use at your OWN RISK
# 
# For details of this file format, see isapnp.conf(5)
#
# Compiler flags: -DREALTIME -DNEEDSETSCHEDULER
#
# Trying port address 0203
# Board 1 has serial identifier 0d 00 00 d5 88 43 00 8c 0e

# (DEBUG)
(READPORT 0x0203)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier 0d 00 00 d5 88 43 00 8c 0e)
# CTL0043 Serial No 54664 [checksum 0d]
# Version 1.0, Vendor version 1.0
# ANSI string -->Creative SB AWE32 PnP<--
#
# Logical device id CTL0031
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0043/54664 (LD 0
#     ANSI string -->Audio<--

# Multiple choice time, choose one only !

#     Start dependent functions: priority preferred
#       IRQ 5.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 1.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 1))
#       Next DMA channel 5.
#             16 bit DMA only
#             Logical device is not a bus master
#             DMA may not execute in count by byte mode
#             DMA may execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 1 (CHANNEL 5))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0220
#             IO base alignment 1 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0330
#             Maximum IO base address 0x0330
#             IO base alignment 1 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0330))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0388
#             Maximum IO base address 0x0388
#             IO base alignment 1 bytes
#             Number of IO addresses required: 4
# (IO 2 (BASE 0x0388))

#       Start dependent functions: priority acceptable
#       IRQ 5, 7 or 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Next DMA channel 5, 6 or 7.
#             16 bit DMA only
#             Logical device is not a bus master
#             DMA may not execute in count by byte mode
#             DMA may execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 1 (CHANNEL 5))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0300
#             Maximum IO base address 0x0330
#             IO base alignment 48 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0300))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0388
#             Maximum IO base address 0x0388
#             IO base alignment 1 bytes
#             Number of IO addresses required: 4
# (IO 2 (BASE 0x0388))

#       Start dependent functions: priority acceptable
#       IRQ 5, 7 or 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Next DMA channel 5, 6 or 7.
#             16 bit DMA only
#             Logical device is not a bus master
#             DMA may not execute in count by byte mode
#             DMA may execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 1 (CHANNEL 5))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0300
#             Maximum IO base address 0x0330
#             IO base alignment 48 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0300))

#       Start dependent functions: priority functional
#       IRQ 5, 7 or 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Next DMA channel 5, 6 or 7.
#             16 bit DMA only
#             Logical device is not a bus master
#             DMA may not execute in count by byte mode
#             DMA may execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 1 (CHANNEL 5))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))

#       Start dependent functions: priority functional
#       IRQ 5, 7 or 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0300
#             Maximum IO base address 0x0330
#             IO base alignment 48 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0300))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0388
#             Maximum IO base address 0x0388
#             IO base alignment 1 bytes
#             Number of IO addresses required: 4
# (IO 2 (BASE 0x0388))

#       Start dependent functions: priority functional
#       IRQ 5, 7 or 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0300
#             Maximum IO base address 0x0330
#             IO base alignment 48 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0300))

#       Start dependent functions: priority functional
#       IRQ 5, 7, 10 or 11.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 0, 1 or 3.
#             8 bit DMA only
#             Logical device is not a bus master
#             DMA may execute in count by byte mode
#             DMA may not execute in count by word mode
#             DMA channel speed in compatible mode
# (DMA 0 (CHANNEL 0))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0220
#             Maximum IO base address 0x0280
#             IO base alignment 32 bytes
#             Number of IO addresses required: 16
# (IO 0 (BASE 0x0220))

#     End dependent functions
# (ACT Y)
))
#
# Logical device id CTL2011
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0043/54664 (LD 1
#     Compatible device id PNP0600
#     ANSI string -->IDE<--

# Multiple choice time, choose one only !

#     Start dependent functions: priority preferred
#       IRQ 10.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 10 (MODE +E)))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0168
#             Maximum IO base address 0x0168
#             IO base alignment 1 bytes
#             Number of IO addresses required: 8
# (IO 0 (BASE 0x0168))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x036e
#             Maximum IO base address 0x036e
#             IO base alignment 1 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x036e))

#       Start dependent functions: priority acceptable
#       IRQ 11.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 11 (MODE +E)))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x01e8
#             Maximum IO base address 0x01e8
#             IO base alignment 1 bytes
#             Number of IO addresses required: 8
# (IO 0 (BASE 0x01e8))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x03ee
#             Maximum IO base address 0x03ee
#             IO base alignment 1 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x03ee))

#       Start dependent functions: priority acceptable
#       IRQ 10, 11, 12 or 15.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 10 (MODE +E)))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0100
#             Maximum IO base address 0x01f8
#             IO base alignment 8 bytes
#             Number of IO addresses required: 8
# (IO 0 (BASE 0x0100))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0300
#             Maximum IO base address 0x03fe
#             IO base alignment 2 bytes
#             Number of IO addresses required: 2
# (IO 1 (BASE 0x0300))

#       Start dependent functions: priority functional
#       IRQ 15.
#             High true, edge sensitive interrupt (by default)
# (INT 0 (IRQ 15 (MODE +E)))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0170
#             Maximum IO base address 0x0170
#             IO base alignment 1 bytes
#             Number of IO addresses required: 8
# (IO 0 (BASE 0x0170))
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0376
#             Maximum IO base address 0x0376
#             IO base alignment 1 bytes
#             Number of IO addresses required: 1
# (IO 1 (BASE 0x0376))

#     End dependent functions
# (ACT Y)
))
#
# Logical device id CTL0021
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0043/54664 (LD 2
#     ANSI string -->WaveTable<--

# Multiple choice time, choose one only !

#     Start dependent functions: priority preferred
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0620
#             Maximum IO base address 0x0620
#             IO base alignment 1 bytes
#             Number of IO addresses required: 4
# (IO 0 (BASE 0x0620))

#       Start dependent functions: priority acceptable
#       Logical device decodes 16 bit IO address lines
#             Minimum IO base address 0x0620
#             Maximum IO base address 0x0680
#             IO base alignment 32 bytes
#             Number of IO addresses required: 4
# (IO 0 (BASE 0x0620))

#     End dependent functions
# (ACT Y)
))
#
# Logical device id CTL7001
#
# Edit the entries below to uncomment out the configuration required.
# Note that only the first value of any range is given, this may be changed if required
# Don't forget to uncomment the activate (ACT Y) when happy

(CONFIGURE CTL0043/54664 (LD 3
#     Compatible device id PNPb02f
#     ANSI string -->Game<--
#     Logical device decodes 16 bit IO address lines
#         Minimum IO base address 0x0200
#         Maximum IO base address 0x0200
#         IO base alignment 1 bytes
#         Number of IO addresses required: 8
# (IO 0 (BASE 0x0200))
# (ACT Y)
))
# End tag... Checksum 0x00 (OK)

The editted configuration file for isapnp.

# This is free software, see the sources for details.
# This software has NO WARRANTY, use at your OWN RISK
# 
# For details of this file format, see isapnp.conf(5)
#
# Compiler flags: -DREALTIME -DNEEDSETSCHEDULER
#
# Edited by jag 27 Jan 1997 to add IO Ports A20 and E20
#
# Trying port address 0203
# Board 1 has serial identifier 0d 00 00 d5 88 43 00 8c 0e

(DEBUG)
(READPORT 0x0203)
(ISOLATE)
(IDENTIFY *)

# Card 1: (serial identifier 0d 00 00 d5 88 43 00 8c 0e)
# CTL0043 Serial No 54664 [checksum 0d]
# Version 1.0, Vendor version 1.0
# ANSI string -->Creative SB AWE32 PnP<--
#
# Logical device id CTL0031
#

(CONFIGURE CTL0043/54664 (LD 0
#     ANSI string -->Audio<--
<P>
 (INT 0 (IRQ 5 (MODE +E)))
#       First DMA channel 1.
 (DMA 0 (CHANNEL 1))
#       Next DMA channel 5.
 (DMA 1 (CHANNEL 5))
 (IO 0 (BASE 0x0220))
 (IO 1 (BASE 0x0330))
 (IO 2 (BASE 0x0388))
#     End dependent functions
(ACT Y)
))
#
# Logical device id CTL0021
#

(CONFIGURE CTL0043/54664 (LD 2
#     ANSI string -->WaveTable<--

(IO 0 (BASE 0x0620))
(IO 1 (BASE 0x0A20))
(IO 2 (BASE 0x0E20))

#     End dependent functions
(ACT Y)
))
#
# Logical device id CTL7001
#
(CONFIGURE CTL0043/54664 (LD 3
#     Compatible device id PNPb02f
#     ANSI string -->Game<--
(IO 0 (BASE 0x0200))
(ACT Y)
))
# End tag... Checksum 0x00 (OK)

An extract of the bootup script to configure sound.

#######################################################################
#  Add local action for palis.athena.inc               27 Jan 1997  jag
#  SoundBlaster AWE 32 pnp initlization
#  Load sound "fonts". NOTE: the synthgs.sbk from the SB install CDROM
#  Load sound.o module. This should be loaded before the "fonts".
#######################################################################

if [ -f /sbin/isapnp ]; then
        echo "Initializing the SouncBlaster AWE 32 pnp:"
        /sbin/isapnp /etc/isapnp.conf > /dev/null
else
        echo "No pnp initialization code available.:
        exit 1
fi
#
# According to Takashi IWAI, modprobe must come before sfxload
#
/sbin/modprobe -a sound

if [ -f /usr/local/bin/sfxload ]; then
        echo "Loading Sound Fonts for General Midi:"
        /usr/local/bin/sfxload -Ii /usr/local/lib/awe/synthgs.sbk
else
        echo "No Sound Font loading available.:
fi

9.2 Problems with the Aztech Sound Galaxy 16 III-3D PnP sound card.

Stefan Markgraf has reported being unable to get the 16 bit MSS compatibility working with this card (Jul 97), and ended up changing it for a AWE64. The 8-bit Sound Blaster pro compatibility, MPU-401 and OPL-3 functions work fine.

9.3 CD sound doesn't work (one channel or no channels).

There are two orientations for the CD player sound-card signals, try reversing the connector on the sound card if the CD player sound doesn't work. (From an email from kjcox@students.wisc.edu).

After much fiddling, I finally got it to work but in the strangest manner. I reversed the cable from the CD-ROM to the sound card 180 degrees while the computer was up and running. I had to first remove the white box on the sound card into which the cable fits. I tried it both ways and then when I put it back while the computer was running (hey, I got desperate) it suddenly decided to work. It took awhile though to get there.
Anyway, something to add to your FAQ. Try removing the white box and reversing the cord. You can either turn the box around or switch it altogether.

9.4 What to do about "sb: Interrupt test on IRQ10 failed - device disabled."

This kernel message means that the sound driver couldn't get an interrupt from the sound card on the channel you told it to use. This could be due to the soundcard using a different interrupt, or more than one device trying to use the same interrupt.

I get this one too. I managed to get rid of it by changing the preallocated ISA interrupts in the BIOS but, unfortunately, when I got the sound working, all the other PnP stuff stopped working. In my case, the sound is built into the motherboard, and there seems to be no way to configure it directly in the BIOS, so it's guesswork to try to find the interrupt allocation. If I had Win95, it might be possible to find it by looking at the Win95 allocation. This is where an ESCD BIOS interface would be useful - any takers ?

9.5 Soundblaster site.

See also the soundblaster linux website.

9.6 Sound works if I boot straight into Linux, but not if booting from Win98.

If you use (ISOLATE CLEAR) then all ISA PnP hardware gets reset, and only those devices you configure will get set up. This is DANGEROUS if you have ISA PnP device drivers configured into the kernel (which work because the BIOS configured them - such as disk interfaces or network cards).

If you use (ISOLATE PRESERVE), which is the default, then any devices you don't configure will probably be unconfigured after a direct boot from the BIOS, but they will remain configured by Win98 if you boot via Win98. In this case they may then conflict with the settings you have chosen for the devices you configure for linux.

I suggest you look at the PCI interrupt allocations too, they are PnP and can be changed under software control (though normally only the BIOS does this).

What you should perhaps do is run

pnpdump -di > /tmp/pnpdump.txt

before you run isapnp during linux boot up. This will allow you to see what the hardware configuration is - and by doing this booting directly, saving the file, and rebooting via Win98, you can compare the results.

The other alternative is to browse the hardware configuration settings in Win98, then change your isapnp.conf and driver settings to match.


Next Previous Contents