All of lore.kernel.org
 help / color / mirror / Atom feed
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 02:51:04 +0000	[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


WARNING: multiple messages have this Message-ID (diff)
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


  reply	other threads:[~2015-12-06  2:51 UTC|newest]

Thread overview: 21+ 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 ` 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-09-03 16:00   ` Javier Martinez Canillas
2015-12-06  2:46   ` Laurent Pinchart
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-09-03 16:00   ` Javier Martinez Canillas
2015-12-06  2:51   ` Laurent Pinchart [this message]
2015-12-06  2:51     ` Laurent Pinchart
2015-12-07 15:08     ` Javier Martinez Canillas
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.