summaryrefslogtreecommitdiff
path: root/drivers/media/platform/vsp1/vsp1_drv.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2015-07-28 22:16:05 +0300
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-02-19 14:19:55 +0300
commitf2ed459db7a1537cddc50a58ee26df6b8f3fbe1f (patch)
tree13c52ade788e4be7a715eb3812cb6fd7b0ac23d8 /drivers/media/platform/vsp1/vsp1_drv.c
parentc618b185fd98369e630a6ecc063da1e35da61de3 (diff)
downloadlinux-f2ed459db7a1537cddc50a58ee26df6b8f3fbe1f.tar.xz
[media] v4l: vsp1: Make the userspace API optional
The R-Car Gen3 SoCs include VSP instances dedicated to the DU that will be controlled entirely by the rcar-du-drm driver through the KMS API. To support that use case make the userspace V4L2 API optional. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/vsp1/vsp1_drv.c')
-rw-r--r--drivers/media/platform/vsp1/vsp1_drv.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/drivers/media/platform/vsp1/vsp1_drv.c b/drivers/media/platform/vsp1/vsp1_drv.c
index 8d67a06c86ea..63892b2f4484 100644
--- a/drivers/media/platform/vsp1/vsp1_drv.c
+++ b/drivers/media/platform/vsp1/vsp1_drv.c
@@ -143,6 +143,9 @@ static int vsp1_create_links(struct vsp1_device *vsp1)
return ret;
}
+ if (!vsp1->pdata.uapi)
+ return 0;
+
for (i = 0; i < vsp1->pdata.rpf_count; ++i) {
struct vsp1_rwpf *rpf = vsp1->rpf[i];
@@ -267,7 +270,6 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
}
for (i = 0; i < vsp1->pdata.rpf_count; ++i) {
- struct vsp1_video *video;
struct vsp1_rwpf *rpf;
rpf = vsp1_rpf_create(vsp1, i);
@@ -279,13 +281,16 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
vsp1->rpf[i] = rpf;
list_add_tail(&rpf->entity.list_dev, &vsp1->entities);
- video = vsp1_video_create(vsp1, rpf);
- if (IS_ERR(video)) {
- ret = PTR_ERR(video);
- goto done;
- }
+ if (vsp1->pdata.uapi) {
+ struct vsp1_video *video = vsp1_video_create(vsp1, rpf);
- list_add_tail(&video->list, &vsp1->videos);
+ if (IS_ERR(video)) {
+ ret = PTR_ERR(video);
+ goto done;
+ }
+
+ list_add_tail(&video->list, &vsp1->videos);
+ }
}
if (vsp1->pdata.features & VSP1_HAS_SRU) {
@@ -312,7 +317,6 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
}
for (i = 0; i < vsp1->pdata.wpf_count; ++i) {
- struct vsp1_video *video;
struct vsp1_rwpf *wpf;
wpf = vsp1_wpf_create(vsp1, i);
@@ -324,14 +328,17 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
vsp1->wpf[i] = wpf;
list_add_tail(&wpf->entity.list_dev, &vsp1->entities);
- video = vsp1_video_create(vsp1, wpf);
- if (IS_ERR(video)) {
- ret = PTR_ERR(video);
- goto done;
- }
+ if (vsp1->pdata.uapi) {
+ struct vsp1_video *video = vsp1_video_create(vsp1, wpf);
- list_add_tail(&video->list, &vsp1->videos);
- wpf->entity.sink = &video->video.entity;
+ if (IS_ERR(video)) {
+ ret = PTR_ERR(video);
+ goto done;
+ }
+
+ list_add_tail(&video->list, &vsp1->videos);
+ wpf->entity.sink = &video->video.entity;
+ }
}
/* Register all subdevs. */
@@ -347,9 +354,11 @@ static int vsp1_create_entities(struct vsp1_device *vsp1)
if (ret < 0)
goto done;
- ret = v4l2_device_register_subdev_nodes(&vsp1->v4l2_dev);
- if (ret < 0)
- goto done;
+ if (vsp1->pdata.uapi) {
+ ret = v4l2_device_register_subdev_nodes(&vsp1->v4l2_dev);
+ if (ret < 0)
+ goto done;
+ }
ret = media_device_register(mdev);
@@ -545,6 +554,7 @@ static int vsp1_parse_dt(struct vsp1_device *vsp1)
pdata->features |= VSP1_HAS_BRU;
pdata->num_bru_inputs = 4;
+ pdata->uapi = true;
return 0;
}