lkml.org 
[lkml]   [2010]   [Nov]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [RFC/PATCH v6 11/12] v4l: Make video_device inherit from media_entity
    Date
    On Thursday, November 25, 2010 03:28:18 Laurent Pinchart wrote:
    > V4L2 devices are media entities. As such they need to inherit from
    > (include) the media_entity structure.
    >
    > When registering/unregistering the device, the media entity is
    > automatically registered/unregistered. The entity is acquired on device
    > open and released on device close.
    >
    > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    > Signed-off-by: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
    > ---
    > Documentation/video4linux/v4l2-framework.txt | 38 +++++++++++++++++++--
    > drivers/media/video/v4l2-dev.c | 47 +++++++++++++++++++++++---
    > include/media/v4l2-dev.h | 7 ++++
    > 3 files changed, 84 insertions(+), 8 deletions(-)
    >

    <snip>

    > diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c
    > index 035db52..511e1ee 100644
    > --- a/drivers/media/video/v4l2-dev.c
    > +++ b/drivers/media/video/v4l2-dev.c
    > @@ -278,6 +278,9 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
    > static int v4l2_open(struct inode *inode, struct file *filp)
    > {
    > struct video_device *vdev;
    > +#if defined(CONFIG_MEDIA_CONTROLLER)
    > + struct media_entity *entity = NULL;
    > +#endif
    > int ret = 0;
    >
    > /* Check if the video device is available */
    > @@ -291,6 +294,16 @@ static int v4l2_open(struct inode *inode, struct file *filp)
    > /* and increase the device refcount */
    > video_get(vdev);
    > mutex_unlock(&videodev_lock);
    > +#if defined(CONFIG_MEDIA_CONTROLLER)
    > + if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) {
    > + entity = media_entity_get(&vdev->entity);
    > + if (!entity) {
    > + ret = -EBUSY;
    > + video_put(vdev);
    > + return ret;
    > + }
    > + }
    > +#endif
    > if (vdev->fops->open) {
    > if (vdev->lock)
    > mutex_lock(vdev->lock);
    > @@ -303,8 +316,13 @@ static int v4l2_open(struct inode *inode, struct file *filp)
    > }
    >
    > /* decrease the refcount in case of an error */
    > - if (ret)
    > + if (ret) {
    > +#if defined(CONFIG_MEDIA_CONTROLLER)
    > + if (vdev->v4l2_dev && vdev->v4l2_dev->mdev)
    > + media_entity_put(entity);
    > +#endif
    > video_put(vdev);
    > + }
    > return ret;
    > }
    >
    > @@ -321,7 +339,10 @@ static int v4l2_release(struct inode *inode, struct file *filp)
    > if (vdev->lock)
    > mutex_unlock(vdev->lock);
    > }
    > -
    > +#if defined(CONFIG_MEDIA_CONTROLLER)
    > + if (vdev->v4l2_dev && vdev->v4l2_dev->mdev)
    > + media_entity_put(&vdev->entity);
    > +#endif
    > /* decrease the refcount unconditionally since the release()
    > return value is ignored. */
    > video_put(vdev);
    > @@ -558,12 +579,25 @@ int __video_register_device(struct video_device *vdev, int type, int nr,
    > if (nr != -1 && nr != vdev->num && warn_if_nr_in_use)
    > printk(KERN_WARNING "%s: requested %s%d, got %s\n", __func__,
    > name_base, nr, video_device_node_name(vdev));
    > -
    > - /* Part 5: Activate this minor. The char device can now be used. */
    > +#if defined(CONFIG_MEDIA_CONTROLLER)
    > + /* Part 5: Register the entity. */
    > + if (vdev->v4l2_dev && vdev->v4l2_dev->mdev) {
    > + vdev->entity.type = MEDIA_ENTITY_TYPE_NODE_V4L;
    > + vdev->entity.name = vdev->name;
    > + vdev->entity.v4l.major = VIDEO_MAJOR;
    > + vdev->entity.v4l.minor = vdev->minor;
    > + ret = media_device_register_entity(vdev->v4l2_dev->mdev,
    > + &vdev->entity);
    > + if (ret < 0)
    > + printk(KERN_ERR "error\n"); /* TODO */

    Was this forgotten, or will this be fixed in the next version? It looks
    out-of-place...

    > + }
    > +#endif

    Regards,

    Hans

    --
    Hans Verkuil - video4linux developer - sponsored by Cisco


    \
     
     \ /
      Last update: 2010-11-25 12:41    [W:0.032 / U:3.352 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site