Commit 8eef6669 authored by Lad, Prabhakar's avatar Lad, Prabhakar Committed by Mauro Carvalho Chehab

[media] media: davinci: vpif_capture: embed video_device struct in channel_obj

Embed video_device struct (video_dev) in channel_obj and also the
Unregister path doesn't need to free the video_device structure,
hence, change the video_device.release callback point to
video_device_release_empty.
Signed-off-by: default avatarLad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent afb7a966
...@@ -712,7 +712,7 @@ static int vpif_set_input( ...@@ -712,7 +712,7 @@ static int vpif_set_input(
ch->vpifparams.iface = chan_cfg->vpif_if; ch->vpifparams.iface = chan_cfg->vpif_if;
/* update tvnorms from the sub device input info */ /* update tvnorms from the sub device input info */
ch->video_dev->tvnorms = chan_cfg->inputs[index].input.std; ch->video_dev.tvnorms = chan_cfg->inputs[index].input.std;
return 0; return 0;
} }
...@@ -1337,7 +1337,7 @@ static int vpif_probe_complete(void) ...@@ -1337,7 +1337,7 @@ static int vpif_probe_complete(void)
struct video_device *vdev; struct video_device *vdev;
struct channel_obj *ch; struct channel_obj *ch;
struct vb2_queue *q; struct vb2_queue *q;
int i, j, err, k; int j, err, k;
for (j = 0; j < VPIF_CAPTURE_MAX_DEVICES; j++) { for (j = 0; j < VPIF_CAPTURE_MAX_DEVICES; j++) {
ch = vpif_obj.dev[j]; ch = vpif_obj.dev[j];
...@@ -1384,16 +1384,16 @@ static int vpif_probe_complete(void) ...@@ -1384,16 +1384,16 @@ static int vpif_probe_complete(void)
INIT_LIST_HEAD(&common->dma_queue); INIT_LIST_HEAD(&common->dma_queue);
/* Initialize the video_device structure */ /* Initialize the video_device structure */
vdev = ch->video_dev; vdev = &ch->video_dev;
strlcpy(vdev->name, VPIF_DRIVER_NAME, sizeof(vdev->name)); strlcpy(vdev->name, VPIF_DRIVER_NAME, sizeof(vdev->name));
vdev->release = video_device_release; vdev->release = video_device_release_empty;
vdev->fops = &vpif_fops; vdev->fops = &vpif_fops;
vdev->ioctl_ops = &vpif_ioctl_ops; vdev->ioctl_ops = &vpif_ioctl_ops;
vdev->v4l2_dev = &vpif_obj.v4l2_dev; vdev->v4l2_dev = &vpif_obj.v4l2_dev;
vdev->vfl_dir = VFL_DIR_RX; vdev->vfl_dir = VFL_DIR_RX;
vdev->queue = q; vdev->queue = q;
vdev->lock = &common->lock; vdev->lock = &common->lock;
video_set_drvdata(ch->video_dev, ch); video_set_drvdata(&ch->video_dev, ch);
err = video_register_device(vdev, err = video_register_device(vdev,
VFL_TYPE_GRABBER, (j ? 1 : 0)); VFL_TYPE_GRABBER, (j ? 1 : 0));
if (err) if (err)
...@@ -1410,14 +1410,9 @@ static int vpif_probe_complete(void) ...@@ -1410,14 +1410,9 @@ static int vpif_probe_complete(void)
common = &ch->common[k]; common = &ch->common[k];
vb2_dma_contig_cleanup_ctx(common->alloc_ctx); vb2_dma_contig_cleanup_ctx(common->alloc_ctx);
/* Unregister video device */ /* Unregister video device */
video_unregister_device(ch->video_dev); video_unregister_device(&ch->video_dev);
} }
kfree(vpif_obj.sd); kfree(vpif_obj.sd);
for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
ch = vpif_obj.dev[i];
/* Note: does nothing if ch->video_dev == NULL */
video_device_release(ch->video_dev);
}
v4l2_device_unregister(&vpif_obj.v4l2_dev); v4l2_device_unregister(&vpif_obj.v4l2_dev);
return err; return err;
...@@ -1438,13 +1433,11 @@ static int vpif_async_complete(struct v4l2_async_notifier *notifier) ...@@ -1438,13 +1433,11 @@ static int vpif_async_complete(struct v4l2_async_notifier *notifier)
static __init int vpif_probe(struct platform_device *pdev) static __init int vpif_probe(struct platform_device *pdev)
{ {
struct vpif_subdev_info *subdevdata; struct vpif_subdev_info *subdevdata;
int i, j, err;
int res_idx = 0;
struct i2c_adapter *i2c_adap; struct i2c_adapter *i2c_adap;
struct channel_obj *ch;
struct video_device *vfd;
struct resource *res; struct resource *res;
int subdev_count; int subdev_count;
int res_idx = 0;
int i, err;
vpif_dev = &pdev->dev; vpif_dev = &pdev->dev;
...@@ -1472,24 +1465,6 @@ static __init int vpif_probe(struct platform_device *pdev) ...@@ -1472,24 +1465,6 @@ static __init int vpif_probe(struct platform_device *pdev)
res_idx++; res_idx++;
} }
for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
/* Get the pointer to the channel object */
ch = vpif_obj.dev[i];
/* Allocate memory for video device */
vfd = video_device_alloc();
if (NULL == vfd) {
for (j = 0; j < i; j++) {
ch = vpif_obj.dev[j];
video_device_release(ch->video_dev);
}
err = -ENOMEM;
goto vpif_unregister;
}
/* Set video_dev to the video device */
ch->video_dev = vfd;
}
vpif_obj.config = pdev->dev.platform_data; vpif_obj.config = pdev->dev.platform_data;
subdev_count = vpif_obj.config->subdev_count; subdev_count = vpif_obj.config->subdev_count;
...@@ -1498,7 +1473,7 @@ static __init int vpif_probe(struct platform_device *pdev) ...@@ -1498,7 +1473,7 @@ static __init int vpif_probe(struct platform_device *pdev)
if (vpif_obj.sd == NULL) { if (vpif_obj.sd == NULL) {
vpif_err("unable to allocate memory for subdevice pointers\n"); vpif_err("unable to allocate memory for subdevice pointers\n");
err = -ENOMEM; err = -ENOMEM;
goto vpif_sd_error; goto vpif_unregister;
} }
if (!vpif_obj.config->asd_sizes) { if (!vpif_obj.config->asd_sizes) {
...@@ -1541,13 +1516,6 @@ static __init int vpif_probe(struct platform_device *pdev) ...@@ -1541,13 +1516,6 @@ static __init int vpif_probe(struct platform_device *pdev)
probe_subdev_out: probe_subdev_out:
/* free sub devices memory */ /* free sub devices memory */
kfree(vpif_obj.sd); kfree(vpif_obj.sd);
vpif_sd_error:
for (i = 0; i < VPIF_CAPTURE_MAX_DEVICES; i++) {
ch = vpif_obj.dev[i];
/* Note: does nothing if ch->video_dev == NULL */
video_device_release(ch->video_dev);
}
vpif_unregister: vpif_unregister:
v4l2_device_unregister(&vpif_obj.v4l2_dev); v4l2_device_unregister(&vpif_obj.v4l2_dev);
...@@ -1576,7 +1544,7 @@ static int vpif_remove(struct platform_device *device) ...@@ -1576,7 +1544,7 @@ static int vpif_remove(struct platform_device *device)
common = &ch->common[VPIF_VIDEO_INDEX]; common = &ch->common[VPIF_VIDEO_INDEX];
vb2_dma_contig_cleanup_ctx(common->alloc_ctx); vb2_dma_contig_cleanup_ctx(common->alloc_ctx);
/* Unregister video device */ /* Unregister video device */
video_unregister_device(ch->video_dev); video_unregister_device(&ch->video_dev);
kfree(vpif_obj.dev[i]); kfree(vpif_obj.dev[i]);
} }
return 0; return 0;
......
...@@ -92,7 +92,7 @@ struct common_obj { ...@@ -92,7 +92,7 @@ struct common_obj {
struct channel_obj { struct channel_obj {
/* Identifies video device for this channel */ /* Identifies video device for this channel */
struct video_device *video_dev; struct video_device video_dev;
/* Indicates id of the field which is being displayed */ /* Indicates id of the field which is being displayed */
u32 field_id; u32 field_id;
/* flag to indicate whether decoder is initialized */ /* flag to indicate whether decoder is initialized */
......
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