Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 252197
b: refs/heads/master
c: 8a65a94
h: refs/heads/master
i:
  252195: cee452a
v: v3
  • Loading branch information
Laurent Pinchart authored and Mauro Carvalho Chehab committed May 25, 2011
1 parent 28b0d54 commit 07ca959
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4ffc2d89f38a7fbb3b24adb7fb066a159c351c11
refs/heads/master: 8a65a9485832f90e18e2f7069b75a4181e2840c0
8 changes: 6 additions & 2 deletions trunk/drivers/media/video/uvc/uvc_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1616,6 +1616,10 @@ static void uvc_delete(struct uvc_device *dev)
#ifdef CONFIG_MEDIA_CONTROLLER
uvc_mc_cleanup_entity(entity);
#endif
if (entity->vdev) {
video_device_release(entity->vdev);
entity->vdev = NULL;
}
kfree(entity);
}

Expand All @@ -1638,8 +1642,6 @@ static void uvc_release(struct video_device *vdev)
struct uvc_streaming *stream = video_get_drvdata(vdev);
struct uvc_device *dev = stream->dev;

video_device_release(vdev);

/* Decrement the registered streams count and delete the device when it
* reaches zero.
*/
Expand Down Expand Up @@ -1753,6 +1755,8 @@ static int uvc_register_terms(struct uvc_device *dev,
ret = uvc_register_video(dev, stream);
if (ret < 0)
return ret;

term->vdev = stream->vdev;
}

return 0;
Expand Down
40 changes: 32 additions & 8 deletions trunk/drivers/media/video/uvc/uvc_entity.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,38 +33,62 @@ static int uvc_mc_register_entity(struct uvc_video_chain *chain,
int ret;

for (i = 0; i < entity->num_pads; ++i) {
struct media_entity *source;
struct media_entity *sink;

if (!(entity->pads[i].flags & MEDIA_PAD_FL_SINK))
continue;

remote = uvc_entity_by_id(chain->dev, entity->baSourceID[i]);
if (remote == NULL)
return -EINVAL;

source = (UVC_ENTITY_TYPE(remote) == UVC_TT_STREAMING)
? &remote->vdev->entity : &remote->subdev.entity;
sink = (UVC_ENTITY_TYPE(entity) == UVC_TT_STREAMING)
? &entity->vdev->entity : &entity->subdev.entity;

remote_pad = remote->num_pads - 1;
ret = media_entity_create_link(&remote->subdev.entity,
remote_pad, &entity->subdev.entity, i, flags);
ret = media_entity_create_link(source, remote_pad,
sink, i, flags);
if (ret < 0)
return ret;
}

return v4l2_device_register_subdev(&chain->dev->vdev, &entity->subdev);
if (UVC_ENTITY_TYPE(entity) != UVC_TT_STREAMING)
ret = v4l2_device_register_subdev(&chain->dev->vdev,
&entity->subdev);

return ret;
}

static struct v4l2_subdev_ops uvc_subdev_ops = {
};

void uvc_mc_cleanup_entity(struct uvc_entity *entity)
{
media_entity_cleanup(&entity->subdev.entity);
if (UVC_ENTITY_TYPE(entity) != UVC_TT_STREAMING)
media_entity_cleanup(&entity->subdev.entity);
else if (entity->vdev != NULL)
media_entity_cleanup(&entity->vdev->entity);
}

static int uvc_mc_init_entity(struct uvc_entity *entity)
{
v4l2_subdev_init(&entity->subdev, &uvc_subdev_ops);
strlcpy(entity->subdev.name, entity->name, sizeof(entity->subdev.name));
int ret;

if (UVC_ENTITY_TYPE(entity) != UVC_TT_STREAMING) {
v4l2_subdev_init(&entity->subdev, &uvc_subdev_ops);
strlcpy(entity->subdev.name, entity->name,
sizeof(entity->subdev.name));

ret = media_entity_init(&entity->subdev.entity,
entity->num_pads, entity->pads, 0);
} else
ret = media_entity_init(&entity->vdev->entity,
entity->num_pads, entity->pads, 0);

return media_entity_init(&entity->subdev.entity, entity->num_pads,
entity->pads, 0);
return ret;
}

int uvc_mc_register_entities(struct uvc_video_chain *chain)
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/media/video/uvc/uvcvideo.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ struct uvc_entity {
char name[64];

/* Media controller-related fields. */
struct video_device *vdev;
struct v4l2_subdev subdev;
unsigned int num_pads;
unsigned int num_links;
Expand Down

0 comments on commit 07ca959

Please sign in to comment.