Commit ea8aa4349e11c62242a8908fc172de27d7a151d7
Committed by
Mauro Carvalho Chehab
1 parent
3dd5ee0801
Exists in
master
and in
4 other branches
[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 | } |