Based on kernel version 2.6.26. Page generated on 2008-07-16 21:13 EST.
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 }