|
@@ -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)
|
|
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)
|
|
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 @@ probe_out:
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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)
|
|
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;
|