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 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. 
