Browse Source

[PATCH] The scheduled removal of some OSS drivers

This patch contains the scheduled removal of OSS drivers that:
- have ALSA drivers for the same hardware without known regressions and
- whose Kconfig options have been removed in 2.6.17.

[ build fix]
Signed-off-by: Adrian Bunk <>
Signed-off-by: Michal Piotrowski <>
Cc: David Woodhouse <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>
Adrian Bunk 14 years ago
committed by Linus Torvalds
81 changed files with 6 additions and 62072 deletions
  1. +0
  2. +0
  3. +0
  4. +0
  5. +0
  6. +0
  7. +0
  8. +0
  9. +0
  10. +0
  11. +0
  12. +0
  13. +0
  14. +0
  15. +0
  16. +0
  17. +0
  18. +0
  19. +0
  20. +0
  21. +0
  22. +1
  23. +0
  24. +0
  25. +0
  26. +0
  27. +2
  28. +0
  29. +0
  30. +0
  31. +0
  32. +0
  33. +0
  34. +0
  35. +0
  36. +0
  37. +0
  38. +0
  39. +0
  40. +0
  41. +0
  42. +0
  43. +0
  44. +0
  45. +0
  46. +0
  47. +0
  48. +0
  49. +0
  50. +0
  51. +0
  52. +0
  53. +0
  54. +0
  55. +0
  56. +0
  57. +0
  58. +0
  59. +0
  60. +0
  61. +0
  62. +0
  63. +1
  64. +0
  65. +0
  66. +0
  67. +0
  68. +0
  69. +0
  70. +0
  71. +0
  72. +0
  73. +2
  74. +0
  75. +0
  76. +0
  77. +0
  78. +0
  79. +0
  80. +0
  81. +0

+ 0
- 8
Documentation/feature-removal-schedule.txt View File

@ -29,14 +29,6 @@ Who: Adrian Bunk <>
What: drivers that were depending on OBSOLETE_OSS_DRIVER
(config options already removed)
When: before 2.6.19
Why: OSS drivers with ALSA replacements
Who: Adrian Bunk <>
What: raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
When: November 2006
Why: Deprecated in favour of the new ioctl-based rawiso interface, which is

+ 0
- 25
Documentation/kernel-parameters.txt View File

@ -289,9 +289,6 @@ and is between 256 and 4096 characters. It is defined in the file
autotest [IA64]
awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth
Format: <io>,<memsize>,<isapnp>
aztcd= [HW,CD] Aztech CD268 CDROM driver
Format: <io>,0x79 (?)
@ -536,10 +533,6 @@ and is between 256 and 4096 characters. It is defined in the file
Default value is 0.
Value can be changed at runtime via /selinux/enforce.
es1370= [HW,OSS]
Format: <lineout>[,<micbias>]
See also header of sound/oss/es1370.c.
es1371= [HW,OSS]
Format: <spdif>,[<nomix>,[<amplifier>]]
See also header of sound/oss/es1371.c.
@ -580,9 +573,6 @@ and is between 256 and 4096 characters. It is defined in the file
gscd= [HW,CD]
Format: <io>
gus= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma16>
gvp11= [HW,SCSI]
hashdist= [KNL,NUMA] Large hashes allocated during boot
@ -841,12 +831,6 @@ and is between 256 and 4096 characters. It is defined in the file
(machvec) in a generic kernel.
Example: machvec=hpzx1_swiotlb
mad16= [HW,OSS] Format:
maui= [HW,OSS]
Format: <io>,<irq>
max_loop= [LOOP] Maximum number of loopback devices that can
be mounted
Format: <1-256>
@ -1114,9 +1098,6 @@ and is between 256 and 4096 characters. It is defined in the file
opl3= [HW,OSS]
Format: <io>
opl3sa= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq>
opl3sa2= [HW,OSS] Format:
@ -1451,9 +1432,6 @@ and is between 256 and 4096 characters. It is defined in the file
sg_def_reserved_size= [SCSI]
sgalaxy= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>,<sgbase>
shapers= [NET]
Maximal number of shapers.
@ -1594,9 +1572,6 @@ and is between 256 and 4096 characters. It is defined in the file
snd-ymfpci= [HW,ALSA]
sonicvibes= [HW,OSS]
Format: <reverb>
sonycd535= [HW,CD]
Format: <io>[,<irq>]

+ 0
- 76
Documentation/sound/oss/AWE32 View File

