v4l: vsp1: Store source and sink pointers as vsp1_entity
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sun, 25 Jun 2017 17:15:22 +0000 (20:15 +0300)
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sat, 29 Jul 2017 20:46:56 +0000 (23:46 +0300)
The internal VSP entity source and sink pointers are stored as
media_entity pointers, which are then cast to a vsp1_entity. As all
sources and sinks are vsp1_entity instances, we can store the
vsp1_entity pointers directly.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Acked-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/platform/vsp1/vsp1_drm.c
drivers/media/platform/vsp1/vsp1_drv.c
drivers/media/platform/vsp1/vsp1_entity.c
drivers/media/platform/vsp1/vsp1_entity.h

index bc3fd9bc7126c61348e152fb2a1905c00db112cc..2d5a74e95e098ba0e7921b65bc6a671266507689 100644 (file)
@@ -587,7 +587,7 @@ int vsp1_drm_create_links(struct vsp1_device *vsp1)
                if (ret < 0)
                        return ret;
 
-               rpf->entity.sink = &vsp1->bru->entity.subdev.entity;
+               rpf->entity.sink = &vsp1->bru->entity;
                rpf->entity.sink_pad = i;
        }
 
@@ -598,7 +598,7 @@ int vsp1_drm_create_links(struct vsp1_device *vsp1)
        if (ret < 0)
                return ret;
 
-       vsp1->bru->entity.sink = &vsp1->wpf[0]->entity.subdev.entity;
+       vsp1->bru->entity.sink = &vsp1->wpf[0]->entity;
        vsp1->bru->entity.sink_pad = RWPF_PAD_SINK;
 
        ret = media_create_pad_link(&vsp1->wpf[0]->entity.subdev.entity,
index 35087d5573ceaaa8355b9882c9c6085e5c57e66e..9b3a0790f92aba12b90c7b305d6aef66b5e79f51 100644 (file)
@@ -121,7 +121,7 @@ static int vsp1_create_sink_links(struct vsp1_device *vsp1,
                                return ret;
 
                        if (flags & MEDIA_LNK_FL_ENABLED)
-                               source->sink = entity;
+                               source->sink = sink;
                }
        }
 
index 4bdb3b141611a6dd8450e8e8a9e46147a570dfac..71dd903263adcdc192f92882f047d76cade5a16b 100644 (file)
 #include "vsp1_pipe.h"
 #include "vsp1_rwpf.h"
 
-static inline struct vsp1_entity *
-media_entity_to_vsp1_entity(struct media_entity *entity)
-{
-       return container_of(entity, struct vsp1_entity, subdev.entity);
-}
-
 void vsp1_entity_route_setup(struct vsp1_entity *entity,
                             struct vsp1_pipeline *pipe,
                             struct vsp1_dl_list *dl)
 {
        struct vsp1_entity *source;
-       struct vsp1_entity *sink;
 
        if (entity->type == VSP1_ENTITY_HGO) {
                u32 smppt;
@@ -44,7 +37,7 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity,
                 * The HGO is a special case, its routing is configured on the
                 * sink pad.
                 */
-               source = media_entity_to_vsp1_entity(entity->sources[0]);
+               source = entity->sources[0];
                smppt = (pipe->output->entity.index << VI6_DPR_SMPPT_TGW_SHIFT)
                      | (source->route->output << VI6_DPR_SMPPT_PT_SHIFT);
 
@@ -57,7 +50,7 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity,
                 * The HGT is a special case, its routing is configured on the
                 * sink pad.
                 */
-               source = media_entity_to_vsp1_entity(entity->sources[0]);
+               source = entity->sources[0];
                smppt = (pipe->output->entity.index << VI6_DPR_SMPPT_TGW_SHIFT)
                      | (source->route->output << VI6_DPR_SMPPT_PT_SHIFT);
 
@@ -69,9 +62,8 @@ void vsp1_entity_route_setup(struct vsp1_entity *entity,
        if (source->route->reg == 0)
                return;
 
-       sink = media_entity_to_vsp1_entity(source->sink);
        vsp1_dl_list_write(dl, source->route->reg,
-                          sink->route->inputs[source->sink_pad]);
+                          source->sink->route->inputs[source->sink_pad]);
 }
 
 /* -----------------------------------------------------------------------------
@@ -316,6 +308,12 @@ done:
  * Media Operations
  */
 
+static inline struct vsp1_entity *
+media_entity_to_vsp1_entity(struct media_entity *entity)
+{
+       return container_of(entity, struct vsp1_entity, subdev.entity);
+}
+
 static int vsp1_entity_link_setup_source(const struct media_pad *source_pad,
                                         const struct media_pad *sink_pad,
                                         u32 flags)
@@ -339,7 +337,7 @@ static int vsp1_entity_link_setup_source(const struct media_pad *source_pad,
                    sink->type != VSP1_ENTITY_HGT) {
                        if (source->sink)
                                return -EBUSY;
-                       source->sink = sink_pad->entity;
+                       source->sink = sink;
                        source->sink_pad = sink_pad->index;
                }
        } else {
@@ -355,15 +353,17 @@ static int vsp1_entity_link_setup_sink(const struct media_pad *source_pad,
                                       u32 flags)
 {
        struct vsp1_entity *sink;
+       struct vsp1_entity *source;
 
        sink = media_entity_to_vsp1_entity(sink_pad->entity);
+       source = media_entity_to_vsp1_entity(source_pad->entity);
 
        if (flags & MEDIA_LNK_FL_ENABLED) {
                /* Fan-in is limited to one. */
                if (sink->sources[sink_pad->index])
                        return -EBUSY;
 
-               sink->sources[sink_pad->index] = source_pad->entity;
+               sink->sources[sink_pad->index] = source;
        } else {
                sink->sources[sink_pad->index] = NULL;
        }
index c169a060b6d2d28fc6b6c42fb02a76adfeea6a97..4362cd4e90ba86a2381f80820665f12586e1e8ca 100644 (file)
@@ -104,8 +104,8 @@ struct vsp1_entity {
        struct media_pad *pads;
        unsigned int source_pad;
 
-       struct media_entity **sources;
-       struct media_entity *sink;
+       struct vsp1_entity **sources;
+       struct vsp1_entity *sink;
        unsigned int sink_pad;
 
        struct v4l2_subdev subdev;