Commit 3bbaa3a6 authored by Ondrej Zary's avatar Ondrej Zary Committed by Mauro Carvalho Chehab

[media] saa7134: v4l2-compliance: use v4l2_fh to fix priority handling

Make saa7134 driver more V4L2 compliant: remove broken priority handling
and use v4l2_fh instead
Signed-off-by: default avatarOndrej Zary <linux@rainbow-software.org>
[hans.verkuil@cisco.com: fixed a merge conflict in saa7134.h]
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 82456708
...@@ -805,6 +805,7 @@ static struct video_device *vdev_init(struct saa7134_dev *dev, ...@@ -805,6 +805,7 @@ static struct video_device *vdev_init(struct saa7134_dev *dev,
vfd->debug = video_debug; vfd->debug = video_debug;
snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)", snprintf(vfd->name, sizeof(vfd->name), "%s %s (%s)",
dev->name, type, saa7134_boards[dev->board].name); dev->name, type, saa7134_boards[dev->board].name);
set_bit(V4L2_FL_USE_FH_PRIO, &vfd->flags);
video_set_drvdata(vfd, dev); video_set_drvdata(vfd, dev);
return vfd; return vfd;
} }
...@@ -1028,8 +1029,6 @@ static int saa7134_initdev(struct pci_dev *pci_dev, ...@@ -1028,8 +1029,6 @@ static int saa7134_initdev(struct pci_dev *pci_dev,
} }
} }
v4l2_prio_init(&dev->prio);
mutex_lock(&saa7134_devlist_lock); mutex_lock(&saa7134_devlist_lock);
list_for_each_entry(mops, &mops_list, next) list_for_each_entry(mops, &mops_list, next)
mpeg_ops_attach(mops, dev); mpeg_ops_attach(mops, dev);
......
...@@ -1176,14 +1176,6 @@ int saa7134_s_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, str ...@@ -1176,14 +1176,6 @@ int saa7134_s_ctrl_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, str
int restart_overlay = 0; int restart_overlay = 0;
int err; 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; err = -EINVAL;
mutex_lock(&dev->lock); mutex_lock(&dev->lock);
...@@ -1352,6 +1344,7 @@ static int video_open(struct file *file) ...@@ -1352,6 +1344,7 @@ static int video_open(struct file *file)
if (NULL == fh) if (NULL == fh)
return -ENOMEM; return -ENOMEM;
v4l2_fh_init(&fh->fh, vdev);
file->private_data = fh; file->private_data = fh;
fh->dev = dev; fh->dev = dev;
fh->radio = radio; fh->radio = radio;
...@@ -1359,7 +1352,6 @@ static int video_open(struct file *file) ...@@ -1359,7 +1352,6 @@ static int video_open(struct file *file)
fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24); fh->fmt = format_by_fourcc(V4L2_PIX_FMT_BGR24);
fh->width = 720; fh->width = 720;
fh->height = 576; fh->height = 576;
v4l2_prio_open(&dev->prio, &fh->prio);
videobuf_queue_sg_init(&fh->cap, &video_qops, videobuf_queue_sg_init(&fh->cap, &video_qops,
&dev->pci->dev, &dev->slock, &dev->pci->dev, &dev->slock,
...@@ -1384,6 +1376,8 @@ static int video_open(struct file *file) ...@@ -1384,6 +1376,8 @@ static int video_open(struct file *file)
/* switch to video/vbi mode */ /* switch to video/vbi mode */
video_mux(dev,dev->ctl_input); video_mux(dev,dev->ctl_input);
} }
v4l2_fh_add(&fh->fh);
return 0; return 0;
} }
...@@ -1504,7 +1498,8 @@ static int video_release(struct file *file) ...@@ -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_cap);
saa7134_pgtable_free(dev->pci,&fh->pt_vbi); 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; file->private_data = NULL;
kfree(fh); kfree(fh);
return 0; return 0;
...@@ -1784,11 +1779,6 @@ static int saa7134_s_input(struct file *file, void *priv, unsigned int i) ...@@ -1784,11 +1779,6 @@ static int saa7134_s_input(struct file *file, void *priv, unsigned int i)
{ {
struct saa7134_fh *fh = priv; struct saa7134_fh *fh = priv;
struct saa7134_dev *dev = fh->dev; 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) if (i >= SAA7134_INPUT_MAX)
return -EINVAL; return -EINVAL;
...@@ -1856,16 +1846,8 @@ int saa7134_s_std_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, v4l2_ ...@@ -1856,16 +1846,8 @@ int saa7134_s_std_internal(struct saa7134_dev *dev, struct saa7134_fh *fh, v4l2_
unsigned long flags; unsigned long flags;
unsigned int i; unsigned int i;
v4l2_std_id fixup; v4l2_std_id fixup;
int err;
/* When called from the empress code fh == NULL. if (!fh && res_locked(dev, RESOURCE_OVERLAY)) {
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)) {
/* Don't change the std from the mpeg device /* Don't change the std from the mpeg device
if overlay is active. */ if overlay is active. */
return -EBUSY; return -EBUSY;
...@@ -2050,11 +2032,7 @@ static int saa7134_s_tuner(struct file *file, void *priv, ...@@ -2050,11 +2032,7 @@ static int saa7134_s_tuner(struct file *file, void *priv,
{ {
struct saa7134_fh *fh = priv; struct saa7134_fh *fh = priv;
struct saa7134_dev *dev = fh->dev; struct saa7134_dev *dev = fh->dev;
int rx, mode, err; int rx, mode;
err = v4l2_prio_check(&dev->prio, fh->prio);
if (0 != err)
return err;
mode = dev->thread.mode; mode = dev->thread.mode;
if (UNSET == mode) { if (UNSET == mode) {
...@@ -2084,11 +2062,6 @@ static int saa7134_s_frequency(struct file *file, void *priv, ...@@ -2084,11 +2062,6 @@ static int saa7134_s_frequency(struct file *file, void *priv,
{ {
struct saa7134_fh *fh = priv; struct saa7134_fh *fh = priv;
struct saa7134_dev *dev = fh->dev; 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) if (0 != f->tuner)
return -EINVAL; return -EINVAL;
...@@ -2117,24 +2090,6 @@ static int saa7134_s_audio(struct file *file, void *priv, const struct v4l2_audi ...@@ -2117,24 +2090,6 @@ static int saa7134_s_audio(struct file *file, void *priv, const struct v4l2_audi
return 0; 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, static int saa7134_enum_fmt_vid_cap(struct file *file, void *priv,
struct v4l2_fmtdesc *f) struct v4l2_fmtdesc *f)
{ {
...@@ -2476,8 +2431,6 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = { ...@@ -2476,8 +2431,6 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
.vidioc_g_fbuf = saa7134_g_fbuf, .vidioc_g_fbuf = saa7134_g_fbuf,
.vidioc_s_fbuf = saa7134_s_fbuf, .vidioc_s_fbuf = saa7134_s_fbuf,
.vidioc_overlay = saa7134_overlay, .vidioc_overlay = saa7134_overlay,
.vidioc_g_priority = saa7134_g_priority,
.vidioc_s_priority = saa7134_s_priority,
.vidioc_g_parm = saa7134_g_parm, .vidioc_g_parm = saa7134_g_parm,
.vidioc_g_frequency = saa7134_g_frequency, .vidioc_g_frequency = saa7134_g_frequency,
.vidioc_s_frequency = saa7134_s_frequency, .vidioc_s_frequency = saa7134_s_frequency,
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <media/v4l2-common.h> #include <media/v4l2-common.h>
#include <media/v4l2-ioctl.h> #include <media/v4l2-ioctl.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#include <media/v4l2-fh.h>
#include <media/tuner.h> #include <media/tuner.h>
#include <media/rc-core.h> #include <media/rc-core.h>
#include <media/ir-kbd-i2c.h> #include <media/ir-kbd-i2c.h>
...@@ -468,11 +469,11 @@ struct saa7134_dmaqueue { ...@@ -468,11 +469,11 @@ struct saa7134_dmaqueue {
/* video filehandle status */ /* video filehandle status */
struct saa7134_fh { struct saa7134_fh {
struct v4l2_fh fh;
struct saa7134_dev *dev; struct saa7134_dev *dev;
unsigned int radio; unsigned int radio;
enum v4l2_buf_type type; enum v4l2_buf_type type;
unsigned int resources; unsigned int resources;
enum v4l2_priority prio;
struct pm_qos_request qos_request; struct pm_qos_request qos_request;
/* video overlay */ /* video overlay */
...@@ -544,7 +545,6 @@ struct saa7134_dev { ...@@ -544,7 +545,6 @@ struct saa7134_dev {
struct list_head devlist; struct list_head devlist;
struct mutex lock; struct mutex lock;
spinlock_t slock; spinlock_t slock;
struct v4l2_prio_state prio;
struct v4l2_device v4l2_dev; struct v4l2_device v4l2_dev;
/* workstruct for loading modules */ /* workstruct for loading modules */
struct work_struct request_module_wk; struct work_struct request_module_wk;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment