mirror of https://gitee.com/openkylin/linux.git
211 lines
7.5 KiB
Plaintext
211 lines
7.5 KiB
Plaintext
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
|