Commit ea8aa4349e11c62242a8908fc172de27d7a151d7

Authored by Laurent Pinchart
Committed by Mauro Carvalho Chehab
1 parent 3dd5ee0801

[media] v4l: subdev: Control ioctls support

Pass the control-related ioctls to the subdev driver through the control
framework.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

Showing 2 changed files with 41 additions and 0 deletions Side-by-side Diff

Documentation/video4linux/v4l2-framework.txt
... ... @@ -334,6 +334,22 @@
334 334 v4l2_device_register_subdev_nodes(). Those device nodes will be automatically
335 335 removed when sub-devices are unregistered.
336 336  
  337 +The device node handles a subset of the V4L2 API.
  338 +
  339 +VIDIOC_QUERYCTRL
  340 +VIDIOC_QUERYMENU
  341 +VIDIOC_G_CTRL
  342 +VIDIOC_S_CTRL
  343 +VIDIOC_G_EXT_CTRLS
  344 +VIDIOC_S_EXT_CTRLS
  345 +VIDIOC_TRY_EXT_CTRLS
  346 +
  347 + The controls ioctls are identical to the ones defined in V4L2. They
  348 + behave identically, with the only exception that they deal only with
  349 + controls implemented in the sub-device. Depending on the driver, those
  350 + controls can be also be accessed through one (or several) V4L2 device
  351 + nodes.
  352 +
337 353  
338 354 I2C sub-device drivers
339 355 ----------------------
drivers/media/video/v4l2-subdev.c
... ... @@ -24,6 +24,7 @@
24 24 #include <linux/ioctl.h>
25 25 #include <linux/videodev2.h>
26 26  
  27 +#include <media/v4l2-ctrls.h>
27 28 #include <media/v4l2-device.h>
28 29 #include <media/v4l2-ioctl.h>
29 30  
30 31  
... ... @@ -39,7 +40,31 @@
39 40  
40 41 static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg)
41 42 {
  43 + struct video_device *vdev = video_devdata(file);
  44 + struct v4l2_subdev *sd = vdev_to_v4l2_subdev(vdev);
  45 +
42 46 switch (cmd) {
  47 + case VIDIOC_QUERYCTRL:
  48 + return v4l2_subdev_queryctrl(sd, arg);
  49 +
  50 + case VIDIOC_QUERYMENU:
  51 + return v4l2_subdev_querymenu(sd, arg);
  52 +
  53 + case VIDIOC_G_CTRL:
  54 + return v4l2_subdev_g_ctrl(sd, arg);
  55 +
  56 + case VIDIOC_S_CTRL:
  57 + return v4l2_subdev_s_ctrl(sd, arg);
  58 +
  59 + case VIDIOC_G_EXT_CTRLS:
  60 + return v4l2_subdev_g_ext_ctrls(sd, arg);
  61 +
  62 + case VIDIOC_S_EXT_CTRLS:
  63 + return v4l2_subdev_s_ext_ctrls(sd, arg);
  64 +
  65 + case VIDIOC_TRY_EXT_CTRLS:
  66 + return v4l2_subdev_try_ext_ctrls(sd, arg);
  67 +
43 68 default:
44 69 return -ENOIOCTLCMD;
45 70 }