16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2607ca46eSDavid Howells #ifndef __LINUX_UVCVIDEO_H_ 3607ca46eSDavid Howells #define __LINUX_UVCVIDEO_H_ 4607ca46eSDavid Howells 5607ca46eSDavid Howells #include <linux/ioctl.h> 6607ca46eSDavid Howells #include <linux/types.h> 7607ca46eSDavid Howells 8607ca46eSDavid Howells /* 9607ca46eSDavid Howells * Dynamic controls 10607ca46eSDavid Howells */ 11607ca46eSDavid Howells 12607ca46eSDavid Howells /* Data types for UVC control data */ 13607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_RAW 0 14607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_SIGNED 1 15607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_UNSIGNED 2 16607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_BOOLEAN 3 17607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_ENUM 4 18607ca46eSDavid Howells #define UVC_CTRL_DATA_TYPE_BITMASK 5 19*2dc768d7SYunke Cao #define UVC_CTRL_DATA_TYPE_RECT 6 20607ca46eSDavid Howells 21607ca46eSDavid Howells /* Control flags */ 22607ca46eSDavid Howells #define UVC_CTRL_FLAG_SET_CUR (1 << 0) 23607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_CUR (1 << 1) 24607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_MIN (1 << 2) 25607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_MAX (1 << 3) 26607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_RES (1 << 4) 27607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_DEF (1 << 5) 28607ca46eSDavid Howells /* Control should be saved at suspend and restored at resume. */ 29607ca46eSDavid Howells #define UVC_CTRL_FLAG_RESTORE (1 << 6) 30607ca46eSDavid Howells /* Control can be updated by the camera. */ 31607ca46eSDavid Howells #define UVC_CTRL_FLAG_AUTO_UPDATE (1 << 7) 32e5225c82SGuennadi Liakhovetski /* Control supports asynchronous reporting */ 33e5225c82SGuennadi Liakhovetski #define UVC_CTRL_FLAG_ASYNCHRONOUS (1 << 8) 34607ca46eSDavid Howells 35607ca46eSDavid Howells #define UVC_CTRL_FLAG_GET_RANGE \ 36607ca46eSDavid Howells (UVC_CTRL_FLAG_GET_CUR | UVC_CTRL_FLAG_GET_MIN | \ 37607ca46eSDavid Howells UVC_CTRL_FLAG_GET_MAX | UVC_CTRL_FLAG_GET_RES | \ 38607ca46eSDavid Howells UVC_CTRL_FLAG_GET_DEF) 39607ca46eSDavid Howells 40716c3304SRicardo Ribalda #define UVC_MENU_NAME_LEN 32 41716c3304SRicardo Ribalda 42*2dc768d7SYunke Cao /* V4L2 driver-specific controls */ 43*2dc768d7SYunke Cao #define V4L2_CID_UVC_REGION_OF_INTEREST_RECT (V4L2_CID_USER_UVC_BASE + 1) 44*2dc768d7SYunke Cao #define V4L2_CID_UVC_REGION_OF_INTEREST_AUTO (V4L2_CID_USER_UVC_BASE + 2) 45*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_EXPOSURE (1 << 0) 46*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_IRIS (1 << 1) 47*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_WHITE_BALANCE (1 << 2) 48*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_FOCUS (1 << 3) 49*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_FACE_DETECT (1 << 4) 50*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_DETECT_AND_TRACK (1 << 5) 51*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_IMAGE_STABILIZATION (1 << 6) 52*2dc768d7SYunke Cao #define V4L2_UVC_REGION_OF_INTEREST_AUTO_HIGHER_QUALITY (1 << 7) 53*2dc768d7SYunke Cao 54607ca46eSDavid Howells struct uvc_menu_info { 55607ca46eSDavid Howells __u32 value; 56716c3304SRicardo Ribalda __u8 name[UVC_MENU_NAME_LEN]; 57607ca46eSDavid Howells }; 58607ca46eSDavid Howells 59607ca46eSDavid Howells struct uvc_xu_control_mapping { 60607ca46eSDavid Howells __u32 id; 61607ca46eSDavid Howells __u8 name[32]; 62607ca46eSDavid Howells __u8 entity[16]; 63607ca46eSDavid Howells __u8 selector; 64607ca46eSDavid Howells 65607ca46eSDavid Howells __u8 size; 66607ca46eSDavid Howells __u8 offset; 67607ca46eSDavid Howells __u32 v4l2_type; 68607ca46eSDavid Howells __u32 data_type; 69607ca46eSDavid Howells 70607ca46eSDavid Howells struct uvc_menu_info __user *menu_info; 71607ca46eSDavid Howells __u32 menu_count; 72607ca46eSDavid Howells 73607ca46eSDavid Howells __u32 reserved[4]; 74607ca46eSDavid Howells }; 75607ca46eSDavid Howells 76607ca46eSDavid Howells struct uvc_xu_control_query { 77607ca46eSDavid Howells __u8 unit; 78607ca46eSDavid Howells __u8 selector; 79607ca46eSDavid Howells __u8 query; /* Video Class-Specific Request Code, */ 80607ca46eSDavid Howells /* defined in linux/usb/video.h A.8. */ 81607ca46eSDavid Howells __u16 size; 82607ca46eSDavid Howells __u8 __user *data; 83607ca46eSDavid Howells }; 84607ca46eSDavid Howells 85607ca46eSDavid Howells #define UVCIOC_CTRL_MAP _IOWR('u', 0x20, struct uvc_xu_control_mapping) 86607ca46eSDavid Howells #define UVCIOC_CTRL_QUERY _IOWR('u', 0x21, struct uvc_xu_control_query) 87607ca46eSDavid Howells 88088ead25SGuennadi Liakhovetski /* 89088ead25SGuennadi Liakhovetski * Metadata node 90088ead25SGuennadi Liakhovetski */ 91088ead25SGuennadi Liakhovetski 92088ead25SGuennadi Liakhovetski /** 93088ead25SGuennadi Liakhovetski * struct uvc_meta_buf - metadata buffer building block 94c214e6ddSHans Verkuil * @ns: system timestamp of the payload in nanoseconds 95c214e6ddSHans Verkuil * @sof: USB Frame Number 96c214e6ddSHans Verkuil * @length: length of the payload header 97c214e6ddSHans Verkuil * @flags: payload header flags 98c214e6ddSHans Verkuil * @buf: optional device-specific header data 99088ead25SGuennadi Liakhovetski * 100088ead25SGuennadi Liakhovetski * UVC metadata nodes fill buffers with possibly multiple instances of this 101088ead25SGuennadi Liakhovetski * struct. The first two fields are added by the driver, they can be used for 102088ead25SGuennadi Liakhovetski * clock synchronisation. The rest is an exact copy of a UVC payload header. 103088ead25SGuennadi Liakhovetski * Only complete objects with complete buffers are included. Therefore it's 104b8392129SKees Cook * always sizeof(meta->ns) + sizeof(meta->sof) + meta->length bytes large. 105088ead25SGuennadi Liakhovetski */ 106088ead25SGuennadi Liakhovetski struct uvc_meta_buf { 107088ead25SGuennadi Liakhovetski __u64 ns; 108088ead25SGuennadi Liakhovetski __u16 sof; 109088ead25SGuennadi Liakhovetski __u8 length; 110088ead25SGuennadi Liakhovetski __u8 flags; 111088ead25SGuennadi Liakhovetski __u8 buf[]; 112088ead25SGuennadi Liakhovetski } __packed; 113088ead25SGuennadi Liakhovetski 114607ca46eSDavid Howells #endif 115