diff options
Diffstat (limited to 'Documentation/sound/oss/Opti')
-rw-r--r-- | Documentation/sound/oss/Opti | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/Documentation/sound/oss/Opti b/Documentation/sound/oss/Opti new file mode 100644 index 000000000000..c15af3c07d46 --- /dev/null +++ b/Documentation/sound/oss/Opti | |||
@@ -0,0 +1,222 @@ | |||
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. | ||
5 | |||
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. | ||
12 | |||
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. | ||
17 | |||
18 | If you have another OS installed on your computer it is recommended | ||
19 | that Linux and the other OS use the same resources. | ||
20 | |||
21 | Also, it is recommended that resources specified in /etc/modprobe.conf | ||
22 | and resources specified in /etc/isapnp.conf agree. | ||
23 | |||
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. | ||
29 | |||
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_SOUND_ADLIB) | ||
33 | Microsoft Sound System support (CONFIG_SOUND_MSS) | ||
34 | Support for OPTi MAD16 and/or Mozart based cards (CONFIG_SOUND_MAD16) | ||
35 | FM synthesizer (YM3812/OPL-3) support (CONFIG_SOUND_YM3812) | ||
36 | |||
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. | ||
40 | |||
41 | For the OPTi 931 you can answer 'n' to: | ||
42 | Support MIDI in older MAD16 based cards (requires SB) (CONFIG_SOUND_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_SOUND_SB) | ||
47 | |||
48 | Go on and compile your kernel and modules. Install the modules. Run depmod -a. | ||
49 | |||
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. | ||
55 | |||
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. | ||
63 | |||
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. | ||
67 | |||
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/modprobe.conf' is used as before. | ||
72 | |||
73 | This is the sound part of my /etc/modprobe.conf file. | ||
74 | Following that I will explain each line. | ||
75 | |||
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 | install mad16 /sbin/modprobe -i mad16 && /sbin/ad1848_mixer_reroute 14 8 15 3 16 6 | ||
84 | |||
85 | If you have an MPU daughtercard or onboard MPU you will want to add to the | ||
86 | "options mad16" line - eg | ||
87 | |||
88 | options mad16 irq=5 dma=0 dma16=3 io=0x530 mpu_io=0x330 mpu_irq=9 | ||
89 | |||
90 | To set the I/O and IRQ of the MPU. | ||
91 | |||
92 | |||
93 | Explain: | ||
94 | |||
95 | alias mixer0 mad16 | ||
96 | alias audio0 mad16 | ||
97 | alias midi0 mad16 | ||
98 | alias synth0 opl3 | ||
99 | |||
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. | ||
103 | |||
104 | The sound module in its turn will request loading of a sub-driver | ||
105 | for mixer, audio, midi or synthesizer device. The first 3 are | ||
106 | supported by the mad16 driver. The synth device is supported | ||
107 | by the opl3 driver. | ||
108 | |||
109 | There is currently no way to autoload the sound device driver | ||
110 | if more than one card is installed. | ||
111 | |||
112 | options sb mad16=1 | ||
113 | |||
114 | This is left for historical reasons. If you enable the | ||
115 | config option 'Support MIDI in older MAD16 based cards (requires SB)' | ||
116 | or if you use an older mad16 driver it will force loading of the | ||
117 | SoundBlaster driver. This option tells the SB driver not to look | ||
118 | for a SB card but to wait for the mad16 driver. | ||
119 | |||
120 | options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0 | ||
121 | options opl3 io=0x388 | ||
122 | |||
123 | post-install mad16 /sbin/ad1848_mixer_reroute 14 8 15 3 16 6 | ||
124 | |||
125 | This sets resources and options for the mad16 and opl3 drivers. | ||
126 | I use two DMA channels (only one is required) to enable full duplex. | ||
127 | joystick=1 enables the joystick port. cdtype=0 disables the cd port. | ||
128 | You can also set mpu_io and mpu_irq in the mad16 options for the | ||
129 | uart401 driver. | ||
130 | |||
131 | This tells modprobe to run /sbin/ad1848_mixer_reroute after | ||
132 | mad16 is successfully loaded and initialized. The source | ||
133 | for ad1848_mixer_reroute is appended to the end of this readme | ||
134 | file. It is impossible for the sound driver to know the actual | ||
135 | connections to the mixer. The 3 inputs intended for cd, synth | ||
136 | and line-in are mapped to the generic inputs line1, line2 and | ||
137 | line3. This program reroutes these mixer channels to their | ||
138 | right names (note the right mapping depends on the actual sound | ||
139 | card that you use). | ||
140 | The numeric parameters mean: | ||
141 | 14=line1 8=cd - reroute line1 to the CD input. | ||
142 | 15=line2 3=synth - reroute line2 to the synthesizer input. | ||
143 | 16=line3 6=line - reroute line3 to the line input. | ||
144 | For reference on other input names look at the file | ||
145 | /usr/include/linux/soundcard.h. | ||
146 | |||
147 | Using a joystick | ||
148 | ----------------- | ||
149 | You must enable a joystick in the mad16 options. (also | ||
150 | in /etc/isapnp.conf if you use it). | ||
151 | Tested with regular analog joysticks. | ||
152 | |||
153 | A CDROM drive connected to the sound card | ||
154 | ----------------------------------------- | ||
155 | The 82C931 chip has support only for secondary ATAPI cdrom. | ||
156 | (cdtype=8). Loading the mad16 driver resets the C931 chip | ||
157 | and if a cdrom was already mounted it may cause a complete | ||
158 | system hang. Do not use the sound card if you have an alternative. | ||
159 | If you do use the sound card it is important that you load | ||
160 | the mad16 driver (use "modprobe mad16" to prevent auto-unloading) | ||
161 | before the cdrom is accessed the first time. | ||
162 | |||
163 | Using the sound driver built-in to the kernel may help here, but... | ||
164 | Most new systems have a PnP BIOS and also two IDE controllers. | ||
165 | The IDE controller on the sound card may be needed only on older | ||
166 | systems (which have only one IDE controller) but these systems | ||
167 | also do not have a PnP BIOS - requiring isapnptools and a modularized | ||
168 | driver. | ||
169 | |||
170 | Known problems | ||
171 | -------------- | ||
172 | 1. See the section on "A CDROM drive connected to the sound card". | ||
173 | |||
174 | 2. On my system the codec cannot capture companded sound samples. | ||
175 | (eg., recording from /dev/audio). When any companded capture is | ||
176 | requested I get stereo-16 bit samples instead. Playback of | ||
177 | companded samples works well. Apparently this problem is not common | ||
178 | to all C931 based cards. I do not know how to identify cards that | ||
179 | have this problem. | ||
180 | |||
181 | Source for ad1848_mixer_reroute.c | ||
182 | --------------------------------- | ||
183 | #include <stdio.h> | ||
184 | #include <fcntl.h> | ||
185 | #include <linux/soundcard.h> | ||
186 | |||
187 | static char *mixer_names[SOUND_MIXER_NRDEVICES] = | ||
188 | SOUND_DEVICE_LABELS; | ||
189 | |||
190 | int | ||
191 | main(int argc, char **argv) { | ||
192 | int val, from, to; | ||
193 | int i, fd; | ||
194 | |||
195 | fd = open("/dev/mixer", O_RDWR); | ||
196 | if(fd < 0) { | ||
197 | perror("/dev/mixer"); | ||
198 | return 1; | ||
199 | } | ||
200 | |||
201 | for(i = 2; i < argc; i += 2) { | ||
202 | from = atoi(argv[i-1]); | ||
203 | to = atoi(argv[i]); | ||
204 | |||
205 | if(to == SOUND_MIXER_NONE) | ||
206 | fprintf(stderr, "%s: turning off mixer %s\n", | ||
207 | argv[0], mixer_names[to]); | ||
208 | else | ||
209 | fprintf(stderr, "%s: rerouting mixer %s to %s\n", | ||
210 | argv[0], mixer_names[from], mixer_names[to]); | ||
211 | |||
212 | val = from << 8 | to; | ||
213 | |||
214 | if(ioctl(fd, SOUND_MIXER_PRIVATE2, &val)) { | ||
215 | perror("AD1848 mixer reroute"); | ||
216 | return 1; | ||
217 | } | ||
218 | } | ||
219 | |||
220 | return 0; | ||
221 | } | ||
222 | |||