[media] saa7134: v4l2-compliance: use v4l2_fh to fix priority handling
authorOndrej Zary <linux@rainbow-software.org>
Fri, 1 Feb 2013 23:01:16 +0000 (20:01 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 14 Apr 2013 21:59:34 +0000 (18:59 -0300)
Make saa7134 driver more V4L2 compliant: remove broken priority handling
and use v4l2_fh instead

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
[hans.verkuil@cisco.com: fixed a merge conflict in saa7134.h]
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/pci/saa7134/saa7134-core.c
drivers/media/pci/saa7134/saa7134-video.c
drivers/media/pci/saa7134/saa7134.h

index 8fd24e7c94031c1371d683e524851204f738f738..45f0aca597ae4c4938feaa6b18cd38d6d0abe8ca 100644 (file)
@@ -805,6 +805,7 @@ static struct video_device *vdev_init(struct saa7134_dev *dev,
        vfd->debug   = video_debug;
        snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
                 dev->name, type, saa7134_boards[dev->board].name);
+       set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
        video_set_drvdata(vfd, dev);
        return vfd;
 }
@@ -1028,8 +1029,6 @@ static int saa7134_initdev(struct pci_dev *pci_dev,
                }
        }
 
-       v4l2_prio_init(&dev->prio);
-
        mutex_lock(&saa7134_devlist_lock);
        list_for_each_entry(mops, &mops_list, next)
                mpeg_ops_attach(mops, dev);
index 0f2d3bd4896a9134819ac10a63239982b889ed33..941e2ebab41dc66aa86f8a1fa68caa494543b403 100644 (file)
@@ -1176,14 +1176,6 @@ int saa7134_s_ctrl_internal(struct saa7134_dev *dev,  struct saa7134_fh *fh, str
        int restart_overlay = 0;
        int err;
 
-       /* When called from the empress code fh == NULL.
-          That needs to be fixed somehow, but for now this is
-          good enough. */
-       if (fh) {
-               err = v4l2_prio_check(&dev->prio, fh->prio);
-               if (0 != err)
-                       return err;
-       }
        err = -EINVAL;
 
        mutex_lock(&dev->lock);
@@ -1352,6 +1344,7 @@ static int video_open(struct file *file)
        if (NULL == fh)
                return -ENOMEM;
 
+       v4l2_fh_init(&fh->fh, vdev);
        file->private_data = fh;
        fh->dev      = dev;
        fh->radio    = radio;
@@ -1359,7 +1352,6 @@ static int video_open(struct file *file)
        fh->fmt      = format_by_fourcc(V4L2_PIX_FMT_BGR24);
        fh->width    = 720;
        fh->height   = 576;
-       v4l2_prio_open(&dev->prio, &fh->prio);
 
        videobuf_queue_sg_init(&fh->cap, &video_qops,
                            &dev->pci->dev, &dev->slock,
@@ -1384,6 +1376,8 @@ static int video_open(struct file *file)
                /* switch to video/vbi mode */
                video_mux(dev,dev->ctl_input);
        }
+       v4l2_fh_add(&fh->fh);
+
        return 0;
 }
 
@@ -1504,7 +1498,8 @@ static int video_release(struct file *file)
        saa7134_pgtable_free(dev->pci,&fh->pt_cap);
        saa7134_pgtable_free(dev->pci,&fh->pt_vbi);
 
-       v4l2_prio_close(&dev->prio, fh->prio);
+       v4l2_fh_del(&fh->fh);
+       v4l2_fh_exit(&fh->fh);
        file->private_data = NULL;
        kfree(fh);
        return 0;
@@ -1784,11 +1779,6 @@ static int saa7134_s_input(struct file *file, void *priv, unsigned int i)
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       int err;
-
-       err = v4l2_prio_check(&dev->prio, fh->prio);
-       if (0 != err)
-               return err;
 
        if (i >= SAA7134_INPUT_MAX)
                return -EINVAL;
@@ -1856,16 +1846,8 @@ int saa7134_s_std_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, v4l2_
        unsigned long flags;
        unsigned int i;
        v4l2_std_id fixup;
