xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/uvcvideo.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker #ifndef __LINUX_UVCVIDEO_H_
3*f80ad8b4SAndroid Build Coastguard Worker #define __LINUX_UVCVIDEO_H_
4*f80ad8b4SAndroid Build Coastguard Worker 
5*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h>
6*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
7*f80ad8b4SAndroid Build Coastguard Worker 
8*f80ad8b4SAndroid Build Coastguard Worker /*
9*f80ad8b4SAndroid Build Coastguard Worker  * Dynamic controls
10*f80ad8b4SAndroid Build Coastguard Worker  */
11*f80ad8b4SAndroid Build Coastguard Worker 
12*f80ad8b4SAndroid Build Coastguard Worker /* Data types for UVC control data */
13*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_RAW		0
14*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_SIGNED	1
15*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_UNSIGNED	2
16*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_BOOLEAN	3
17*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_ENUM		4
18*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_DATA_TYPE_BITMASK	5
19*f80ad8b4SAndroid Build Coastguard Worker 
20*f80ad8b4SAndroid Build Coastguard Worker /* Control flags */
21*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_SET_CUR		(1 << 0)
22*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_CUR		(1 << 1)
23*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_MIN		(1 << 2)
24*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_MAX		(1 << 3)
25*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_RES		(1 << 4)
26*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_DEF		(1 << 5)
27*f80ad8b4SAndroid Build Coastguard Worker /* Control should be saved at suspend and restored at resume. */
28*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_RESTORE		(1 << 6)
29*f80ad8b4SAndroid Build Coastguard Worker /* Control can be updated by the camera. */
30*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_AUTO_UPDATE	(1 << 7)
31*f80ad8b4SAndroid Build Coastguard Worker /* Control supports asynchronous reporting */
32*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_ASYNCHRONOUS	(1 << 8)
33*f80ad8b4SAndroid Build Coastguard Worker 
34*f80ad8b4SAndroid Build Coastguard Worker #define UVC_CTRL_FLAG_GET_RANGE \
35*f80ad8b4SAndroid Build Coastguard Worker 	(UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \
36*f80ad8b4SAndroid Build Coastguard Worker 	 UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \
37*f80ad8b4SAndroid Build Coastguard Worker 	 UVC_CTRL_FLAG_GET_DEF)
38*f80ad8b4SAndroid Build Coastguard Worker 
39*f80ad8b4SAndroid Build Coastguard Worker #define UVC_MENU_NAME_LEN 32
40*f80ad8b4SAndroid Build Coastguard Worker 
41*f80ad8b4SAndroid Build Coastguard Worker struct uvc_menu_info {
42*f80ad8b4SAndroid Build Coastguard Worker 	__u32 value;
43*f80ad8b4SAndroid Build Coastguard Worker 	__u8 name[UVC_MENU_NAME_LEN];
44*f80ad8b4SAndroid Build Coastguard Worker };
45*f80ad8b4SAndroid Build Coastguard Worker 
46*f80ad8b4SAndroid Build Coastguard Worker struct uvc_xu_control_mapping {
47*f80ad8b4SAndroid Build Coastguard Worker 	__u32 id;
48*f80ad8b4SAndroid Build Coastguard Worker 	__u8 name[32];
49*f80ad8b4SAndroid Build Coastguard Worker 	__u8 entity[16];
50*f80ad8b4SAndroid Build Coastguard Worker 	__u8 selector;
51*f80ad8b4SAndroid Build Coastguard Worker 
52*f80ad8b4SAndroid Build Coastguard Worker 	__u8 size;
53*f80ad8b4SAndroid Build Coastguard Worker 	__u8 offset;
54*f80ad8b4SAndroid Build Coastguard Worker 	__u32 v4l2_type;
55*f80ad8b4SAndroid Build Coastguard Worker 	__u32 data_type;
56*f80ad8b4SAndroid Build Coastguard Worker 
57*f80ad8b4SAndroid Build Coastguard Worker 	struct uvc_menu_info __user *menu_info;
58*f80ad8b4SAndroid Build Coastguard Worker 	__u32 menu_count;
59*f80ad8b4SAndroid Build Coastguard Worker 
60*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved[4];
61*f80ad8b4SAndroid Build Coastguard Worker };
62*f80ad8b4SAndroid Build Coastguard Worker 
63*f80ad8b4SAndroid Build Coastguard Worker struct uvc_xu_control_query {
64*f80ad8b4SAndroid Build Coastguard Worker 	__u8 unit;
65*f80ad8b4SAndroid Build Coastguard Worker 	__u8 selector;
66*f80ad8b4SAndroid Build Coastguard Worker 	__u8 query;		/* Video Class-Specific Request Code, */
67*f80ad8b4SAndroid Build Coastguard Worker 				/* defined in linux/usb/video.h A.8.  */
68*f80ad8b4SAndroid Build Coastguard Worker 	__u16 size;
69*f80ad8b4SAndroid Build Coastguard Worker 	__u8 __user *data;
70*f80ad8b4SAndroid Build Coastguard Worker };
71*f80ad8b4SAndroid Build Coastguard Worker 
72*f80ad8b4SAndroid Build Coastguard Worker #define UVCIOC_CTRL_MAP		_IOWR('u', 0x20, struct uvc_xu_control_mapping)
73*f80ad8b4SAndroid Build Coastguard Worker #define UVCIOC_CTRL_QUERY	_IOWR('u', 0x21, struct uvc_xu_control_query)
74*f80ad8b4SAndroid Build Coastguard Worker 
75*f80ad8b4SAndroid Build Coastguard Worker /*
76*f80ad8b4SAndroid Build Coastguard Worker  * Metadata node
77*f80ad8b4SAndroid Build Coastguard Worker  */
78*f80ad8b4SAndroid Build Coastguard Worker 
79*f80ad8b4SAndroid Build Coastguard Worker /**
80*f80ad8b4SAndroid Build Coastguard Worker  * struct uvc_meta_buf - metadata buffer building block
81*f80ad8b4SAndroid Build Coastguard Worker  * @ns: system timestamp of the payload in nanoseconds
82*f80ad8b4SAndroid Build Coastguard Worker  * @sof: USB Frame Number
83*f80ad8b4SAndroid Build Coastguard Worker  * @length: length of the payload header
84*f80ad8b4SAndroid Build Coastguard Worker  * @flags: payload header flags
85*f80ad8b4SAndroid Build Coastguard Worker  * @buf: optional device-specific header data
86*f80ad8b4SAndroid Build Coastguard Worker  *
87*f80ad8b4SAndroid Build Coastguard Worker  * UVC metadata nodes fill buffers with possibly multiple instances of this
88*f80ad8b4SAndroid Build Coastguard Worker  * struct. The first two fields are added by the driver, they can be used for
89*f80ad8b4SAndroid Build Coastguard Worker  * clock synchronisation. The rest is an exact copy of a UVC payload header.
90*f80ad8b4SAndroid Build Coastguard Worker  * Only complete objects with complete buffers are included. Therefore it's
91*f80ad8b4SAndroid Build Coastguard Worker  * always sizeof(meta->ns) + sizeof(meta->sof) + meta->length bytes large.
92*f80ad8b4SAndroid Build Coastguard Worker  */
93*f80ad8b4SAndroid Build Coastguard Worker struct uvc_meta_buf {
94*f80ad8b4SAndroid Build Coastguard Worker 	__u64 ns;
95*f80ad8b4SAndroid Build Coastguard Worker 	__u16 sof;
96*f80ad8b4SAndroid Build Coastguard Worker 	__u8 length;
97*f80ad8b4SAndroid Build Coastguard Worker 	__u8 flags;
98*f80ad8b4SAndroid Build Coastguard Worker 	__u8 buf[];
99*f80ad8b4SAndroid Build Coastguard Worker } __packed;
100*f80ad8b4SAndroid Build Coastguard Worker 
101*f80ad8b4SAndroid Build Coastguard Worker #endif
102