V4L/DVB (13552): v4l: Replace video_is_unregistered with video_is_registered
Laurent Pinchart [Fri, 27 Nov 2009 16:57:22 +0000 (13:57 -0300)]
Replace the video_is_unregistered function by a video_is_registered
function. The V4L2_FL_UNREGISTERED flag is replaced by a
V4L2_FL_REGISTERED flag.

This change makes the video_is_registered function return coherent
results when called on an initialize but not yet registered video_device
instance. The function can now be used instead of checking
video_device::minor.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

drivers/media/video/hdpvr/hdpvr-video.c
drivers/media/video/v4l2-dev.c
include/media/v4l2-dev.h

index b5439ca..fdd7820 100644 (file)
@@ -523,7 +523,7 @@ static unsigned int hdpvr_poll(struct file *filp, poll_table *wait)
 
        mutex_lock(&dev->io_mutex);
 
-       if (video_is_unregistered(dev->video_dev)) {
+       if (!video_is_registered(dev->video_dev)) {
                mutex_unlock(&dev->io_mutex);
                return -EIO;
        }
index aa3e0f9..7090699 100644 (file)
@@ -189,7 +189,7 @@ static ssize_t v4l2_read(struct file *filp, char __user *buf,
 
        if (!vdev->fops->read)
                return -EINVAL;
-       if (video_is_unregistered(vdev))
+       if (!video_is_registered(vdev))
                return -EIO;
        return vdev->fops->read(filp, buf, sz, off);
 }
@@ -201,7 +201,7 @@ static ssize_t v4l2_write(struct file *filp, const char __user *buf,
 
        if (!vdev->fops->write)
                return -EINVAL;
-       if (video_is_unregistered(vdev))
+       if (!video_is_registered(vdev))
                return -EIO;
        return vdev->fops->write(filp, buf, sz, off);
 }
@@ -210,7 +210,7 @@ static unsigned int v4l2_poll(struct file *filp, struct poll_table_struct *poll)
 {
        struct video_device *vdev = video_devdata(filp);
 
-       if (!vdev->fops->poll || video_is_unregistered(vdev))
+       if (!vdev->fops->poll || !video_is_registered(vdev))
                return DEFAULT_POLLMASK;
        return vdev->fops->poll(filp, poll);
 }
@@ -250,7 +250,7 @@ static unsigned long v4l2_get_unmapped_area(struct file *filp,
 
        if (!vdev->fops->get_unmapped_area)
                return -ENOSYS;
-       if (video_is_unregistered(vdev))
+       if (!video_is_registered(vdev))
                return -ENODEV;
        return vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags);
 }
@@ -260,8 +260,7 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
 {
        struct video_device *vdev = video_devdata(filp);
 
-       if (!vdev->fops->mmap ||
-           video_is_unregistered(vdev))
+       if (!vdev->fops->mmap || !video_is_registered(vdev))
                return -ENODEV;
        return vdev->fops->mmap(filp, vm);
 }
@@ -277,7 +276,7 @@ static int v4l2_open(struct inode *inode, struct file *filp)
        vdev = video_devdata(filp);
        /* return ENODEV if the video device has been removed
           already or if it is not registered anymore. */
-       if (vdev == NULL || video_is_unregistered(vdev)) {
+       if (vdev == NULL || !video_is_registered(vdev)) {
                mutex_unlock(&videodev_lock);
                return -ENODEV;
        }
@@ -555,6 +554,7 @@ static int __video_register_device(struct video_device *vdev, int type, int nr,
                        name_base, nr, video_device_node_name(vdev));
 
        /* Part 5: Activate this minor. The char device can now be used. */
+       set_bit(V4L2_FL_REGISTERED, &vdev->flags);
        mutex_lock(&videodev_lock);
        video_device[vdev->minor] = vdev;
        mutex_unlock(&videodev_lock);
@@ -593,11 +593,11 @@ EXPORT_SYMBOL(video_register_device_no_warn);
 void video_unregister_device(struct video_device *vdev)
 {
        /* Check if vdev was ever registered at all */
-       if (!vdev || vdev->minor < 0)
+       if (!vdev || !video_is_registered(vdev))
                return;
 
        mutex_lock(&videodev_lock);
-       set_bit(V4L2_FL_UNREGISTERED, &vdev->flags);
+       clear_bit(V4L2_FL_REGISTERED, &vdev->flags);
        mutex_unlock(&videodev_lock);
        device_unregister(&vdev->dev);
 }
index 9135f57..2dee938 100644 (file)
@@ -28,10 +28,10 @@ struct v4l2_ioctl_callbacks;
 struct video_device;
 struct v4l2_device;
 
-/* Flag to mark the video_device struct as unregistered.
-   Drivers can set this flag if they want to block all future
-   device access. It is set by video_unregister_device. */
-#define V4L2_FL_UNREGISTERED   (0)
+/* Flag to mark the video_device struct as registered.
+   Drivers can clear this flag if they want to block all future
+   device access. It is cleared by video_unregister_device. */
+#define V4L2_FL_REGISTERED     (0)
 
 struct v4l2_file_operations {
        struct module *owner;
@@ -96,9 +96,7 @@ struct video_device
 /* Register video devices. Note that if video_register_device fails,
    the release() callback of the video_device structure is *not* called, so
    the caller is responsible for freeing any data. Usually that means that
-   you call video_device_release() on failure.
-
-   Also note that vdev->minor is set to -1 if the registration failed. */
+   you call video_device_release() on failure. */
 int __must_check video_register_device(struct video_device *vdev, int type, int nr);
 
 /* Same as video_register_device, but no warning is issued if the desired
@@ -106,7 +104,7 @@ int __must_check video_register_device(struct video_device *vdev, int type, int
 int __must_check video_register_device_no_warn(struct video_device *vdev, int type, int nr);
 
 /* Unregister video devices. Will do nothing if vdev == NULL or
-   vdev->minor < 0. */
+   video_is_registered() returns false. */
 void video_unregister_device(struct video_device *vdev);
 
 /* helper functions to alloc/release struct video_device, the
@@ -146,9 +144,9 @@ static inline const char *video_device_node_name(struct video_device *vdev)
        return dev_name(&vdev->dev);
 }
 
-static inline int video_is_unregistered(struct video_device *vdev)
+static inline int video_is_registered(struct video_device *vdev)
 {
-       return test_bit(V4L2_FL_UNREGISTERED, &vdev->flags);
+       return test_bit(V4L2_FL_REGISTERED, &vdev->flags);
 }
 
 #endif /* _V4L2_DEV_H */