/* Create links. */
        list_for_each_entry(entity, &vsp1->entities, list_dev) {
-               if (entity->type == VSP1_ENTITY_LIF ||
-                   entity->type == VSP1_ENTITY_RPF)
+               if (entity->type == VSP1_ENTITY_LIF) {
+                       ret = vsp1_wpf_create_pads_links(vsp1, entity);
+                       if (ret < 0)
+                               goto done;
+                       continue;
+               }
+
+               if (entity->type == VSP1_ENTITY_RPF) {
+                       ret = vsp1_rpf_create_pads_links(vsp1, entity);
+                       if (ret < 0)
+                               goto done;
                        continue;
+               }
 
                ret = vsp1_create_links(vsp1, entity);
                if (ret < 0)
 
 
        rpf->entity.video = video;
 
-       /* Connect the video device to the RPF. */
-       ret = media_create_pad_link(&rpf->video.video.entity, 0,
-                                      &rpf->entity.subdev.entity,
-                                      RWPF_PAD_SINK,
-                                      MEDIA_LNK_FL_ENABLED |
-                                      MEDIA_LNK_FL_IMMUTABLE);
-       if (ret < 0)
-               goto error;
-
        return rpf;
 
 error:
        vsp1_entity_destroy(&rpf->entity);
        return ERR_PTR(ret);
 }
+
+/*
+ * vsp1_rpf_create_pads_links_create_pads_links() - RPF pads links creation
+ * @vsp1: Pointer to VSP1 device
+ * @entity: Pointer to VSP1 entity
+ *
+ * return negative error code or zero on success
+ */
+int vsp1_rpf_create_pads_links(struct vsp1_device *vsp1,
+                              struct vsp1_entity *entity)
+{
+       struct vsp1_rwpf *rpf = to_rwpf(&entity->subdev);
+
+       /* Connect the video device to the RPF. */
+       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);
+}
 
 struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index);
 struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index);
 
+int vsp1_rpf_create_pads_links(struct vsp1_device *vsp1,
+                              struct vsp1_entity *entity);
+int vsp1_wpf_create_pads_links(struct vsp1_device *vsp1,
+                              struct vsp1_entity *entity);
+
 int vsp1_rwpf_enum_mbus_code(struct v4l2_subdev *subdev,
                             struct v4l2_subdev_pad_config *cfg,
                             struct v4l2_subdev_mbus_code_enum *code);
 
        struct v4l2_subdev *subdev;
        struct vsp1_video *video;
        struct vsp1_rwpf *wpf;
-       unsigned int flags;
        int ret;
 
        wpf = devm_kzalloc(vsp1->dev, sizeof(*wpf), GFP_KERNEL);
                goto error;
 
        wpf->entity.video = video;
-
-       /* Connect the video device to the WPF. All connections are immutable
-        * except for the WPF0 source link if a LIF is present.
-        */
-       flags = MEDIA_LNK_FL_ENABLED;
-       if (!(vsp1->pdata.features & VSP1_HAS_LIF) || index != 0)
-               flags |= MEDIA_LNK_FL_IMMUTABLE;
-
-       ret = media_create_pad_link(&wpf->entity.subdev.entity,
-                                      RWPF_PAD_SOURCE,
-                                      &wpf->video.video.entity, 0, flags);
-       if (ret < 0)
-               goto error;
-
        wpf->entity.sink = &wpf->video.video.entity;
 
        return wpf;
        vsp1_entity_destroy(&wpf->entity);
        return ERR_PTR(ret);
 }
+
+/*
+ * vsp1_wpf_create_pads_links_create_pads_links() - RPF pads links creation
+ * @vsp1: Pointer to VSP1 device
+ * @entity: Pointer to VSP1 entity
+ *
+ * return negative error code or zero on success
+ */
+int vsp1_wpf_create_pads_links(struct vsp1_device *vsp1,
+                              struct vsp1_entity *entity)
+{
+       struct vsp1_rwpf *wpf = to_rwpf(&entity->subdev);
+       unsigned int flags;
+
+       /* Connect the video device to the WPF. All connections are immutable
+        * except for the WPF0 source link if a LIF is present.
+        */
+       flags = MEDIA_LNK_FL_ENABLED;
+       if (!(vsp1->pdata.features & VSP1_HAS_LIF) || entity->index != 0)
+               flags |= MEDIA_LNK_FL_IMMUTABLE;
+
+       return media_create_pad_link(&wpf->entity.subdev.entity,
+                                    RWPF_PAD_SOURCE,
+                                    &wpf->video.video.entity, 0, flags);
+}