V4L/DVB (7947): videodev: add vidioc_g_std callback.
authorHans Verkuil <hverkuil@xs4all.nl>
Wed, 28 May 2008 11:27:00 +0000 (08:27 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 20 Jul 2008 10:07:22 +0000 (07:07 -0300)
The default videodev behavior for VIDIOC_G_STD is not correct for all devices.
Add a new callback that drivers can use instead.

Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/videodev.c
include/media/v4l2-dev.h

index 91fd6cb..4d58b55 100644 (file)
@@ -1206,11 +1206,15 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
        {
                v4l2_std_id *id = arg;
 
-               *id = vfd->current_norm;
-
-               dbgarg (cmd, "value=%08Lx\n", (long long unsigned) *id);
+               ret = 0;
+               /* Calls the specific handler */
+               if (vfd->vidioc_g_std)
+                       ret = vfd->vidioc_g_std(file, fh, id);
+               else
+                       *id = vfd->current_norm;
 
-               ret=0;
+               if (!ret)
+                       dbgarg(cmd, "value=%08Lx\n", (long long unsigned)*id);
                break;
        }
        case VIDIOC_S_STD:
index 53b651a..8a40f48 100644 (file)
@@ -212,8 +212,9 @@ struct video_device
        int (*vidioc_streamoff)(struct file *file, void *fh, enum v4l2_buf_type i);
 
                /* Standard handling
-                       G_STD and ENUMSTD are handled by videodev.c
+                       ENUMSTD is handled by videodev.c
                 */
+       int (*vidioc_g_std) (struct file *file, void *fh, v4l2_std_id *norm);
        int (*vidioc_s_std) (struct file *file, void *fh, v4l2_std_id *norm);
        int (*vidioc_querystd) (struct file *file, void *fh, v4l2_std_id *a);