X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fmedia%2Fradio%2Fradio-zoltrix.c;h=7bf1a4264891deca514dd6a5465497b46e02919d;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=8bc9075b281a8da9e1daa6fff25b43388dd157a8;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/drivers/media/radio/radio-zoltrix.c b/drivers/media/radio/radio-zoltrix.c index 8bc9075b2..7bf1a4264 100644 --- a/drivers/media/radio/radio-zoltrix.c +++ b/drivers/media/radio/radio-zoltrix.c @@ -28,8 +28,8 @@ #include /* Modules */ #include /* Initdata */ -#include /* check_region, request_region */ -#include /* udelay */ +#include /* request_region */ +#include /* udelay, msleep */ #include /* outb, outb_p */ #include /* copy to/from user */ #include /* kernel radio structs */ @@ -48,48 +48,39 @@ struct zol_device { unsigned long curfreq; int muted; unsigned int stereo; - struct semaphore lock; + struct mutex lock; }; - -/* local things */ - -static void sleep_delay(void) -{ - /* Sleep nicely for +/- 10 mS */ - schedule(); -} - static int zol_setvol(struct zol_device *dev, int vol) { dev->curvol = vol; if (dev->muted) return 0; - down(&dev->lock); + mutex_lock(&dev->lock); if (vol == 0) { outb(0, io); outb(0, io); inb(io + 3); /* Zoltrix needs to be read to confirm */ - up(&dev->lock); + mutex_unlock(&dev->lock); return 0; } outb(dev->curvol-1, io); - sleep_delay(); + msleep(10); inb(io + 2); - up(&dev->lock); + mutex_unlock(&dev->lock); return 0; } static void zol_mute(struct zol_device *dev) { dev->muted = 1; - down(&dev->lock); + mutex_lock(&dev->lock); outb(0, io); outb(0, io); inb(io + 3); /* Zoltrix needs to be read to confirm */ - up(&dev->lock); + mutex_unlock(&dev->lock); } static void zol_unmute(struct zol_device *dev) @@ -113,7 +104,7 @@ static int zol_setfreq(struct zol_device *dev, unsigned long freq) bitmask = 0xc480402c10080000ull; i = 45; - down(&dev->lock); + mutex_lock(&dev->lock); outb(0, io); outb(0, io); @@ -158,7 +149,7 @@ static int zol_setfreq(struct zol_device *dev, unsigned long freq) udelay(1000); } - up(&dev->lock); + mutex_unlock(&dev->lock); if(!dev->muted) { @@ -169,21 +160,20 @@ static int zol_setfreq(struct zol_device *dev, unsigned long freq) /* Get signal strength */ -int zol_getsigstr(struct zol_device *dev) +static int zol_getsigstr(struct zol_device *dev) { int a, b; - down(&dev->lock); + mutex_lock(&dev->lock); outb(0x00, io); /* This stuff I found to do nothing */ outb(dev->curvol, io); - sleep_delay(); - sleep_delay(); + msleep(20); a = inb(io); - sleep_delay(); + msleep(10); b = inb(io); - up(&dev->lock); + mutex_unlock(&dev->lock); if (a != b) return (0); @@ -194,22 +184,21 @@ int zol_getsigstr(struct zol_device *dev) return (0); } -int zol_is_stereo (struct zol_device *dev) +static int zol_is_stereo (struct zol_device *dev) { int x1, x2; - down(&dev->lock); + mutex_lock(&dev->lock); outb(0x00, io); outb(dev->curvol, io); - sleep_delay(); - sleep_delay(); + msleep(20); x1 = inb(io); - sleep_delay(); + msleep(10); x2 = inb(io); - up(&dev->lock); + mutex_unlock(&dev->lock); if ((x1 == x2) && (x1 == 0xcf)) return 1; @@ -324,6 +313,7 @@ static struct file_operations zoltrix_fops = .open = video_exclusive_open, .release = video_exclusive_release, .ioctl = zol_ioctl, + .compat_ioctl = v4l_compat_ioctl32, .llseek = no_llseek, }; @@ -360,7 +350,7 @@ static int __init zoltrix_init(void) } printk(KERN_INFO "Zoltrix Radio Plus card driver.\n"); - init_MUTEX(&zoltrix_unit.lock); + mutex_init(&zoltrix_unit.lock); /* mute card - prevents noisy bootups */ @@ -368,8 +358,7 @@ static int __init zoltrix_init(void) outb(0, io); outb(0, io); - sleep_delay(); - sleep_delay(); + msleep(20); inb(io + 3); zoltrix_unit.curvol = 0; @@ -382,9 +371,9 @@ MODULE_AUTHOR("C.van Schaik"); MODULE_DESCRIPTION("A driver for the Zoltrix Radio Plus."); MODULE_LICENSE("GPL"); -MODULE_PARM(io, "i"); +module_param(io, int, 0); MODULE_PARM_DESC(io, "I/O address of the Zoltrix Radio Plus (0x20c or 0x30c)"); -MODULE_PARM(radio_nr, "i"); +module_param(radio_nr, int, 0); static void __exit zoltrix_cleanup_module(void) {