[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. [michal.k.k.piotrowski@gmail.com: build fix] Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Michal Piotrowski <michal.k.k.piotrowski@gmail.com> Cc: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
595182bcdf
commit
d56b9b9c46
@@ -29,14 +29,6 @@ Who: Adrian Bunk <bunk@stusta.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
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 <bunk@stusta.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
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
|
||||
|
@@ -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:
|
||||
<io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick>
|
||||
|
||||
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:
|
||||
<io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple]
|
||||
|
||||
@@ -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>]
|
||||
|
||||
|
@@ -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
|
||||
SB32.
|
||||
|
||||
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:
|
||||
|
||||
http://www.opensource.creative.com/snapshot.html
|
||||
|
||||
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
|
||||
as:
|
||||
|
||||
/usr/local/bin/sfxload
|
||||
|
||||
To enable AWE general midi synthesis you should also get the sound bank
|
||||
file for general midi from:
|
||||
|
||||
http://members.xoom.com/yar/synthgm.sbk.gz
|
||||
|
||||
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
|
||||
file:
|
||||
|
||||
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:
|
||||
|
||||
Playmidi: http://playmidi.openprojects.net
|
||||
|
||||
AWEMidi Player (drvmidi) Included in the previously mentioned AWE
|
||||
snapshot.
|
||||
|
||||
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
|
||||
welcome.
|
||||
|
||||
Yaroslav Rosomakho (alons55@dialup.ptt.ru)
|
||||
http://www.yar.opennet.ru
|
||||
|
||||
Last Updated: Feb 3 2001
|
@@ -1,85 +0,0 @@
|
||||
Audio driver for CM8338/CM8738 chips by Chen-Li Tien
|
||||
|
||||
|
||||
HARDWARE SUPPORTED
|
||||
================================================================================
|
||||
C-Media CMI8338
|
||||
C-Media CMI8738
|
||||
On-board C-Media chips
|
||||
|
||||
|
||||
STEPS TO BUILD DRIVER
|
||||
================================================================================
|
||||
|
||||
1. Backup the Config.in and Makefile in the sound driver directory
|
||||
(/usr/src/linux/driver/sound).
|
||||
The Configure.help 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
|
||||
directory.
|
||||
|
||||
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'
|
||||
|
||||
|
||||
INSTALL DRIVER
|
||||
================================================================================
|
||||
|
||||
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
|
||||
file.so 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 http://www.cmedia.com.tw for installation instruction.
|
||||
|
||||
DRIVER PARAMETER
|
||||
================================================================================
|
||||
|
||||
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
|
||||
CD-ROM or DVD-ROM.
|
||||
spdif_loop: Enable S/PDIF loop, this route S/PDIF-in to S/PDIF-out
|
||||
directly.
|
||||
speakers: Number of speakers used.
|
||||
use_line_as_rear:Enable this if you want to use line-in as
|
||||
rear-out.
|
||||
use_line_as_bass:Enable this if you want to use line-in as
|
||||
bass-out.
|
||||
joystick: Enable joystick. You will need to install Linux joystick
|
||||
driver.
|
||||
|
@@ -1,134 +0,0 @@
|
||||
================================================================
|
||||
INSTALLATION OF AWE32 SOUND DRIVER FOR LINUX
|
||||
Takashi Iwai <iwai@ww.uni-erlangen.de>
|
||||
================================================================
|
||||
|
||||
----------------------------------------------------------------
|
||||
* 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 install-rh.sh under RedHat5.0 directory.
|
||||
DO NOT USE install.sh 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 install.sh script
|
||||
|
||||
# sh ./install.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
|
||||
kernel.)
|
||||
|
||||
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.
|
||||
in
|
||||
# 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.
|
||||
ex)
|
||||
(CONFIGURE CTL0048/58128 (LD 2
|
||||
# ANSI string -->WaveTable<--
|
||||
(IO 0 (BASE 0x0620))
|
||||
(IO 1 (BASE 0x0A20))
|
||||
(IO 2 (BASE 0x0E20))
|
||||
(ACT Y)
|
||||
))
|
||||
|
||||
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!
|
@@ -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 <shaw@shawc.demon.co.uk>
|
||||
|
||||
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:
|
||||
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SOUND_ADLIB=m
|
||||
CONFIG_SOUND_MAD16=m
|
||||
CONFIG_SOUND_YM3812=m
|
||||
|
||||
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
|
||||
0x330,0x360
|
||||
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
|
@@ -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
|
||||
http://www.zabbo.net/maestro/
|
||||
|
||||
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.
|
@@ -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
|
||||
http://www.zabbo.net/maestro3/
|
||||
|
||||
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.
|
@@ -1,42 +0,0 @@
|
||||
Linux 2.4 Sound Changes
|
||||
2000-September-25
|
||||
Christoph Hellwig, <hch@infradead.org>
|
||||
|
||||
|
||||
|
||||
=== 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 Configure.help 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.
|
||||
|
||||
|
@@ -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
|
||||
kernel.
|
||||
|
||||
If you chose to build it as a module, just insmod the resulting softoss2.o
|
||||
|
||||
Questions? Comments?
|
||||
<stiker@northlink.com>
|
@@ -1,218 +0,0 @@
|
||||
================================================================
|
||||
AWE32 Sound Driver for Linux / FreeBSD
|
||||
version 0.4.3; Nov. 1, 1998
|
||||
|
||||
Takashi Iwai <iwai@ww.uni-erlangen.de>
|
||||
================================================================
|
||||
|
||||
* GENERAL NOTES
|
||||
|
||||
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 <iwai@ww.uni-erlangen.de>,
|
||||
and provided "as is". The original source (awedrv-0.4.3.tar.gz) and
|
||||
binary packages are available on the following URL:
|
||||
http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/
|
||||
Note that since the author is apart from this web site, the update is
|
||||
not frequent now.
|
||||
|
||||
|
||||
* NOTE TO LINUX USERS
|
||||
|
||||
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:
|
||||
http://www-jcr.lmh.ox.ac.uk/~pnp/
|
||||
|
||||
|
||||
* USING THE DRIVER
|
||||
|
||||
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.
|
||||
|
||||
Enjoy.
|
||||
|
||||
|
||||
* COMPILE FLAGS
|
||||
|
||||
Compile conditions are defined in awe_config.h.
|
||||
|
||||
[Compatibility Conditions]
|
||||
The following flags are defined automatically when using installation
|
||||
shell script.
|
||||
|
||||
- AWE_MODULE_SUPPORT
|
||||
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.
|
||||
|
||||
- AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS
|
||||
|
||||
|
||||
[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.
|
||||
|
||||
|
||||
* ACKNOWLEDGMENTS
|
||||
|
||||
Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) 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
|
||||
(rhh@ct.picker.com).
|
||||
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 :-)
|
||||
|
||||
|
||||
* TODO'S
|
||||
|
||||
- Complete DOS/Win compatibility
|
||||
- DSP-like output
|
||||
|
||||
|
||||
* COPYRIGHT
|
||||
|
||||
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
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
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.
|
@@ -1,339 +0,0 @@
|
||||
An OSS/Free Driver for WaveFront soundcards
|
||||
(Turtle Beach Maui, Tropez, Tropez Plus)
|
||||
|
||||
Paul Barton-Davis, July 1998
|
||||
|
||||
VERSION 0.2.5
|
||||
|
||||
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
|
||||
well.
|
||||
|
||||
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
|
||||
DO NOT USE IF YOU'VE APPLIED THEM
|
||||
BEFORE, OR HAVE 2.1.109 OR ABOVE
|
||||
|
||||
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
|
||||
|
||||
DO THIS ONLY IF YOU HAVE A KERNEL VERSION BELOW 2.1.109
|
||||
AND HAVE NOT ALREADY INSTALLED THE PATCH(ES).
|
||||
|
||||
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_OSS
|
||||
#define CONFIG_SOUND_OSS_MODULE 1
|
||||
#undef CONFIG_SOUND_PAS
|
||||
#undef CONFIG_SOUND_SB
|
||||
#undef CONFIG_SOUND_ADLIB
|
||||
#undef CONFIG_SOUND_GUS
|
||||
#undef CONFIG_SOUND_MPU401
|
||||
#undef CONFIG_SOUND_PSS
|
||||
#undef CONFIG_SOUND_MSS
|
||||
#undef CONFIG_SOUND_SSCAPE
|
||||
#undef CONFIG_SOUND_TRIX
|
||||
#undef CONFIG_SOUND_MAD16
|
||||
#undef CONFIG_SOUND_WAVEFRONT
|
||||
#define CONFIG_SOUND_WAVEFRONT_MODULE 1
|
||||
#undef CONFIG_SOUND_CS4232
|
||||
#define CONFIG_SOUND_CS4232_MODULE 1
|
||||
#undef CONFIG_SOUND_MAUI
|
||||
#undef CONFIG_SOUND_SGALAXY
|
||||
#undef CONFIG_SOUND_OPL3SA1
|
||||
#undef CONFIG_SOUND_SOFTOSS
|
||||
#undef CONFIG_SOUND_YM3812
|
||||
#define CONFIG_SOUND_YM3812_MODULE 1
|
||||
#undef CONFIG_SOUND_VMIDI
|
||||
#undef CONFIG_SOUND_UART6850
|
||||
/*
|
||||
* Additional low level sound drivers
|
||||
*/
|
||||
#undef CONFIG_LOWLEVEL_SOUND
|
||||
|
||||
************************************************************
|
||||
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:
|
||||
|
||||
http://www.tbeach.com/tbs/downloads/scardsdown.htm#tropezplus
|
||||
|
||||
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.
|
||||
|
||||
or
|
||||
|
||||
WaveFront: no response to firmware probe, assume raw.
|
||||
|
||||
then:
|
||||
|
||||
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
|
||||
should).
|
||||
|
||||
**********************************************************************
|
||||
8) What are the module parameters ?
|
||||
**********************************************************************
|
||||
|
||||
Its best to read wavefront.c for this, but here is a summary:
|
||||
|
||||
integers:
|
||||
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.
|
||||
strings:
|
||||
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 <pbd@op.net>
|
||||
|
||||
|
@@ -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 my_file.au > /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.
|
||||
http://home.sprynet.com/sprynet/cbagwell/projects.html
|
||||
|
||||
|
||||
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 http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html.
|
||||
(Timidity patched will also run on OSS/Free).
|
||||
|
||||
|
||||
MIDI UART
|
||||
---------
|
||||
|
||||
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.
|
||||
See http://www.cgs.fi/~tt/timidity/.
|
||||
|
||||
|
||||
|
||||
Thomas Sailer
|
||||
t.sailer@alumni.ethz.ch
|
@@ -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.
|
||||
|
||||
features:
|
||||
|
||||
- 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 <geiger@epy.co.at>
|
||||
|
||||
copy the first part of the attached source code into rmectrl.c
|
||||
and the second part into xrmectrl (or get the program from
|
||||
http://gige.xdv.org/pages/soft/pages/rme)
|
||||
|
||||
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"
|
||||
|
||||
/*
|
||||
remctrl.c
|
||||
(C) 2000 Guenter Geiger <geiger@debian.org>
|
||||
HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de>
|
||||
*/
|
||||
|
||||
/* # 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");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
|
||||
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)
|
||||
usage();
|
||||
|
||||
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");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if ((fdwr = open(device,O_WRONLY)) < 0) {
|
||||
fprintf(stdout,"opening device failed\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
if (argc < argidx+1)
|
||||
usage();
|
||||
|
||||
if (!strcmp(argv[argidx],"help"))
|
||||
usage();
|
||||
if (!strcmp(argv[argidx],"-h"))
|
||||
usage();
|
||||
if (!strcmp(argv[argidx],"--help"))
|
||||
usage();
|
||||
|
||||
if (!strcmp(argv[argidx],"status")) {
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE2,&stat);
|
||||
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")) {
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
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,"ctrl.ie %d\n",ctrl.ie);
|
||||
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,"ctrl.pro %d\n",ctrl.pro);
|
||||
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;
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE1,&mix);
|
||||
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)
|
||||
usage();
|
||||
|
||||
if (!strcmp(argv[argidx],"master")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("master = %d\n",val);
|
||||
ctrl.master = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"pro")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("pro = %d\n",val);
|
||||
ctrl.pro = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"emphasis")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("emphasis = %d\n",val);
|
||||
ctrl.emphasis = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"dolby")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("dolby = %d\n",val);
|
||||
ctrl.dolby = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"optout")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("optout = %d\n",val);
|
||||
ctrl.opt_out = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"wordclock")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("wordclock = %d\n",val);
|
||||
ctrl.wordclock = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"spdifin")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("spdifin = %d\n",val);
|
||||
ctrl.spdif_in = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"syncref")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("syncref = %d\n",val);
|
||||
ctrl.sync_ref = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[argidx],"adat1cd")) {
|
||||
int val = atoi(argv[argidx+1]);
|
||||
ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
printf("adat1cd = %d\n",val);
|
||||
ctrl.adat1_cd = val;
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl);
|
||||
exit (0);
|
||||
}
|
||||
|
||||
/* setting offset */
|
||||
|
||||
if (argc < argidx+4)
|
||||
usage();
|
||||
|
||||
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]);
|
||||
ioctl(fdwr,SOUND_MIXER_PRIVATE1,&mix);
|
||||
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);
|
||||
}
|
||||
|
||||
usage();
|
||||
exit (0); /* to avoid warning */
|
||||
}
|
||||
|
||||
|
||||
---------------------------- <snip> --------------------------------
|
||||
#!/usr/bin/wish
|
||||
|
||||
# xrmectrl
|
||||
# (C) 2000 Guenter Geiger <geiger@debian.org>
|
||||
# HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de>
|
||||
|
||||
#set defaults "-relief ridged"
|
||||
set CTRLPROG "./rmectrl"
|
||||
if {$argc} {
|
||||
set CTRLPROG "$CTRLPROG $argv"
|
||||
}
|
||||
puts "CTRLPROG $CTRLPROG"
|
||||
|
||||
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
|
||||
|
||||
|
||||
#
|
||||
# STATUS
|
||||
#
|
||||
|
||||
frame .status
|
||||
|
||||
# Sampling Rate
|
||||
|
||||
frame .status.sr
|
||||
label .status.sr.text -text "Sampling Rate" -justify left
|
||||
radiobutton .status.sr.441 -selectcolor red -text "44.1 kHz" -width 10 -anchor nw -variable srate -value 44100 -font times
|
||||
radiobutton .status.sr.480 -selectcolor red -text "48 kHz" -width 10 -anchor nw -variable srate -value 48000 -font times
|
||||
radiobutton .status.sr.882 -selectcolor red -text "88.2 kHz" -width 10 -anchor nw -variable srate -value 88200 -font times
|
||||
radiobutton .status.sr.960 -selectcolor red -text "96 kHz" -width 10 -anchor nw -variable srate -value 96000 -font times
|
||||
|
||||
pack .status.sr.text .status.sr.441 .status.sr.480 .status.sr.882 .status.sr.960 -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
|
||||
|
||||
frame .status.tc
|
||||
label .status.tc.text -text "Timecode" -justify left
|
||||
checkbutton .status.tc.busy -selectcolor red -text "busy" -anchor nw -width 10 -variable tcbusy -font times
|
||||
checkbutton .status.tc.out -selectcolor red -text "out" -anchor nw -width 10 -variable tcout -font times
|
||||
checkbutton .status.tc.valid -selectcolor red -text "valid" -anchor nw -width 10 -variable tcvalid -font times
|
||||
|
||||
pack .status.tc.text .status.tc.busy .status.tc.out .status.tc.valid -side top -padx 3
|
||||
|
||||
# SPDIF In
|
||||
|
||||
frame .status.spdif
|
||||
label .status.spdif.text -text "SPDIF In" -justify left
|
||||
label .status.spdif.sr -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.sr .status.spdif.error -side top -padx 3
|
||||
|
||||
pack .status.sr .status.lock .status.sync .status.tc .status.spdif -side left -fill x -anchor n -expand 1
|
||||
|
||||
|
||||
#
|
||||
# CONTROL
|
||||
#
|
||||
|
||||
proc setprof {} {
|
||||
global CTRLPROG
|
||||
global spprof
|
||||
exec $CTRLPROG pro $spprof
|
||||
}
|
||||
|
||||
proc setemph {} {
|
||||
global CTRLPROG
|
||||
global spemph
|
||||
exec $CTRLPROG emphasis $spemph
|
||||
}
|
||||
|
||||
proc setnoaud {} {
|
||||
global CTRLPROG
|
||||
global spnoaud
|
||||
exec $CTRLPROG dolby $spnoaud
|
||||
}
|
||||
|
||||
proc setoptical {} {
|
||||
global CTRLPROG
|
||||
global spoptical
|
||||
exec $CTRLPROG optout $spoptical
|
||||
}
|
||||
|
||||
proc setspdifin {} {
|
||||
global CTRLPROG
|
||||
global spdifin
|
||||
exec $CTRLPROG spdifin [expr $spdifin - 1]
|
||||
}
|
||||
|
||||
proc setsyncsource {} {
|
||||
global CTRLPROG
|
||||
global syncsource
|
||||
exec $CTRLPROG syncref [expr $syncsource -1]
|
||||
}
|
||||
|
||||
|
||||
proc setmaster {} {
|
||||
global CTRLPROG
|
||||
global master
|
||||
exec $CTRLPROG master $master
|
||||
}
|
||||
|
||||
proc setwordclock {} {
|
||||
global CTRLPROG
|
||||
global wordclock
|
||||
exec $CTRLPROG wordclock $wordclock
|
||||
}
|
||||
|
||||
proc setadat1cd {} {
|
||||
global CTRLPROG
|
||||
global adat1cd
|
||||
exec $CTRLPROG adat1cd $adat1cd
|
||||
}
|
||||
|
||||
|
||||
frame .control
|
||||
|
||||
# SPDIF In & SPDIF Out
|
||||
|
||||
|
||||
frame .control.spdif
|
||||
|
||||
frame .control.spdif.in
|
||||
label .control.spdif.in.text -text "SPDIF In" -justify left
|
||||
radiobutton .control.spdif.in.input1 -text "Optical" -anchor nw -width 13 -variable spdifin -value 1 -command setspdifin -selectcolor blue -font times
|
||||
radiobutton .control.spdif.in.input2 -text "Coaxial" -anchor nw -width 13 -variable spdifin -value 2 -command setspdifin -selectcolor blue -font times
|
||||
radiobutton .control.spdif.in.input3 -text "Intern " -anchor nw -width 13 -variable spdifin -command setspdifin -value 3 -selectcolor blue -font times
|
||||
|
||||
checkbutton .control.spdif.in.adat1cd -text "ADAT1 Intern" -anchor nw -width 13 -variable adat1cd -command setadat1cd -selectcolor blue -font times
|
||||
|
||||
pack .control.spdif.in.text .control.spdif.in.input1 .control.spdif.in.input2 .control.spdif.in.input3 .control.spdif.in.adat1cd
|
||||
|
||||
label .control.spdif.space
|
||||
|
||||
frame .control.spdif.out
|
||||
label .control.spdif.out.text -text "SPDIF Out" -justify left
|
||||
checkbutton .control.spdif.out.pro -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.pro .control.spdif.out.text -side bottom
|
||||
|
||||
pack .control.spdif.in .control.spdif.space .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
|
||||
|
||||
label .control.sync.space
|
||||
|
||||
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.sync.space .control.sync.src -side top -fill y -padx 3 -expand 1
|
||||
|
||||
label .control.space -text "" -width 10
|
||||
|
||||
# Buffer Size
|
||||
|
||||
frame .control.buf
|
||||
label .control.buf.text -text "Buffer Size (Latency)" -justify left
|
||||
radiobutton .control.buf.b1 -selectcolor red -text "64 (1.5 ms)" -width 13 -anchor nw -variable ssrate -value 1 -font times
|
||||
radiobutton .control.buf.b2 -selectcolor red -text "128 (3 ms)" -width 13 -anchor nw -variable ssrate -value 2 -font times
|
||||
radiobutton .control.buf.b3 -selectcolor red -text "256 (6 ms)" -width 13 -anchor nw -variable ssrate -value 3 -font times
|
||||
radiobutton .control.buf.b4 -selectcolor red -text "512 (12 ms)" -width 13 -anchor nw -variable ssrate -value 4 -font times
|
||||
radiobutton .control.buf.b5 -selectcolor red -text "1024 (23 ms)" -width 13 -anchor nw -variable ssrate -value 5 -font times
|
||||
radiobutton .control.buf.b6 -selectcolor red -text "2048 (46 ms)" -width 13 -anchor nw -variable ssrate -value 6 -font times
|
||||
radiobutton .control.buf.b7 -selectcolor red -text "4096 (93 ms)" -width 13 -anchor nw -variable ssrate -value 7 -font times
|
||||
radiobutton .control.buf.b8 -selectcolor red -text "8192 (186 ms)" -width 13 -anchor nw -variable ssrate -value 8 -font times
|
||||
|
||||
pack .control.buf.text .control.buf.b1 .control.buf.b2 .control.buf.b3 .control.buf.b4 .control.buf.b5 .control.buf.b6 .control.buf.b7 .control.buf.b8 -side top -padx 3
|
||||
|
||||
# Offset
|
||||
|
||||
frame .control.offset
|
||||
|
||||
frame .control.offset.in
|
||||
label .control.offset.in.text -text "Offset In" -justify left
|
||||
label .control.offset.in.off0 -text "dev\#0: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.in.off1 -text "dev\#1: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.in.off2 -text "dev\#2: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.in.off3 -text "dev\#3: -" -anchor nw -width 10 -font times
|
||||
|
||||
pack .control.offset.in.text .control.offset.in.off0 .control.offset.in.off1 .control.offset.in.off2 .control.offset.in.off3
|
||||
|
||||
label .control.offset.space
|
||||
|
||||
frame .control.offset.out
|
||||
label .control.offset.out.text -text "Offset Out" -justify left
|
||||
label .control.offset.out.off0 -text "dev\#0: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.out.off1 -text "dev\#1: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.out.off2 -text "dev\#2: -" -anchor nw -width 10 -font times
|
||||
label .control.offset.out.off3 -text "dev\#3: -" -anchor nw -width 10 -font times
|
||||
|
||||
pack .control.offset.out.off3 .control.offset.out.off2 .control.offset.out.off1 .control.offset.out.off0 .control.offset.out.text -side bottom
|
||||
|
||||
pack .control.offset.in .control.offset.space .control.offset.out -side top -fill y -padx 3 -expand 1
|
||||
|
||||
|
||||
pack .control.spdif .control.sync .control.space .control.buf .control.offset -side left -fill both -anchor n -expand 1
|
||||
|
||||
|
||||
label .statustext -text Status -justify center -relief ridge
|
||||
label .controltext -text Control -justify center -relief ridge
|
||||
|
||||
label .statusspace
|
||||
label .controlspace
|
||||
|
||||
pack .statustext .status .statusspace .controltext .control .controlspace -side top -anchor nw -fill both -expand 1
|
||||
|
||||
|
||||
proc get_bit {output sstr} {
|
||||
set idx1 [string last [concat $sstr 1] $output]
|
||||
set idx1 [expr $idx1 != -1]
|
||||
return $idx1
|
||||
}
|
||||
|
||||
proc get_val {output sstr} {
|
||||
set val [string wordend $output [string last $sstr $output]]
|
||||
set val [string range $output $val [expr $val+1]]
|
||||
return $val
|
||||
}
|
||||
|
||||
proc get_val2 {output sstr} {
|
||||
set val [string wordend $output [string first $sstr $output]]
|
||||
set val [string range $output $val [expr $val+2]]
|
||||
return $val
|
||||
}
|
||||
|
||||
proc get_control {} {
|
||||
global spprof
|
||||
global spemph
|
||||
global spnoaud
|
||||
global spoptical
|
||||
global spdifin
|
||||
global ssrate
|
||||
global master
|
||||
global wordclock
|
||||
global syncsource
|
||||
global CTRLPROG
|
||||
|
||||
set f [open "| $CTRLPROG control" r+]
|
||||
set ooo [read $f 1000]
|
||||
close $f
|
||||
# puts $ooo
|
||||
|
||||
set spprof [ get_bit $ooo "pro"]
|
||||
set spemph [ get_bit $ooo "emphasis"]
|
||||
set spnoaud [ get_bit $ooo "dolby"]
|
||||
set spoptical [ get_bit $ooo "opt_out"]
|
||||
set spdifin [ expr [ get_val $ooo "spdif_in"] + 1]
|
||||
set ssrate [ expr [ get_val $ooo "latency"] + 1]
|
||||
set master [ expr [ get_val $ooo "master"]]
|
||||
set wordclock [ expr [ get_val $ooo "wordclock"]]
|
||||
set syncsource [ expr [ get_val $ooo "sync_ref"] + 1]
|
||||
}
|
||||
|
||||
proc get_status {} {
|
||||
global srate
|
||||
global ctrlcom
|
||||
|
||||
global adatlock1
|
||||
global adatlock2
|
||||
global adatlock3
|
||||
|
||||
global adatsync1
|
||||
global adatsync2
|
||||
global adatsync3
|
||||
|
||||
global tcbusy
|
||||
global tcout
|
||||
global tcvalid
|
||||
|
||||
global spdiferr
|
||||
global crystal
|
||||
global .status.spdif.text
|
||||
global CTRLPROG
|
||||
|
||||
|
||||
set f [open "| $CTRLPROG status" r+]
|
||||
set ooo [read $f 1000]
|
||||
close $f
|
||||
# puts $ooo
|
||||
|
||||
# samplerate
|
||||
|
||||
set idx1 [string last "sr48 1" $ooo]
|
||||
set idx2 [string last "doublespeed 1" $ooo]
|
||||
if {$idx1 >= 0} {
|
||||
set fact1 48000
|
||||
} else {
|
||||
set fact1 44100
|
||||
}
|
||||
|
||||
if {$idx2 >= 0} {
|
||||
set fact2 2
|
||||
} else {
|
||||
set fact2 1
|
||||
}
|
||||
set srate [expr $fact1 * $fact2]
|
||||
# ADAT lock
|
||||
|
||||
set val [get_val $ooo lockmask]
|
||||
set adatlock1 0
|
||||
set adatlock2 0
|
||||
set adatlock3 0
|
||||
if {[expr $val & 1]} {
|
||||
set adatlock3 1
|
||||
}
|
||||
if {[expr $val & 2]} {
|
||||
set adatlock2 1
|
||||
}
|
||||
if {[expr $val & 4]} {
|
||||
set adatlock1 1
|
||||
}
|
||||
|
||||
# ADAT sync
|
||||
set val [get_val $ooo syncmask]
|
||||
set adatsync1 0
|
||||
set adatsync2 0
|
||||
set adatsync3 0
|
||||
|
||||
if {[expr $val & 1]} {
|
||||
set adatsync3 1
|
||||
}
|
||||
if {[expr $val & 2]} {
|
||||
set adatsync2 1
|
||||
}
|
||||
if {[expr $val & 4]} {
|
||||
set adatsync1 1
|
||||
}
|
||||
|
||||
# TC busy
|
||||
|
||||
set tcbusy [get_bit $ooo "busy"]
|
||||
set tcout [get_bit $ooo "out"]
|
||||
set tcvalid [get_bit $ooo "valid"]
|
||||
set spdiferr [expr [get_bit $ooo "spdif_error"] == 0]
|
||||
|
||||
# 000=64kHz, 100=88.2kHz, 011=96kHz
|
||||
# 111=32kHz, 110=44.1kHz, 101=48kHz
|
||||
|
||||
set val [get_val $ooo crystalrate]
|
||||
|
||||
set crystal "--.- kHz"
|
||||
if {$val == 0} {
|
||||
set crystal "64 kHz"
|
||||
}
|
||||
if {$val == 4} {
|
||||
set crystal "88.2 kHz"
|
||||
}
|
||||
if {$val == 3} {
|
||||
set crystal "96 kHz"
|
||||
}
|
||||
if {$val == 7} {
|
||||
set crystal "32 kHz"
|
||||
}
|
||||
if {$val == 6} {
|
||||
set crystal "44.1 kHz"
|
||||
}
|
||||
if {$val == 5} {
|
||||
set crystal "48 kHz"
|
||||
}
|
||||
.status.spdif.sr configure -text $crystal
|
||||
}
|
||||
|
||||
proc get_offset {} {
|
||||
global inoffset
|
||||
global outoffset
|
||||
global CTRLPROG
|
||||
|
||||
set f [open "| $CTRLPROG mix" r+]
|
||||
set ooo [read $f 1000]
|
||||
close $f
|
||||
# puts $ooo
|
||||
|
||||
if { [string match "*devnr*" $ooo] } {
|
||||
set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
|
||||
set val [get_val2 $ooo i_offset]
|
||||
.control.offset.in.off0 configure -text "dev\#0: $val"
|
||||
set val [get_val2 $ooo o_offset]
|
||||
.control.offset.out.off0 configure -text "dev\#0: $val"
|
||||
} else {
|
||||
.control.offset.in.off0 configure -text "dev\#0: -"
|
||||
.control.offset.out.off0 configure -text "dev\#0: -"
|
||||
}
|
||||
if { [string match "*devnr*" $ooo] } {
|
||||
set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
|
||||
set val [get_val2 $ooo i_offset]
|
||||
.control.offset.in.off1 configure -text "dev\#1: $val"
|
||||
set val [get_val2 $ooo o_offset]
|
||||
.control.offset.out.off1 configure -text "dev\#1: $val"
|
||||
} else {
|
||||
.control.offset.in.off1 configure -text "dev\#1: -"
|
||||
.control.offset.out.off1 configure -text "dev\#1: -"
|
||||
}
|
||||
if { [string match "*devnr*" $ooo] } {
|
||||
set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
|
||||
set val [get_val2 $ooo i_offset]
|
||||
.control.offset.in.off2 configure -text "dev\#2: $val"
|
||||
set val [get_val2 $ooo o_offset]
|
||||
.control.offset.out.off2 configure -text "dev\#2: $val"
|
||||
} else {
|
||||
.control.offset.in.off2 configure -text "dev\#2: -"
|
||||
.control.offset.out.off2 configure -text "dev\#2: -"
|
||||
}
|
||||
if { [string match "*devnr*" $ooo] } {
|
||||
set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end]
|
||||
set val [get_val2 $ooo i_offset]
|
||||
.control.offset.in.off3 configure -text "dev\#3: $val"
|
||||
set val [get_val2 $ooo o_offset]
|
||||
.control.offset.out.off3 configure -text "dev\#3: $val"
|
||||
} else {
|
||||
.control.offset.in.off3 configure -text "dev\#3: -"
|
||||
.control.offset.out.off3 configure -text "dev\#3: -"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
proc get_all {} {
|
||||
get_status
|
||||
get_control
|
||||
get_offset
|
||||
}
|
||||
|
||||
# main
|
||||
while {1} {
|
||||
after 200
|
||||
get_all
|
||||
update
|
||||
}
|
@@ -1,70 +0,0 @@
|
||||
Recording
|
||||
---------
|
||||
|
||||
Recording does not work on the author's card, but there
|
||||
is at least one report of it working on later silicon.
|
||||
The chip behaves differently than described in the data sheet,
|
||||
likely due to a chip bug. Working around this would require
|
||||
the help of ESS (for example by publishing an errata sheet),
|
||||
but ESS has not done so far.
|
||||
|
||||
Also, the chip only supports 24 bit addresses for recording,
|
||||
which means it cannot work on some Alpha mainboards.
|
||||
|
||||
|
||||
/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 my_file.au > /dev/dsp
|
||||
|
||||
does not work. Instead, you may use the play script from
|
||||
Chris Bagwell's sox-12.14 package (or later, 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.
|
||||
http://home.sprynet.com/sprynet/cbagwell/projects.html
|
||||
|
||||
|
||||
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 http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html.
|
||||
(Timidity patched will also run on OSS/Free).
|
||||
|
||||
|
||||
MIDI UART
|
||||
---------
|
||||
|
||||
The driver supports a simple MIDI UART interface, with
|
||||
no ioctl's supported.
|
||||
|
||||
|
||||
MIDI synthesizer
|
||||
----------------
|
||||
|
||||
The card has an OPL compatible FM synthesizer.
|
||||
|
||||
Thomas Sailer
|
||||
t.sailer@alumni.ethz.ch
|
@@ -1,81 +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 my_file.au > /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.
|
||||
http://home.sprynet.com/sprynet/cbagwell/projects.html
|
||||
|
||||
|
||||
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 http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html.
|
||||
(Timidity patched will also run on OSS/Free).
|
||||
|
||||
|
||||
MIDI UART
|
||||
---------
|
||||
|
||||
The driver supports a simple MIDI UART interface, with
|
||||
no ioctl's supported.
|
||||
|
||||
|
||||
MIDI synthesizer
|
||||
----------------
|
||||
|
||||
The card both has an OPL compatible FM synthesizer as well as
|
||||
a wavetable synthesizer.
|
||||
|
||||
I haven't managed so far to get the OPL synth running.
|
||||
|
||||
Using the wavetable synthesizer requires allocating
|
||||
1-4MB of physically contiguous memory, which isn't possible
|
||||
currently on Linux without ugly hacks like the bigphysarea
|
||||
patch. Therefore, the driver doesn't support wavetable
|
||||
synthesis.
|
||||
|
||||
|
||||
No support from S3
|
||||
------------------
|
||||
|
||||
I do not get any support from S3. Therefore, the driver
|
||||
still has many problems. For example, although the manual
|
||||
states that the chip should be able to access the sample
|
||||
buffer anywhere in 32bit address space, I haven't managed to
|
||||
get it working with buffers above 16M. Therefore, the card
|
||||
has the same disadvantages as ISA soundcards.
|
||||
|
||||
Given that the card is also very noisy, and if you haven't
|
||||
already bought it, you should strongly opt for one of the
|
||||
comparatively priced Ensoniq products.
|
||||
|
||||
|
||||
Thomas Sailer
|
||||
t.sailer@alumni.ethz.ch
|
Reference in New Issue
Block a user