[media] v4l: vsp1: Move vsp1_video pointer from vsp1_entity to vsp1_rwpf
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sun, 2 Aug 2015 17:58:43 +0000 (14:58 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 19 Feb 2016 10:58:05 +0000 (08:58 -0200)
Only RPFs and WPFs can be associated with video nodes, don't waste
memory by storing the video pointer in all entities.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/vsp1/vsp1_drv.c
drivers/media/platform/vsp1/vsp1_entity.h
drivers/media/platform/vsp1/vsp1_rwpf.h
drivers/media/platform/vsp1/vsp1_video.c

index 773c9f0b09714a9b1ca79beb120c8d774a5945d6..0fb654e7263382355aca70d37ed69cf9e034c21d 100644 (file)
@@ -89,8 +89,8 @@ static int vsp1_create_links(struct vsp1_device *vsp1, struct vsp1_entity *sink)
                /* RPFs have no source entities, just connect their source pad
                 * to their video device.
                 */
-               return media_create_pad_link(&rpf->entity.video->video.entity,
-                                            0, &rpf->entity.subdev.entity,
+               return media_create_pad_link(&rpf->video->video.entity, 0,
+                                            &rpf->entity.subdev.entity,
                                             RWPF_PAD_SINK,
                                             MEDIA_LNK_FL_ENABLED |
                                             MEDIA_LNK_FL_IMMUTABLE);
@@ -139,7 +139,7 @@ static int vsp1_create_links(struct vsp1_device *vsp1, struct vsp1_entity *sink)
 
                return media_create_pad_link(&wpf->entity.subdev.entity,
                                             RWPF_PAD_SOURCE,
-                                            &wpf->entity.video->video.entity,
+                                            &wpf->video->video.entity,
                                             0, flags);
        }
 
index 8867a5787c285975c554c710531d2d12ab64b892..9c95507ec762c82d4cef2d7a51a444fdf2298f18 100644 (file)
@@ -19,7 +19,6 @@
 #include <media/v4l2-subdev.h>
 
 struct vsp1_device;
-struct vsp1_video;
 
 enum vsp1_entity_type {
        VSP1_ENTITY_BRU,
@@ -71,8 +70,6 @@ struct vsp1_entity {
        struct v4l2_subdev subdev;
        struct v4l2_mbus_framefmt *formats;
 
-       struct vsp1_video *video;
-
        spinlock_t lock;                /* Protects the streaming field */
        bool streaming;
 };
index 0076920adb28ce24941841b5b500caa2d99107fa..1a90c7c8e9727687cafe94efa561052d2ad0e560 100644 (file)
@@ -24,6 +24,7 @@
 #define RWPF_PAD_SOURCE                                1
 
 struct vsp1_rwpf;
+struct vsp1_video;
 
 struct vsp1_rwpf_memory {
        unsigned int num_planes;
@@ -40,6 +41,8 @@ struct vsp1_rwpf {
        struct vsp1_entity entity;
        struct v4l2_ctrl_handler ctrls;
 
+       struct vsp1_video *video;
+
        const struct vsp1_rwpf_operations *ops;
 
        unsigned int max_width;
index 26e980da1ed94020b80583bdae1eb3e18db5f0e1..e9a6f9f90c90a40c77c62727d91231fd5ca42c2e 100644 (file)
@@ -448,11 +448,11 @@ static int vsp1_pipeline_validate(struct vsp1_pipeline *pipe,
                if (e->type == VSP1_ENTITY_RPF) {
                        rwpf = to_rwpf(subdev);
                        pipe->inputs[pipe->num_inputs++] = rwpf;
-                       rwpf->entity.video->pipe_index = pipe->num_inputs;
+                       rwpf->video->pipe_index = pipe->num_inputs;
                } else if (e->type == VSP1_ENTITY_WPF) {
                        rwpf = to_rwpf(subdev);
                        pipe->output = to_rwpf(subdev);
-                       rwpf->entity.video->pipe_index = 0;
+                       rwpf->video->pipe_index = 0;
                } else if (e->type == VSP1_ENTITY_LIF) {
                        pipe->lif = e;
                } else if (e->type == VSP1_ENTITY_BRU) {
@@ -664,10 +664,10 @@ void vsp1_pipeline_frame_end(struct vsp1_pipeline *pipe)
 
        /* Complete buffers on all video nodes. */
        for (i = 0; i < pipe->num_inputs; ++i)
-               vsp1_video_frame_end(pipe, pipe->inputs[i]->entity.video);
+               vsp1_video_frame_end(pipe, pipe->inputs[i]->video);
 
        if (!pipe->lif)
-               vsp1_video_frame_end(pipe, pipe->output->entity.video);
+               vsp1_video_frame_end(pipe, pipe->output->video);
 
        spin_lock_irqsave(&pipe->irqlock, flags);
 
@@ -1217,7 +1217,7 @@ struct vsp1_video *vsp1_video_create(struct vsp1_device *vsp1,
        if (!video)
                return ERR_PTR(-ENOMEM);
 
-       rwpf->entity.video = video;
+       rwpf->video = video;
 
        video->vsp1 = vsp1;
        video->rwpf = rwpf;