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