* better
[mascara-docs.git] / i386 / linux-2.3.21 / Documentation / sound / Opti
blob34b0f433127d76c37cf84fcbf6603e29c6ba3ee9
1 Support for the OPTi 82C931 chip
2 --------------------------------
3 Note: parts of this README file apply also to other
4 cards that use the mad16 driver.
6 Some items in this README file are based on features
7 added to the sound driver after Linux-2.1.91 was out.
8 By the time of writing this I do not know which official
9 kernel release will include these features.
10 Please do not report inconsistencies on older Linux
11 kernels.
13 The OPTi 82C931 is supported in its non-PnP mode.
14 Usually you do not need to set jumpers, etc. The sound driver
15 will check the card status and if it is required it will
16 force the card into a mode in which it can be programmed.
18 If you have another OS installed on your computer it is recommended
19 that Linux and the other OS use the same resources.
21 Also, it is recommended that resources specified in /etc/conf.modules
22 and resources specified in /etc/isapnp.conf agree.
24 Compiling the sound driver
25 --------------------------
26 I highly recommend that you build a modularized sound driver.
27 This document does not cover a sound-driver which is built in
28 the kernel.
30 Sound card support should be enabled as a module (chose m).
31 Answer 'm' for  these items:
32   Generic OPL2/OPL3 FM synthesizer support                      (CONFIG_ADLIB)
33   Microsoft Sound System support                                (CONFIG_MSS)
34   Support for OPTi MAD16 and/or Mozart based cards              (CONFIG_MAD16)
35   FM synthesizer (YM3812/OPL-3) support                         (CONFIG_YM3812)
37 The configuration menu may ask for addresses, IRQ lines or DMA
38 channels. If the card is used as a module the module loading
39 options will override these values.
41 For the OPTi 931 you can answer 'n' to:
42   Support MIDI in older MAD16 based cards (requires SB)         (CONFIG_MAD16_OLDCARD)
43 If you do need MIDI support in a Mozart or C928 based card you
44 need to answer 'm' to the above question. In that case you will
45 also need to answer 'm' to:
46   '100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support' (CONFIG_SB)
48 Go on and compile your kernel and modules. Install the modules. Run depmod -a.
50 Using isapnptools
51 -----------------
52 In most systems with a PnP BIOS you do not need to use isapnp. The
53 initialization provided by the BIOS is sufficient for the driver
54 to pick up the card and continue initialization.
56 If that fails, or if you have other PnP cards, you need to use isapnp
57 to initialize the card.
58 This was tested with isapnptools-1.11 but I recommend that you use
59 isapnptools-1.13 (or newer). Run pnpdump to dump the information
60 about your PnP cards. Then edit the resulting file and select
61 the options of your choice. This file is normally installed as
62 /etc/isapnp.conf.
64 The driver has one limitation with respect to I/O port resources:
65 IO3 base must be 0x0E0C.  Although isapnp allows other ports, this
66 address is hard-coded into the driver.
68 Using kmod and autoloading the sound driver
69 -------------------------------------------
70 Comment: as of linux-2.1.90 kmod is replacing kerneld.
71 The config file '/etc/conf.modules' is used as before.
73 This is the sound part of my /etc/conf.modules file.
74 Following that I will explain each line.
76 alias mixer0 mad16
77 alias audio0 mad16
78 alias midi0  mad16
79 alias synth0 opl3
80 options sb mad16=1
81 options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0
82 options opl3 io=0x388
83 post-install mad16 /sbin/ad1848_mixer_reroute 14 8 15 3 16 6
85 If you have an MPU daughtercard or onboard MPU you will want to add to the
86 "options mad16" line - eg 
88 options mad16 irq=5 dma=0 dma16=3 io=0x530 mpu_io=0x330 mpu_irq=9
90 To set the I/O and IRQ of the MPU.
93 Explain:
95 alias mixer0 mad16
96 alias audio0 mad16
97 alias midi0  mad16
98 alias synth0 opl3
100 When any sound device is opened the kernel requests auto-loading
101 of char-major-14. There is a built-in alias that translates this
102 request to loading the main sound module. The main sound module
103 contains only common code which is needed by all the sound drivers,
104 and the driver for /dev/sndstat.
106 The sound module in its turn will request loading of a sub-driver
107 for mixer, audio, midi or synthesizer device. The first 3 are
108 supported by the mad16 driver. The synth device is supported
109 by the opl3 driver.
111 There is currently no way to autoload the sound device driver
112 if more than one card is installed.
114 options sb mad16=1
116 This is left for historical reasons. If you enable the
117 config option 'Support MIDI in older MAD16 based cards (requires SB)'
118 or if you use an older mad16 driver it will force loading of the
119 SoundBlaster driver. This option tells the SB driver not to look
120 for a SB card but to wait for the mad16 driver.
122 options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0
123 options opl3 io=0x388
125 post-install mad16 /sbin/ad1848_mixer_reroute 14 8 15 3 16 6
127 This sets resources and options for the mad16 and opl3 drivers.
128 I use two DMA channels (only one is required) to enable full duplex.
129 joystick=1 enables the joystick port. cdtype=0 disables the cd port.
130 You can also set mpu_io and mpu_irq in the mad16 options for the
131 uart401 driver.
133 This tells modprobe to run /sbin/ad1848_mixer_reroute after
134 mad16 is successfully loaded and initialized. The source
135 for ad1848_mixer_reroute is appended to the end of this readme
136 file. It is impossible for the sound driver to know the actual
137 connections to the mixer. The 3 inputs intended for cd, synth
138 and line-in are mapped to the generic inputs line1, line2 and
139 line3. This program reroutes these mixer channels to their
140 right names (note the right mapping depends on the actual sound
141 card that you use).
142 The numeric parameters mean:
143  14=line1 8=cd    - reroute line1 to the CD input.
144  15=line2 3=synth - reroute line2 to the synthesizer input.
145  16=line3 6=line  - reroute line3 to the line input.
146 For reference on other input names look at the file
147 /usr/include/linux/soundcard.h.
149 Using a joystick
150 -----------------
151 You must enable a joystick in the mad16 options. (also
152 in /etc/isapnp.conf if you use it).
153 Tested with regular analog joysticks.
155 A CDROM drive connected to the sound card
156 -----------------------------------------
157 The 82C931 chip has support only for secondary ATAPI cdrom.
158 (cdtype=8). Loading the mad16 driver resets the C931 chip
159 and if a cdrom was already mounted it may cause a complete
160 system hang. Do not use the sound card if you have an alternative.
161 If you do use the sound card it is important that you load
162 the mad16 driver (use "modprobe mad16" to prevent auto-unloading)
163 before the cdrom is accessed the first time.
165 Using the sound driver built-in to the kernel may help here, but...
166 Most new systems have a PnP BIOS and also two IDE controllers.
167 The IDE controller on the sound card may be needed only on older
168 systems (which have only one IDE controller) but these systems
169 also do not have a PnP BIOS - requiring isapnptools and a modularized
170 driver.
172 Known problems
173 --------------
174 1. See the section on "A CDROM drive connected to the sound card".
176 2. On my system the codec cannot capture companded sound samples.
177    (eg., recording from /dev/audio). When any companded capture is
178    requested I get stereo-16 bit samples instead. Playback of
179    companded samples works well. Apparently this problem is not common
180    to all C931 based cards. I do not know how to identify cards that
181    have this problem.
183 Source for ad1848_mixer_reroute.c
184 ---------------------------------
185 #include <stdio.h>
186 #include <fcntl.h>
187 #include <linux/soundcard.h>
189 static char *mixer_names[SOUND_MIXER_NRDEVICES] =
190         SOUND_DEVICE_LABELS;
193 main(int argc, char **argv) {
194         int val, from, to;
195         int i, fd;
197         fd = open("/dev/mixer", O_RDWR);
198         if(fd < 0) {
199                 perror("/dev/mixer");
200                 return 1;
201         }
203         for(i = 2; i < argc; i += 2) {
204                 from = atoi(argv[i-1]);
205                 to = atoi(argv[i]);
207                 if(to == SOUND_MIXER_NONE)
208                         fprintf(stderr, "%s: turning off mixer %s\n",
209                                 argv[0], mixer_names[to]);
210                 else
211                         fprintf(stderr, "%s: rerouting mixer %s to %s\n",
212                                 argv[0], mixer_names[from], mixer_names[to]);
214                 val = from << 8 | to;
216                 if(ioctl(fd, SOUND_MIXER_PRIVATE2, &val)) {
217                         perror("AD1848 mixer reroute");
218                         return 1;
219                 }
220         }
222         return 0;