Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3efdf62c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] media: use macros to check for V4L2 subdev entities



Instead of relying on media subtype, use the new macros to detect
if an entity is a subdev or an A/V DMA entity.

Please note that most drivers assume that there's just AV_DMA or
V4L2 subdevs. This is not true anymore, as we've added MC support
for DVB, and there are plans to add support for ALSA and FB/DRM
too.

Ok, on the current pipelines supported by those drivers, just V4L
stuff are there, but, assuming that some day a pipeline that also
works with other subsystems will ever added, it is better to add
explicit checks for the AV_DMA stuff.

Acked-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent fa17b46a
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -22,8 +22,7 @@ struct v4l2_subdev *fimc_find_remote_sensor(struct media_entity *entity)
	while (pad->flags & MEDIA_PAD_FL_SINK) {
	while (pad->flags & MEDIA_PAD_FL_SINK) {
		/* source pad */
		/* source pad */
		pad = media_entity_remote_pad(pad);
		pad = media_entity_remote_pad(pad);
		if (pad == NULL ||
		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
		    media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
			break;
			break;


		sd = media_entity_to_v4l2_subdev(pad->entity);
		sd = media_entity_to_v4l2_subdev(pad->entity);
+2 −3
Original line number Original line Diff line number Diff line
@@ -1136,8 +1136,7 @@ static int fimc_pipeline_validate(struct fimc_dev *fimc)
			}
			}
		}
		}


		if (src_pad == NULL ||
		if (!src_pad || !is_media_entity_v4l2_subdev(src_pad->entity))
		    media_entity_type(src_pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
			break;
			break;


		/* Don't call FIMC subdev operation to avoid nested locking */
		/* Don't call FIMC subdev operation to avoid nested locking */
@@ -1392,7 +1391,7 @@ static int fimc_link_setup(struct media_entity *entity,
	struct fimc_vid_cap *vc = &fimc->vid_cap;
	struct fimc_vid_cap *vc = &fimc->vid_cap;
	struct v4l2_subdev *sensor;
	struct v4l2_subdev *sensor;


	if (media_entity_type(remote->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
	if (!is_media_entity_v4l2_subdev(remote->entity))
		return -EINVAL;
		return -EINVAL;


	if (WARN_ON(fimc == NULL))
	if (WARN_ON(fimc == NULL))
+1 −2
Original line number Original line Diff line number Diff line
@@ -466,8 +466,7 @@ static int isp_video_pipeline_validate(struct fimc_isp *isp)


		/* Retrieve format at the source pad */
		/* Retrieve format at the source pad */
		pad = media_entity_remote_pad(pad);
		pad = media_entity_remote_pad(pad);
		if (pad == NULL ||
		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
		    media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
			break;
			break;


		sd = media_entity_to_v4l2_subdev(pad->entity);
		sd = media_entity_to_v4l2_subdev(pad->entity);
+4 −6
Original line number Original line Diff line number Diff line
@@ -808,8 +808,7 @@ static int fimc_pipeline_validate(struct fimc_lite *fimc)
		}
		}
		/* Retrieve format at the source pad */
		/* Retrieve format at the source pad */
		pad = media_entity_remote_pad(pad);
		pad = media_entity_remote_pad(pad);
		if (pad == NULL ||
		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
		    media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
			break;
			break;


		sd = media_entity_to_v4l2_subdev(pad->entity);
		sd = media_entity_to_v4l2_subdev(pad->entity);
@@ -982,7 +981,6 @@ static int fimc_lite_link_setup(struct media_entity *entity,
{
{
	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
	struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(entity);
	struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
	struct fimc_lite *fimc = v4l2_get_subdevdata(sd);
	unsigned int remote_ent_type = media_entity_type(remote->entity);
	int ret = 0;
	int ret = 0;


	if (WARN_ON(fimc == NULL))
	if (WARN_ON(fimc == NULL))
@@ -994,7 +992,7 @@ static int fimc_lite_link_setup(struct media_entity *entity,


	switch (local->index) {
	switch (local->index) {
	case FLITE_SD_PAD_SINK:
	case FLITE_SD_PAD_SINK:
		if (remote_ent_type != MEDIA_ENT_T_V4L2_SUBDEV) {
		if (!is_media_entity_v4l2_subdev(remote->entity)) {
			ret = -EINVAL;
			ret = -EINVAL;
			break;
			break;
		}
		}
@@ -1012,7 +1010,7 @@ static int fimc_lite_link_setup(struct media_entity *entity,
	case FLITE_SD_PAD_SOURCE_DMA:
	case FLITE_SD_PAD_SOURCE_DMA:
		if (!(flags & MEDIA_LNK_FL_ENABLED))
		if (!(flags & MEDIA_LNK_FL_ENABLED))
			atomic_set(&fimc->out_path, FIMC_IO_NONE);
			atomic_set(&fimc->out_path, FIMC_IO_NONE);
		else if (remote_ent_type == MEDIA_ENT_T_DEVNODE)
		else if (is_media_entity_v4l2_io(remote->entity))
			atomic_set(&fimc->out_path, FIMC_IO_DMA);
			atomic_set(&fimc->out_path, FIMC_IO_DMA);
		else
		else
			ret = -EINVAL;
			ret = -EINVAL;
@@ -1021,7 +1019,7 @@ static int fimc_lite_link_setup(struct media_entity *entity,
	case FLITE_SD_PAD_SOURCE_ISP:
	case FLITE_SD_PAD_SOURCE_ISP:
		if (!(flags & MEDIA_LNK_FL_ENABLED))
		if (!(flags & MEDIA_LNK_FL_ENABLED))
			atomic_set(&fimc->out_path, FIMC_IO_NONE);
			atomic_set(&fimc->out_path, FIMC_IO_NONE);
		else if (remote_ent_type == MEDIA_ENT_T_V4L2_SUBDEV)
		else if (is_media_entity_v4l2_subdev(remote->entity))
			atomic_set(&fimc->out_path, FIMC_IO_ISP);
			atomic_set(&fimc->out_path, FIMC_IO_ISP);
		else
		else
			ret = -EINVAL;
			ret = -EINVAL;
+3 −4
Original line number Original line Diff line number Diff line
@@ -88,8 +88,7 @@ static void fimc_pipeline_prepare(struct fimc_pipeline *p,
				break;
				break;
		}
		}


		if (pad == NULL ||
		if (!pad || !is_media_entity_v4l2_subdev(pad->entity))
		    media_entity_type(pad->entity) != MEDIA_ENT_T_V4L2_SUBDEV)
			break;
			break;
		sd = media_entity_to_v4l2_subdev(pad->entity);
		sd = media_entity_to_v4l2_subdev(pad->entity);


@@ -1062,7 +1061,7 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
	media_entity_graph_walk_start(&graph, entity);
	media_entity_graph_walk_start(&graph, entity);


	while ((entity = media_entity_graph_walk_next(&graph))) {
	while ((entity = media_entity_graph_walk_next(&graph))) {
		if (media_entity_type(entity) != MEDIA_ENT_T_DEVNODE)
		if (!is_media_entity_v4l2_io(entity))
			continue;
			continue;


		ret  = __fimc_md_modify_pipeline(entity, enable);
		ret  = __fimc_md_modify_pipeline(entity, enable);
@@ -1076,7 +1075,7 @@ static int __fimc_md_modify_pipelines(struct media_entity *entity, bool enable)
	media_entity_graph_walk_start(&graph, entity_err);
	media_entity_graph_walk_start(&graph, entity_err);


	while ((entity_err = media_entity_graph_walk_next(&graph))) {
	while ((entity_err = media_entity_graph_walk_next(&graph))) {
		if (media_entity_type(entity_err) != MEDIA_ENT_T_DEVNODE)
		if (!is_media_entity_v4l2_io(entity_err))
			continue;
			continue;


		__fimc_md_modify_pipeline(entity_err, !enable);
		__fimc_md_modify_pipeline(entity_err, !enable);
Loading