-       int err;
 
-       /* When called from the empress code fh == NULL.
-          That needs to be fixed somehow, but for now this is
-          good enough. */
-       if (fh) {
-               err = v4l2_prio_check(&dev->prio, fh->prio);
-               if (0 != err)
-                       return err;
-       } else if (res_locked(dev, RESOURCE_OVERLAY)) {
+       if (!fh && res_locked(dev, RESOURCE_OVERLAY)) {
                /* Don't change the std from the mpeg device
                   if overlay is active. */
                return -EBUSY;
@@ -2050,11 +2032,7 @@ static int saa7134_s_tuner(struct file *file, void *priv,
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       int rx, mode, err;
-
-       err = v4l2_prio_check(&dev->prio, fh->prio);
-       if (0 != err)
-               return err;
+       int rx, mode;
 
        mode = dev->thread.mode;
        if (UNSET == mode) {
@@ -2084,11 +2062,6 @@ static int saa7134_s_frequency(struct file *file, void *priv,
 {
        struct saa7134_fh *fh = priv;
        struct saa7134_dev *dev = fh->dev;
-       int err;
-
-       err = v4l2_prio_check(&dev->prio, fh->prio);
-       if (0 != err)
-               return err;
 
        if (0 != f->tuner)
                return -EINVAL;
@@ -2117,24 +2090,6 @@ static int saa7134_s_audio(struct file *file, void *priv, const struct v4l2_audi
        return 0;
 }
 
-static int saa7134_g_priority(struct file *file, void *f, enum v4l2_priority *p)
-{
-       struct saa7134_fh *fh = f;
-       struct saa7134_dev *dev = fh->dev;
-
-       *p = v4l2_prio_max(&dev->prio);
-       return 0;
-}
-
-static int saa7134_s_priority(struct file *file, void *f,
-                                       enum v4l2_priority prio)
-{
-       struct saa7134_fh *fh = f;
-       struct saa7134_dev *dev = fh->dev;
-
-       return v4l2_prio_change(&dev->prio, &fh->prio, prio);
-}
-
 static int saa7134_enum_fmt_vid_cap(struct file *file, void  *priv,
                                        struct v4l2_fmtdesc *f)
 {
@@ -2476,8 +2431,6 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
        .vidioc_g_fbuf                  = saa7134_g_fbuf,
        .vidioc_s_fbuf                  = saa7134_s_fbuf,
        .vidioc_overlay                 = saa7134_overlay,
-       .vidioc_g_priority              = saa7134_g_priority,
-       .vidioc_s_priority              = saa7134_s_priority,
        .vidioc_g_parm                  = saa7134_g_parm,
        .vidioc_g_frequency             = saa7134_g_frequency,
        .vidioc_s_frequency             = saa7134_s_frequency,
index 1f6c41ed2a07259dc08df1401449c2c9b1724eb9..fc07b19ed5363c6a161505c06675875883a88b84 100644 (file)
@@ -36,6 +36,7 @@
 #include <media/v4l2-common.h>
 #include <media/v4l2-ioctl.h>
 #include <media/v4l2-device.h>
+#include <media/v4l2-fh.h>
 #include <media/tuner.h>
 #include <media/rc-core.h>
 #include <media/ir-kbd-i2c.h>
@@ -468,11 +469,11 @@ struct saa7134_dmaqueue {
 
 /* video filehandle status */
 struct saa7134_fh {
+       struct v4l2_fh             fh;
        struct saa7134_dev         *dev;
        unsigned int               radio;
        enum v4l2_buf_type         type;
        unsigned int               resources;
-       enum v4l2_priority         prio;
        struct pm_qos_request      qos_request;
 
        /* video overlay */
@@ -544,7 +545,6 @@ struct saa7134_dev {
        struct list_head           devlist;
        struct mutex               lock;
        spinlock_t                 slock;
-       struct v4l2_prio_state     prio;
        struct v4l2_device         v4l2_dev;
        /* workstruct for loading modules */
        struct work_struct request_module_wk;