diff options
author | Hans Verkuil <hans.verkuil@cisco.com> | 2014-06-10 03:22:06 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-07-17 09:38:44 -0400 |
commit | e6bee3685e732df82f48698254a36754cf15f0b0 (patch) | |
tree | 2a49fc3d18aa358e63b290e24880fe043ed5d62a /drivers/media/v4l2-core/v4l2-ioctl.c | |
parent | d9a2547150245f34a050f744ea46542c44792652 (diff) |
[media] v4l2: integrate support for VIDIOC_QUERY_EXT_CTRL
Add the v4l2 core plumbing for the new VIDIOC_QUERY_EXT_CTRL ioctl.
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/v4l2-core/v4l2-ioctl.c')
-rw-r--r-- | drivers/media/v4l2-core/v4l2-ioctl.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 8d4a25d62e47..c38a6208d2cd 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c | |||
@@ -525,6 +525,21 @@ static void v4l_print_queryctrl(const void *arg, bool write_only) | |||
525 | p->step, p->default_value, p->flags); | 525 | p->step, p->default_value, p->flags); |
526 | } | 526 | } |
527 | 527 | ||
528 | static void v4l_print_query_ext_ctrl(const void *arg, bool write_only) | ||
529 | { | ||
530 | const struct v4l2_query_ext_ctrl *p = arg; | ||
531 | |||
532 | pr_cont("id=0x%x, type=%d, name=%.*s, min/max=%lld/%lld, " | ||
533 | "step=%lld, default=%lld, flags=0x%08x, elem_size=%u, elems=%u, " | ||
534 | "nr_of_dims=%u, dims=%u,%u,%u,%u,%u,%u,%u,%u\n", | ||
535 | p->id, p->type, (int)sizeof(p->name), p->name, | ||
536 | p->minimum, p->maximum, | ||
537 | p->step, p->default_value, p->flags, | ||
538 | p->elem_size, p->elems, p->nr_of_dims, | ||
539 | p->dims[0], p->dims[1], p->dims[2], p->dims[3], | ||
540 | p->dims[4], p->dims[5], p->dims[6], p->dims[7]); | ||
541 | } | ||
542 | |||
528 | static void v4l_print_querymenu(const void *arg, bool write_only) | 543 | static void v4l_print_querymenu(const void *arg, bool write_only) |
529 | { | 544 | { |
530 | const struct v4l2_querymenu *p = arg; | 545 | const struct v4l2_querymenu *p = arg; |
@@ -1561,6 +1576,23 @@ static int v4l_queryctrl(const struct v4l2_ioctl_ops *ops, | |||
1561 | return -ENOTTY; | 1576 | return -ENOTTY; |
1562 | } | 1577 | } |
1563 | 1578 | ||
1579 | static int v4l_query_ext_ctrl(const struct v4l2_ioctl_ops *ops, | ||
1580 | struct file *file, void *fh, void *arg) | ||
1581 | { | ||
1582 | struct video_device *vfd = video_devdata(file); | ||
1583 | struct v4l2_query_ext_ctrl *p = arg; | ||
1584 | struct v4l2_fh *vfh = | ||
1585 | test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags) ? fh : NULL; | ||
1586 | |||
1587 | if (vfh && vfh->ctrl_handler) | ||
1588 | return v4l2_query_ext_ctrl(vfh->ctrl_handler, p); | ||
1589 | if (vfd->ctrl_handler) | ||
1590 | return v4l2_query_ext_ctrl(vfd->ctrl_handler, p); | ||
1591 | if (ops->vidioc_query_ext_ctrl) | ||
1592 | return ops->vidioc_query_ext_ctrl(file, fh, p); | ||
1593 | return -ENOTTY; | ||
1594 | } | ||
1595 | |||
1564 | static int v4l_querymenu(const struct v4l2_ioctl_ops *ops, | 1596 | static int v4l_querymenu(const struct v4l2_ioctl_ops *ops, |
1565 | struct file *file, void *fh, void *arg) | 1597 | struct file *file, void *fh, void *arg) |
1566 | { | 1598 | { |
@@ -2121,6 +2153,7 @@ static struct v4l2_ioctl_info v4l2_ioctls[] = { | |||
2121 | IOCTL_INFO_STD(VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)), | 2153 | IOCTL_INFO_STD(VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap, v4l_print_dv_timings_cap, INFO_FL_CLEAR(v4l2_dv_timings_cap, type)), |
2122 | IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0), | 2154 | IOCTL_INFO_FNC(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, v4l_print_freq_band, 0), |
2123 | IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), | 2155 | IOCTL_INFO_FNC(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), |
2156 | IOCTL_INFO_FNC(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, id)), | ||
2124 | }; | 2157 | }; |
2125 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) | 2158 | #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) |
2126 | 2159 | ||