Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>
---
 drivers/media/radio/radio-cadet.c |   51 ++++++++-----------------------------
 1 files changed, 11 insertions(+), 40 deletions(-)

diff --git a/drivers/media/radio/radio-cadet.c 
b/drivers/media/radio/radio-cadet.c
index bc9ad08..4a37b69 100644
--- a/drivers/media/radio/radio-cadet.c
+++ b/drivers/media/radio/radio-cadet.c
@@ -72,7 +72,7 @@ struct cadet {
        struct timer_list readtimer;
        __u8 rdsin, rdsout, rdsstat;
        unsigned char rdsbuf[RDS_BUFFER];
-       struct mutex lock;
+       struct mutex v4l2_lock;
        int reading;
 };
 
@@ -91,17 +91,13 @@ static __u16 sigtable[2][4] = {
 
 static int cadet_getstereo(struct cadet *dev)
 {
-       int ret = V4L2_TUNER_SUB_MONO;
-
        if (dev->curtuner != 0) /* Only FM has stereo capability! */
                return V4L2_TUNER_SUB_MONO;
 
-       mutex_lock(&dev->lock);
        outb(7, dev->io);          /* Select tuner control */
        if ((inb(dev->io + 1) & 0x40) == 0)
-               ret = V4L2_TUNER_SUB_STEREO;
-       mutex_unlock(&dev->lock);
-       return ret;
+               return V4L2_TUNER_SUB_STEREO;
+       return V4L2_TUNER_SUB_MONO;
 }
 
 static unsigned cadet_gettune(struct cadet *dev)
@@ -112,9 +108,6 @@ static unsigned cadet_gettune(struct cadet *dev)
        /*
         * Prepare for read
         */
-
-       mutex_lock(&dev->lock);
-
        outb(7, dev->io);       /* Select tuner control */
        curvol = inb(dev->io + 1); /* Save current volume/mute setting */
        outb(0x00, dev->io + 1);  /* Ensure WRITE-ENABLE is LOW */
@@ -136,8 +129,6 @@ static unsigned cadet_gettune(struct cadet *dev)
         * Restore volume/mute setting
         */
        outb(curvol, dev->io + 1);
-       mutex_unlock(&dev->lock);
-
        return fifo;
 }
 
@@ -176,8 +167,6 @@ static void cadet_settune(struct cadet *dev, unsigned fifo)
        int i;
        unsigned test;
 
-       mutex_lock(&dev->lock);
-
        outb(7, dev->io);                /* Select tuner control */
        /*
         * Write the shift register
@@ -196,7 +185,6 @@ static void cadet_settune(struct cadet *dev, unsigned fifo)
                test = 0x1c | ((fifo >> 23) & 0x02);
                outb(test, dev->io + 1);
        }
-       mutex_unlock(&dev->lock);
 }
 
 static void cadet_setfreq(struct cadet *dev, unsigned freq)
@@ -231,10 +219,8 @@ static void cadet_setfreq(struct cadet *dev, unsigned freq)
         * Save current volume/mute setting
         */
 
-       mutex_lock(&dev->lock);
        outb(7, dev->io);                /* Select tuner control */
        curvol = inb(dev->io + 1);
-       mutex_unlock(&dev->lock);
 
        /*
         * Tune the card
@@ -242,10 +228,8 @@ static void cadet_setfreq(struct cadet *dev, unsigned freq)
        for (j = 3; j > -1; j--) {
                cadet_settune(dev, fifo | (j << 16));
 
-               mutex_lock(&dev->lock);
                outb(7, dev->io);         /* Select tuner control */
                outb(curvol, dev->io + 1);
-               mutex_unlock(&dev->lock);
 
                msleep(100);
 
