Hi,
OK, here's the first attempt to resolve some of those FIXMEs:
- Remove dependency on OSS emulation (trivial)
- Use udelay() in busy-waiting loops, remove HZ references
- Fix breakage in MIDI mixer control
- Minor whitespace issues
I have compiled the driver (hand-patching the Makefiles to get the correct sub-modules
built), installed it, successfully uploaded the firmware, and then played MIDI files
and WAV files through the SoundScape.
For the record:
snd-pcm-oss 36548 0 (autoclean)
snd-mixer-oss 10240 0 (autoclean) [snd-pcm-oss]
snd-seq-midi 3232 0 (autoclean)
snd-seq-midi-event 3144 0 (autoclean) [snd-seq-midi]
snd-seq 34668 0 (autoclean) [snd-seq-midi snd-seq-midi-event]
snd-sscape 6304 0 (autoclean)
snd-cs4231-lib 13248 0 (autoclean) [snd-sscape]
snd-pcm 54880 0 (autoclean) [snd-pcm-oss snd-cs4231-lib]
snd-timer 9696 0 (autoclean) [snd-seq snd-cs4231-lib snd-pcm]
snd-hwdep 3360 0 (autoclean) [snd-sscape]
snd-mpu401-uart 2704 0 (autoclean) [snd-sscape]
snd-rawmidi 11968 0 (autoclean) [snd-seq-midi snd-mpu401-uart]
snd-seq-device 3744 0 (autoclean) [snd-seq-midi snd-seq snd-rawmidi]snd
23816 0 (autoclean) [snd-pcm-oss snd-mixer-oss snd-seq-midi
snd-seq-midi-event snd-seq snd-sscape snd-cs4231-lib snd-pcm snd-timer snd-hwdep
snd-mpu401-uart snd-rawmidi snd-seq-device]
soundcore 3620 5 (autoclean) [snd]
Chris
Index: sscape.c
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/isa/sscape.c,v
retrieving revision 1.2
diff -u -u -r1.2 sscape.c
--- sscape.c 24 Sep 2002 06:30:16 -0000 1.2
+++ sscape.c 24 Sep 2002 22:23:07 -0000
@@ -7,7 +7,6 @@
*
* FIXME (deadlock for alsa-kernel):
* - use ISA PnP scheme used by all ALSA ISA drivers
- * - remove CONFIG_SND_OSSEMUL dependency
* - add non-MODULE build option
*
*
@@ -28,6 +27,7 @@
#include <sound/driver.h>
#include <linux/init.h>
+#include <linux/delay.h>
#include <linux/isapnp.h>
#include <linux/spinlock.h>
#include <asm/dma.h>
@@ -42,10 +42,6 @@
#define chip_t cs4231_t
-#ifndef CONFIG_SND_OSSEMUL
-# error Need ALSA configuration!
-#endif
-
EXPORT_NO_SYMBOLS;
MODULE_AUTHOR("Chris Rankin");
@@ -262,8 +258,10 @@
{
int data;
- while (((data = host_read_unsafe(io_base)) < 0) && (timeout != 0))
+ while (((data = host_read_unsafe(io_base)) < 0) && (timeout != 0)) {
+ udelay(100);
--timeout;
+ } /* while */
return data;
}
@@ -292,8 +290,10 @@
{
int err;
- while (!(err = host_write_unsafe(io_base, data)) && (timeout != 0))
+ while (!(err = host_write_unsafe(io_base, data)) && (timeout != 0)) {
+ udelay(100);
--timeout;
+ } /* while */
return err;
}
@@ -369,8 +369,10 @@
*/
static int sscape_wait_dma_unsafe(unsigned io_base, enum GA_REG reg, unsigned timeout)
{
- while (!(sscape_read_unsafe(io_base, reg) & 0x01) && (timeout != 0))
+ while (!(sscape_read_unsafe(io_base, reg) & 0x01) && (timeout != 0)) {
+ udelay(100);
--timeout;
+ } /* while */
return (sscape_read_unsafe(io_base, reg) & 0x01);
}
@@ -397,7 +399,7 @@
return 1;
--timeout;
- } /* while */
+ } /* while */
return 0;
}
@@ -424,7 +426,7 @@
return 1;
--timeout;
- } /* while */
+ } /* while */
return 0;
}
@@ -479,7 +481,7 @@
size -= len;
snd_dma_program(s->chip->dma1, dma.addr, len, DMA_MODE_WRITE);
sscape_start_dma_unsafe(s->io_base, GA_DMAA_REG);
- if (!sscape_wait_dma_unsafe(s->io_base, GA_DMAA_REG, 5000 * HZ)) {
+ if (!sscape_wait_dma_unsafe(s->io_base, GA_DMAA_REG, 5000)) {
/*
* Don't forget to release this spinlock we're holding ...
*/
@@ -489,7 +491,7 @@
ret = -EAGAIN;
goto _release_dma;
}
- } /* while */
+ } /* while */
set_host_mode_unsafe(s->io_base);
@@ -505,10 +507,10 @@
* give it 5 seconds (max) ...
*/
ret = 0;
- if (!obp_startup_ack(s, 5 * HZ)) {
+ if (!obp_startup_ack(s, 5)) {
printk(KERN_ERR "sscape: No response from on-board processor after
upload\n");
ret = -EAGAIN;
- } else if (!host_startup_ack(s, 5 * HZ)) {
+ } else if (!host_startup_ack(s, 5)) {
printk(KERN_ERR "sscape: SoundScape failed to initialise\n");
ret = -EAGAIN;
}
@@ -542,7 +544,7 @@
spin_lock_irqsave(&sscape->lock, flags);
if (ret == 0) {
- data = host_read_ctrl_unsafe(sscape->io_base, 100 * HZ);
+ data = host_read_ctrl_unsafe(sscape->io_base, 100);
}
set_midi_mode_unsafe(sscape->io_base);
spin_unlock_irqrestore(&sscape->lock, flags);
@@ -707,8 +709,8 @@
spin_lock_irqsave(&s->lock, flags);
set_host_mode_unsafe(s->io_base);
- if (host_write_ctrl_unsafe(s->io_base, CMD_GET_MIDI_VOL, 100 * HZ)) {
- uctl->value.integer.value[0] = host_read_ctrl_unsafe(s->io_base, 100 *
HZ);
+ if (host_write_ctrl_unsafe(s->io_base, CMD_GET_MIDI_VOL, 100)) {
+ uctl->value.integer.value[0] = host_read_ctrl_unsafe(s->io_base, 100);
}
set_midi_mode_unsafe(s->io_base);
@@ -739,13 +741,13 @@
* and then perform another volume-related command. Perhaps the
* first command is an "open" and the second command is a "close"?
*/
- if (s->midi_vol != ((unsigned char) uctl->value.integer. value[0] & 127)) {
+ if (s->midi_vol == ((unsigned char) uctl->value.integer. value[0] & 127)) {
change = 0;
goto __skip_change;
}
- change = (host_write_ctrl_unsafe(s->io_base, CMD_SET_MIDI_VOL, 100 * HZ)
- && host_write_ctrl_unsafe(s->io_base, ((unsigned char)
uctl->value.integer. value[0]) & 127, 100 * HZ)
- && host_write_ctrl_unsafe(s->io_base, CMD_XXX_MIDI_VOL, 100 * HZ));
+ change = (host_write_ctrl_unsafe(s->io_base, CMD_SET_MIDI_VOL, 100)
+ && host_write_ctrl_unsafe(s->io_base, ((unsigned char)
+uctl->value.integer. value[0]) & 127, 100)
+ && host_write_ctrl_unsafe(s->io_base, CMD_XXX_MIDI_VOL, 100));
__skip_change:
/*
@@ -1209,9 +1211,9 @@
* Initialize mixer
*/
sscape->midi_vol = 0;
- host_write_ctrl_unsafe(sscape->io_base, CMD_SET_MIDI_VOL, 100 * HZ);
- host_write_ctrl_unsafe(sscape->io_base, 0, 100 * HZ);
- host_write_ctrl_unsafe(sscape->io_base, CMD_XXX_MIDI_VOL, 100 * HZ);
+ host_write_ctrl_unsafe(sscape->io_base, CMD_SET_MIDI_VOL, 100);
+ host_write_ctrl_unsafe(sscape->io_base, 0, 100);
+ host_write_ctrl_unsafe(sscape->io_base, CMD_XXX_MIDI_VOL, 100);
/*
@@ -1300,7 +1302,7 @@
while ((i < ARRAY_SIZE(sscape_card)) && sscape_card[i]) {
snd_card_free(sscape_card[i]);
++i;
- } /* while */
+ } /* while */
}
module_init(sscape_init);
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel