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

Commit 1cb2f6f4 authored by Javier Martinez Canillas's avatar Javier Martinez Canillas Committed by Mauro Carvalho Chehab
Browse files

[media] uvcvideo: register entity subdev on init



The uvc_mc_register_entities() function iterated over the entities three
times to initialize the entities, register the subdev for the ones whose
type was UVC_TT_STREAMING and to create the entities links.

But this can be simplied by merging the init and registration logic in a
single loop.

Suggested-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarJavier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 552faf4c
Loading
Loading
Loading
Loading
+9 −24
Original line number Diff line number Diff line
@@ -19,19 +19,6 @@

#include "uvcvideo.h"

/* ------------------------------------------------------------------------
 * Video subdevices registration and unregistration
 */

static int uvc_mc_register_entity(struct uvc_video_chain *chain,
	struct uvc_entity *entity)
{
	if (UVC_ENTITY_TYPE(entity) == UVC_TT_STREAMING)
		return 0;

	return v4l2_device_register_subdev(&chain->dev->vdev, &entity->subdev);
}

static int uvc_mc_create_links(struct uvc_video_chain *chain,
				    struct uvc_entity *entity)
{
@@ -85,7 +72,8 @@ void uvc_mc_cleanup_entity(struct uvc_entity *entity)
		media_entity_cleanup(&entity->vdev->entity);
}

static int uvc_mc_init_entity(struct uvc_entity *entity)
static int uvc_mc_init_entity(struct uvc_video_chain *chain,
			      struct uvc_entity *entity)
{
	int ret;

@@ -96,6 +84,12 @@ static int uvc_mc_init_entity(struct uvc_entity *entity)

		ret = media_entity_pads_init(&entity->subdev.entity,
					entity->num_pads, entity->pads);

		if (ret < 0)
			return ret;

		ret = v4l2_device_register_subdev(&chain->dev->vdev,
						  &entity->subdev);
	} else if (entity->vdev != NULL) {
		ret = media_entity_pads_init(&entity->vdev->entity,
					entity->num_pads, entity->pads);
@@ -113,7 +107,7 @@ int uvc_mc_register_entities(struct uvc_video_chain *chain)
	int ret;

	list_for_each_entry(entity, &chain->entities, chain) {
		ret = uvc_mc_init_entity(entity);
		ret = uvc_mc_init_entity(chain, entity);
		if (ret < 0) {
			uvc_printk(KERN_INFO, "Failed to initialize entity for "
				   "entity %u\n", entity->id);
@@ -121,15 +115,6 @@ int uvc_mc_register_entities(struct uvc_video_chain *chain)
		}
	}

	list_for_each_entry(entity, &chain->entities, chain) {
		ret = uvc_mc_register_entity(chain, entity);
		if (ret < 0) {
			uvc_printk(KERN_INFO, "Failed to register entity for "
				   "entity %u\n", entity->id);
			return ret;
		}
	}

	list_for_each_entry(entity, &chain->entities, chain) {
		ret = uvc_mc_create_links(chain, entity);
		if (ret < 0) {