Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |