GNU Linux-libre 6.1.90-gnu
[releases.git] / Documentation / userspace-api / media / v4l / vidioc-subdev-querycap.rst
1 .. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2 .. c:namespace:: V4L
3
4 .. _VIDIOC_SUBDEV_QUERYCAP:
5
6 ****************************
7 ioctl VIDIOC_SUBDEV_QUERYCAP
8 ****************************
9
10 Name
11 ====
12
13 VIDIOC_SUBDEV_QUERYCAP - Query sub-device capabilities
14
15 Synopsis
16 ========
17
18 .. c:macro:: VIDIOC_SUBDEV_QUERYCAP
19
20 ``int ioctl(int fd, VIDIOC_SUBDEV_QUERYCAP, struct v4l2_subdev_capability *argp)``
21
22 Arguments
23 =========
24
25 ``fd``
26     File descriptor returned by :c:func:`open()`.
27
28 ``argp``
29     Pointer to struct :c:type:`v4l2_subdev_capability`.
30
31 Description
32 ===========
33
34 All V4L2 sub-devices support the ``VIDIOC_SUBDEV_QUERYCAP`` ioctl. It is used to
35 identify kernel devices compatible with this specification and to obtain
36 information about driver and hardware capabilities. The ioctl takes a pointer to
37 a struct :c:type:`v4l2_subdev_capability` which is filled by the driver. When
38 the driver is not compatible with this specification the ioctl returns
39 ``ENOTTY`` error code.
40
41 .. tabularcolumns:: |p{1.5cm}|p{2.9cm}|p{12.9cm}|
42
43 .. c:type:: v4l2_subdev_capability
44
45 .. flat-table:: struct v4l2_subdev_capability
46     :header-rows:  0
47     :stub-columns: 0
48     :widths:       3 4 20
49
50     * - __u32
51       - ``version``
52       - Version number of the driver.
53
54         The version reported is provided by the V4L2 subsystem following the
55         kernel numbering scheme. However, it may not always return the same
56         version as the kernel if, for example, a stable or
57         distribution-modified kernel uses the V4L2 stack from a newer kernel.
58
59         The version number is formatted using the ``KERNEL_VERSION()``
60         macro:
61     * - :cspan:`2`
62
63         ``#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))``
64
65         ``__u32 version = KERNEL_VERSION(0, 8, 1);``
66
67         ``printf ("Version: %u.%u.%u\\n",``
68
69         ``(version >> 16) & 0xFF, (version >> 8) & 0xFF, version & 0xFF);``
70     * - __u32
71       - ``capabilities``
72       - Sub-device capabilities of the opened device, see
73         :ref:`subdevice-capabilities`.
74     * - __u32
75       - ``reserved``\ [14]
76       - Reserved for future extensions. Set to 0 by the V4L2 core.
77
78 .. tabularcolumns:: |p{6.8cm}|p{2.4cm}|p{8.1cm}|
79
80 .. _subdevice-capabilities:
81
82 .. cssclass:: longtable
83
84 .. flat-table:: Sub-Device Capabilities Flags
85     :header-rows:  0
86     :stub-columns: 0
87     :widths:       3 1 4
88
89     * - V4L2_SUBDEV_CAP_RO_SUBDEV
90       - 0x00000001
91       - The sub-device device node is registered in read-only mode.
92         Access to the sub-device ioctls that modify the device state is
93         restricted. Refer to each individual subdevice ioctl documentation
94         for a description of which restrictions apply to a read-only sub-device.
95
96 Return Value
97 ============
98
99 On success 0 is returned, on error -1 and the ``errno`` variable is set
100 appropriately. The generic error codes are described at the
101 :ref:`Generic Error Codes <gen-errors>` chapter.
102
103 ENOTTY
104     The device node is not a V4L2 sub-device.