2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-22 20:23:57 +08:00

[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:
Hans Verkuil 2012-07-16 08:17:58 -03:00 committed by Mauro Carvalho Chehab
parent 270ecca60e
commit 1b952f17f3
2 changed files with 13 additions and 48 deletions

View File

@ -40,7 +40,7 @@
#define TUNER_FREQ_MAX (862000000)
struct vbi_data {
struct video_device *v_dev;
struct video_device v_dev;
struct video_data *video;
struct front_face *front;
@ -63,7 +63,7 @@ struct running_context {
struct video_data {
/* v4l2 video device */
struct video_device *v_dev;
struct video_device v_dev;
/* the working context */
struct running_context context;
@ -234,7 +234,6 @@ void dvb_stop_streaming(struct pd_dvb_adapter *);
/* FM */
int poseidon_fm_init(struct poseidon *);
int poseidon_fm_exit(struct poseidon *);
struct video_device *vdev_init(struct poseidon *, struct video_device *);
/* vendor command ops */
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 */
void poseidon_delete(struct kref *kref);
void destroy_video_device(struct video_device **v_dev);
extern int debug_mode;
void set_debug_mode(struct video_device *vfd, int debug_mode);

View File

@ -1590,48 +1590,18 @@ static struct video_device pd_video_template = {
.name = "Telegent-Video",
.fops = &pd_video_fops,
.minor = -1,
.release = video_device_release,
.release = video_device_release_empty,
.tvnorms = V4L2_STD_ALL,
.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)
{
struct video_data *video = &pd->video_data;
struct vbi_data *vbi = &pd->vbi_data;
destroy_video_device(&video->v_dev);
destroy_video_device(&vbi->v_dev);
video_unregister_device(&video->v_dev);
video_unregister_device(&vbi->v_dev);
log();
}
@ -1641,21 +1611,19 @@ int pd_video_init(struct poseidon *pd)
struct vbi_data *vbi = &pd->vbi_data;
int ret = -ENOMEM;
video->v_dev = vdev_init(pd, &pd_video_template);
if (video->v_dev == NULL)
goto out;
video->v_dev = pd_video_template;
video->v_dev.v4l2_dev = &pd->v4l2_dev;
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)
goto out;
/* VBI uses the same template as video */
vbi->v_dev = vdev_init(pd, &pd_video_template);
if (vbi->v_dev == NULL) {
ret = -ENOMEM;
goto out;
}
ret = video_register_device(vbi->v_dev, VFL_TYPE_VBI, -1);
vbi->v_dev = pd_video_template;
vbi->v_dev.v4l2_dev = &pd->v4l2_dev;
video_set_drvdata(&vbi->v_dev, pd);
ret = video_register_device(&vbi->v_dev, VFL_TYPE_VBI, -1);
if (ret != 0)
goto out;
log("register VIDEO/VBI devices");
@ -1665,4 +1633,3 @@ out:
pd_video_exit(pd);
return ret;
}