[media] tlg2300: embed video_device
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Huang Shijie <shijie8@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
270ecca60e
commit
1b952f17f3
|
@ -40,7 +40,7 @@
|
||||||
#define TUNER_FREQ_MAX (862000000)
|
#define TUNER_FREQ_MAX (862000000)
|
||||||
|
|
||||||
struct vbi_data {
|
struct vbi_data {
|
||||||
struct video_device *v_dev;
|
struct video_device v_dev;
|
||||||
struct video_data *video;
|
struct video_data *video;
|
||||||
struct front_face *front;
|
struct front_face *front;
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ struct running_context {
|
||||||
|
|
||||||
struct video_data {
|
struct video_data {
|
||||||
/* v4l2 video device */
|
/* v4l2 video device */
|
||||||
struct video_device *v_dev;
|
struct video_device v_dev;
|
||||||
|
|
||||||
/* the working context */
|
/* the working context */
|
||||||
struct running_context context;
|
struct running_context context;
|
||||||
|
@ -234,7 +234,6 @@ void dvb_stop_streaming(struct pd_dvb_adapter *);
|
||||||
/* FM */
|
/* FM */
|
||||||
int poseidon_fm_init(struct poseidon *);
|
int poseidon_fm_init(struct poseidon *);
|
||||||
int poseidon_fm_exit(struct poseidon *);
|
int poseidon_fm_exit(struct poseidon *);
|
||||||
struct video_device *vdev_init(struct poseidon *, struct video_device *);
|
|
||||||
|
|
||||||
/* vendor command ops */
|
/* vendor command ops */
|
||||||
int send_set_req(struct poseidon*, u8, s32, s32*);
|
int send_set_req(struct poseidon*, u8, s32, s32*);
|
||||||
|
@ -250,7 +249,6 @@ void free_all_urb_generic(struct urb **urb_array, int num);
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
void poseidon_delete(struct kref *kref);
|
void poseidon_delete(struct kref *kref);
|
||||||
void destroy_video_device(struct video_device **v_dev);
|
|
||||||
extern int debug_mode;
|
extern int debug_mode;
|
||||||
void set_debug_mode(struct video_device *vfd, int debug_mode);
|
void set_debug_mode(struct video_device *vfd, int debug_mode);
|
||||||
|
|
||||||
|
|
|
@ -1590,48 +1590,18 @@ static struct video_device pd_video_template = {
|
||||||
.name = "Telegent-Video",
|
.name = "Telegent-Video",
|
||||||
.fops = &pd_video_fops,
|
.fops = &pd_video_fops,
|
||||||
.minor = -1,
|
.minor = -1,
|
||||||
.release = video_device_release,
|
.release = video_device_release_empty,
|
||||||
.tvnorms = V4L2_STD_ALL,
|
.tvnorms = V4L2_STD_ALL,
|
||||||
.ioctl_ops = &pd_video_ioctl_ops,
|
.ioctl_ops = &pd_video_ioctl_ops,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct video_device *vdev_init(struct poseidon *pd, struct video_device *tmp)
|
|
||||||
{
|
|
||||||
struct video_device *vfd;
|
|
||||||
|
|
||||||
vfd = video_device_alloc();
|
|
||||||
if (vfd == NULL)
|
|
||||||
return NULL;
|
|
||||||
*vfd = *tmp;
|
|
||||||
vfd->minor = -1;
|
|
||||||
vfd->v4l2_dev = &pd->v4l2_dev;
|
|
||||||
/*vfd->parent = &(pd->udev->dev); */
|
|
||||||
vfd->release = video_device_release;
|
|
||||||
video_set_drvdata(vfd, pd);
|
|
||||||
return vfd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void destroy_video_device(struct video_device **v_dev)
|
|
||||||
{
|
|
||||||
struct video_device *dev = *v_dev;
|
|
||||||
|
|
||||||
if (dev == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (video_is_registered(dev))
|
|
||||||
video_unregister_device(dev);
|
|
||||||
else
|
|
||||||
video_device_release(dev);
|
|
||||||
*v_dev = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pd_video_exit(struct poseidon *pd)
|
void pd_video_exit(struct poseidon *pd)
|
||||||
{
|
{
|
||||||
struct video_data *video = &pd->video_data;
|
struct video_data *video = &pd->video_data;
|
||||||
struct vbi_data *vbi = &pd->vbi_data;
|
struct vbi_data *vbi = &pd->vbi_data;
|
||||||
|
|
||||||
destroy_video_device(&video->v_dev);
|
video_unregister_device(&video->v_dev);
|
||||||
destroy_video_device(&vbi->v_dev);
|
video_unregister_device(&vbi->v_dev);
|
||||||
log();
|
log();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1641,21 +1611,19 @@ int pd_video_init(struct poseidon *pd)
|
||||||
struct vbi_data *vbi = &pd->vbi_data;
|
struct vbi_data *vbi = &pd->vbi_data;
|
||||||
int ret = -ENOMEM;
|
int ret = -ENOMEM;
|
||||||
|
|
||||||
video->v_dev = vdev_init(pd, &pd_video_template);
|
video->v_dev = pd_video_template;
|
||||||
if (video->v_dev == NULL)
|
video->v_dev.v4l2_dev = &pd->v4l2_dev;
|
||||||
goto out;
|
video_set_drvdata(&video->v_dev, pd);
|
||||||
|
|
||||||
ret = video_register_device(video->v_dev, VFL_TYPE_GRABBER, -1);
|
ret = video_register_device(&video->v_dev, VFL_TYPE_GRABBER, -1);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
/* VBI uses the same template as video */
|
/* VBI uses the same template as video */
|
||||||
vbi->v_dev = vdev_init(pd, &pd_video_template);
|
vbi->v_dev = pd_video_template;
|
||||||
if (vbi->v_dev == NULL) {
|
vbi->v_dev.v4l2_dev = &pd->v4l2_dev;
|
||||||
ret = -ENOMEM;
|
video_set_drvdata(&vbi->v_dev, pd);
|
||||||
goto out;
|
ret = video_register_device(&vbi->v_dev, VFL_TYPE_VBI, -1);
|
||||||
}
|
|
||||||
ret = video_register_device(vbi->v_dev, VFL_TYPE_VBI, -1);
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
goto out;
|
goto out;
|
||||||
log("register VIDEO/VBI devices");
|
log("register VIDEO/VBI devices");
|
||||||
|
@ -1665,4 +1633,3 @@ out:
|
||||||
pd_video_exit(pd);
|
pd_video_exit(pd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue