Hi all,

attached patch removes all check_region() calls from /linux/drivers/media/radio
drivers. Most changes  are obvious, except radio-cadet.c which needs some 
maintainer's attention. 

I hope it will be usefull.

Best regards,
            Andrey

-- 
Andrey Panin            | Embedded systems software engineer
[EMAIL PROTECTED]        | PGP key: http://www.orbita1.ru/~pazke/AndreyPanin.asc
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-aimslab.c 
/linux/drivers/media/radio/radio-aimslab.c
--- /mnt/disk/linux/drivers/media/radio/radio-aimslab.c Mon Nov 20 21:01:53 2000
+++ /linux/drivers/media/radio/radio-aimslab.c  Fri Nov 24 13:04:09 2000
@@ -29,7 +29,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -42,7 +42,7 @@
 #endif
 
 static int io = CONFIG_RADIO_RTRACK_PORT; 
-static int users = 0;
+static int users;
 static struct semaphore lock;
 
 struct rt_device
@@ -338,7 +338,7 @@
                return -EINVAL;
        }
 
-       if (check_region(io, 2)) 
+       if (!request_region(io, 2, "rtrack"))
        {
                printk(KERN_ERR "rtrack: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -346,10 +346,11 @@
 
        rtrack_radio.priv=&rtrack_unit;
        
-       if(video_register_device(&rtrack_radio, VFL_TYPE_RADIO)==-1)
+       if (video_register_device(&rtrack_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 2);
                return -EINVAL;
+       }
                
-       request_region(io, 2, "rtrack");
        printk(KERN_INFO "AIMSlab RadioTrack/RadioReveal card driver.\n");
 
        /* Set up the I/O locking */
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-aztech.c 
/linux/drivers/media/radio/radio-aztech.c
--- /mnt/disk/linux/drivers/media/radio/radio-aztech.c  Mon Nov 20 21:01:53 2000
+++ /linux/drivers/media/radio/radio-aztech.c   Fri Nov 24 13:04:09 2000
@@ -26,7 +26,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -41,7 +41,7 @@
 
 static int io = CONFIG_RADIO_AZTECH_PORT; 
 static int radio_wait_time = 1000;
-static int users = 0;
+static int users;
 static struct semaphore lock;
 
 struct az_device
@@ -289,7 +289,7 @@
                return -EINVAL;
        }
 
-       if (check_region(io, 2)) 
+       if (!request_region(io, 2, "aztech")) 
        {
                printk(KERN_ERR "aztech: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -298,10 +298,11 @@
        init_MUTEX(&lock);
        aztech_radio.priv=&aztech_unit;
        
-       if(video_register_device(&aztech_radio, VFL_TYPE_RADIO)==-1)
+       if (video_register_device(&aztech_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 2);
                return -EINVAL;
+       }
                
-       request_region(io, 2, "aztech");
        printk(KERN_INFO "Aztech radio card driver v1.00/19990224 
[EMAIL PROTECTED]\n");
        /* mute card - prevents noisy bootups */
        outb (0, io);
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-cadet.c 
/linux/drivers/media/radio/radio-cadet.c
--- /mnt/disk/linux/drivers/media/radio/radio-cadet.c   Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-cadet.c    Fri Nov 24 13:17:22 2000
@@ -20,7 +20,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -34,15 +34,15 @@
 #define RDS_BUFFER 256
 
 static int io=CONFIG_RADIO_CADET_PORT; 
-static int users=0;
-static int curtuner=0;
-static int tunestat=0;
-static int sigstrength=0;
+static int users;
+static int curtuner;
+static int tunestat;
+static int sigstrength;
 static wait_queue_head_t tunerq,rdsq,readq;
 struct timer_list tunertimer,rdstimer,readtimer;
-static __u8 rdsin=0,rdsout=0,rdsstat=0;
+static __u8 rdsin,rdsout,rdsstat;
 static unsigned char rdsbuf[RDS_BUFFER];
-static int cadet_lock=0;
+static int cadet_lock;
 
 #ifndef MODULE
 static int cadet_probe(void);
@@ -551,9 +551,28 @@
        ioctl:          cadet_ioctl,
 };
 
+#ifdef MODULE
+static int __init cadet_probe(int ioaddr)
+{
+       if (!request_region(ioaddr, 2, "cadet"))
+               return -EBUSY;
+
+       cadet_setfreq(1410);
+       if (cadet_getfreq() == 1410) {
+               io = ioaddr;
+               return 0;
+       }
+
+       release_region(ioaddr, 2);
+       return -ENODEV;
+}
+#endif         /* MODULE */
+
 #ifdef CONFIG_ISAPNP
-static int isapnp_cadet_probe(void)
+static int __init isapnp_cadet_probe(void)
 {
+       int retval;
+
        dev = isapnp_find_dev (NULL, ISAPNP_VENDOR('M','S','M'),
                               ISAPNP_FUNCTION(0x0c24), NULL);
 
@@ -564,60 +583,61 @@
        if (!(dev->resource[0].flags & IORESOURCE_IO))
                return -ENODEV;
        if (dev->activate(dev)<0) {
-               printk ("radio-cadet: isapnp configure failed (out of resources?)\n");
+               printk (KERN_ERR "radio-cadet: isapnp configure failed (out of 
+resources?)\n");
                return -ENOMEM;
        }
 
-       io = dev->resource[0].start;
+       printk (KERN_INFO "radio-cadet: ISAPnP reports card at %#x\n", io);
+
+       if ((retval = cadet_probe(dev->resource[0].start))) {
+               dev->deactivate(dev);
+               return retval;
+       }
 
-       printk ("radio-cadet: ISAPnP reports card at %#x\n", io);
+       io = dev->resource[0].start;
 
-       return io;
+       return 0;
 }
 #endif         /* CONFIG_ISAPNP */
 
-#ifdef MODULE
-static int cadet_probe(void)
+static int __init cadet_init(void)
 {
-        static int iovals[8]={0x330,0x332,0x334,0x336,0x338,0x33a,0x33c,0x33e};
        int i;
 
-       for(i=0;i<8;i++) {
-               io=iovals[i];
-               if(check_region(io,2)>=0) {
-                       cadet_setfreq(1410);
-                       if(cadet_getfreq()==1410) {
-                               return io;
-                       }
-               }
-       }
-       return -1;
-}
-#endif         /* MODULE */
-
-static int __init cadet_init(void)
-{
 #ifdef CONFIG_ISAPNP
-       io = isapnp_cadet_probe();
-
-       if (io < 0)
-               return (io);
+       if (isapnp_cadet_probe() == 0)
+               goto found;
 #else
+
 #ifndef MODULE         /* only probe on non-ISAPnP monolithic compiles */
-       io = cadet_probe ();
+       {
+               int *port;
+               static int __initdata cadet_portlist[] = {
+                       0x330, 0x332, 0x334, 0x336, 0x338,
+                       0x33a, 0x33c, 0x33e, 0
+               };
+
+               for (port = cadet_portlist; *port; port++)
+                       if (cadet_probe(*port) == 0)
+                               goto found;
+       }
 #endif /* MODULE */
+
 #endif /* CONFIG_ISAPNP */
 
-        if(io < 0) {
-#ifdef MODULE        
+        if(io == 0) {
+#ifdef MODULE
                printk(KERN_ERR "You must set an I/O address with io=0x???\n");
 #endif
                return -EINVAL;
        }
-       if (!request_region(io,2,"cadet"))
-               return -EBUSY;
-       if(video_register_device(&cadet_radio,VFL_TYPE_RADIO)==-1) {
-               release_region(io,2);
+
+       if ((i = cadet_probe(io)))
+               return i;
+
+found:
+       if (video_register_device(&cadet_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 2);
                return -EINVAL;
        }
        printk(KERN_INFO "ADS Cadet Radio Card at 0x%x\n",io);
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-gemtek.c 
/linux/drivers/media/radio/radio-gemtek.c
--- /mnt/disk/linux/drivers/media/radio/radio-gemtek.c  Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-gemtek.c   Fri Nov 24 13:04:09 2000
@@ -17,7 +17,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -30,7 +30,7 @@
 #endif
 
 static int io = CONFIG_RADIO_GEMTEK_PORT; 
-static int users = 0;
+static int users;
 static spinlock_t lock;
 
 struct gemtek_device
@@ -265,7 +265,7 @@
                return -EINVAL;
        }
 
-       if (check_region(io, 4)) 
+       if (!request_region(io, 4, "gemtek"))
        {
                printk(KERN_ERR "gemtek: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -273,10 +273,11 @@
 
        gemtek_radio.priv=&gemtek_unit;
        
-       if(video_register_device(&gemtek_radio, VFL_TYPE_RADIO)==-1)
+       if (video_register_device(&gemtek_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 4);
                return -EINVAL;
-               
-       request_region(io, 4, "gemtek");
+       }
+
        printk(KERN_INFO "GemTek Radio Card driver.\n");
 
        spin_lock_init(&lock);
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-maestro.c 
/linux/drivers/media/radio/radio-maestro.c
--- /mnt/disk/linux/drivers/media/radio/radio-maestro.c Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-maestro.c  Fri Nov 24 13:04:09 2000
@@ -84,9 +84,9 @@
                stereo, /* VIDEO_TUNER_STEREO_ON */     
                tuned;  /* signal strength (0 or 0xffff) */
        struct  semaphore lock;
-} radio_unit = {0, 0, 0, 0, };
+} radio_unit;
 
-static int users = 0;
+static int users;
 
 static void sleep_125ms(void)
 {
@@ -361,7 +361,7 @@
        
        if(radio_power_on(&radio_unit)) {
                if(video_register_device(&maestro_radio, VFL_TYPE_RADIO)==-1) {
-                       printk("radio-maestro: can't register device!");
+                       printk(KERN_ERR "radio-maestro: can't register device!");
                        return 0;
                }
                printk(KERN_INFO "radio-maestro: version "
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-miropcm20.c 
/linux/drivers/media/radio/radio-miropcm20.c
--- /mnt/disk/linux/drivers/media/radio/radio-miropcm20.c       Mon Nov 20 21:01:54 
2000
+++ /linux/drivers/media/radio/radio-miropcm20.c        Fri Nov 24 13:04:09 2000
@@ -12,7 +12,7 @@
 #include <linux/videodev.h>            /* kernel radio structs         */
 #include "../../sound/miroaci.h"       /* ACI Control by acimixer      */
 
-static int users = 0;
+static int users;
 
 struct pcm20_device
 {
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-rtrack2.c 
/linux/drivers/media/radio/radio-rtrack2.c
--- /mnt/disk/linux/drivers/media/radio/radio-rtrack2.c Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-rtrack2.c  Fri Nov 24 13:04:09 2000
@@ -10,7 +10,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -23,7 +23,7 @@
 #endif
 
 static int io = CONFIG_RADIO_RTRACK2_PORT; 
-static int users = 0;
+static int users;
 static spinlock_t lock;
 
 struct rt_device
@@ -230,7 +230,7 @@
                printk(KERN_ERR "You must set an I/O address with io=0x20c or 
io=0x30c\n");
                return -EINVAL;
        }
-       if (check_region(io, 4)) 
+       if (!request_region(io, 4, "rtrack2")) 
        {
                printk(KERN_ERR "rtrack2: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -242,7 +242,6 @@
        if(video_register_device(&rtrack2_radio, VFL_TYPE_RADIO)==-1)
                return -EINVAL;
                
-       request_region(io, 4, "rtrack2");
        printk(KERN_INFO "AIMSlab Radiotrack II card driver.\n");
 
        /* mute card - prevents noisy bootups */
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-sf16fmi.c 
/linux/drivers/media/radio/radio-sf16fmi.c
--- /mnt/disk/linux/drivers/media/radio/radio-sf16fmi.c Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-sf16fmi.c  Fri Nov 24 13:04:09 2000
@@ -16,7 +16,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -37,7 +37,7 @@
 #endif
 
 static int io = CONFIG_RADIO_SF16FMI_PORT; 
-static int users = 0;
+static int users;
 static struct semaphore lock;
 
 /* freq is in 1/16 kHz to internal number, hw precision is 50 kHz */
@@ -291,7 +291,7 @@
                printk(KERN_ERR "You must set an I/O address with io=0x???\n");
                return -EINVAL;
        }
-       if (check_region(io, 2)) 
+       if (!request_region(io, 2, "fmi"))
        {
                printk(KERN_ERR "fmi: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -304,11 +304,12 @@
        fmi_radio.priv = &fmi_unit;
        
        init_MUTEX(&lock);
-       
-       if(video_register_device(&fmi_radio, VFL_TYPE_RADIO)==-1)
+
+       if(video_register_device(&fmi_radio, VFL_TYPE_RADIO)==-1) {
+               release_region(io, 2);
                return -EINVAL;
-               
-       request_region(io, 2, "fmi");
+       }
+
        printk(KERN_INFO "SF16FMx radio card driver at 0x%x.\n", io);
        printk(KERN_INFO "(c) 1998 Petr Vandrovec, [EMAIL PROTECTED]\n");
        /* mute card - prevents noisy bootups */
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-terratec.c 
/linux/drivers/media/radio/radio-terratec.c
--- /mnt/disk/linux/drivers/media/radio/radio-terratec.c        Mon Nov 20 21:01:54 
2000
+++ /linux/drivers/media/radio/radio-terratec.c Fri Nov 24 13:04:09 2000
@@ -25,7 +25,7 @@
 
 #include <linux/module.h>      /* Modules                      */
 #include <linux/init.h>                /* Initdata                     */
-#include <linux/ioport.h>      /* check_region, request_region */
+#include <linux/ioport.h>      /* request_region               */
 #include <linux/delay.h>       /* udelay                       */
 #include <asm/io.h>            /* outb, outb_p                 */
 #include <asm/uaccess.h>       /* copy to/from user            */
@@ -50,7 +50,7 @@
 /*******************************************************************/
 
 static int io = CONFIG_RADIO_TERRATEC_PORT; 
-static int users = 0;
+static int users;
 static spinlock_t lock;
 
 struct tt_device
@@ -309,7 +309,7 @@
                printk(KERN_ERR "You must set an I/O address with io=0x???\n");
                return -EINVAL;
        }
-       if (check_region(io, 2)) 
+       if (!request_region(io, 2, "terratec")) 
        {
                printk(KERN_ERR "TerraTec: port 0x%x already in use\n", io);
                return -EBUSY;
@@ -319,10 +319,11 @@
        
        spin_lock_init(&lock);
        
-       if(video_register_device(&terratec_radio, VFL_TYPE_RADIO)==-1)
+       if(video_register_device(&terratec_radio, VFL_TYPE_RADIO)==-1) {
+               release_region(io, 2);
                return -EINVAL;
+       }
                
-       request_region(io, 2, "terratec");
        printk(KERN_INFO "TERRATEC ActivRadio Standalone card driver.\n");
 
        /* mute card - prevents noisy bootups */
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-trust.c 
/linux/drivers/media/radio/radio-trust.c
--- /mnt/disk/linux/drivers/media/radio/radio-trust.c   Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-trust.c    Fri Nov 24 13:04:09 2000
@@ -32,7 +32,7 @@
 
 static int io = CONFIG_RADIO_TRUST_PORT; 
 static int ioval = 0xf;
-static int users = 0;
+static int users;
 static __u16 curvol;
 static __u16 curbass;
 static __u16 curtreble;
@@ -300,15 +300,15 @@
                printk(KERN_ERR "You must set an I/O address with io=0x???\n");
                return -EINVAL;
        }
-       if(check_region(io, 2)) {
+       if (!request_region(io, 2, "Trust FM Radio")) {
                printk(KERN_ERR "trust: port 0x%x already in use\n", io);
                return -EBUSY;
        }
-       if(video_register_device(&trust_radio, VFL_TYPE_RADIO)==-1)
+       if(video_register_device(&trust_radio, VFL_TYPE_RADIO)==-1) {
+               release_region(io, 2);
                return -EINVAL;
+       }
                
-       request_region(io, 2, "Trust FM Radio");
-
        printk(KERN_INFO "Trust FM Radio card driver v1.0.\n");
 
        write_i2c(2, TDA7318_ADDR, 0x80);       /* speaker att. LF = 0 dB */
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-typhoon.c 
/linux/drivers/media/radio/radio-typhoon.c
--- /mnt/disk/linux/drivers/media/radio/radio-typhoon.c Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-typhoon.c  Fri Nov 24 13:04:09 2000
@@ -29,14 +29,14 @@
  * completely silent.
  */
 
-#include <linux/module.h>      /* Modules                        */
-#include <linux/init.h>                /* Initdata                       */
-#include <linux/ioport.h>      /* check_region, request_region   */
-#include <linux/proc_fs.h>     /* radio card status report       */
-#include <asm/io.h>            /* outb, outb_p                   */
-#include <asm/uaccess.h>       /* copy to/from user              */
-#include <linux/videodev.h>    /* kernel radio structs           */
-#include <linux/config.h>      /* CONFIG_RADIO_TYPHOON_*         */
+#include <linux/module.h>      /* Modules                      */
+#include <linux/init.h>                /* Initdata                     */
+#include <linux/ioport.h>      /* request_region               */
+#include <linux/proc_fs.h>     /* radio card status report     */
+#include <asm/io.h>            /* outb, outb_p                 */
+#include <asm/uaccess.h>       /* copy to/from user            */
+#include <linux/videodev.h>    /* kernel radio structs         */
+#include <linux/config.h>      /* CONFIG_RADIO_TYPHOON_*       */
 
 #define BANNER "Typhoon Radio Card driver v0.1\n"
 
@@ -328,7 +328,7 @@
 static int io = -1;
 
 #ifdef MODULE
-static unsigned long mutefreq = 0;
+static unsigned long mutefreq;
 #endif
 
 static int __init typhoon_init(void)
@@ -350,17 +350,18 @@
 
        printk(KERN_INFO BANNER);
        io = typhoon_unit.iobase;
-       if (check_region(io, 8)) {
+       if (!request_region(io, 8, "typhoon")) {
                printk(KERN_ERR "radio-typhoon: port 0x%x already in use\n",
                       typhoon_unit.iobase);
                return -EBUSY;
        }
 
        typhoon_radio.priv = &typhoon_unit;
-       if (video_register_device(&typhoon_radio, VFL_TYPE_RADIO) == -1)
+       if (video_register_device(&typhoon_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 8);
                return -EINVAL;
+       }
 
-       request_region(typhoon_unit.iobase, 8, "typhoon");
        printk(KERN_INFO "radio-typhoon: port 0x%x.\n", typhoon_unit.iobase);
        printk(KERN_INFO "radio-typhoon: mute frequency is %lu kHz.\n",
               typhoon_unit.mutefreq);
diff -ur -x *.flags -x media.o /mnt/disk/linux/drivers/media/radio/radio-zoltrix.c 
/linux/drivers/media/radio/radio-zoltrix.c
--- /mnt/disk/linux/drivers/media/radio/radio-zoltrix.c Mon Nov 20 21:01:54 2000
+++ /linux/drivers/media/radio/radio-zoltrix.c  Fri Nov 24 13:04:09 2000
@@ -25,21 +25,21 @@
  *           - Reworked ioctl functions
  */
 
-#include <linux/module.h>      /* Modules                        */
-#include <linux/init.h>                /* Initdata                       */
-#include <linux/ioport.h>      /* check_region, request_region   */
-#include <linux/delay.h>       /* udelay                 */
-#include <asm/io.h>            /* outb, outb_p                   */
-#include <asm/uaccess.h>       /* copy to/from user              */
-#include <linux/videodev.h>    /* kernel radio structs           */
-#include <linux/config.h>      /* CONFIG_RADIO_ZOLTRIX_PORT      */
+#include <linux/module.h>      /* Modules                      */
+#include <linux/init.h>                /* Initdata                     */
+#include <linux/ioport.h>      /* request_region               */
+#include <linux/delay.h>       /* udelay                       */
+#include <asm/io.h>            /* outb, outb_p                 */
+#include <asm/uaccess.h>       /* copy to/from user            */
+#include <linux/videodev.h>    /* kernel radio structs         */
+#include <linux/config.h>      /* CONFIG_RADIO_ZOLTRIX_PORT    */
 
 #ifndef CONFIG_RADIO_ZOLTRIX_PORT
 #define CONFIG_RADIO_ZOLTRIX_PORT -1
 #endif
 
 static int io = CONFIG_RADIO_ZOLTRIX_PORT;
-static int users = 0;
+static int users;
 
 struct zol_device {
        int port;
@@ -355,20 +355,22 @@
                printk(KERN_ERR "You must set an I/O address with io=0x???\n");
                return -EINVAL;
        }
-       if (check_region(io, 2)) {
+       if (!request_region(io, 2, "zoltrix")) {
                printk(KERN_ERR "zoltrix: port 0x%x already in use\n", io);
                return -EBUSY;
        }
        if ((io != 0x20c) && (io != 0x30c)) {
                printk(KERN_ERR "zoltrix: invalid port, try 0x20c or 0x30c\n");
+               release_region(io, 2);
                return -ENXIO;
        }
        zoltrix_radio.priv = &zoltrix_unit;
 
-       if (video_register_device(&zoltrix_radio, VFL_TYPE_RADIO) == -1)
+       if (video_register_device(&zoltrix_radio, VFL_TYPE_RADIO) == -1) {
+               release_region(io, 2);
                return -EINVAL;
+       }
 
-       request_region(io, 2, "zoltrix");
        printk(KERN_INFO "Zoltrix Radio Plus card driver.\n");
 
        init_MUTEX(&zoltrix_unit.lock);

PGP signature

Reply via email to