V4L/DVB (13024): go7007: Implement vidioc_g_std and vidioc_querystd
authorPete Eberlein <pete@sensoray.com>
Sat, 19 Sep 2009 00:59:29 +0000 (21:59 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 19 Sep 2009 03:54:00 +0000 (00:54 -0300)
Implemented the vidio_g_std and vidio_querystd ioctls.

Signed-off-by: Pete Eberlein <pete@sensoray.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/go7007/go7007-v4l2.c

index 65f63d2..4bd353a 100644 (file)
@@ -1110,6 +1110,24 @@ static int vidioc_enum_frameintervals(struct file *filp, void *priv,
        return 0;
 }
 
+static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *std)
+{
+       struct go7007 *go = ((struct go7007_file *) priv)->go;
+
+       switch (go->standard) {
+       case GO7007_STD_NTSC:
+               *std = V4L2_STD_NTSC;
+               break;
+       case GO7007_STD_PAL:
+               *std = V4L2_STD_PAL;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *std)
 {
        struct go7007 *go = ((struct go7007_file *) priv)->go;
@@ -1154,24 +1172,22 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *std)
        return 0;
 }
 
-#if 0
-       case VIDIOC_QUERYSTD:
-       {
-               v4l2_std_id *std = arg;
+static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *std)
+{
+       struct go7007 *go = ((struct go7007_file *) priv)->go;
 
-               if ((go->board_info->flags & GO7007_BOARD_HAS_TUNER) &&
-                               go->input == go->board_info->num_inputs - 1) {
-                       if (!go->i2c_adapter_online)
-                               return -EIO;
-                       i2c_clients_command(&go->i2c_adapter,
-                                               VIDIOC_QUERYSTD, arg);
-               } else if (go->board_info->sensor_flags & GO7007_SENSOR_TV)
-                       *std = V4L2_STD_NTSC | V4L2_STD_PAL | V4L2_STD_SECAM;
-               else
-                       *std = 0;
-               return 0;
-       }
-#endif
+       if ((go->board_info->flags & GO7007_BOARD_HAS_TUNER) &&
+                       go->input == go->board_info->num_inputs - 1) {
+               if (!go->i2c_adapter_online)
+                       return -EIO;
+               i2c_clients_command(&go->i2c_adapter, VIDIOC_QUERYSTD, std);
+       } else if (go->board_info->sensor_flags & GO7007_SENSOR_TV)
+               *std = V4L2_STD_NTSC | V4L2_STD_PAL | V4L2_STD_SECAM;
+       else
+               *std = 0;
+
+       return 0;
+}
 
 static int vidioc_enum_input(struct file *file, void *priv,
                                struct v4l2_input *inp)
@@ -1768,7 +1784,9 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
        .vidioc_querybuf          = vidioc_querybuf,
        .vidioc_qbuf              = vidioc_qbuf,
        .vidioc_dqbuf             = vidioc_dqbuf,
+       .vidioc_g_std             = vidioc_g_std,
        .vidioc_s_std             = vidioc_s_std,
+       .vidioc_querystd          = vidioc_querystd,
        .vidioc_enum_input        = vidioc_enum_input,
        .vidioc_g_input           = vidioc_g_input,
        .vidioc_s_input           = vidioc_s_input,