From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Javier Martinez Canillas <javier@osg.samsung.com>
Cc: linux-kernel@vger.kernel.org,
Hans Verkuil <hans.verkuil@cisco.com>,
Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
linux-sh@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [PATCH 3/5] [media] v4l: vsp1: separate links creation from entities init
Date: Sun, 06 Dec 2015 04:51:04 +0200 [thread overview]
Message-ID: <7559062.XA9lTlmQ7K@avalon> (raw)
In-Reply-To: <1441296036-20727-4-git-send-email-javier@osg.samsung.com>
Hi Javier,
Thank you for the patch.
On Thursday 03 September 2015 18:00:34 Javier Martinez Canillas wrote:
> The vsp1 driver initializes the entities and creates the pads links
> before the entities are registered with the media device. This doesn't
> work now that object IDs are used to create links so the media_device
> has to be set.
>
> Split out the pads links creation from the entity initialization so are
> made after the entities registration.
>
> Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
> ---
>
> drivers/media/platform/vsp1/vsp1_drv.c | 14 ++++++++++--
> drivers/media/platform/vsp1/vsp1_rpf.c | 29 ++++++++++++++++--------
> drivers/media/platform/vsp1/vsp1_rwpf.h | 5 +++++
> drivers/media/platform/vsp1/vsp1_wpf.c | 40 +++++++++++++++++-------------
> 4 files changed, 62 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/media/platform/vsp1/vsp1_drv.c
> b/drivers/media/platform/vsp1/vsp1_drv.c index 2aa427d3ff39..8f995d267646
> 100644
> --- a/drivers/media/platform/vsp1/vsp1_drv.c
> +++ b/drivers/media/platform/vsp1/vsp1_drv.c
> @@ -260,9 +260,19 @@ static int vsp1_create_entities(struct vsp1_device
> *vsp1)
>
> /* 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);
Could you please s/pads_links/links/ ? There's no other type of links handled
by the driver.
> + if (ret < 0)
> + goto done;
> + continue;
I would use
} else if (...) {
instead of a continue.
> + }
> +
> + if (entity->type == VSP1_ENTITY_RPF) {
> + ret = vsp1_rpf_create_pads_links(vsp1, entity);
> + if (ret < 0)
> + goto done;
> continue;
Same here.
Apart from that,
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> + }
>
> ret = vsp1_create_links(vsp1, entity);
> if (ret < 0)
> diff --git a/drivers/media/platform/vsp1/vsp1_rpf.c
> b/drivers/media/platform/vsp1/vsp1_rpf.c index b60a528a8fe8..38aebdf691b5
> 100644
> --- a/drivers/media/platform/vsp1/vsp1_rpf.c
> +++ b/drivers/media/platform/vsp1/vsp1_rpf.c
> @@ -277,18 +277,29 @@ struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device
> *vsp1, unsigned int index)
>
> 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);
> +}
> diff --git a/drivers/media/platform/vsp1/vsp1_rwpf.h
> b/drivers/media/platform/vsp1/vsp1_rwpf.h index f452dce1a931..6638b3587369
> 100644
> --- a/drivers/media/platform/vsp1/vsp1_rwpf.h
> +++ b/drivers/media/platform/vsp1/vsp1_rwpf.h
> @@ -50,6 +50,11 @@ static inline struct vsp1_rwpf *to_rwpf(struct
> v4l2_subdev *subdev) 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);
> diff --git a/drivers/media/platform/vsp1/vsp1_wpf.c
> b/drivers/media/platform/vsp1/vsp1_wpf.c index d39aa4b8aea1..1be363e4f741
> 100644
> --- a/drivers/media/platform/vsp1/vsp1_wpf.c
> +++ b/drivers/media/platform/vsp1/vsp1_wpf.c
> @@ -220,7 +220,6 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device
> *vsp1, unsigned int index) 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);
> @@ -276,20 +275,6 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device
> *vsp1, unsigned int index) 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;
> @@ -298,3 +283,28 @@ error:
> 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);
> +}
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-12-06 2:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-03 16:00 [PATCH 0/5] [media] Create pads links after entities registration Javier Martinez Canillas
2015-09-03 16:00 ` [PATCH 1/5] [media] staging: omap4iss: separate links creation from entities init Javier Martinez Canillas
2015-12-06 3:10 ` Laurent Pinchart
2015-12-07 15:19 ` Javier Martinez Canillas
2015-09-03 16:00 ` [PATCH 2/5] [media] v4l: vsp1: create pad links after subdev registration Javier Martinez Canillas
2015-12-06 2:46 ` Laurent Pinchart
2015-09-03 16:00 ` [PATCH 3/5] [media] v4l: vsp1: separate links creation from entities init Javier Martinez Canillas
2015-12-06 2:51 ` Laurent Pinchart [this message]
2015-12-07 15:08 ` Javier Martinez Canillas
2015-09-03 16:00 ` [PATCH 4/5] [media] uvcvideo: create pad links after subdev registration Javier Martinez Canillas
2015-09-07 14:10 ` Javier Martinez Canillas
2015-12-06 2:44 ` Laurent Pinchart
2015-12-07 15:04 ` Javier Martinez Canillas
2015-09-03 16:00 ` [PATCH 5/5] [media] smiapp: " Javier Martinez Canillas
2015-12-06 2:33 ` Laurent Pinchart
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7559062.XA9lTlmQ7K@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=hans.verkuil@cisco.com \
--cc=javier@osg.samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=mchehab@osg.samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox