aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorAlexander Viro <viro@www.linux.org.uk>2004-07-26 06:58:41 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-07-26 06:58:41 -0700
commit0a333133228ef5afb1f34af52cb98b232e072ec4 (patch)
treed3349d8b72c14add73a4dbc624f56301e4a34367 /sound
parent4c7dea975c5d327a89269aa64e62cb4a791b2abe (diff)
downloadhistory-0a333133228ef5afb1f34af52cb98b232e072ec4.tar.gz
[PATCH] check_region fixes
A couple of old ISA drivers had trivial to fix check_region() uses. Sanitized. Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'sound')
-rw-r--r--sound/oss/gus_card.c28
-rw-r--r--sound/oss/gus_wave.c14
-rw-r--r--sound/oss/msnd_pinnacle.c6
3 files changed, 23 insertions, 25 deletions
diff --git a/sound/oss/gus_card.c b/sound/oss/gus_card.c
index 84500431ef4089..88f5ca1cf45775 100644
--- a/sound/oss/gus_card.c
+++ b/sound/oss/gus_card.c
@@ -41,9 +41,6 @@ static void __init attach_gus(struct address_info *hw_config)
{
gus_wave_init(hw_config);
- request_region(hw_config->io_base, 16, "GUS");
- request_region(hw_config->io_base + 0x100, 12, "GUS"); /* 0x10c-> is MAX */
-
if (sound_alloc_dma(hw_config->dma, "GUS"))
printk(KERN_ERR "gus_card.c: Can't allocate DMA channel %d\n", hw_config->dma);
if (hw_config->dma2 != -1 && hw_config->dma2 != hw_config->dma)
@@ -73,11 +70,7 @@ static int __init probe_gus(struct address_info *hw_config)
printk(KERN_ERR "GUS: Unsupported IRQ %d\n", irq);
return 0;
}
- if (check_region(hw_config->io_base, 16))
- printk(KERN_ERR "GUS: I/O range conflict (1)\n");
- else if (check_region(hw_config->io_base + 0x100, 16))
- printk(KERN_ERR "GUS: I/O range conflict (2)\n");
- else if (gus_wave_detect(hw_config->io_base))
+ if (gus_wave_detect(hw_config->io_base))
return 1;
#ifndef EXCLUDE_GUS_IODETECT
@@ -86,17 +79,14 @@ static int __init probe_gus(struct address_info *hw_config)
* Look at the possible base addresses (0x2X0, X=1, 2, 3, 4, 5, 6)
*/
- for (io_addr = 0x210; io_addr <= 0x260; io_addr += 0x10)
- if (io_addr != hw_config->io_base) /*
- * Already tested
- */
- if (!check_region(io_addr, 16))
- if (!check_region(io_addr + 0x100, 16))
- if (gus_wave_detect(io_addr))
- {
- hw_config->io_base = io_addr;
- return 1;
- }
+ for (io_addr = 0x210; io_addr <= 0x260; io_addr += 0x10) {
+ if (io_addr == hw_config->io_base) /* Already tested */
+ continue;
+ if (gus_wave_detect(io_addr)) {
+ hw_config->io_base = io_addr;
+ return 1;
+ }
+ }
#endif
printk("NO GUS card found !\n");
diff --git a/sound/oss/gus_wave.c b/sound/oss/gus_wave.c
index 35ade6b85b1986..ed7333ca2bcff8 100644
--- a/sound/oss/gus_wave.c
+++ b/sound/oss/gus_wave.c
@@ -978,6 +978,13 @@ int __init gus_wave_detect(int baseaddr)
unsigned long loc;
unsigned char val;
+ if (!request_region(baseaddr, 16, "GUS"))
+ return 0;
+ if (!request_region(baseaddr + 0x100, 12, "GUS")) { /* 0x10c-> is MAX */
+ release_region(baseaddr, 16);
+ return 0;
+ }
+
gus_base = baseaddr;
gus_write8(0x4c, 0); /* Reset GF1 */
@@ -1015,8 +1022,11 @@ int __init gus_wave_detect(int baseaddr)
/* See if there is first block there.... */
gus_poke(0L, 0xaa);
- if (gus_peek(0L) != 0xaa)
- return (0);
+ if (gus_peek(0L) != 0xaa) {
+ release_region(baseaddr + 0x100, 12);
+ release_region(baseaddr, 16);
+ return 0;
+ }
/* Now zero it out so that I can check for mirroring .. */
gus_poke(0L, 0x00);
diff --git a/sound/oss/msnd_pinnacle.c b/sound/oss/msnd_pinnacle.c
index a130ba4c05e33f..eb345b603d9bd1 100644
--- a/sound/oss/msnd_pinnacle.c
+++ b/sound/oss/msnd_pinnacle.c
@@ -1145,11 +1145,10 @@ static int __init probe_multisound(void)
char *pinfiji = "Pinnacle/Fiji";
#endif
- if (check_region(dev.io, dev.numio)) {
+ if (!request_region(dev.io, dev.numio, "probing")) {
printk(KERN_ERR LOGNAME ": I/O port conflict\n");
return -ENODEV;
}
- request_region(dev.io, dev.numio, "probing");
if (reset_dsp() < 0) {
release_region(dev.io, dev.numio);
@@ -1833,12 +1832,11 @@ static int __init msnd_init(void)
/* Joystick */
pinnacle_devs[3].io0 = joystick_io;
- if (check_region(cfg, 2)) {
+ if (!request_region(cfg, 2, "Pinnacle/Fiji Config")) {
printk(KERN_ERR LOGNAME ": Config port 0x%x conflict\n", cfg);
return -EIO;
}
- request_region(cfg, 2, "Pinnacle/Fiji Config");
if (msnd_pinnacle_cfg_devices(cfg, reset, pinnacle_devs)) {
printk(KERN_ERR LOGNAME ": Device configuration error\n");
release_region(cfg, 2);