/*
sound/oss/aedsp16.c
Audio Excel DSP 16 software configuration routines
Copyright (C) 1995,1996,1997,1998 Riccardo Facchetti (fizban@tin.it)
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.
*/
/*
* Include the main OSS Lite header file. It include all the os, OSS Lite, etc
* headers needed by this source.
*/
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/init.h>
#include "sound_config.h"
/*
READ THIS
This module started to configure the Audio Excel DSP 16 Sound Card.
Now works with the SC-6000 (old aedsp16) and new SC-6600 based cards.
NOTE: I have NO idea about Audio Excel DSP 16 III. If someone owns this
audio card and want to see the kernel support for it, please contact me.
Audio Excel DSP 16 is an SB pro II, Microsoft Sound System and MPU-401
compatible card.
It is software-only configurable (no jumpers to hard-set irq/dma/mpu-irq),
so before this module, the only way to configure the DSP under linux was
boot the MS-DOS loading the sound.sys device driver (this driver soft-
configure the sound board hardware by massaging someone of its registers),
and then ctrl-alt-del to boot linux with the DSP configured by the DOS
driver.
This module works configuring your Audio Excel DSP 16's irq, dma and
mpu-401-irq. The OSS Lite routines rely on the fact that if the
hardware is there, they can detect it. The problem with AEDSP16 is
that no hardware can be found by the probe routines if the sound card
is not configured properly. Sometimes the kernel probe routines can find
an SBPRO even when the card is not configured (this is the standard setup
of the card), but the SBPRO emulation don't work well if the card is not
properly initialized. For this reason
aedsp16_init_board()
routine is called before the OSS Lite probe routines try to detect the
hardware.
NOTE (READ THE NOTE TOO, IT CONTAIN USEFUL INFORMATIONS)
NOTE: Now it works with SC-6000 and SC-6600 based audio cards. The new cards
have no jumper switch at all. No more WSS or MPU-401 I/O port switches. They
have to be configured by software.
NOTE: The driver is merged with the new OSS Lite sound driver. It works
as a lowlevel driver.
The Audio Excel DSP 16 Sound Card emulates both SBPRO and MSS;
the OSS Lite sound driver can be configured for SBPRO and MSS cards
at the same time, but the aedsp16 can't be two cards!!
When we configure it, we have to choose the SBPRO or the MSS emulation
for AEDSP16. We also can install a *REAL* card of the other type (see [1]).
NOTE: If someone can test the combination AEDSP16+MSS or AEDSP16+SBPRO
please let me know if it works.
The MPU-401 support can be compiled in together with one of the other
two operating modes.
NOTE: This is something like plug-and-play: we have only to plug
the AEDSP16 board in the socket, and then configure and compile
a kernel that uses the AEDSP16 software configuration capability.
No jumper setting is needed!
For example, if you want AEDSP16 to be an SBPro, on irq 10, dma 3
you have just to make config the OSS Lite package, configuring
the AEDSP16 sound card, then activating the SBPro emulation mode
and at last configuring IRQ and DMA.
Compile the kernel and run it.
NOTE: This means for SC-6000 cards that you can choose irq and dma,
but not the I/O addresses. To change I/O addresses you have to set
them with jumpers. For SC-6600 cards you have no jumpers so you have
to set up your full card configuration in the make config.
You can change the irq/dma/mirq settings WITHOUT THE NEED to open
your computer and massage the jumpers (there are no irq/dma/mirq
jumpers to be configured anyway, only I/O BASE values have to be
configured with jumpers)
For some ununderstandable reason, the card default of irq 7, dma 1,
don't work for me. Seems to be an IRQ or DMA conflict. Under heavy
HDD work, the kernel start to erupt out a lot of messages like:
'Sound: DMA timed out - IRQ/DRQ config error?'
For what I can say, I have NOT any conflict at irq 7 (under linux I'm
using the lp polling driver), and dma line 1 is unused as stated by
/proc/dma. I can suppose this is a bug of AEDSP16. I know my hardware so
I'm pretty sure I have not any conflict, but may be I'm wrong. Who knows!
Anyway a setting of irq 10, dma 3 works really fine.
NOTE: if someone can use AEDSP16 with irq 7, dma 1, please let me know
the emulation mode, all the installed hardware and the hardware
configuration (irq and dma settings of all the hardware).
This init module should work with SBPRO+MSS, when one of the two is
the AEDSP16 emulation and the other the real card. (see [1])
For example:
AEDSP16 (0x220) in SBPRO emu (0x220) + real MSS + other
AEDSP16 (0x220) in MSS emu + real SBPRO (0x240) + other
MPU401 should work. (see [2])
[1]
---
Date: Mon, 29 Jul 1997 08:35:40 +0100
From: Mr S J Greenaway <sjg95@unixfe.rl.ac.uk>
[...]
Just to let you know got my Audio Excel (emulating a MSS) working
with my original SB16, thanks for the driver!
[...]
---
[2] Not tested by me for lack of hardware.
TODO, WISHES AND TECH
- About I/O ports allocation -
Request the 2x0h region (port base) in any case if we are using this card.
NOTE: the "aedsp16 (base)" string with which we are requesting the aedsp16
port base region (see code) does not mean necessarily that we are emulating
sbpro. Even if this region is the sbpro I/O ports region, we use this
region to access the control registers of the card, and if emulating
sbpro, I/O sbpro registers too. If we are emulating MSS, the sbpro