@@ -261,28 +245,20 @@ static void cadet_setfreq(struct cadet *dev, unsigned 
freq)
 
 static int cadet_getvol(struct cadet *dev)
 {
-       int ret = 0;
-
-       mutex_lock(&dev->lock);
-
        outb(7, dev->io);                /* Select tuner control */
        if ((inb(dev->io + 1) & 0x20) != 0)
-               ret = 0xffff;
-
-       mutex_unlock(&dev->lock);
-       return ret;
+               return 0xffff;
+       return 0;
 }
 
 
 static void cadet_setvol(struct cadet *dev, int vol)
 {
-       mutex_lock(&dev->lock);
        outb(7, dev->io);                /* Select tuner control */
        if (vol > 0)
                outb(0x20, dev->io + 1);
        else
                outb(0x00, dev->io + 1);
-       mutex_unlock(&dev->lock);
 }
 
 static void cadet_handler(unsigned long data)
@@ -290,7 +266,7 @@ static void cadet_handler(unsigned long data)
        struct cadet *dev = (void *)data;
 
        /* Service the RDS fifo */
-       if (mutex_trylock(&dev->lock)) {
+       if (mutex_trylock(&dev->v4l2_lock)) {
                outb(0x3, dev->io);       /* Select RDS Decoder Control */
                if ((inb(dev->io + 1) & 0x20) != 0)
                        printk(KERN_CRIT "cadet: RDS fifo overflow\n");
@@ -302,7 +278,7 @@ static void cadet_handler(unsigned long data)
                        else
                                dev->rdsin++;
                }
-               mutex_unlock(&dev->lock);
+               mutex_unlock(&dev->v4l2_lock);
        }
 
        /*
@@ -328,7 +304,6 @@ static ssize_t cadet_read(struct file *file, char __user 
*data, size_t count, lo
        unsigned char readbuf[RDS_BUFFER];
        int i = 0;
 
-       mutex_lock(&dev->lock);
        if (dev->rdsstat == 0) {
                dev->rdsstat = 1;
                outb(0x80, dev->io);        /* Select RDS fifo */
@@ -339,15 +314,14 @@ static ssize_t cadet_read(struct file *file, char __user 
*data, size_t count, lo
                add_timer(&dev->readtimer);
        }
        if (dev->rdsin == dev->rdsout) {
-               mutex_unlock(&dev->lock);
                if (file->f_flags & O_NONBLOCK)
                        return -EWOULDBLOCK;
+               mutex_unlock(&dev->v4l2_lock);
                interruptible_sleep_on(&dev->read_queue);
-               mutex_lock(&dev->lock);
+               mutex_lock(&dev->v4l2_lock);
        }
        while (i < count && dev->rdsin != dev->rdsout)
                readbuf[i++] = dev->rdsbuf[dev->rdsout++];
-       mutex_unlock(&dev->lock);
 
        if (copy_to_user(data, readbuf, i))
                return -EFAULT;
@@ -527,11 +501,9 @@ static int cadet_open(struct file *file)
 {
        struct cadet *dev = video_drvdata(file);
 
-       mutex_lock(&dev->lock);
        dev->users++;
        if (1 == dev->users)
                init_waitqueue_head(&dev->read_queue);
-       mutex_unlock(&dev->lock);
        return 0;
 }
 
@@ -539,13 +511,11 @@ static int cadet_release(struct file *file)
 {
        struct cadet *dev = video_drvdata(file);
 
-       mutex_lock(&dev->lock);
        dev->users--;
        if (0 == dev->users) {
                del_timer_sync(&dev->readtimer);
                dev->rdsstat = 0;
        }
-       mutex_unlock(&dev->lock);
        return 0;
 }
 
@@ -654,7 +624,7 @@ static int __init cadet_init(void)
        int res;
 
        strlcpy(v4l2_dev->name, "cadet", sizeof(v4l2_dev->name));
-       mutex_init(&dev->lock);
+       mutex_init(&dev->v4l2_lock);
 
        /* If a probe was requested then probe ISAPnP first (safest) */
        if (io < 0)
@@ -688,6 +658,7 @@ static int __init cadet_init(void)
        dev->vdev.fops = &cadet_fops;
        dev->vdev.ioctl_ops = &cadet_ioctl_ops;
        dev->vdev.release = video_device_release_empty;
+       dev->vdev.lock = &dev->v4l2_lock;
        video_set_drvdata(&dev->vdev, dev);
 
        if (video_register_device(&dev->vdev, VFL_TYPE_RADIO, radio_nr) < 0) {
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to