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