Documentation for the OPL3-SA2, SA3, and SAx driver (opl3sa2.o)
---------------------------------------------------------------

Scott Murray, scott@spiteful.org
January 7, 2001

NOTE: All trade-marked terms mentioned below are properties of their
      respective owners.


Supported Devices
-----------------

This driver is for PnP soundcards based on the following Yamaha audio
controller chipsets:

YMF711 aka OPL3-SA2
YMF715 and YMF719 aka OPL3-SA3

Up until recently (December 2000), I'd thought the 719 to be a
different chipset, the OPL3-SAx.  After an email exhange with
Yamaha, however, it turns out that the 719 is just a re-badged
715, and the chipsets are identical.  The chipset detection code
has been updated to reflect this.

Anyways, all of these chipsets implement the following devices:

OPL3 FM synthesizer
Soundblaster Pro
Microsoft/Windows Sound System
MPU401 MIDI interface

Note that this driver uses the MSS device, and to my knowledge these
chipsets enforce an either/or situation with the Soundblaster Pro
device and the MSS device.  Since the MSS device has better
capabilities, I have implemented the driver to use it.


Mixer Channels
--------------

Older versions of this driver (pre-December 2000) had two mixers,
an OPL3-SA2 or SA3 mixer and a MSS mixer.  The OPL3-SA[23] mixer
device contained a superset of mixer channels consisting of its own
channels and all of the MSS mixer channels.  To simplify the driver
considerably, and to partition functionality better, the OPL3-SA[23]
mixer device now contains has its own specific mixer channels.  They
are:

Volume     - Hardware master volume control
Bass       - SA3 only, now supports left and right channels
Treble     - SA3 only, now supports left and right channels
Microphone - Hardware microphone input volume control
Digital1   - Yamaha 3D enhancement "Wide" mixer

All other mixer channels (e.g. "PCM", "CD", etc.) now have to be
controlled via the "MS Sound System (CS4231)" mixer.  To facilitate
this, the mixer device creation order has been switched so that
the MSS mixer is created first.  This allows accessing the majority
of the useful mixer channels even via single mixer-aware tools
such as "aumix".


Plug 'n Play
------------

In previous kernels (2.2.x), some configuration was required to
get the driver to talk to the card.  Being the new millennium and
all, the 2.4.x kernels now support auto-configuration if ISA PnP
support is configured in.  Theoretically, the driver even supports
having more than one card in this case.

With the addition of PnP support to the driver, two new parameters
have been added to control it:

isapnp   - set to 0 to disable ISA PnP card detection

multiple - set to 0 to disable multiple PnP card detection


Optional Parameters
-------------------

Recent (December 2000) additions to the driver (based on a patch
provided by Peter Englmaier) are two new parameters:

ymode -    Set Yamaha 3D enhancement mode:
           0 = Desktop/Normal  5-12 cm speakers
           1 = Notebook PC (1) 3 cm speakers
           2 = Notebook PC (2) 1.5 cm speakers
           3 = Hi-Fi           16-38 cm speakers

loopback - Set A/D input source. Useful for echo cancellation:
           0 = Mic Right channel (default)
           1 = Mono output loopback

The ymode parameter has been tested and does work.  The loopback
parameter, however, is untested.  Any feedback on its usefulness
would be appreciated.


Manual Configuration
--------------------

If for some reason you decide not to compile ISA PnP support into
your kernel, or disabled the driver's usage of it by setting the
isapnp parameter as discussed above, then you will need to do some
manual configuration.  There are two ways of doing this.  The most
common is to use the isapnptools package to initialize the card, and
use the kernel module form of the sound subsystem and sound drivers.
Alternatively, some BIOS's allow manual configuration of installed
PnP devices in a BIOS menu, which should allow using the non-modular
sound drivers, i.e. built into the kernel.

I personally use isapnp and modules, and do not have access to a PnP
BIOS machine to test.  If you have such a beast, configuring the
driver to be built into the kernel should just work (thanks to work
done by David Luyer <luyer@ucs.uwa.edu.au>).  You will still need
to specify settings, which can be done by adding:

opl3sa2=<io>,<irq>,<dma>,<dma2>,<mssio>,<mpuio>

to the kernel command line.  For example:

opl3sa2=0x370,5,0,1,0x530,0x330

If you are instead using the isapnp tools (as most people have been
before Linux 2.4.x), follow the directions in their documentation to
produce a configuration file.  Here is the relevant excerpt I used to
use for my SA3 card from my isapnp.conf:

(CONFIGURE YMH0800/-1 (LD 0

# NOTE: IO 0 is for the unused SoundBlaster part of the chipset.
(IO 0 (BASE 0x0220))
(IO 1 (BASE 0x0530))
(IO 2 (BASE 0x0388))
(IO 3 (BASE 0x0330))
(IO 4 (BASE 0x0370))
(INT 0 (IRQ 5 (MODE +E)))
(DMA 0 (CHANNEL 0))
(DMA 1 (CHANNEL 1))

Here, note that:

Port  Acceptable Range  Purpose
----  ----------------  -------
IO 0  0x0220 - 0x0280   SB base address, unused.
IO 1  0x0530 - 0x0F48   MSS base address
IO 2  0x0388 - 0x03F8   OPL3 base address
IO 3  0x0300 - 0x0334   MPU base address
IO 4  0x0100 - 0x0FFE   card's own base address for its control I/O ports

The IRQ and DMA values can be any that are considered acceptable for a
MSS.  Assuming you've got isapnp all happy, then you should be able to
do something like the following (which matches up with the isapnp
configuration above):

modprobe mpu401
modprobe ad1848
modprobe opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1
modprobe opl3 io=0x388

See the section "Automatic Module Loading" below for how to set up
/etc/modprobe.conf to automate this.

An important thing to remember that the opl3sa2 module's io argument is
for it's own control port, which handles the card's master mixer for
volume (on all cards), and bass and treble (on SA3 cards).


Troubleshooting
---------------

If all goes well and you see no error messages, you should be able to
start using the sound capabilities of your system.  If you get an
error message while trying to insert the opl3sa2 module, then make
sure that the values of the various arguments match what you specified
in your isapnp configuration file, and that there is no conflict with
another device for an I/O port or interrupt.  Checking the contents of
/proc/ioports and /proc/interrupts can be useful to see if you're
butting heads with another device.

If you still cannot get the module to load, look at the contents of
your system log file, usually /var/log/messages.  If you see the
message "opl3sa2: Unknown Yamaha audio controller version", then you
have a different chipset version than I've encountered so far.  Look
for all messages in the log file that start with "opl3sa2: " and see
if they provide any clues.  If you do not see the chipset version
message, and none of the other messages present in the system log are
helpful, email me some details and I'll try my best to help.


Automatic Module Loading
------------------------

Lastly, if you're using modules and want to set up automatic module
loading with kmod, the kernel module loader, here is the section I
currently use in my modprobe.conf file:

# Sound
alias sound-slot-0 opl3sa2
options opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=7 dma=0 dma2=3
options opl3 io=0x388

That's all it currently takes to get an OPL3-SA3 card working on my
system.  Once again, if you have any other problems, email me at the
address listed above.

Scott
