diff options
| author | Sakari Ailus <sakari.ailus@linux.intel.com> | 2015-12-16 11:32:31 -0200 | 
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2016-01-11 12:19:21 -0200 | 
| commit | 54b5a749b4f3010b3b657507b8ef1eee3a100b09 (patch) | |
| tree | 63b39c852bf62ab58de3d8fbc9db38484ef15912 /drivers/media | |
| parent | 17d3d4058a61329a6a4384054da6a57c65c7e8ba (diff) | |
| download | linux-54b5a749b4f3010b3b657507b8ef1eee3a100b09.tar.bz2 | |
[media] v4l: vsp1: Use media entity enumeration interface
Instead of using a bitmap directly in a driver, use the new media entity
enumeration interface to perform the same.
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media')
| -rw-r--r-- | drivers/media/platform/vsp1/vsp1_video.c | 45 | 
1 files changed, 31 insertions, 14 deletions
| diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c index a6b1bd1225ef..637d0d6f79fb 100644 --- a/drivers/media/platform/vsp1/vsp1_video.c +++ b/drivers/media/platform/vsp1/vsp1_video.c @@ -282,24 +282,35 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,  					 struct vsp1_rwpf *output)  {  	struct vsp1_entity *entity; -	unsigned int entities = 0; +	struct media_entity_enum ent_enum;  	struct media_pad *pad; +	int rval;  	bool bru_found = false;  	input->location.left = 0;  	input->location.top = 0; +	rval = media_entity_enum_init( +		&ent_enum, input->entity.pads[RWPF_PAD_SOURCE].graph_obj.mdev); +	if (rval) +		return rval; +  	pad = media_entity_remote_pad(&input->entity.pads[RWPF_PAD_SOURCE]);  	while (1) { -		if (pad == NULL) -			return -EPIPE; +		if (pad == NULL) { +			rval = -EPIPE; +			goto out; +		}  		/* We've reached a video node, that shouldn't have happened. */ -		if (!is_media_entity_v4l2_subdev(pad->entity)) -			return -EPIPE; +		if (!is_media_entity_v4l2_subdev(pad->entity)) { +			rval = -EPIPE; +			goto out; +		} -		entity = to_vsp1_entity(media_entity_to_v4l2_subdev(pad->entity)); +		entity = to_vsp1_entity( +			media_entity_to_v4l2_subdev(pad->entity));  		/* A BRU is present in the pipeline, store the compose rectangle  		 * location in the input RPF for use when configuring the RPF. @@ -322,15 +333,18 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,  			break;  		/* Ensure the branch has no loop. */ -		if (entities & (1 << media_entity_id(&entity->subdev.entity))) -			return -EPIPE; - -		entities |= 1 << media_entity_id(&entity->subdev.entity); +		if (media_entity_enum_test_and_set(&ent_enum, +						   &entity->subdev.entity)) { +			rval = -EPIPE; +			goto out; +		}  		/* UDS can't be chained. */  		if (entity->type == VSP1_ENTITY_UDS) { -			if (pipe->uds) -				return -EPIPE; +			if (pipe->uds) { +				rval = -EPIPE; +				goto out; +			}  			pipe->uds = entity;  			pipe->uds_input = bru_found ? pipe->bru @@ -348,9 +362,12 @@ static int vsp1_pipeline_validate_branch(struct vsp1_pipeline *pipe,  	/* The last entity must be the output WPF. */  	if (entity != &output->entity) -		return -EPIPE; +		rval = -EPIPE; -	return 0; +out: +	media_entity_enum_cleanup(&ent_enum); + +	return rval;  }  static void __vsp1_pipeline_cleanup(struct vsp1_pipeline *pipe) |