diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-03-12 23:15:27 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-03-12 23:15:27 +0000 |
commit | ae38fd1e4c98588314a42097c5a5e77dcef23561 (patch) | |
tree | f9f10c203bb9e5fbad4810d1f8774c08dfad20ff /drivers/sound/ad1816.c | |
parent | 466a823d79f41d0713b272e48fd73e494b0588e0 (diff) |
Merge with Linux 2.3.50.
Diffstat (limited to 'drivers/sound/ad1816.c')
-rw-r--r-- | drivers/sound/ad1816.c | 227 |
1 files changed, 97 insertions, 130 deletions
diff --git a/drivers/sound/ad1816.c b/drivers/sound/ad1816.c index 8813d519e..d44cf1389 100644 --- a/drivers/sound/ad1816.c +++ b/drivers/sound/ad1816.c @@ -1,59 +1,43 @@ /* - -AD1816 lowlevel sound driver for Linux 2.2.0 and above - -Copyright (C) 1998 by Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de> -Based on the CS4232/AD1848 driver Copyright (C) by Hannu Savolainen 1993-1996 - -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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - -------------------------------------------------------------------------------- -NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! - -This software is still under development. New versions of the driver -are available from: - http://www.student.informatik.tu-darmstadt.de/~tek/projects/linux.html -or - http://www.tu-darmstadt.de/~tek01/projects/linux.html - -Please report any bugs to: tek@rbg.informatik.tu-darmstadt.de - -------------------------------------------------------------------------------- - -version: 1.3 -cvs: $Header: /home/tek/CVSROOT/sound22/ad1816.c,v 1.3 1999/04/18 16:41:41 tek Exp $ -status: experimental -date: 1999/4/18 - -Changes: - Oleg Drokin: Some cleanup of load/unload functions. 1998/11/24 - - Thorsten Knabe: attach and unload rewritten, - some argument checks added 1998/11/30 - - Thorsten Knabe: Buggy isa bridge workaround added 1999/01/16 - - David Moews/Thorsten Knabe: Introduced options - parameter. Added slightly modified patch from - David Moews to disable dsp audio sources by setting - bit 0 of options parameter. This seems to be - required by some Aztech/Newcom SC-16 cards. 1999/04/18 - -*/ + * + * AD1816 lowlevel sound driver for Linux 2.2.0 and above + * + * Copyright (C) 1998 by Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de> + * + * Based on the CS4232/AD1848 driver Copyright (C) by Hannu Savolainen 1993-1996 + * + * This software is still under development. New versions of the driver + * are available from: + * http://www.student.informatik.tu-darmstadt.de/~tek/projects/linux.html + * or http://www.tu-darmstadt.de/~tek01/projects/linux.html + * + * Please report any bugs to: tek@rbg.informatik.tu-darmstadt.de + * + * + * version: 1.3 + * cvs: $Header: /home/tek/CVSROOT/sound22/ad1816.c,v 1.3 1999/04/18 16:41:41 tek Exp $ + * status: experimental + * date: 1999/4/18 + * + * Changes: + * Oleg Drokin: Some cleanup of load/unload functions. 1998/11/24 + * + * Thorsten Knabe: attach and unload rewritten, + * some argument checks added 1998/11/30 + * + * Thorsten Knabe: Buggy isa bridge workaround added 1999/01/16 + * + * David Moews/Thorsten Knabe: Introduced options + * parameter. Added slightly modified patch from + * David Moews to disable dsp audio sources by setting + * bit 0 of options parameter. This seems to be + * required by some Aztech/Newcom SC-16 cards. 1999/04/18 + * + * Christoph Hellwig: Adapted to module_init/module_exit. 2000/03/03 + */ #include <linux/module.h> +#include <linux/init.h> #include <linux/stddef.h> #include "soundmodule.h" #include "sound_config.h" @@ -96,14 +80,10 @@ typedef struct int irq_ok; int *osp; -} - -ad1816_info; - -static int nr_ad1816_devs = 0; - -static int ad1816_clockfreq=33000; +} ad1816_info; +static int nr_ad1816_devs = 0; +static int ad1816_clockfreq=33000; static int options=0; /* for backward mapping of irq to sound device */ @@ -617,7 +597,8 @@ static struct audio_driver ad1816_audio_driver = /* Interrupt handler */ -void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy) + +static void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy) { unsigned char status; ad1816_info *devc; @@ -1089,7 +1070,7 @@ static struct mixer_operations ad1816_mixer_operations = /* replace with probe routine */ -int probe_ad1816 ( struct address_info *hw_config ) +static int __init probe_ad1816 ( struct address_info *hw_config ) { ad1816_info *devc = &dev_info[nr_ad1816_devs]; int io_base=hw_config->io_base; @@ -1097,7 +1078,6 @@ int probe_ad1816 ( struct address_info *hw_config ) 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, @@ -1183,7 +1163,7 @@ int probe_ad1816 ( struct address_info *hw_config ) */ -void attach_ad1816 (struct address_info *hw_config) +static void __init attach_ad1816 (struct address_info *hw_config) { int my_dev; char dev_name[100]; @@ -1309,7 +1289,7 @@ void attach_ad1816 (struct address_info *hw_config) } } -void unload_card(ad1816_info *devc) +static void __exit unload_card(ad1816_info *devc) { int mixer, dev = 0; @@ -1343,51 +1323,12 @@ void unload_card(ad1816_info *devc) } } -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); +static struct address_info cfg; - -#ifdef MODULE - -int io = -1; -int irq = -1; -int dma = -1; -int dma2 = -1; +static int __initdata io = -1; +static int __initdata irq = -1; +static int __initdata dma = -1; +static int __initdata dma2 = -1; MODULE_PARM(io,"i"); MODULE_PARM(irq,"i"); @@ -1396,33 +1337,59 @@ MODULE_PARM(dma2,"i"); MODULE_PARM(ad1816_clockfreq,"i"); MODULE_PARM(options,"i"); -struct address_info cfg; +static int __init init_ad1816(void) +{ + cfg.io_base = io; + cfg.irq = irq; + cfg.dma = dma; + cfg.dma2 = dma2; + + if (cfg.io_base == -1 || cfg.irq == -1 || cfg.dma == -1 || cfg.dma2 == -1) { + printk(KERN_INFO "ad1816: dma, dma2, irq and io must be set.\n"); + return -EINVAL; + } + if (probe_ad1816(&cfg) == 0) { + return -ENODEV; + } + + attach_ad1816(&cfg); + SOUND_LOCK; +} -int init_module(void) +static void __exit cleanup_ad1816 (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 (probe_ad1816(&cfg) == 0) { - return -ENODEV; - } - attach_ad1816(&cfg); - SOUND_LOCK; - return 0; + 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; } +module_init(init_ad1816); +module_exit(cleanup_ad1816); -void cleanup_module(void) +#ifndef MODULE +static int __init setup_ad1816(char *str) { - unload_ad1816(NULL); - SOUND_LOCK_END; + /* io, irq, dma, dma2 */ + int ints[5]; + + str = get_options(str, ARRAY_SIZE(ints), ints); + + io = ints[1]; + irq = ints[2]; + dma = ints[3]; + dma16 = ints[4]; + + return 1; } -#endif /* MODULE */ +__setup("ad1816=", setup_ad1816); +#endif |