@ -1,76 +0,0 @@
Installing and using Creative AWE midi sound under Linux.
This documentation is devoted to the Creative Sound Blaster AWE32, AWE64 and
1) Make sure you have an ORIGINAL Creative SB32, AWE32 or AWE64 card. This
is important, because the driver works only with real Creative cards.
2) The first thing you need to do is re-compile your kernel with support for
your sound card. Run your favourite tool to configure the kernel and when
you get to the "Sound" menu you should enable support for the following:
Sound card support,
OSS sound modules,
100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support,
AWE32 synth
If your card is "Plug and Play" you will also need to enable these two
options, found under the "Plug and Play configuration" menu:
Plug and Play support
ISA Plug and Play support
Now compile and install the kernel in normal fashion. If you don't know
how to do this you can find instructions for this in the README file
located in the root directory of the kernel source.
3) Before you can start playing midi files you will have to load a sound
bank file. The utility needed for doing this is called "sfxload", and it
is one of the utilities found in a package called "awesfx". If this
package is not available in your distribution you can download the AWE
snapshot from Creative Labs Open Source website:
Once you have unpacked the AWE snapshot you will see a "awesfx"
directory. Follow the instructions in awesfx/docs/INSTALL to install the
utilities in this package. After doing this, sfxload should be installed
To enable AWE general midi synthesis you should also get the sound bank
file for general midi from:
Copy it to a directory of your choice, and unpack it there.
4) Edit /etc/modprobe.conf, and insert the following lines at the end of the
alias sound-slot-0 sb
alias sound-service-0-1 awe_wave
install awe_wave /sbin/modprobe --first-time -i awe_wave && /usr/local/bin/sfxload PATH_TO_SOUND_BANK_FILE
You will of course have to change "PATH_TO_SOUND_BANK_FILE" to the full
path of the sound bank file. That will enable the Sound Blaster and AWE
wave synthesis. To play midi files you should get one of these programs if
you don't already have them:
AWEMidi Player (drvmidi) Included in the previously mentioned AWE
You will probably have to pass the "-e" switch to playmidi to have it use
your midi device. drvmidi should work without switches.
If something goes wrong please e-mail me. All comments and suggestions are
Yaroslav Rosomakho (
Last Updated: Feb 3 2001

+ 0
- 85
Documentation/sound/oss/CMI8338 View File

@ -1,85 +0,0 @@
Audio driver for CM8338/CM8738 chips by Chen-Li Tien
C-Media CMI8338
C-Media CMI8738
On-board C-Media chips
1. Backup the and Makefile in the sound driver directory
The provide help when you config driver in step
4, please backup the original one (/usr/src/linux/Document) and
copy this file.
The cmpci is document for the driver in detail, please copy it
to /usr/src/linux/Document/sound so you can refer it. Backup if
there is already one.
2. Extract the tar file by 'tar xvzf cmpci-xx.tar.gz' in the above
3. Change directory to /usr/src/linux
4. Config cm8338 driver by 'make menuconfig', 'make config' or
'make xconfig' command.
5. Please select Sound Card (CONFIG_SOUND=m) support and CMPCI
driver (CONFIG_SOUND_CMPCI=m) as modules. Resident mode not tested.
For driver option, please refer 'DRIVER PARAMETER'
6. Compile the kernel if necessary.
7. Compile the modules by 'make modules'.
8. Install the modules by 'make modules_install'
1. Before first time to run the driver, create module dependency by
'depmod -a'
2. To install the driver manually, enter 'modprobe cmpci'.
3. Driver installation for various distributions:
a. Slackware 4.0
Add the 'modprobe cmpci' command in your /etc/rc.d/rc.modules you can start the driver automatically each time booting.
b. Caldera OpenLinux 2.2
Use LISA to load the cmpci module.
c. RedHat 6.0 and S.u.S.E. 6.1
Add following command in /etc/conf.modules:
alias sound cmpci
also visit for installation instruction.
Some functions for the cm8738 can be configured in Kernel Configuration
or modules parameters. Set these parameters to 1 to enable.
mpuio: I/O ports base for MPU-401, 0 if disabled.
fmio: I/O ports base for OPL-3, 0 if disabled.
spdif_inverse:Inverse the S/PDIF-in signal, this depends on your
spdif_loop: Enable S/PDIF loop, this route S/PDIF-in to S/PDIF-out
speakers: Number of speakers used.
use_line_as_rear:Enable this if you want to use line-in as
use_line_as_bass:Enable this if you want to use line-in as
joystick: Enable joystick. You will need to install Linux joystick

+ 0
- 134
Documentation/sound/oss/INSTALL.awe View File

@ -1,134 +0,0 @@
Takashi Iwai <>
* Attention to SB-PnP Card Users
If you're using PnP cards, the initialization of PnP is required
before loading this driver. You have now three options:
1. Use isapnptools.
2. Use in-kernel isapnp support.
3. Initialize PnP on DOS/Windows, then boot linux by loadlin.
In this document, only the case 1 case is treated.
* Installation on Red Hat 5.0 Sound Driver
Please use under RedHat5.0 directory.
DO NOT USE below.
See INSTALL.RH for more details.
* Installation/Update by Shell Script
1. Become root
% su
2. If you have never configured the kernel tree yet, run make config
once (to make dependencies and symlinks).
# cd /usr/src/linux
# make xconfig
3. Run script
# sh ./
4. Configure your kernel
(for Linux 2.[01].x user)
# cd /usr/src/linux
# make xconfig (or make menuconfig)
(for Linux 1.2.x user)
# cd /usr/src/linux
# make config
Answer YES to both "lowlevel drivers" and "AWE32 wave synth" items
in Sound menu. ("lowlevel drivers" will appear only in 2.x
5. Make your kernel (and modules), and install them as usual.
5a. make kernel image
# make zImage
5b. make modules and install them
# make modules && make modules_install
5c. If you're using lilo, copy the kernel image and run lilo.
Otherwise, copy the kernel image to suitable directory or
media for your system.
6. Reboot the kernel if necessary.
- If you updated only the modules, you don't have to reboot
the system. Just remove the old sound modules here.
# rmmod sound.o (linux-2.0 or OSS/Free)
# rmmod awe_wave.o (linux-2.1)
7. If your AWE card is a PnP and not initialized yet, you'll have to
do it by isapnp tools. Otherwise, skip to 8.
This section described only a brief explanation. For more
details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ.
7a. If you have no isapnp.conf file, generate it by pnpdump.
Otherwise, skip to 7d.
# pnpdump > /etc/isapnp.conf
7b. Edit isapnp.conf file. Comment out the appropriate
lines containing desirable I/O ports, DMA and IRQs.
Don't forget to enable (ACT Y) line.
7c. Add two i/o ports (0xA20 and 0xE20) in WaveTable part.
(CONFIGURE CTL0048/58128 (LD 2
# ANSI string -->WaveTable<--
(IO 0 (BASE 0x0620))
(IO 1 (BASE 0x0A20))
(IO 2 (BASE 0x0E20))
7d. Load the config file.
CAUTION: This will reset all PnP cards!
# isapnp /etc/isapnp.conf
8. Load the sound module (if you configured it as a module):
for 2.0 kernel or OSS/Free monolithic module:
# modprobe sound.o
for 2.1 kernel:
# modprobe sound
# insmod uart401
# insmod sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330
(These values depend on your settings.)
# insmod awe_wave
(Be sure to load awe_wave after sb!)
See Documentation/sound/oss/AWE32 for
more details.
9. (only for obsolete systems) If you don't have /dev/sequencer
device file, make it according to Readme.linux file on
/usr/src/linux/drivers/sound. (Run a shell script included in
that file). <-- This file no longer exists in the recent kernels!
10. OK, load your own soundfont file, and enjoy MIDI!
% sfxload synthgm.sbk
% drvmidi foo.mid
11. For more advanced use (eg. dynamic loading, virtual bank and
etc.), please read the awedrv FAQ or the instructions in awesfx
and awemidi packages.
Good luck!

+ 0
- 56
Documentation/sound/oss/MAD16 View File

@ -1,56 +0,0 @@
(This recipe has been edited to update the configuration symbols,
and change over to modprobe.conf for 2.6)
From: Shaw Carruthers <>
I have been using mad16 sound for some time now with no problems, current
kernel 2.1.89
lsmod shows:
mad16 5176 0
sb 22044 0 [mad16]
uart401 5576 0 [mad16 sb]
ad1848 14176 1 [mad16]
sound 61928 0 [mad16 sb uart401 ad1848]
.config has:
modprobe.conf has:
alias char-major-14-* mad16
options sb mad16=1
options mad16 io=0x530 irq=7 dma=0 dma16=1 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
To get the built in mixer to work this needs to be:
options adlib_card io=0x388 # FM synthesizer
options sb mad16=1
options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=816 mpu_irq=5 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
The addition of the "mpu_io=816 mpu_irq=5" to the mad16 options line is
The mad16 module in addition supports the following options:
option: meaning: default:
joystick=0,1 disabled, enabled disabled
cdtype=0x00,0x02,0x04, disabled, Sony CDU31A, disabled
0x06,0x08,0x0a Mitsumi, Panasonic,
Secondary IDE, Primary IDE
cdport=0x340,0x320, 0x340
cdirq=0,3,5,7,9,10,11 disabled, IRQ3, ... disabled
cddma=0,5,6,7 disabled, DMA5, ... DMA5 for Mitsumi or IDE
cddma=0,1,2,3 disabled, DMA1, ... DMA3 for Sony or Panasonic
opl4=0,1 OPL3, OPL4 OPL3
for more details see linux/drivers/sound/mad16.c
Rui Sousa

+ 0
- 123
Documentation/sound/oss/Maestro View File

@ -1,123 +0,0 @@
An OSS/Lite Driver for the ESS Maestro family of sound cards
Zach Brown, December 1999
Driver Status and Availability
The most recent version of this driver will hopefully always be available at
I will try and maintain the most recent stable version of the driver
in both the stable and development kernel lines.
ESS Maestro Chip Family
There are 3 main variants of the ESS Maestro PCI sound chip. The first
is the Maestro 1. It was originally produced by Platform Tech as the
'AGOGO'. It can be recognized by Platform Tech's PCI ID 0x1285 with
0x0100 as the device ID. It was put on some sound boards and a few laptops.
ESS bought the design and cleaned it up as the Maestro 2. This starts
their marking with the ESS vendor ID 0x125D and the 'year' device IDs.
The Maestro 2 claims 0x1968 while the Maestro 2e has 0x1978.
The various families of Maestro are mostly identical as far as this
driver is concerned. It doesn't touch the DSP parts that differ (though
it could for FM synthesis).
Driver OSS Behavior
This OSS driver exports /dev/mixer and /dev/dsp to applications, which
mostly adhere to the OSS spec. This driver doesn't register itself
with /dev/sndstat, so don't expect information to appear there.
The /dev/dsp device exported behaves almost as expected. Playback is
supported in all the various lovely formats. 8/16bit stereo/mono from
8khz to 48khz, and mmap()ing for playback behaves. Capture/recording
is limited due to oddities with the Maestro hardware. One can only
record in 16bit stereo. For recording the maestro uses non interleaved
stereo buffers so that mmap()ing the incoming data does not result in
a ring buffer of LRLR data. mmap()ing of the read buffers is therefore
disallowed until this can be cleaned up.
/dev/mixer is an interface to the AC'97 codec on the Maestro. It is
worth noting that there are a variety of AC'97s that can be wired to
the Maestro. Which is used is entirely up to the hardware implementor.
This should only be visible to the user by the presence, or lack, of
'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them.
The driver doesn't support MIDI or FM playback at the moment. Typically
the Maestro is wired to an MPU MIDI chip, but some hardware implementations
don't. We need to assemble a white list of hardware implementations that
have MIDI wired properly before we can claim to support it safely.
Compiling and Installing
With the drivers inclusion into the kernel, compiling and installing
is the same as most OSS/Lite modular sound drivers. Compilation
of the driver is enabled through the CONFIG_SOUND_MAESTRO variable
in the config system.
It may be modular or statically linked. If it is modular it should be
installed with the rest of the modules for the kernel on the system.
Typically this will be in /lib/modules/ somewhere. 'alias sound maestro'
should also be added to your module configs (typically /etc/conf.modules)
if you're using modular OSS/Lite sound and want to default to using a
maestro chip.
As this is a PCI device, the module does not need to be informed of
any IO or IRQ resources it should use, it devines these from the
system. Sometimes, on sucky PCs, the BIOS fails to allocated resources
for the maestro. This will result in a message like:
maestro: PCI subsystem reports IRQ 0, this might not be correct.
from the kernel. Should this happen the sound chip most likely will
not operate correctly. To solve this one has to dig through their BIOS
(typically entered by hitting a hot key at boot time) and figure out
what magic needs to happen so that the BIOS will reward the maestro with
an IRQ. This operation is incredibly system specific, so you're on your
own. Sometimes the magic lies in 'PNP Capable Operating System' settings.
There are very few options to the driver. One is 'debug' which will
tell the driver to print minimal debugging information as it runs. This
can be collected with 'dmesg' or through the klogd daemon.
The other, more interesting option, is 'dsps_order'. Typically at
install time the driver will only register one available /dev/dsp device
for its use. The 'dsps_order' module parameter allows for more devices
to be allocated, as a power of two. Up to 4 devices can be registered
( dsps_order=2 ). These devices act as fully distinct units and use
separate channels in the maestro.
Power Management
As of version 0.14, this driver has a minimal understanding of PCI
Power Management. If it finds a valid power management capability
on the PCI device it will attempt to use the power management
functions of the maestro. It will only do this on Maestro 2Es and
only on machines that are known to function well. You can
force the use of power management by setting the 'use_pm' module
option to 1, or can disable it entirely by setting it to 0.
When using power management, the driver does a few things
differently. It will keep the chip in a lower power mode
when the module is inserted but /dev/dsp is not open. This
allows the mixer to function but turns off the clocks
on other parts of the chip. When /dev/dsp is opened the chip
is brought into full power mode, and brought back down
when it is closed. It also powers down the chip entirely
when the module is removed or the machine is shutdown. This
can have nonobvious consequences. CD audio may not work
after a power managing driver is removed. Also, software that
doesn't understand power management may not be able to talk
to the powered down chip until the machine goes through a hard
reboot to bring it back.
.. more details ..
drivers/sound/maestro.c contains comments that hopefully explain
the maestro implementation.

+ 0
- 92
Documentation/sound/oss/Maestro3 View File

@ -1,92 +0,0 @@
An OSS/Lite Driver for the ESS Maestro3 family of sound chips
Zach Brown, January 2001
Driver Status and Availability
The most recent version of this driver will hopefully always be available at
I will try and maintain the most recent stable version of the driver
in both the stable and development kernel lines.
Historically I've sucked pretty hard at actually doing that, however.
ESS Maestro3 Chip Family
The 'Maestro3' is much like the Maestro2 chip. The noted improvement
is the removal of the silicon in the '2' that did PCM mixing. All that
work is now done through a custom DSP called the ASSP, the Asynchronus
Specific Signal Processor.
The 'Allegro' is a baby version of the Maestro3. I'm not entirely clear
on the extent of the differences, but the driver supports them both :)
The 'Allegro' shows up as PCI ID 0x1988 and the Maestro3 as 0x1998,
both under ESS's vendor ID of 0x125D. The Maestro3 can also show up as
0x199a when hardware strapping is used.
The chip can also act as a multi function device. The modem IDs follow
the audio multimedia device IDs. (so the modem part of an Allegro shows
up as 0x1989)
Driver OSS Behavior
This OSS driver exports /dev/mixer and /dev/dsp to applications, which
mostly adhere to the OSS spec. This driver doesn't register itself
with /dev/sndstat, so don't expect information to appear there.
The /dev/dsp device exported behaves as expected. Playback is
supported in all the various lovely formats. 8/16bit stereo/mono from
8khz to 48khz, with both read()/write(), and mmap().
/dev/mixer is an interface to the AC'97 codec on the Maestro3. It is
worth noting that there are a variety of AC'97s that can be wired to
the Maestro3. Which is used is entirely up to the hardware implementor.
This should only be visible to the user by the presence, or lack, of
'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them.
The Allegro has an onchip AC'97.
The driver doesn't support MIDI or FM playback at the moment.
Compiling and Installing
With the drivers inclusion into the kernel, compiling and installing
is the same as most OSS/Lite modular sound drivers. Compilation
of the driver is enabled through the CONFIG_SOUND_MAESTRO3 variable
in the config system.
It may be modular or statically linked. If it is modular it should be
installed with the rest of the modules for the kernel on the system.
Typically this will be in /lib/modules/ somewhere. 'alias sound-slot-0
maestro3' should also be added to your module configs (typically
/etc/modprobe.conf) if you're using modular OSS/Lite sound and want to
default to using a maestro3 chip.
There are very few options to the driver. One is 'debug' which will
tell the driver to print minimal debugging information as it runs. This
can be collected with 'dmesg' or through the klogd daemon.
One is 'external_amp', which tells the driver to attempt to enable
an external amplifier. This defaults to '1', you can tell the driver
not to bother enabling such an amplifier by setting it to '0'.
And the last is 'gpio_pin', which tells the driver which GPIO pin number
the external amp uses (0-15), The Allegro uses 8 by default, all others 1.
If everything loads correctly and seems to be working but you get no sound,
try tweaking this value.
Systems known to need a different value
Panasonic ToughBook CF-72: gpio_pin=13
Power Management
This driver has a minimal understanding of PCI Power Management. It will
try and power down the chip when the system is suspended, and power
it up with it is resumed. It will also try and power down the chip
when the machine is shut down.

+ 0
- 42
Documentation/sound/oss/NEWS View File

@ -1,42 +0,0 @@
Linux 2.4 Sound Changes
Christoph Hellwig, <>
=== isapnp support
The Linux 2.4 Kernel does have reliable in-kernel isapnp support.
Some drivers (sb.o, ad1816.o awe_wave.o) do now support automatically
detecting and configuring isapnp devices.
If you have a not yet supported isapnp soundcard, mail me the content
of '/proc/isapnp' on your system and some information about your card
and its driver(s) so I can try to get isapnp working for it.
=== soundcard resources on kernel commandline
Before Linux 2.4 you had to specify the resources for sounddrivers
statically linked into the kernel at compile time
(in make config/menuconfig/xconfig). In Linux 2.4 the resources are
now specified at the boot-time kernel commandline (e.g. the lilo
'append=' line or everything that's after the kernel name in grub).
Read the entry for your card for the parameters.
=== softoss is gone
In Linux 2.4 the softoss in-kernel software synthesizer is no more aviable.
Use a user space software synthesizer like timidity instead.
=== /dev/sndstat and /proc/sound are gone
In older Linux versions those files exported some information about the
OSS/Free configuration to userspace. In Linux 2.3 they were removed because
they did not support the growing number of pci soundcards and there were
some general problems with this interface.

+ 0
- 52
Documentation/sound/oss/OPL3-SA View File

@ -1,52 +0,0 @@
OPL3-SA1 sound driver (opl3sa.o)
Note: This howto only describes how to setup the OPL3-SA1 chip; this info
does not apply to the SA2, SA3, or SA4.
The Yamaha OPL3-SA1 sound chip is usually found built into motherboards, and
it's a decent little chip offering a WSS mode, a SB Pro emulation mode, MPU401
and OPL3 FM Synth capabilities.
You can enable inclusion of the driver via CONFIG_SOUND_OPL3SA1=m, or
CONFIG_SOUND_OPL3SA1=y through 'make config/xconfig/menuconfig'.
You'll need to know all of the relevant info (irq, dma, and io port) for the
chip's WSS mode, since that is the mode the kernel sound driver uses, and of
course you'll also need to know about where the MPU401 and OPL3 ports and
IRQs are if you want to use those.
Here's the skinny on how to load it as a module:
modprobe opl3sa io=0x530 irq=11 dma=0 dma2=1 mpu_io=0x330 mpu_irq=5
Module options in detail:
io: This is the WSS's port base.
irq: This is the WSS's IRQ.
dma: This is the WSS's DMA line. In my BIOS setup screen this was
listed as "WSS Play DMA"
dma2: This is the WSS's secondary DMA line. My BIOS calls it the
"WSS capture DMA"
mpu_io: This is the MPU401's port base.
mpu_irq: This is the MPU401's IRQ.
If you'd like to use the OPL3 FM Synthesizer, make sure you enable
CONFIG_SOUND_YM3812 (in 'make config'). That'll build the opl3.o module.
Then a simple 'insmod opl3 io=0x388', and you now have FM Synth.
You can also use the SoftOSS software synthesizer instead of the builtin OPL3.
Here's how:
Say 'y' or 'm' to "SoftOSS software wave table engine" in make config.
If you said yes, the software synth is available once you boot your new
If you chose to build it as a module, just insmod the resulting softoss2.o
Questions? Comments?

+ 0
- 218
Documentation/sound/oss/README.awe View File

@ -1,218 +0,0 @@
AWE32 Sound Driver for Linux / FreeBSD
version 0.4.3; Nov. 1, 1998
Takashi Iwai <>
This is a sound driver extension for SoundBlaster AWE32 and other
compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable
the wave synth operations. The driver is provided for Linux 1.2.x
and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC
Alpha systems.
This driver was written by Takashi Iwai <>,
and provided "as is". The original source (awedrv-0.4.3.tar.gz) and
binary packages are available on the following URL:
Note that since the author is apart from this web site, the update is
not frequent now.
To enable this driver on linux-2.[01].x kernels, you need turn on
"AWE32 synth" options in sound menu when configure your linux kernel
and modules. The precise installation procedure is described in the
AWE64-Mini-HOWTO and linux-kernel/Documetation/sound/AWE32.
If you're using PnP cards, the card must be initialized before loading
the sound driver. There're several options to do this:
- Initialize the card via ISA PnP tools, and load the sound module.
- Initialize the card on DOS, and load linux by loadlin.exe
- Use PnP kernel driver (for Linux-2.x.x)
The detailed instruction for the solution using isapnp tools is found
in many documents like above. A brief instruction is also included in
the installation document of this package.
For PnP driver project, please refer to the following URL:
The awedrv has several different playing modes to realize easy channel
allocation for MIDI songs. To hear the exact sound quality, you need
to obtain the extended sequencer program, drvmidi or playmidi-2.5.
For playing MIDI files, you *MUST* load the soundfont file on the
driver previously by sfxload utility. Otherwise you'll here no sounds
at all! All the utilities and driver source packages are found in the
above URL. The sfxload program is included in the package
awesfx-0.4.3.tgz. Binary packages are available there, too. See the
instruction in each package for installation.
Loading a soundfont file is very simple. Just execute the command
% sfxload synthgm.sbk
Then, sfxload transfers the file "synthgm.sbk" to the driver.
Both SF1 and SF2 formats are accepted.
Now you can hear midi musics by a midi player.
% drvmidi foo.mid
If you run MIDI player after MOD player, you need to load soundfont
files again, since MOD player programs clear the previous loaded
samples by their own data.
If you have only 512kb on the sound card, I recommend to use dynamic
sample loading via -L option of drvmidi. 2MB GM/GS soundfont file is
available in most midi files.
% sfxload synthgm
% drvmidi -L 2mbgmgs foo.mid
This makes a big difference (believe me)! For more details, please
refer to the FAQ list which is available on the URL above.
The current chorus, reverb and equalizer status can be changed by
aweset utility program (included in awesfx package). Note that
some awedrv-native programs (like drvmidi and xmp) will change the
current settings by themselves. The aweset program is effective
only for other programs like playmidi.
Compile conditions are defined in awe_config.h.
[Compatibility Conditions]
The following flags are defined automatically when using installation
shell script.
indicates your Linux kernel supports module for each sound card
(in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels
as distributed in the RH5.0 package).
This flag is automatically set when you're using 2.1.x kernels.
You can pass the base address and memory size via the following
module options,
io = base I/O port address (eg. 0x620)
memsize = DRAM size in kilobytes (eg. 512)
As default, AWE driver probes these values automatically.
[Hardware Conditions]
You DON'T have to define the following two values.
Define them only when the driver couldn't detect the card properly.
- AWE_DEFAULT_BASE_ADDR (default: not defined)
specifies the base port address of your AWE32 card.
0 means to autodetect the address.
- AWE_DEFAULT_MEM_SIZE (default: not defined)
specifies the memory size of your AWE32 card in kilobytes.
-1 means to autodetect its size.
[Sample Table Size]
From ver.0.4.0, sample tables are allocated dynamically (except
Linux-1.2.x system), so you need NOT to touch these parameters.
Linux-1.2.x users may need to increase these values to appropriate size
if the sound card is equipped with more DRAM.
[Other Conditions]
- AWE_ALWAYS_INIT_FM (default: not defined)
indicates the AWE driver always initialize FM passthrough even
without DRAM on board. Emu8000 chip has a restriction for playing
samples on DRAM that at least two channels must be occupied as
passthrough channels.
- AWE_DEBUG_ON (default: defined)
turns on debugging messages if defined.
- AWE_HAS_GUS_COMPATIBILITY (default: defined)
Enables GUS compatibility mode if defined, reading GUS patches and
GUS control commands. Define this option to use GMOD or other
GUS module players.
- CONFIG_AWE32_MIDIEMU (default: defined)
Adds a MIDI emulation device by Emu8000 wavetable. The emulation
device can be accessed as an external MIDI, and sends the MIDI
control codes directly. XG and GS sysex/NRPN are accepted.
No MIDI input is supported.
- CONFIG_AWE32_MIXER (default: not defined)
Adds a mixer device for AWE32 bass/treble equalizer control.
You can access this device using /dev/mixer?? (usually mixer01).
- AWE_USE_NEW_VOLUME_CALC (default: defined)
Use the new method to calculate the volume change as compatible
with DOS/Win drivers. This option can be toggled via aweset
program, or drvmidi player.
- AWE_CHECK_VTARGET (default: defined)
Check the current volume target value when searching for an
empty channel to allocate a new voice. This is experimentally
implemented in this version. (probably, this option doesn't
affect the sound quality severely...)
- AWE_ALLOW_SAMPLE_SHARING (default: defined)
Allow sample sharing for differently loaded patches.
This function is available only together with awesfx-0.4.3p3.
Note that this is still an experimental option.
- DEF_FM_CHORUS_DEPTH (default: 0x10)
The default strength to be sent to the chorus effect engine.
From 0 to 0xff. Larger numbers may often cause weird sounds.
- DEF_FM_REVERB_DEPTH (default: 0x10)
The default strength to be sent to the reverb effect engine.
From 0 to 0xff. Larger numbers may often cause weird sounds.
Thanks to Witold Jachimczyk ( for much advice
on programming of AWE32. Much code is brought from his AWE32-native
MOD player, ALMP.
The port of awedrv to FreeBSD is done by Randall Hopper
The new volume calculation routine was derived from Mark Weaver's
ADIP compatible routines.
I also thank linux-awe-ml members for their efforts
to reboot their system many times :-)
- Complete DOS/Win compatibility
- DSP-like output
Copyright (C) 1996-1998 Takashi Iwai
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

+ 0
- 339
Documentation/sound/oss/Wavefront View File

@ -1,339 +0,0 @@
An OSS/Free Driver for WaveFront soundcards
(Turtle Beach Maui, Tropez, Tropez Plus)
Paul Barton-Davis, July 1998
Driver Status
Requires: Kernel 2.1.106 or later (the driver is included with kernels
2.1.109 and above)
As of 7/22/1998, this driver is currently in *BETA* state. This means
that it compiles and runs, and that I use it on my system (Linux
2.1.106) with some reasonably demanding applications and uses. I
believe the code is approaching an initial "finished" state that
provides bug-free support for the Tropez Plus.
Please note that to date, the driver has ONLY been tested on a Tropez
Plus. I would very much like to hear (and help out) people with Tropez
and Maui cards, since I think the driver can support those cards as
Finally, the driver has not been tested (or even compiled) as a static
(non-modular) part of the kernel. Alan Cox's good work in modularizing
OSS/Free for Linux makes this rather unnecessary.
Some Questions
0) What does this driver do that the maui driver did not ?
* can fully initialize a WaveFront card from cold boot - no DOS
utilities needed
* working patch/sample/program loading and unloading (the maui
driver didn't document how to make this work, and assumed
user-level preparation of the patch data for writing
to the board. ick.)
* full user-level access to all WaveFront commands
* for the Tropez Plus, (primitive) control of the YSS225 FX processor
* Virtual MIDI mode supported - 2 MIDI devices accessible via the
WaveFront's MPU401/UART emulation. One
accesses the WaveFront synth, the other accesses the
external MIDI connector. Full MIDI read/write semantics
for both devices.
* OSS-compliant /dev/sequencer interface for the WaveFront synth,
including native and GUS-format patch downloading.
* semi-intelligent patch management (prototypical at this point)
1) What to do about MIDI interfaces ?
The Tropez Plus (and perhaps other WF cards) can in theory support up
to 2 physical MIDI interfaces. One of these is connected to the
ICS2115 chip (the WaveFront synth itself) and is controlled by
MPU/UART-401 emulation code running as part of the WaveFront OS. The
other is controlled by the CS4232 chip present on the board. However,
physical access to the CS4232 connector is difficult, and it is
unlikely (though not impossible) that you will want to use it.
An older version of this driver introduced an additional kernel config
variable which controlled whether or not the CS4232 MIDI interface was
configured. Because of Alan Cox's work on modularizing the sound
drivers, and now backporting them to 2.0.34 kernels, there seems to be
little reason to support "static" configuration variables, and so this
has been abandoned in favor of *only* module parameters. Specifying
"mpuio" and "mpuirq" for the cs4232 parameter will result in the
CS4232 MIDI interface being configured; leaving them unspecified will
leave it unconfigured (and thus unusable).
BTW, I have heard from one Tropez+ user that the CS4232 interface is
more reliable than the ICS2115 one. I have had no problems with the
latter, and I don't have the right cable to test the former one
out. Reports welcome.
2) Why does line XXX of the code look like this .... ?
Either because it's not finished yet, or because you're a better coder
than I am, or because you don't understand some aspect of how the card
or the code works.
I absolutely welcome comments, criticisms and suggestions about the
design and implementation of the driver.
3) What files are included ?
drivers/sound/README.wavefront -- this file
drivers/sound/wavefront.patch -- patches for the 2.1.106 sound drivers
needed to make the rest of this work
drivers/sound/wavfront.c -- the driver
drivers/sound/ys225.h -- data declarations for FX config
drivers/sound/ys225.c -- data definitions for FX config
drivers/sound/wf_midi.c -- the "uart401" driver
to support virtual MIDI mode.
include/wavefront.h -- the header file
Documentation/sound/oss/Tropez+ -- short docs on configuration
4) How do I compile/install/use it ?
PART ONE: install the source code into your sound driver directory
cd <top-of-your-2.1.106-code-base-e.g.-/usr/src/linux>
tar -zxvf <where-you-put/wavefront.tar.gz>
PART TWO: apply the patches
cd drivers/sound
patch < wavefront.patch
PART THREE: configure your kernel
cd <top of your kernel tree>
make xconfig (or whichever config option you use)
- choose YES for Sound Support
- choose MODULE (M) for OSS Sound Modules
- choose MODULE(M) to YM3812/OPL3 support
- choose MODULE(M) for WaveFront support
- choose MODULE(M) for CS4232 support
- choose "N" for everything else (unless you have other
soundcards you want support for)
make boot
<whatever you normally do for a kernel install>
make modules
make modules_install
Here's my autoconf.h SOUND section:
* Sound
#define CONFIG_SOUND 1
#undef CONFIG_SOUND_CS4232
#undef CONFIG_SOUND_YM3812
* Additional low level sound drivers
6) How do I configure my card ?
You need to edit /etc/modprobe.conf. Here's mine (edited to show the
relevant details):
# Sound system
alias char-major-14-* wavefront
alias synth0 wavefront
alias mixer0 cs4232
alias audio0 cs4232
install wavefront /sbin/modprobe cs4232 && /sbin/modprobe -i wavefront && /sbin/modprobe opl3
options wavefront io=0x200 irq=9
options cs4232 synthirq=9 synthio=0x200 io=0x530 irq=5 dma=1 dma2=0
options opl3 io=0x388
Things to note:
the wavefront options "io" and "irq" ***MUST*** match the "synthio"
and "synthirq" cs4232 options.
you can do without the opl3 module if you don't
want to use the OPL/[34] FM synth on the soundcard
the opl3 io parameter is conventionally not adjustable.
In theory, any not-in-use IO port address would work, but
just use 0x388 and stick with the crowd.
7) What about firmware ?
Turtle Beach have not given me permission to distribute their firmware
for the ICS2115. However, if you have a WaveFront card, then you
almost certainly have the firmware, and if not, its freely available
on their website, at:
The file is called WFOS2001.MOT (for the Tropez+).
This driver, however, doesn't use the pure firmware as distributed,
but instead relies on a somewhat processed form of it. You can
generate this very easily. Following an idea from Andrew Veliath's
Pinnacle driver, the following flex program will generate the
processed version:
---- cut here -------------------------
%option main
^S[28].*\r$ printf ("%c%.*s", yyleng-1,yyleng-1,yytext);
<<EOF>> { fputc ('\0', stdout); return; }
\n {}
. {}
---- cut here -------------------------
To use it, put the above in file (say, ws.l) compile it like this:
shell> flex -ows.c ws.l
shell> cc -o ws ws.c
and then use it like this:
ws < my-copy-of-the-oswf.mot-file > /etc/sound/wavefront.os
If you put it somewhere else, you'll always have to use the wf_ospath
module parameter (see below) or alter the source code.
7) How do I get it working ?
Optionally, you can reboot with the "new" kernel (even though the only
changes have really been made to a module).
Then, as root do:
modprobe wavefront
You should get something like this in /var/log/messages:
WaveFront: firmware 1.20 already loaded.
WaveFront: no response to firmware probe, assume raw.
WaveFront: waiting for memory configuration ...
WaveFront: hardware version 1.64
WaveFront: available DRAM 8191k
WaveFront: 332 samples used (266 real, 13 aliases, 53 multi), 180 empty
WaveFront: 128 programs slots in use
WaveFront: 256 patch slots filled, 142 in use
The whole process takes about 16 seconds, the longest waits being
after reporting the hardware version (during the firmware download),
and after reporting program status (during patch status inquiry). Its
shorter (about 10 secs) if the firmware is already loaded (i.e. only
warm reboots since the last firmware load).
The "available DRAM" line will vary depending on how much added RAM
your card has. Mine has 8MB.
To check basically functionality, use play(1) or splay(1) to send a
.WAV or other audio file through the audio portion. Then use playmidi
to play a General MIDI file. Try the "-D 0" to hear the
difference between sending MIDI to the WaveFront and using the OPL/3,
which is the default (I think ...). If you have an external synth(s)
hooked to the soundcard, you can use "-e" to route to the
external synth(s) (in theory, -D 1 should work as well, but I think
there is a bug in playmidi which prevents this from doing what it
8) What are the module parameters ?
Its best to read wavefront.c for this, but here is a summary:
wf_raw - if set, ignore apparent presence of firmware
loaded onto the ICS2115, reset the whole
board, and initialize it from scratch. (default = 0)
fx_raw - if set, always initialize the YSS225 processor
on the Tropez plus. (default = 1)
< The next 4 are basically for kernel hackers to allow
tweaking the driver for testing purposes. >
wait_usecs - loop timer used when waiting for
status conditions on the board.
The default is 150.
debug_default - debugging flags. See sound/wavefront.h
for WF_DEBUG_* values. Default is zero.
Setting this allows you to debug the
driver during module installation.
ospath - path to get to the pre-processed OS firmware.
(default: /etc/sound/wavefront.os)
9) Who should I contact if I have problems?
Just me: Paul Barton-Davis <>

