diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/Config.in linux/drivers/sound/Config.in --- linux.orig/drivers/sound/Config.in Sun Feb 27 17:42:11 2000 +++ linux/drivers/sound/Config.in Sun Feb 27 18:10:54 2000 @@ -87,13 +87,6 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then dep_tristate ' AD1816(A) based cards (EXPERIMENTAL)' CONFIG_SOUND_AD1816 $CONFIG_SOUND - if [ "$CONFIG_SOUND_AD1816" = "y" ]; then - hex 'AD1816 audio I/O base 530, 604, E80 or F40' CONFIG_AD1816_BASE 530 - int 'AD1816 audio IRQ 5, 7, 9, 11, 12 or 15' CONFIG_AD1816_IRQ 7 - int 'AD1816 audio DMA 0, 1 or 3' CONFIG_AD1816_DMA 0 - int 'AD1816 second (duplex) DMA 0, 1 or 3' CONFIG_AD1816_DMA2 3 - int 'AD1816 clock chip frequency' CONFIG_AD1816_CLOCK 33000 - fi fi dep_tristate ' Aztech Sound Galaxy (non-PnP) cards' CONFIG_SOUND_SGALAXY $CONFIG_SOUND_OSS diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/ad1816.c linux/drivers/sound/ad1816.c --- linux.orig/drivers/sound/ad1816.c Sun Feb 27 17:44:17 2000 +++ linux/drivers/sound/ad1816.c Sun Feb 27 17:47:20 2000 @@ -53,9 +53,9 @@ */ -#include #include #include +#include #include "soundmodule.h" #include "sound_config.h" @@ -97,9 +97,7 @@ int irq_ok; int *osp; -} - -ad1816_info; +} ad1816_info; static int nr_ad1816_devs = 0; @@ -1098,7 +1096,6 @@ int tmp; printk("ad1816: AD1816 sounddriver Copyright (C) 1998 by Thorsten Knabe\n"); - printk("ad1816: $Header: /home/tek/CVSROOT/sound22/ad1816.c,v 1.3 1999/04/18 16:41:41 tek Exp $\n"); printk("ad1816: io=0x%x, irq=%d, dma=%d, dma2=%d, clockfreq=%d, options=%d isadmabug=%d\n", hw_config->io_base, hw_config->irq, @@ -1308,6 +1305,7 @@ devc)) >= 0) { audio_devs[my_dev]->min_fragment = 0; } + SOUND_LOCK; } void unload_card(ad1816_info *devc) @@ -1344,52 +1342,11 @@ } } -void unload_ad1816 (struct address_info *hw_config) -{ - int i; - ad1816_info *devc = NULL; - - /* remove any soundcard */ - if (hw_config==NULL) { - for (i = 0; i < nr_ad1816_devs; i++) { - devc = &dev_info[i]; - unload_card(devc); - } - nr_ad1816_devs=0; - } else { - /* remove specified soundcard */ - for (i = 0; i < nr_ad1816_devs; i++) { - int j; - - if (dev_info[i].base == hw_config->io_base) { - devc = &dev_info[i]; - unload_card(devc); - nr_ad1816_devs--; - for ( j=i; j < nr_ad1816_devs ; j++) { - dev_info[j] = dev_info[j+1]; - } - i--; - } - } - } -} - - -/* ----------------------------- 2.1.xxx module stuff ----------------- */ - -EXPORT_SYMBOL(ad1816_interrupt); -EXPORT_SYMBOL(probe_ad1816); -EXPORT_SYMBOL(attach_ad1816); -EXPORT_SYMBOL(unload_ad1816); - - #ifdef MODULE - int io = -1; int irq = -1; int dma = -1; int dma2 = -1; - MODULE_PARM(io,"i"); MODULE_PARM(irq,"i"); MODULE_PARM(dma,"i"); @@ -1397,33 +1354,41 @@ MODULE_PARM(ad1816_clockfreq,"i"); MODULE_PARM(options,"i"); -struct address_info cfg; - - int init_module(void) { - if (io == -1 || irq == -1 || dma == -1 || dma2 == -1) { - printk("ad1816: dma, dma2, irq and io must be set.\n"); - return -EINVAL; - } - cfg.io_base = io; - cfg.irq = irq; - cfg.dma = dma; - cfg.dma2 = dma2; + if (io == -1 || irq == -1 || dma == -1 || dma2 == -1) { + printk(KERN_INFO "ad1816: dma, dma2, irq and io must be set.\n"); + return -EINVAL; + } - if (probe_ad1816(&cfg) == 0) { - return -ENODEV; + cfg.io_base = io; + cfg.irq = irq; + cfg.dma = dma; + cfg.dma2 = dma2; + + if (probe_ad1816(&cfg) == 0) { + return -ENODEV; } - attach_ad1816(&cfg); - SOUND_LOCK; - return 0; + + attach_ad1816(&cfg); } - -void cleanup_module(void) +void cleanup_module (void) { - unload_ad1816(NULL); - SOUND_LOCK_END; + int i; + ad1816_info *devc = NULL; + + /* remove any soundcard */ + for (i = 0; i < nr_ad1816_devs; i++) { + devc = &dev_info[i]; + unload_card(devc); + } + nr_ad1816_devs=0; + + SOUND_LOCK_END; } +#endif -#endif /* MODULE */ +EXPORT_SYMBOL(ad1816_interrupt); +EXPORT_SYMBOL(probe_ad1816); +EXPORT_SYMBOL(attach_ad1816); diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/dev_table.c linux/drivers/sound/dev_table.c --- linux.orig/drivers/sound/dev_table.c Sun Feb 27 17:44:17 2000 +++ linux/drivers/sound/dev_table.c Sun Feb 27 17:32:01 2000 @@ -15,13 +15,13 @@ #include #include - #define _DEV_TABLE_C_ #include "sound_config.h" int softoss_dev = 0; int sound_started = 0; int sndtable_get_cardcount(void); +struct address_info cfg; int snd_find_driver(int type) { @@ -71,6 +71,10 @@ sound_preinit_lowlevel_drivers(); } #endif +#ifdef CONFIG_SOUND_AD1816 + if (probe_ad1816(&cfg)) + attach_ad1816(&cfg); +#endif /* * Check the number of cards actually defined in the table @@ -620,3 +624,25 @@ sound_timer_devs[dev] = NULL; } +#ifndef MODULE +void soundcard_setup(char *str) +{ + /* io, irq, dma, dma2 */ + int ints[5]; + str = get_options(str, ARRAY_SIZE(ints), ints); + + cfg.io_base = ints[1]; + cfg.irq = ints[2]; + cfg.dma = ints[3]; + cfg.dma2 = ints[4]; + + printk("soundcard: io=%x, irq=%d, dma=%d, dma2=%d\n", + + cfg.io_base, + cfg.irq, + cfg.dma, + cfg.dma2); +} + +__setup("soundcard=", soundcard_setup); +#endif diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/dev_table.h linux/drivers/sound/dev_table.h --- linux.orig/drivers/sound/dev_table.h Sun Feb 27 17:44:17 2000 +++ linux/drivers/sound/dev_table.h Sun Feb 27 17:31:14 2000 @@ -418,11 +418,6 @@ {"SGALAXY", 0, SNDCARD_SGALAXY, "Sound Galaxy WSS", attach_sgalaxy, probe_sgalaxy, unload_sgalaxy}, #endif -#ifdef CONFIG_SOUND_AD1816 - {"AD1816", 0, SNDCARD_AD1816, "AD1816", attach_ad1816, -probe_ad1816, unload_ad1816}, -#endif - #ifdef CONFIG_SOUND_YM3812 {"OPL3", 0, SNDCARD_ADLIB, "OPL-2/OPL-3 FM", attach_adlib_card, probe_adlib, unload_adlib}, #endif diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/soundcard.c linux/drivers/sound/soundcard.c --- linux.orig/drivers/sound/soundcard.c Sun Feb 27 17:44:17 2000 +++ linux/drivers/sound/soundcard.c Sun Feb 27 17:36:32 2000 @@ -484,10 +484,8 @@ } in_use++; -#ifdef CONFIG_MODULES notifier_call_chain(&sound_locker, 1, 0); lock_depth++; -#endif return 0; } @@ -522,10 +520,8 @@ } in_use--; -#ifdef CONFIG_MODULES notifier_call_chain(&sound_locker, 0, 0); lock_depth--; -#endif return 0; } diff -rNu --exclude-from=/usr/src/exclude linux.orig/drivers/sound/soundmodule.h linux/drivers/sound/soundmodule.h --- linux.orig/drivers/sound/soundmodule.h Thu May 14 19:33:17 1998 +++ linux/drivers/sound/soundmodule.h Sun Feb 27 17:36:47 2000 @@ -2,12 +2,11 @@ #define _SOUNDMODULE_H #include +#include extern struct notifier_block *sound_locker; extern void sound_notifier_chain_register(struct notifier_block *); -#ifdef MODULE - #define SOUND_LOCK sound_notifier_chain_register(&sound_notifier); #define SOUND_LOCK_END notifier_chain_unregister(&sound_locker, &sound_notifier) @@ -27,5 +26,4 @@ 0 }; -#endif #endif