1 |
1275 |
phoenix |
Documentation for the OPL3-SA2, SA3, and SAx driver (opl3sa2.o)
|
2 |
|
|
---------------------------------------------------------------
|
3 |
|
|
|
4 |
|
|
Scott Murray, scott@spiteful.org
|
5 |
|
|
January 7, 2001
|
6 |
|
|
|
7 |
|
|
NOTE: All trade-marked terms mentioned below are properties of their
|
8 |
|
|
respective owners.
|
9 |
|
|
|
10 |
|
|
|
11 |
|
|
Supported Devices
|
12 |
|
|
-----------------
|
13 |
|
|
|
14 |
|
|
This driver is for PnP soundcards based on the following Yamaha audio
|
15 |
|
|
controller chipsets:
|
16 |
|
|
|
17 |
|
|
YMF711 aka OPL3-SA2
|
18 |
|
|
YMF715 and YMF719 aka OPL3-SA3
|
19 |
|
|
|
20 |
|
|
Up until recently (December 2000), I'd thought the 719 to be a
|
21 |
|
|
different chipset, the OPL3-SAx. After an email exhange with
|
22 |
|
|
Yamaha, however, it turns out that the 719 is just a re-badged
|
23 |
|
|
715, and the chipsets are identical. The chipset detection code
|
24 |
|
|
has been updated to reflect this.
|
25 |
|
|
|
26 |
|
|
Anyways, all of these chipsets implement the following devices:
|
27 |
|
|
|
28 |
|
|
OPL3 FM synthesizer
|
29 |
|
|
Soundblaster Pro
|
30 |
|
|
Microsoft/Windows Sound System
|
31 |
|
|
MPU401 MIDI interface
|
32 |
|
|
|
33 |
|
|
Note that this driver uses the MSS device, and to my knowledge these
|
34 |
|
|
chipsets enforce an either/or situation with the Soundblaster Pro
|
35 |
|
|
device and the MSS device. Since the MSS device has better
|
36 |
|
|
capabilities, I have implemented the driver to use it.
|
37 |
|
|
|
38 |
|
|
|
39 |
|
|
Mixer Channels
|
40 |
|
|
--------------
|
41 |
|
|
|
42 |
|
|
Older versions of this driver (pre-December 2000) had two mixers,
|
43 |
|
|
an OPL3-SA2 or SA3 mixer and a MSS mixer. The OPL3-SA[23] mixer
|
44 |
|
|
device contained a superset of mixer channels consisting of its own
|
45 |
|
|
channels and all of the MSS mixer channels. To simplify the driver
|
46 |
|
|
considerably, and to partition functionality better, the OPL3-SA[23]
|
47 |
|
|
mixer device now contains has its own specific mixer channels. They
|
48 |
|
|
are:
|
49 |
|
|
|
50 |
|
|
Volume - Hardware master volume control
|
51 |
|
|
Bass - SA3 only, now supports left and right channels
|
52 |
|
|
Treble - SA3 only, now supports left and right channels
|
53 |
|
|
Microphone - Hardware microphone input volume control
|
54 |
|
|
Digital1 - Yamaha 3D enhancement "Wide" mixer
|
55 |
|
|
|
56 |
|
|
All other mixer channels (e.g. "PCM", "CD", etc.) now have to be
|
57 |
|
|
controlled via the "MS Sound System (CS4231)" mixer. To facilitate
|
58 |
|
|
this, the mixer device creation order has been switched so that
|
59 |
|
|
the MSS mixer is created first. This allows accessing the majority
|
60 |
|
|
of the useful mixer channels even via single mixer-aware tools
|
61 |
|
|
such as "aumix".
|
62 |
|
|
|
63 |
|
|
|
64 |
|
|
Plug 'n Play
|
65 |
|
|
------------
|
66 |
|
|
|
67 |
|
|
In previous kernels (2.2.x), some configuration was required to
|
68 |
|
|
get the driver to talk to the card. Being the new millennium and
|
69 |
|
|
all, the 2.4.x kernels now support auto-configuration if ISA PnP
|
70 |
|
|
support is configured in. Theoretically, the driver even supports
|
71 |
|
|
having more than one card in this case.
|
72 |
|
|
|
73 |
|
|
With the addition of PnP support to the driver, two new parameters
|
74 |
|
|
have been added to control it:
|
75 |
|
|
|
76 |
|
|
isapnp - set to 0 to disable ISA PnP card detection
|
77 |
|
|
|
78 |
|
|
multiple - set to 0 to disable multiple PnP card detection
|
79 |
|
|
|
80 |
|
|
|
81 |
|
|
Optional Parameters
|
82 |
|
|
-------------------
|
83 |
|
|
|
84 |
|
|
Recent (December 2000) additions to the driver (based on a patch
|
85 |
|
|
provided by Peter Englmaier) are two new parameters:
|
86 |
|
|
|
87 |
|
|
ymode - Set Yamaha 3D enhancement mode:
|
88 |
|
|
|
89 |
|
|
1 = Notebook PC (1) 3 cm speakers
|
90 |
|
|
2 = Notebook PC (2) 1.5 cm speakers
|
91 |
|
|
3 = Hi-Fi 16-38 cm speakers
|
92 |
|
|
|
93 |
|
|
loopback - Set A/D input source. Useful for echo cancellation:
|
94 |
|
|
|
95 |
|
|
1 = Mono output loopback
|
96 |
|
|
|
97 |
|
|
The ymode parameter has been tested and does work. The loopback
|
98 |
|
|
parameter, however, is untested. Any feedback on its usefulness
|
99 |
|
|
would be appreciated.
|
100 |
|
|
|
101 |
|
|
|
102 |
|
|
Manual Configuration
|
103 |
|
|
--------------------
|
104 |
|
|
|
105 |
|
|
If for some reason you decide not to compile ISA PnP support into
|
106 |
|
|
your kernel, or disabled the driver's usage of it by setting the
|
107 |
|
|
isapnp parameter as discussed above, then you will need to do some
|
108 |
|
|
manual configuration. There are two ways of doing this. The most
|
109 |
|
|
common is to use the isapnptools package to initialize the card, and
|
110 |
|
|
use the kernel module form of the sound subsystem and sound drivers.
|
111 |
|
|
Alternatively, some BIOS's allow manual configuration of installed
|
112 |
|
|
PnP devices in a BIOS menu, which should allow using the non-modular
|
113 |
|
|
sound drivers, i.e. built into the kernel.
|
114 |
|
|
|
115 |
|
|
I personally use isapnp and modules, and do not have access to a PnP
|
116 |
|
|
BIOS machine to test. If you have such a beast, configuring the
|
117 |
|
|
driver to be built into the kernel should just work (thanks to work
|
118 |
|
|
done by David Luyer ). You will still need
|
119 |
|
|
to specify settings, which can be done by adding:
|
120 |
|
|
|
121 |
|
|
opl3sa2=,,,,,
|
122 |
|
|
|
123 |
|
|
to the kernel command line. For example:
|
124 |
|
|
|
125 |
|
|
opl3sa2=0x370,5,0,1,0x530,0x330
|
126 |
|
|
|
127 |
|
|
If you are instead using the isapnp tools (as most people have been
|
128 |
|
|
before Linux 2.4.x), follow the directions in their documentation to
|
129 |
|
|
produce a configuration file. Here is the relevant excerpt I used to
|
130 |
|
|
use for my SA3 card from my isapnp.conf:
|
131 |
|
|
|
132 |
|
|
(CONFIGURE YMH0800/-1 (LD 0
|
133 |
|
|
|
134 |
|
|
# NOTE: IO 0 is for the unused SoundBlaster part of the chipset.
|
135 |
|
|
(IO 0 (BASE 0x0220))
|
136 |
|
|
(IO 1 (BASE 0x0530))
|
137 |
|
|
(IO 2 (BASE 0x0388))
|
138 |
|
|
(IO 3 (BASE 0x0330))
|
139 |
|
|
(IO 4 (BASE 0x0370))
|
140 |
|
|
(INT 0 (IRQ 5 (MODE +E)))
|
141 |
|
|
(DMA 0 (CHANNEL 0))
|
142 |
|
|
(DMA 1 (CHANNEL 1))
|
143 |
|
|
|
144 |
|
|
Here, note that:
|
145 |
|
|
|
146 |
|
|
Port Acceptable Range Purpose
|
147 |
|
|
---- ---------------- -------
|
148 |
|
|
IO 0 0x0220 - 0x0280 SB base address, unused.
|
149 |
|
|
IO 1 0x0530 - 0x0F48 MSS base address
|
150 |
|
|
IO 2 0x0388 - 0x03F8 OPL3 base address
|
151 |
|
|
IO 3 0x0300 - 0x0334 MPU base address
|
152 |
|
|
IO 4 0x0100 - 0x0FFE card's own base address for its control I/O ports
|
153 |
|
|
|
154 |
|
|
The IRQ and DMA values can be any that are considered acceptable for a
|
155 |
|
|
MSS. Assuming you've got isapnp all happy, then you should be able to
|
156 |
|
|
do something like the following (which matches up with the isapnp
|
157 |
|
|
configuration above):
|
158 |
|
|
|
159 |
|
|
modprobe mpu401
|
160 |
|
|
modprobe ad1848
|
161 |
|
|
modprobe opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1
|
162 |
|
|
modprobe opl3 io=0x388
|
163 |
|
|
|
164 |
|
|
See the section "Automatic Module Loading" below for how to set up
|
165 |
|
|
/etc/modules.conf to automate this.
|
166 |
|
|
|
167 |
|
|
An important thing to remember that the opl3sa2 module's io argument is
|
168 |
|
|
for it's own control port, which handles the card's master mixer for
|
169 |
|
|
volume (on all cards), and bass and treble (on SA3 cards).
|
170 |
|
|
|
171 |
|
|
|
172 |
|
|
Troubleshooting
|
173 |
|
|
---------------
|
174 |
|
|
|
175 |
|
|
If all goes well and you see no error messages, you should be able to
|
176 |
|
|
start using the sound capabilities of your system. If you get an
|
177 |
|
|
error message while trying to insert the opl3sa2 module, then make
|
178 |
|
|
sure that the values of the various arguments match what you specified
|
179 |
|
|
in your isapnp configuration file, and that there is no conflict with
|
180 |
|
|
another device for an I/O port or interrupt. Checking the contents of
|
181 |
|
|
/proc/ioports and /proc/interrupts can be useful to see if you're
|
182 |
|
|
butting heads with another device.
|
183 |
|
|
|
184 |
|
|
If you still cannot get the module to load, look at the contents of
|
185 |
|
|
your system log file, usually /var/log/messages. If you see the
|
186 |
|
|
message "opl3sa2: Unknown Yamaha audio controller version", then you
|
187 |
|
|
have a different chipset version than I've encountered so far. Look
|
188 |
|
|
for all messages in the log file that start with "opl3sa2: " and see
|
189 |
|
|
if they provide any clues. If you do not see the chipset version
|
190 |
|
|
message, and none of the other messages present in the system log are
|
191 |
|
|
helpful, email me some details and I'll try my best to help.
|
192 |
|
|
|
193 |
|
|
|
194 |
|
|
Automatic Module Loading
|
195 |
|
|
------------------------
|
196 |
|
|
|
197 |
|
|
Lastly, if you're using modules and want to set up automatic module
|
198 |
|
|
loading with kmod, the kernel module loader, here is the section I
|
199 |
|
|
currently use in my modules.conf file:
|
200 |
|
|
|
201 |
|
|
# Sound
|
202 |
|
|
alias sound-slot-0 opl3sa2
|
203 |
|
|
options opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=7 dma=0 dma2=3
|
204 |
|
|
options opl3 io=0x388
|
205 |
|
|
|
206 |
|
|
That's all it currently takes to get an OPL3-SA3 card working on my
|
207 |
|
|
system. Once again, if you have any other problems, email me at the
|
208 |
|
|
address listed above.
|
209 |
|
|
|
210 |
|
|
Scott
|