+ 0
- 70
Documentation/sound/oss/es1370 View File

@ -1,70 +0,0 @@
/proc/sound, /dev/sndstat
/proc/sound and /dev/sndstat is not supported by the
driver. To find out whether the driver succeeded loading,
check the kernel log (dmesg).
ALaw/uLaw sample formats
This driver does not support the ALaw/uLaw sample formats.
ALaw is the default mode when opening a sound device
using OSS/Free. The reason for the lack of support is
that the hardware does not support these formats, and adding
conversion routines to the kernel would lead to very ugly
code in the presence of the mmap interface to the driver.
And since xquake uses mmap, mmap is considered important :-)
and no sane application uses ALaw/uLaw these days anyway.
In short, playing a Sun .au file as follows:
cat > /dev/dsp
does not work. Instead, you may use the play script from
Chris Bagwell's sox-12.14 package (available from the URL
below) to play many different audio file formats.
The script automatically determines the audio format
and does do audio conversions if necessary.
Blocking vs. nonblocking IO
Unlike OSS/Free this driver honours the O_NONBLOCK file flag
not only during open, but also during read and write.
This is an effort to make the sound driver interface more
regular. Timidity has problems with this; a patch
is available from
(Timidity patched will also run on OSS/Free).
The driver supports a simple MIDI UART interface, with
no ioctl's supported.
MIDI synthesizer
This soundcard does not have any hardware MIDI synthesizer;
MIDI synthesis has to be done in software. To allow this
the driver/soundcard supports two PCM (/dev/dsp) interfaces.
The second one goes to the mixer "synth" setting and supports
only a limited set of sampling rates (44100, 22050, 11025, 5512).
By setting lineout to 1 on the driver command line
(eg. insmod es1370 lineout=1) it is even possible on some
cards to convert the LINEIN jack into a second LINEOUT jack, thus
making it possible to output four independent audio channels!
There is a freely available software package that allows
MIDI file playback on this soundcard called Timidity.
Thomas Sailer

