summaryrefslogtreecommitdiffstats
path: root/drivers/sound/cs4232.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/sound/cs4232.c')
-rw-r--r--drivers/sound/cs4232.c119
1 files changed, 62 insertions, 57 deletions
diff --git a/drivers/sound/cs4232.c b/drivers/sound/cs4232.c
index 0778273f9..2098c85a8 100644
--- a/drivers/sound/cs4232.c
+++ b/drivers/sound/cs4232.c
@@ -1,5 +1,7 @@
/*
- * sound/cs4232.c
+ * Copyright (C) by Hannu Savolainen 1993-1997
+ *
+ * cs4232.c
*
* The low level driver for Crystal CS4232 based cards. The CS4232 is
* a PnP compatible chip which contains a CS4231A codec, SB emulation,
@@ -35,22 +37,21 @@
* Alan Cox Modularisation, Basic cleanups.
* Paul Barton-Davis Separated MPU configuration, added
* Tropez+ (WaveFront) support
- */
-
-/*
- * Copyright (C) by Hannu Savolainen 1993-1997
- *
- * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
- * Version 2 (June 1991). See the "COPYING" file distributed with this software
- * for more info.
+ * Christoph Hellwig Adapted to module_init/module_exit,
+ * simple cleanups
*/
#include <linux/config.h>
#include <linux/module.h>
+#include <linux/init.h>
#include "sound_config.h"
#include "soundmodule.h"
+#include "cs4232.h"
+#include "ad1848.h"
+#include "mpu401.h"
+
#define KEY_PORT 0x279 /* Same as LPT1 status port */
#define CSN_NUM 0x99 /* Just a random number */
@@ -78,11 +79,6 @@ int probe_cs4232_mpu(struct address_info *hw_config)
return 1;
}
-void attach_cs4232_mpu(struct address_info *hw_config)
-{
- /* Nothing needs doing */
-}
-
static unsigned char crystal_key[] = /* A 32 byte magic key sequence */
{
0x96, 0x35, 0x9a, 0xcd, 0xe6, 0xf3, 0x79, 0xbc,
@@ -215,8 +211,15 @@ int probe_cs4232(struct address_info *hw_config)
void attach_cs4232(struct address_info *hw_config)
{
- int base = hw_config->io_base, irq = hw_config->irq;
- int dma1 = hw_config->dma, dma2 = hw_config->dma2;
+ int base = hw_config->io_base,
+ irq = hw_config->irq,
+ dma1 = hw_config->dma,
+ dma2 = hw_config->dma2;
+
+ if (base == -1 || irq == -1 || dma1 == -1) {
+ printk(KERN_ERR "cs4232: dma, irq and io must be set.\n");
+ return;
+ }
if (dma2 == -1)
dma2 = dma1;
@@ -263,6 +266,7 @@ void attach_cs4232(struct address_info *hw_config)
}
hw_config->slots[1] = hw_config2.slots[1];
}
+ SOUND_LOCK;
}
void unload_cs4232(struct address_info *hw_config)
@@ -302,19 +306,18 @@ void unload_cs4232(struct address_info *hw_config)
}
}
-void unload_cs4232_mpu(struct address_info *hw_config)
-{
- /* Not required. Handled by cs4232_unload */
-}
+static struct address_info cfg;
+static struct address_info cfg_mpu;
-#ifdef MODULE
+static int __initdata io = -1;
+static int __initdata irq = -1;
+static int __initdata dma = -1;
+static int __initdata dma2 = -1;
+static int __initdata mpuio = -1;
+static int __initdata mpuirq = -1;
+static int __initdata synthio = -1;
+static int __initdata synthirq = -1;
-int io = -1;
-int irq = -1;
-int dma = -1;
-int dma2 = -1;
-int mpuio = -1;
-int mpuirq = -1;
MODULE_PARM(io,"i");
MODULE_PARM(irq,"i");
@@ -322,34 +325,20 @@ MODULE_PARM(dma,"i");
MODULE_PARM(dma2,"i");
MODULE_PARM(mpuio,"i");
MODULE_PARM(mpuirq,"i");
-
-int synthio = -1;
-int synthirq = -1;
MODULE_PARM(synthio,"i");
MODULE_PARM(synthirq,"i");
-EXPORT_NO_SYMBOLS;
-
-struct address_info cfg;
-struct address_info mpu_cfg;
-
/*
* Install a CS4232 based card. Need to have ad1848 and mpu401
* loaded ready.
*/
-int init_module(void)
+static int __init init_cs4232(void)
{
- if (io == -1 || irq == -1 || dma == -1 || dma2 == -1)
- {
- printk(KERN_ERR "cs4232: dma, dma2, irq and io must be set.\n");
- return -EINVAL;
- }
#ifdef CONFIG_SOUND_WAVEFRONT_MODULE
if(synthio == -1)
printk(KERN_WARNING "cs4232: set synthio and synthirq to use the wavefront facilities.\n");
- else
- {
+ else {
synth_base = synthio;
synth_irq = synthirq;
}
@@ -363,32 +352,48 @@ int init_module(void)
cfg.dma = dma;
cfg.dma2 = dma2;
- mpu_cfg.io_base = -1;
- mpu_cfg.irq = -1;
+ cfg_mpu.io_base = -1;
+ cfg_mpu.irq = -1;
if (mpuio != -1 && mpuirq != -1) {
- mpu_cfg.io_base = mpuio;
- mpu_cfg.irq = mpuirq;
- probe_cs4232_mpu(&mpu_cfg); /* Bug always returns 0 not OK -- AC */
+ cfg_mpu.io_base = mpuio;
+ cfg_mpu.irq = mpuirq;
+ probe_cs4232_mpu(&cfg_mpu); /* Bug always returns 0 not OK -- AC */
}
if (probe_cs4232(&cfg) == 0)
return -ENODEV;
-
attach_cs4232(&cfg);
-
- if (mpuio != -1 && mpuirq != -1) {
- attach_cs4232_mpu(&mpu_cfg);
- }
-
- SOUND_LOCK;
+
return 0;
}
-void cleanup_module(void)
+static void __exit cleanup_cs4232(void)
{
unload_cs4232(&cfg); /* unloads MPU as well, if needed */
SOUND_LOCK_END;
}
-#endif /* MODULE */
+module_init(init_cs4232);
+module_exit(cleanup_cs4232);
+
+#ifndef MODULE
+static int __init setup_cs4232(char *str)
+{
+ /* io, irq, dma, dma2 mpuio, mpuirq*/
+ int ints[7];
+
+ str = get_options(str, ARRAY_SIZE(ints), ints);
+
+ io = ints[1];
+ irq = ints[2];
+ dma = ints[3];
+ dma2 = ints[4];
+ mpuio = ints[5];
+ mpuirq = ints[6];
+
+ return 1;
+}
+
+__setup("cs4232=", setup_cs4232);
+#endif