Commit 41071bb8 authored by Shuah Khan's avatar Shuah Khan Committed by Mauro Carvalho Chehab

[media] media: au0828 - embed vdev and vbi_dev structs in au0828_dev

Embed video_device structs vdev and vbi_dev in au0828_dev.
With this change, dynamic allocation and error path logic
in au0828_analog_register() is removed as it doesn't need
to allocate and handle allocation errors. Unregister path
doesn't need to free the now static video_device structures,
hence, changed video_device.release in au0828_video_template
to point to video_device_release_empty.
Signed-off-by: default avatarShuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent c5036d61
...@@ -891,8 +891,8 @@ void au0828_analog_unregister(struct au0828_dev *dev) ...@@ -891,8 +891,8 @@ void au0828_analog_unregister(struct au0828_dev *dev)
{ {
dprintk(1, "au0828_analog_unregister called\n"); dprintk(1, "au0828_analog_unregister called\n");
mutex_lock(&au0828_sysfs_lock); mutex_lock(&au0828_sysfs_lock);
video_unregister_device(dev->vdev); video_unregister_device(&dev->vdev);
video_unregister_device(dev->vbi_dev); video_unregister_device(&dev->vbi_dev);
mutex_unlock(&au0828_sysfs_lock); mutex_unlock(&au0828_sysfs_lock);
} }
...@@ -1274,7 +1274,7 @@ static int vidioc_enum_input(struct file *file, void *priv, ...@@ -1274,7 +1274,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
input->audioset = 2; input->audioset = 2;
} }
input->std = dev->vdev->tvnorms; input->std = dev->vdev.tvnorms;
return 0; return 0;
} }
...@@ -1692,7 +1692,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = { ...@@ -1692,7 +1692,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
static const struct video_device au0828_video_template = { static const struct video_device au0828_video_template = {
.fops = &au0828_v4l_fops, .fops = &au0828_v4l_fops,
.release = video_device_release, .release = video_device_release_empty,
.ioctl_ops = &video_ioctl_ops, .ioctl_ops = &video_ioctl_ops,
.tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M, .tvnorms = V4L2_STD_NTSC_M | V4L2_STD_PAL_M,
}; };
...@@ -1802,52 +1802,36 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1802,52 +1802,36 @@ int au0828_analog_register(struct au0828_dev *dev,
dev->std = V4L2_STD_NTSC_M; dev->std = V4L2_STD_NTSC_M;
au0828_s_input(dev, 0); au0828_s_input(dev, 0);
/* allocate and fill v4l2 video struct */
dev->vdev = video_device_alloc();
if (NULL == dev->vdev) {
dprintk(1, "Can't allocate video_device.\n");
return -ENOMEM;
}
/* allocate the VBI struct */
dev->vbi_dev = video_device_alloc();
if (NULL == dev->vbi_dev) {
dprintk(1, "Can't allocate vbi_device.\n");
ret = -ENOMEM;
goto err_vdev;
}
mutex_init(&dev->vb_queue_lock); mutex_init(&dev->vb_queue_lock);
mutex_init(&dev->vb_vbi_queue_lock); mutex_init(&dev->vb_vbi_queue_lock);
/* Fill the video capture device struct */ /* Fill the video capture device struct */
*dev->vdev = au0828_video_template; dev->vdev = au0828_video_template;
dev->vdev->v4l2_dev = &dev->v4l2_dev; dev->vdev.v4l2_dev = &dev->v4l2_dev;
dev->vdev->lock = &dev->lock; dev->vdev.lock = &dev->lock;
dev->vdev->queue = &dev->vb_vidq; dev->vdev.queue = &dev->vb_vidq;
dev->vdev->queue->lock = &dev->vb_queue_lock; dev->vdev.queue->lock = &dev->vb_queue_lock;
strcpy(dev->vdev->name, "au0828a video"); strcpy(dev->vdev.name, "au0828a video");
/* Setup the VBI device */ /* Setup the VBI device */
*dev->vbi_dev = au0828_video_template; dev->vbi_dev = au0828_video_template;
dev->vbi_dev->v4l2_dev = &dev->v4l2_dev; dev->vbi_dev.v4l2_dev = &dev->v4l2_dev;
dev->vbi_dev->lock = &dev->lock; dev->vbi_dev.lock = &dev->lock;
dev->vbi_dev->queue = &dev->vb_vbiq; dev->vbi_dev.queue = &dev->vb_vbiq;
dev->vbi_dev->queue->lock = &dev->vb_vbi_queue_lock; dev->vbi_dev.queue->lock = &dev->vb_vbi_queue_lock;
strcpy(dev->vbi_dev->name, "au0828a vbi"); strcpy(dev->vbi_dev.name, "au0828a vbi");
/* initialize videobuf2 stuff */ /* initialize videobuf2 stuff */
retval = au0828_vb2_setup(dev); retval = au0828_vb2_setup(dev);
if (retval != 0) { if (retval != 0) {
dprintk(1, "unable to setup videobuf2 queues (error = %d).\n", dprintk(1, "unable to setup videobuf2 queues (error = %d).\n",
retval); retval);
ret = -ENODEV; return -ENODEV;
goto err_vbi_dev;
} }
/* Register the v4l2 device */ /* Register the v4l2 device */
video_set_drvdata(dev->vdev, dev); video_set_drvdata(&dev->vdev, dev);
retval = video_register_device(dev->vdev, VFL_TYPE_GRABBER, -1); retval = video_register_device(&dev->vdev, VFL_TYPE_GRABBER, -1);
if (retval != 0) { if (retval != 0) {
dprintk(1, "unable to register video device (error = %d).\n", dprintk(1, "unable to register video device (error = %d).\n",
retval); retval);
...@@ -1856,8 +1840,8 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1856,8 +1840,8 @@ int au0828_analog_register(struct au0828_dev *dev,
} }
/* Register the vbi device */ /* Register the vbi device */
video_set_drvdata(dev->vbi_dev, dev); video_set_drvdata(&dev->vbi_dev, dev);
retval = video_register_device(dev->vbi_dev, VFL_TYPE_VBI, -1); retval = video_register_device(&dev->vbi_dev, VFL_TYPE_VBI, -1);
if (retval != 0) { if (retval != 0) {
dprintk(1, "unable to register vbi device (error = %d).\n", dprintk(1, "unable to register vbi device (error = %d).\n",
retval); retval);
...@@ -1870,14 +1854,10 @@ int au0828_analog_register(struct au0828_dev *dev, ...@@ -1870,14 +1854,10 @@ int au0828_analog_register(struct au0828_dev *dev,
return 0; return 0;
err_reg_vbi_dev: err_reg_vbi_dev:
video_unregister_device(dev->vdev); video_unregister_device(&dev->vdev);
err_reg_vdev: err_reg_vdev:
vb2_queue_release(&dev->vb_vidq); vb2_queue_release(&dev->vb_vidq);
vb2_queue_release(&dev->vb_vbiq); vb2_queue_release(&dev->vb_vbiq);
err_vbi_dev:
video_device_release(dev->vbi_dev);
err_vdev:
video_device_release(dev->vdev);
return ret; return ret;
} }
...@@ -209,8 +209,8 @@ struct au0828_dev { ...@@ -209,8 +209,8 @@ struct au0828_dev {
struct au0828_rc *ir; struct au0828_rc *ir;
#endif #endif
struct video_device *vdev; struct video_device vdev;
struct video_device *vbi_dev; struct video_device vbi_dev;
/* Videobuf2 */ /* Videobuf2 */
struct vb2_queue vb_vidq; struct vb2_queue vb_vidq;
......
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