+ 0
- 767
Documentation/sound/oss/rme96xx View File

@ -1,767 +0,0 @@
Beta release of the rme96xx (driver for RME 96XX cards like the
"Hammerfall" and the "Hammerfall light")
Important: The driver module has to be installed on a freshly rebooted system,
otherwise the driver might not be able to acquire its buffers.
- OSS programming interface (i.e. runs with standard OSS soundsoftware)
- OSS/Multichannel interface (OSS multichannel is done by just aquiring
more than 2 channels). The driver does not use more than one device
( yet .. this feature may be implemented later )
- more than one RME card supported
The driver uses a specific multichannel interface, which I will document
when the driver gets stable. (take a look at the defines in rme96xx.h,
which adds blocked multichannel formats i.e instead of
lrlrlrlr --> llllrrrr etc.
Use the "rmectrl" programm to look at the status of the card ..
or use xrmectrl, a GUI interface for the ctrl program.
What you can do with the rmectrl program is to set the stereo device for
OSS emulation (e.g. if you use SPDIF out).
You do:
./ctrl offset 24 24
which makes the stereo device use channels 25 and 26.
Guenter Geiger <>
copy the first part of the attached source code into rmectrl.c
and the second part into xrmectrl (or get the program from
to compile: gcc -o rmectrl rmectrl.c
------------------------------ snip ------------------------------------
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/soundcard.h>
#include <math.h>
#include <unistd.h>
#include <stdlib.h>
#include "rme96xx.h"
(C) 2000 Guenter Geiger <>
HP20020201 - Heiko Purnhagen <>
/* # define DEVICE_NAME "/dev/mixer" */
# define DEVICE_NAME "/dev/mixer1"
void usage(void)
fprintf(stderr,"usage: rmectrl [/dev/mixer<n>] [command [options]]\n\n");
fprintf(stderr,"where command is one of:\n");
fprintf(stderr," help show this help\n");
fprintf(stderr," status show status bits\n");
fprintf(stderr," control show control bits\n");
fprintf(stderr," mix show mixer/offset status\n");
fprintf(stderr," master <n> set sync master\n");
fprintf(stderr," pro <n> set spdif out pro\n");
fprintf(stderr," emphasis <n> set spdif out emphasis\n");
fprintf(stderr," dolby <n> set spdif out no audio\n");
fprintf(stderr," optout <n> set spdif out optical\n");
fprintf(stderr," wordclock <n> set sync wordclock\n");
fprintf(stderr," spdifin <n> set spdif in (0=optical,1=coax,2=intern)\n");
fprintf(stderr," syncref <n> set sync source (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n");
fprintf(stderr," adat1cd <n> set ADAT1 on internal CD\n");
fprintf(stderr," offset <devnr> <in> <out> set dev (0..3) offset (0..25)\n");
int main(int argc, char* argv[])
int cards;
int ret;
int i;
double ft;
int fd, fdwr;
int param,orig;
rme_status_t stat;
rme_ctrl_t ctrl;
char *device;
int argidx;
if (argc < 2)
if (*argv[1]=='/') {
device = argv[1];
argidx = 2;
else {
device = DEVICE_NAME;
argidx = 1;
fprintf(stdout,"mixer device %s\n",device);
if ((fd = open(device,O_RDONLY)) < 0) {
fprintf(stdout,"opening device failed\n");
if ((fdwr = open(device,O_WRONLY)) < 0) {
fprintf(stdout,"opening device failed\n");
if (argc < argidx+1)
if (!strcmp(argv[argidx],"help"))
if (!strcmp(argv[argidx],"-h"))
if (!strcmp(argv[argidx],"--help"))
if (!strcmp(argv[argidx],"status")) {
fprintf(stdout,"stat.irq %d\n",stat.irq);
fprintf(stdout,"stat.lockmask %d\n",stat.lockmask);
fprintf(stdout,"stat.sr48 %d\n",stat.sr48);
fprintf(stdout,"stat.wclock %d\n",stat.wclock);
fprintf(stdout,"stat.bufpoint %d\n",stat.bufpoint);
fprintf(stdout,"stat.syncmask %d\n",stat.syncmask);
fprintf(stdout,"stat.doublespeed %d\n",stat.doublespeed);
fprintf(stdout,"stat.tc_busy %d\n",stat.tc_busy);
fprintf(stdout,"stat.tc_out %d\n",stat.tc_out);
fprintf(stdout,"stat.crystalrate %d (0=64k 3=96k 4=88.2k 5=48k 6=44.1k 7=32k)\n",stat.crystalrate);
fprintf(stdout,"stat.spdif_error %d\n",stat.spdif_error);
fprintf(stdout,"stat.bufid %d\n",stat.bufid);
fprintf(stdout,"stat.tc_valid %d\n",stat.tc_valid);
exit (0);
if (!strcmp(argv[argidx],"control")) {
fprintf(stdout,"ctrl.start %d\n",ctrl.start);
fprintf(stdout,"ctrl.latency %d (0=64 .. 7=8192)\n",ctrl.latency);
fprintf(stdout,"ctrl.master %d\n",ctrl.master);
fprintf(stdout," %d\n",;
fprintf(stdout,"ctrl.sr48 %d\n",ctrl.sr48);
fprintf(stdout,"ctrl.spare %d\n",ctrl.spare);
fprintf(stdout,"ctrl.doublespeed %d\n",ctrl.doublespeed);
fprintf(stdout," %d\n",;
fprintf(stdout,"ctrl.emphasis %d\n",ctrl.emphasis);
fprintf(stdout,"ctrl.dolby %d\n",ctrl.dolby);
fprintf(stdout,"ctrl.opt_out %d\n",ctrl.opt_out);
fprintf(stdout,"ctrl.wordclock %d\n",ctrl.wordclock);
fprintf(stdout,"ctrl.spdif_in %d (0=optical,1=coax,2=intern)\n",ctrl.spdif_in);
fprintf(stdout,"ctrl.sync_ref %d (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n",ctrl.sync_ref);
fprintf(stdout,"ctrl.spdif_reset %d\n",ctrl.spdif_reset);
fprintf(stdout,"ctrl.spdif_select %d\n",ctrl.spdif_select);
fprintf(stdout,"ctrl.spdif_clock %d\n",ctrl.spdif_clock);
fprintf(stdout,"ctrl.spdif_write %d\n",ctrl.spdif_write);
fprintf(stdout,"ctrl.adat1_cd %d\n",ctrl.adat1_cd);
exit (0);
if (!strcmp(argv[argidx],"mix")) {
rme_mixer mix;
int i;
for (i=0; i<4; i++) {
mix.devnr = i;
if (mix.devnr == i) {
fprintf(stdout,"devnr %d\n",mix.devnr);
fprintf(stdout,"mix.i_offset %2d (0-25)\n",mix.i_offset);
fprintf(stdout,"mix.o_offset %2d (0-25)\n",mix.o_offset);
exit (0);
/* the control flags */
if (argc < argidx+2)
if (!strcmp(argv[argidx],"master")) {
int val = atoi(argv[argidx+1]);
printf("master = %d\n",val);
ctrl.master = val;
exit (0);
if (!strcmp(argv[argidx],"pro")) {
int val = atoi(argv[argidx+1]);
printf("pro = %d\n",val); = val;
exit (0);
if (!strcmp(argv[argidx],"emphasis")) {
int val = atoi(argv[argidx+1]);
printf("emphasis = %d\n",val);
ctrl.emphasis = val;
exit (0);
if (!strcmp(argv[argidx],"dolby")) {
int val = atoi(argv[argidx+1]);
printf("dolby = %d\n",val);
ctrl.dolby = val;
exit (0);
if (!strcmp(argv[argidx],"optout")) {
int val = atoi(argv[argidx+1]);
printf("optout = %d\n",val);
ctrl.opt_out = val;
exit (0);
if (!strcmp(argv[argidx],"wordclock")) {
int val = atoi(argv[argidx+1]);
printf("wordclock = %d\n",val);
ctrl.wordclock = val;
exit (0);
if (!strcmp(argv[argidx],"spdifin")) {
int val = atoi(argv[argidx+1]);
printf("spdifin = %d\n",val);
ctrl.spdif_in = val;
exit (0);
if (!strcmp(argv[argidx],"syncref")) {
int val = atoi(argv[argidx+1]);
printf("syncref = %d\n",val);
ctrl.sync_ref = val;
exit (0);
if (!strcmp(argv[argidx],"adat1cd")) {
int val = atoi(argv[argidx+1]);
printf("adat1cd = %d\n",val);
ctrl.adat1_cd = val;
exit (0);
/* setting offset */
if (argc < argidx+4)
if (!strcmp(argv[argidx],"offset")) {
rme_mixer mix;
mix.devnr = atoi(argv[argidx+1]);
mix.i_offset = atoi(argv[argidx+2]);
mix.o_offset = atoi(argv[argidx+3]);
fprintf(stdout,"devnr %d\n",mix.devnr);
fprintf(stdout,"mix.i_offset to %d\n",mix.i_offset);
fprintf(stdout,"mix.o_offset to %d\n",mix.o_offset);
exit (0);
exit (0); /* to avoid warning */
---------------------------- <snip> --------------------------------
# xrmectrl
# (C) 2000 Guenter Geiger <>
# HP20020201 - Heiko Purnhagen <>
#set defaults "-relief ridged"
set CTRLPROG "./rmectrl"
if {$argc} {
frame .butts
button .butts.exit -text "Exit" -command "exit" -relief ridge
#button .butts.state -text "State" -command "get_all"
pack .butts.exit -side left
pack .butts -side bottom
frame .status
# Sampling Rate
label -text "Sampling Rate" -justify left
radiobutton -selectcolor red -text "44.1 kHz" -width 10 -anchor nw -variable srate -value 44100 -font times
radiobutton -selectcolor red -text "48 kHz" -width 10 -anchor nw -variable srate -value 48000 -font times
radiobutton -selectcolor red -text "88.2 kHz" -width 10 -anchor nw -variable srate -value 88200 -font times
radiobutton -selectcolor red -text "96 kHz" -width 10 -anchor nw -variable srate -value 96000 -font times
pack -side top -padx 3
# Lock
frame .status.lock
label .status.lock.text -text "Lock" -justify left
checkbutton .status.lock.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatlock1 -font times
checkbutton .status.lock.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatlock2 -font times
checkbutton .status.lock.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatlock3 -font times
pack .status.lock.text .status.lock.adat1 .status.lock.adat2 .status.lock.adat3 -side top -padx 3
# Sync
frame .status.sync
label .status.sync.text -text "Sync" -justify left
checkbutton .status.sync.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatsync1 -font times
checkbutton .status.sync.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatsync2 -font times
checkbutton .status.sync.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatsync3 -font times
pack .status.sync.text .status.sync.adat1 .status.sync.adat2 .status.sync.adat3 -side top -padx 3
# Timecode
label -text "Timecode" -justify left
checkbutton -selectcolor red -text "busy" -anchor nw -width 10 -variable tcbusy -font times
checkbutton -selectcolor red -text "out" -anchor nw -width 10 -variable tcout -font times
checkbutton -selectcolor red -text "valid" -anchor nw -width 10 -variable tcvalid -font times
pack -side top -padx 3
frame .status.spdif
label .status.spdif.text -text "SPDIF In" -justify left
label -text "--.- kHz" -anchor n -width 10 -font times
checkbutton .status.spdif.error -selectcolor red -text "Input Lock" -anchor nw -width 10 -variable spdiferr -font times
pack .status.spdif.text .status.spdif.error -side top -padx 3
pack .status.lock .status.sync .status.spdif -side left -fill x -anchor n -expand 1
proc setprof {} {
global spprof
exec $CTRLPROG pro $spprof
proc setemph {} {
global spemph
exec $CTRLPROG emphasis $spemph
proc setnoaud {} {
global spnoaud
exec $CTRLPROG dolby $spnoaud
proc setoptical {} {
global spoptical
exec $CTRLPROG optout $spoptical
proc setspdifin {} {
global spdifin
exec $CTRLPROG spdifin [expr $spdifin - 1]
proc setsyncsource {} {
global syncsource
exec $CTRLPROG syncref [expr $syncsource -1]
proc setmaster {} {
global master
exec $CTRLPROG master $master
proc setwordclock {} {
global wordclock
exec $CTRLPROG wordclock $wordclock
proc setadat1cd {} {
global adat1cd
exec $CTRLPROG adat1cd $adat1cd
frame .control
frame .control.spdif
label -text "SPDIF In" -justify left
radiobutton -text "Optical" -anchor nw -width 13 -variable spdifin -value 1 -command setspdifin -selectcolor blue -font times
radiobutton -text "Coaxial" -anchor nw -width 13 -variable spdifin -value 2 -command setspdifin -selectcolor blue -font times
radiobutton -text "Intern " -anchor nw -width 13 -variable spdifin -command setspdifin -value 3 -selectcolor blue -font times
checkbutton -text "ADAT1 Intern" -anchor nw -width 13 -variable adat1cd -command setadat1cd -selectcolor blue -font times
frame .control.spdif.out
label .control.spdif.out.text -text "SPDIF Out" -justify left
checkbutton -text "Professional" -anchor nw -width 13 -variable spprof -command setprof -selectcolor blue -font times
checkbutton .control.spdif.out.emphasis -text "Emphasis" -anchor nw -width 13 -variable spemph -command setemph -selectcolor blue -font times
checkbutton .control.spdif.out.dolby -text "NoAudio" -anchor nw -width 13 -variable spnoaud -command setnoaud -selectcolor blue -font times
checkbutton .control.spdif.out.optout -text "Optical Out" -anchor nw -width 13 -variable spoptical -command setoptical -selectcolor blue -font times
pack .control.spdif.out.optout .control.spdif.out.dolby .control.spdif.out.emphasis .control.spdif.out.text -side bottom
pack .control.spdif.out -side top -fill y -padx 3 -expand 1
# Sync Mode & Sync Source
frame .control.sync
frame .control.sync.mode
label .control.sync.mode.text -text "Sync Mode" -justify left
checkbutton .control.sync.mode.master -text "Master" -anchor nw -width 13 -variable master -command setmaster -selectcolor blue -font times
checkbutton .control.sync.mode.wc -text "Wordclock" -anchor nw -width 13 -variable wordclock -command setwordclock -selectcolor blue -font times
pack .control.sync.mode.text .control.sync.mode.master .control.sync.mode.wc
frame .control.sync.src
label .control.sync.src.text -text "Sync Source" -justify left
radiobutton .control.sync.src.input1 -text "ADAT1" -anchor nw -width 13 -variable syncsource -value 1 -command setsyncsource -selectcolor blue -font times
radiobutton .control.sync.src.input2 -text "ADAT2" -anchor nw -width 13 -variable syncsource -value 2 -command setsyncsource -selectcolor blue -font times
radiobutton .control.sync.src.input3 -text "ADAT3" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 3 -selectcolor blue -font times
radiobutton .control.sync.src.input4 -text "SPDIF" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 4 -selectcolor blue -font times
pack .control.sync.src.input4 .control.sync.src.input3 .control.sync.src.input2 .control.sync.src.input1 .control.sync.src.text -side bottom
pack .control.sync.mode .control.s