patch-2.4.15 linux/drivers/sound/ad1816.c
Next file: linux/drivers/sound/cmpci.c
Previous file: linux/drivers/sound/aci.c
Back to the patch index
Back to the overall index
- Lines: 258
- Date:
Fri Nov 9 15:22:54 2001
- Orig file:
v2.4.14/linux/drivers/sound/ad1816.c
- Orig date:
Tue Oct 9 17:06:52 2001
diff -u --recursive --new-file v2.4.14/linux/drivers/sound/ad1816.c linux/drivers/sound/ad1816.c
@@ -28,6 +28,8 @@
* Christoph Hellwig: Adapted to module_init/module_exit. 2000/03/03
*
* Christoph Hellwig: Added isapnp support 2000/03/15
+ *
+ * Arnaldo Carvalho de Melo: get rid of check_region 2001/10/07
*/
#include <linux/config.h>
@@ -48,7 +50,7 @@
timeout--; \
} \
if (timeout==0) {\
- printk("ad1816: Check for power failed in %s line: %d\n",__FILE__,__LINE__); \
+ printk(KERN_WARNING "ad1816: Check for power failed in %s line: %d\n",__FILE__,__LINE__); \
} \
}
@@ -78,9 +80,9 @@
} ad1816_info;
-static int nr_ad1816_devs = 0;
-static int ad1816_clockfreq=33000;
-static int options=0;
+static int nr_ad1816_devs;
+static int ad1816_clockfreq = 33000;
+static int options;
/* for backward mapping of irq to sound device */
@@ -558,14 +560,15 @@
if (irq < 0 || irq > 15) {
- printk ("ad1816: Got bogus interrupt %d\n", irq);
+ printk(KERN_WARNING "ad1816: Got bogus interrupt %d\n", irq);
return;
}
dev = irq2dev[irq];
if (dev < 0 || dev >= num_audiodevs) {
- printk ("ad1816: IRQ2AD1816-mapping failed for irq %d device %d\n", irq,dev);
+ printk(KERN_WARNING "ad1816: IRQ2AD1816-mapping failed for "
+ "irq %d device %d\n", irq,dev);
return;
}
@@ -1000,8 +1003,10 @@
int *osp=hw_config->osp;
int tmp;
- printk("ad1816: AD1816 sounddriver Copyright (C) 1998 by Thorsten Knabe\n");
- printk("ad1816: io=0x%x, irq=%d, dma=%d, dma2=%d, clockfreq=%d, options=%d isadmabug=%d\n",
+ printk(KERN_INFO "ad1816: AD1816 sounddriver "
+ "Copyright (C) 1998 by Thorsten Knabe\n");
+ printk(KERN_INFO "ad1816: io=0x%x, irq=%d, dma=%d, dma2=%d, "
+ "clockfreq=%d, options=%d isadmabug=%d\n",
hw_config->io_base,
hw_config->irq,
hw_config->dma,
@@ -1010,16 +1015,17 @@
options,
isa_dma_bridge_buggy);
- if (check_region (io_base, 16)) {
- printk ("ad1816: I/O port 0x%03x not free\n", io_base);
- return 0;
+ if (!request_region(io_base, 16, "AD1816 Sound")) {
+ printk(KERN_WARNING "ad1816: I/O port 0x%03x not free\n",
+ io_base);
+ goto err;
}
DEBUGLOG(printk ("ad1816: detect(%x)\n", io_base));
if (nr_ad1816_devs >= MAX_AUDIO_DEV) {
- printk ("ad1816: detect error - step 0\n");
- return 0;
+ printk(KERN_WARNING "ad1816: detect error - step 0\n");
+ goto out_release_region;
}
devc->base = io_base;
@@ -1032,7 +1038,7 @@
tmp=inb(devc->base);
if ( (tmp&0x80)==0 || tmp==255 ) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 or chip is not active (Test 0)\n"));
- return(0);
+ goto out_release_region;
}
@@ -1040,14 +1046,14 @@
ad_write(devc,8,12345);
if (ad_read(devc,9)!=12345) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 1)\n"));
- return(0);
+ goto out_release_region;
}
/* writes to ireg 8 are copied to ireg 9 */
ad_write(devc,8,54321);
if (ad_read(devc,9)!=54321) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 2)\n"));
- return(0);
+ goto out_release_region;
}
@@ -1055,14 +1061,14 @@
ad_write(devc,10,54321);
if (ad_read(devc,11)!=54321) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 3)\n"));
- return(0);
+ goto out_release_region;
}
/* writes to ireg 10 are copied to ireg 11 */
ad_write(devc,10,12345);
if (ad_read(devc,11)!=12345) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 4)\n"));
- return(0);
+ goto out_release_region;
}
/* bit in base +1 cannot be set to 1 */
@@ -1070,15 +1076,19 @@
outb(0xff,devc->base+1);
if (inb(devc->base+1)!=tmp) {
DEBUGLOG (printk ("ad1816: Chip is not an AD1816 (Test 5)\n"));
- return(0);
+ goto out_release_region;
}
DEBUGLOG (printk ("ad1816: detect() - Detected OK\n"));
DEBUGLOG (printk ("ad1816: AD1816 Version: %d\n",ad_read(devc,45)));
- /* detection was successful */
+ /* detection was successful */
return 1;
+out_release_region:
+ release_region(io_base, 16);
+ /* detection was NOT successful */
+err: return 0;
}
@@ -1092,10 +1102,7 @@
int my_dev;
char dev_name[100];
ad1816_info *devc = &dev_info[nr_ad1816_devs];
-
- /* allocate i/o ports */
- request_region (hw_config->io_base, 16, "AD1816 Sound");
devc->base = hw_config->io_base;
/* disable all interrupts */
@@ -1105,35 +1112,29 @@
outb (0, devc->base+1);
/* allocate irq */
- if (hw_config->irq < 0 || hw_config->irq > 15) {
- release_region(hw_config->io_base, 16);
- return;
- }
+ if (hw_config->irq < 0 || hw_config->irq > 15)
+ goto out_release_region;
if (request_irq(hw_config->irq, ad1816_interrupt,0,
- "SoundPort",
- hw_config->osp) < 0) {
- printk ("ad1816: IRQ in use\n");
- release_region(hw_config->io_base, 16);
- return;
+ "SoundPort", hw_config->osp) < 0) {
+ printk(KERN_WARNING "ad1816: IRQ in use\n");
+ goto out_release_region;
}
devc->irq=hw_config->irq;
/* DMA stuff */
if (sound_alloc_dma (hw_config->dma, "Sound System")) {
- printk ("ad1816: Can't allocate DMA%d\n", hw_config->dma);
- free_irq(hw_config->irq,hw_config->osp);
- release_region(hw_config->io_base, 16);
- return;
+ printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
+ hw_config->dma);
+ goto out_free_irq;
}
devc->dma_playback=hw_config->dma;
if ( hw_config->dma2 != -1 && hw_config->dma2 != hw_config->dma) {
- if (sound_alloc_dma (hw_config->dma2, "Sound System (capture)")) {
- printk ("ad1816: Can't allocate DMA%d\n", hw_config->dma2);
- sound_free_dma(hw_config->dma);
- free_irq(hw_config->irq,hw_config->osp);
- release_region(hw_config->io_base, 16);
- return;
+ if (sound_alloc_dma(hw_config->dma2,
+ "Sound System (capture)")) {
+ printk(KERN_WARNING "ad1816: Can't allocate DMA%d\n",
+ hw_config->dma2);
+ goto out_free_dma;
}
devc->dma_capture=hw_config->dma2;
devc->audio_mode=DMA_AUTOMODE|DMA_DUPLEX;
@@ -1157,15 +1158,8 @@
devc,
hw_config->dma,
hw_config->dma2)) < 0) {
- printk ("ad1816: Can't install sound driver\n");
- if (devc->dma_capture>=0) {
- sound_free_dma(hw_config->dma2);
- }
- sound_free_dma(hw_config->dma);
- free_irq(hw_config->irq,hw_config->osp);
- release_region(hw_config->io_base, 16);
- return;
-
+ printk(KERN_WARNING "ad1816: Can't install sound driver\n");
+ goto out_free_dma_2;
}
/* fill rest of structure with reasonable default values */
@@ -1211,6 +1205,17 @@
devc)) >= 0) {
audio_devs[my_dev]->min_fragment = 0;
}
+out: return;
+out_free_dma_2:
+ if (devc->dma_capture >= 0)
+ sound_free_dma(hw_config->dma2);
+out_free_dma:
+ sound_free_dma(hw_config->dma);
+out_free_irq:
+ free_irq(hw_config->irq,hw_config->osp);
+out_release_region:
+ release_region(hw_config->io_base, 16);
+ goto out;
}
static void __exit unload_card(ad1816_info *devc)
@@ -1242,9 +1247,8 @@
DEBUGLOG (printk("ad1816: Unloading card at base=%x was successful\n",devc->base));
- } else {
- printk ("ad1816: no device/card specified\n");
- }
+ } else
+ printk(KERN_WARNING "ad1816: no device/card specified\n");
}
static struct address_info cfg;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)