mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
media: bttv: radio use v4l2_fh instead of bttv_fh
Use a v4l2_fh when opening a radio device instead of a bttv_fh and manage it with v4l2_fh_open() and v4l2_fh_release() and v4l2_ctrl_poll(). This eliminates bttv_fh from the radio in preparation for vb2 conversion which stops using separate bttv file handles altogether. Signed-off-by: Deborah Brouwer <deborah.brouwer@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
615c545027
commit
45b6f5bf1a
1 changed files with 10 additions and 27 deletions
|
@ -2740,45 +2740,34 @@ static int radio_open(struct file *file)
|
|||
{
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
struct bttv *btv = video_drvdata(file);
|
||||
struct bttv_fh *fh;
|
||||
int ret = v4l2_fh_open(file);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
dprintk("open dev=%s\n", video_device_node_name(vdev));
|
||||
|
||||
dprintk("%d: open called (radio)\n", btv->c.nr);
|
||||
|
||||
/* allocate per filehandle data */
|
||||
fh = kmalloc(sizeof(*fh), GFP_KERNEL);
|
||||
if (unlikely(!fh))
|
||||
return -ENOMEM;
|
||||
file->private_data = fh;
|
||||
*fh = btv->init;
|
||||
v4l2_fh_init(&fh->fh, vdev);
|
||||
|
||||
btv->radio_user++;
|
||||
audio_mute(btv, btv->mute);
|
||||
|
||||
v4l2_fh_add(&fh->fh);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int radio_release(struct file *file)
|
||||
{
|
||||
struct bttv_fh *fh = file->private_data;
|
||||
struct bttv *btv = video_drvdata(file);
|
||||
struct saa6588_command cmd;
|
||||
|
||||
file->private_data = NULL;
|
||||
v4l2_fh_del(&fh->fh);
|
||||
v4l2_fh_exit(&fh->fh);
|
||||
kfree(fh);
|
||||
|
||||
btv->radio_user--;
|
||||
|
||||
bttv_call_all(btv, core, command, SAA6588_CMD_CLOSE, &cmd);
|
||||
|
||||
if (btv->radio_user == 0)
|
||||
btv->has_radio_tuner = 0;
|
||||
|
||||
v4l2_fh_release(file);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -2858,23 +2847,17 @@ static ssize_t radio_read(struct file *file, char __user *data,
|
|||
|
||||
static __poll_t radio_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
struct bttv_fh *fh = file->private_data;
|
||||
struct bttv *btv = video_drvdata(file);
|
||||
__poll_t req_events = poll_requested_events(wait);
|
||||
struct saa6588_command cmd;
|
||||
__poll_t res = 0;
|
||||
__poll_t rc = v4l2_ctrl_poll(file, wait);
|
||||
|
||||
if (v4l2_event_pending(&fh->fh))
|
||||
res = EPOLLPRI;
|
||||
else if (req_events & EPOLLPRI)
|
||||
poll_wait(file, &fh->fh.wait, wait);
|
||||
radio_enable(btv);
|
||||
cmd.instance = file;
|
||||
cmd.event_list = wait;
|
||||
cmd.poll_mask = res;
|
||||
cmd.poll_mask = 0;
|
||||
bttv_call_all(btv, core, command, SAA6588_CMD_POLL, &cmd);
|
||||
|
||||
return cmd.poll_mask;
|
||||
return rc | cmd.poll_mask;
|
||||
}
|
||||
|
||||
static const struct v4l2_file_operations radio_fops =
|
||||
|
|
Loading…
Reference in a new issue