diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c index 429e428ccd93..7f82b65b238e 100644 --- a/drivers/media/usb/uvc/uvc_entity.c +++ b/drivers/media/usb/uvc/uvc_entity.c @@ -25,6 +25,15 @@ 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_pads_links(struct uvc_video_chain *chain, + struct uvc_entity *entity) { const u32 flags = MEDIA_LNK_FL_ENABLED | MEDIA_LNK_FL_IMMUTABLE; struct media_entity *sink; @@ -62,10 +71,7 @@ static int uvc_mc_register_entity(struct uvc_video_chain *chain, return ret; } - if (UVC_ENTITY_TYPE(entity) == UVC_TT_STREAMING) - return 0; - - return v4l2_device_register_subdev(&chain->dev->vdev, &entity->subdev); + return 0; } static struct v4l2_subdev_ops uvc_subdev_ops = { @@ -124,5 +130,14 @@ int uvc_mc_register_entities(struct uvc_video_chain *chain) } } + list_for_each_entry(entity, &chain->entities, chain) { + ret = uvc_mc_create_pads_links(chain, entity); + if (ret < 0) { + uvc_printk(KERN_INFO, "Failed to create pads links for " + "entity %u\n", entity->id); + return ret; + } + } + return 0; }