Pro Audio Spectrum 16 for 2.3.99 and later
=========================================
by Thomas Molina (tmolina@home.com)
last modified 3 Mar 2001
Acknowledgement to Axel Boldt (boldt@math.ucsb.edu) for stuff taken
from Configure.help, Riccardo Facchetti for stuff from README.OSS,
and others whose names I could not find.

This documentation is relevant for the PAS16 driver (pas2_card.c and
friends) under kernel version 2.3.99 and later.  If you are
unfamiliar with configuring sound under Linux, please read the
Sound-HOWTO, Documentation/sound/oss/Introduction and other
relevant docs first.

The following information is relevant information from README.OSS
and legacy docs for the Pro Audio Spectrum 16 (PAS16):
==================================================================

The pas2_card.c driver supports the following cards --
Pro Audio Spectrum 16 (PAS16) and compatibles:
        Pro Audio Spectrum 16
        Pro Audio Studio 16
        Logitech Sound Man 16
        NOTE! The original Pro Audio Spectrum as well as the PAS+ are not
              and will not be supported by the driver.

The sound driver configuration dialog
-------------------------------------

Sound configuration starts by making some yes/no questions. Be careful
when answering to these questions since answering y to a question may
prevent some later ones from being asked. For example don't answer y to
the question about (PAS16) if you don't really have a PAS16.  Sound
configuration may also be made modular by answering m to configuration
options presented. 

Note also that all questions may not be asked. The configuration program
may disable some questions depending on the earlier choices. It may also
select some options automatically as well.

  "ProAudioSpectrum 16 support",
        - Answer 'y'_ONLY_ if you have a Pro Audio Spectrum _16_,
          Pro Audio Studio 16 or Logitech SoundMan 16 (be sure that
          you read the above list correctly). Don't answer 'y' if you
          have some other card made by Media Vision or Logitech since they
          are not PAS16 compatible.
          NOTE! Since 3.5-beta10 you need to enable SB support (next question)
          if you want to use the SB emulation of PAS16. It's also possible to
          the emulation if you want to use a true SB card together with PAS16
          (there is another question about this that is asked later).

  "Generic OPL2/OPL3 FM synthesizer support",
        - Answer 'y' if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4).
	  The PAS16 has an OPL3-compatible FM chip.

With PAS16 you can use two audio device files at the same time. /dev/dsp (and
/dev/audio) is connected to the 8/16 bit native codec and the /dev/dsp1 (and
/dev/audio1) is connected to the SB emulation (8 bit mono only).


The new stuff for 2.3.99 and later
============================================================================
The following configuration options from Documentation/Configure.help
are relevant to configuring the PAS16:

Sound card support
CONFIG_SOUND
  If you have a sound card in your computer, i.e. if it can say more
  than an occasional beep, say Y. Be sure to have all the information
  about your sound card and its configuration down (I/O port,
  interrupt and DMA channel), because you will be asked for it.

  You want to read the Sound-HOWTO, available from
  http://www.tldp.org/docs.html#howto . General information
  about the modular sound system is contained in the files
  Documentation/sound/oss/Introduction. The file
  Documentation/sound/oss/README.OSS contains some slightly outdated but
  still useful information as well.

OSS sound modules
CONFIG_SOUND_OSS
  OSS is the Open Sound System suite of sound card drivers. They make
  sound programming easier since they provide a common API. Say Y or M
  here (the module will be called sound.o) if you haven't found a
  driver for your sound card above, then pick your driver from the
  list below.

Persistent DMA buffers
CONFIG_SOUND_DMAP
  Linux can often have problems allocating DMA buffers for ISA sound
  cards on machines with more than 16MB of RAM. This is because ISA
  DMA buffers must exist below the 16MB boundary and it is quite
  possible that a large enough free block in this region cannot be
  found after the machine has been running for a while. If you say Y
  here the DMA buffers (64Kb) will be allocated at boot time and kept
  until the shutdown. This option is only useful if you said Y to
  "OSS sound modules", above. If you said M to "OSS sound modules"
  then you can get the persistent DMA buffer functionality by passing
  the command-line argument "dmabuf=1" to the sound.o module.

  Say y here for PAS16.

ProAudioSpectrum 16 support
CONFIG_SOUND_PAS
  Answer Y only if you have a Pro Audio Spectrum 16, ProAudio Studio
  16 or Logitech SoundMan 16 sound card. Don't answer Y if you have
  some other card made by Media Vision or Logitech since they are not
  PAS16 compatible.  It is not necessary to enable the  separate
  Sound Blaster support; it is included in the PAS driver.

  If you compile the driver into the kernel, you have to add
  "pas2=<io>,<irq>,<dma>,<dma2>,<sbio>,<sbirq>,<sbdma>,<sbdma2>
  to the kernel command line.

FM Synthesizer (YM3812/OPL-3) support
CONFIG_SOUND_YM3812
  Answer Y if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4).
  Answering Y is usually a safe and recommended choice, however some
  cards may have software (TSR) FM emulation. Enabling FM support with
  these cards may cause trouble (I don't currently know of any such
  cards, however).
  Please read the file Documentation/sound/oss/OPL3 if your card has an
  OPL3 chip.
  If you compile the driver into the kernel, you have to add
  "opl3=<io>" to the kernel command line.

  If you compile your drivers into the kernel, you MUST configure 
  OPL3 support as a module for PAS16 support to work properly.
  You can then get OPL3 functionality by issuing the command:
  insmod opl3
  In addition, you must either add the following line to 
  /etc/modprobe.conf:
  options opl3 io=0x388
  or else add the following line to /etc/lilo.conf:
  opl3=0x388


EXAMPLES
===================================================================
To use the PAS16 in my computer I have enabled the following sound
configuration options:

CONFIG_SOUND=y
CONFIG_SOUND_OSS=y
CONFIG_SOUND_TRACEINIT=y
CONFIG_SOUND_DMAP=y
CONFIG_SOUND_PAS=y
CONFIG_SOUND_SB=n
CONFIG_SOUND_YM3812=m

I have also included the following append line in /etc/lilo.conf:
append="pas2=0x388,10,3,-1,0x220,5,1,-1 sb=0x220,5,1,-1 opl3=0x388"

The io address of 0x388 is default configuration on the PAS16.  The
irq of 10 and dma of 3 may not match your installation.  The above 
configuration enables PAS16, 8-bit Soundblaster and OPL3
functionality.  If Soundblaster functionality is not desired, the
following line would be appropriate:
append="pas2=0x388,10,3,-1,0,-1,-1,-1 opl3=0x388"

If sound is built totally modular, the above options may be 
specified in /etc/modprobe.conf for pas2, sb and opl3
respectively. 
