diff mbox

[3/7] saa7134: v4l2-compliance: use v4l2_fh to fix priority handling

Message ID 1359315912-1767-4-git-send-email-linux@rainbow-software.org (mailing list archive)
State New, archived
Headers show

Commit Message

Ondrej Zary Jan. 27, 2013, 7:45 p.m. UTC
Make saa7134 driver more V4L2 compliant: remove broken priority handling
and use v4l2_fh instead

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
 drivers/media/pci/saa7134/saa7134-core.c  |    3 +-
 drivers/media/pci/saa7134/saa7134-video.c |   61 +++-------------------------
 drivers/media/pci/saa7134/saa7134.h       |    4 +-
 3 files changed, 10 insertions(+), 58 deletions(-)

Comments

Hans Verkuil Jan. 28, 2013, 10:08 a.m. UTC | #1
On Sun January 27 2013 20:45:08 Ondrej Zary wrote:
> Make saa7134 driver more V4L2 compliant: remove broken priority handling
> and use v4l2_fh instead
> 
> Signed-off-by: Ondrej Zary <linux@rainbow-software.org>

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>

Nice cleanup!

Regards,

	Hans

> ---
>  drivers/media/pci/saa7134/saa7134-core.c  |    3 +-
>  drivers/media/pci/saa7134/saa7134-video.c |   61 +++-------------------------
>  drivers/media/pci/saa7134/saa7134.h       |    4 +-
>  3 files changed, 10 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/media/pci/saa7134/saa7134-core.c b/drivers/media/pci/saa7134/saa7134-core.c
> index 8976d0e..ba08bd6 100644
> --- a/drivers/media/pci/saa7134/saa7134-core.c
> +++ b/drivers/media/pci/saa7134/saa7134-core.c
> @@ -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 __devinit 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);
> diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
> index db8da32..be745c0 100644
> --- a/drivers/media/pci/saa7134/saa7134-video.c
> +++ b/drivers/media/pci/saa7134/saa7134-video.c
> @@ -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;
> @@ -1853,16 +1843,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;
> @@ -2047,11 +2029,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) {
> @@ -2081,11 +2059,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;
> @@ -2114,24 +2087,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)
>  {
> @@ -2460,8 +2415,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,
> diff --git a/drivers/media/pci/saa7134/saa7134.h b/drivers/media/pci/saa7134/saa7134.h
> index 9059d08..2ffe069 100644
> --- a/drivers/media/pci/saa7134/saa7134.h
> +++ b/drivers/media/pci/saa7134/saa7134.h
> @@ -35,6 +35,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>
> @@ -466,11 +467,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;
>  
>  	/* video overlay */
>  	struct v4l2_window         win;
> @@ -541,7 +542,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;
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/media/pci/saa7134/saa7134-core.c b/drivers/media/pci/saa7134/saa7134-core.c
index 8976d0e..ba08bd6 100644
--- a/drivers/media/pci/saa7134/saa7134-core.c
+++ b/drivers/media/pci/saa7134/saa7134-core.c
@@ -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 __devinit 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);
diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
index db8da32..be745c0 100644
--- a/drivers/media/pci/saa7134/saa7134-video.c
+++ b/drivers/media/pci/saa7134/saa7134-video.c
@@ -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;
@@ -1853,16 +1843,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;
@@ -2047,11 +2029,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) {
@@ -2081,11 +2059,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;
@@ -2114,24 +2087,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)
 {
@@ -2460,8 +2415,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,
diff --git a/drivers/media/pci/saa7134/saa7134.h b/drivers/media/pci/saa7134/saa7134.h
index 9059d08..2ffe069 100644
--- a/drivers/media/pci/saa7134/saa7134.h
+++ b/drivers/media/pci/saa7134/saa7134.h
@@ -35,6 +35,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>
@@ -466,11 +467,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;
 
 	/* video overlay */
 	struct v4l2_window         win;
@@ -541,7 +542,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;