1eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#ifndef _H_MSM_VPU_H_ 2eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define _H_MSM_VPU_H_ 3eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 4eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#include <linux/videodev2.h> 5eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 6eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 7eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V 4 L 2 E X T E N S I O N S B Y V P U 8eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 9eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 10eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 11eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * v4l2_buffer: 12eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 13eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU uses standard V4L2 buffer flags, and defines some custom 14eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * flags (used in v4l2_buffer.flags field): 15eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_QCOM_BUF_FLAG_EOS: buffer flag indicating end of stream 16eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_BUF_FLAG_CDS_ENABLE: buffer flag to enable chroma down-sampling 17eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 18eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_BUF_FLAG_CDS_ENABLE 0x10000000 19eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 20eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 21eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU uses multi-plane v4l2_buffer in the following manner: 22eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * each plane can be a separate ION buffer, or all planes are from the 23eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * same ION buffer (under this case all planes have the same fd, but different 24eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * offset). 25eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 26eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * For struct v4l2_plane 27eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * fd: ION fd representing the ION buffer this plane is from 28eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * reserved[0]: offset of this plane from the start of the ION buffer in 29eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * bytes. Needed when all planes are from the same ION buffer. 30eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 31eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PLANE_MEM_OFFSET 0 32eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 33eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 34eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * struct v4l2_format: 35eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * always use v4l2_pix_format_mplane, even when there is only one plane 36eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 37eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * v4l2_pix_format_mplane: 38eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 39eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU uses v4l2_pix_format_mplane for pixel format configuration 40eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The following members of this structure is either extended or changed: 41eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * pixelformat: extended, a few more private formats added 42eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * colorspace: possible values are enum vpu_colorspace 43eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * field: when it is V4L2_FIELD_ALTERNATE, flags from vpu format extension 44eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * specifies which field first. 45eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * reserved[]: VPU format extension. struct v4l2_format_vpu_extension 46eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 47eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum vpu_colorspace { 48eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_MIN = 0, 49eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* RGB with full range*/ 50eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_RGB_FULL = 1, 51eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* RGB with limited range*/ 52eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_RGB_LIMITED = 2, 53eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* REC 601 with full range */ 54eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_REC601_FULL = 3, 55eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* REC 601 with limited range */ 56eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_REC601_LIMITED = 4, 57eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* REC 709 with full range */ 58eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_REC709_FULL = 5, 59eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* REC 709 with limited range */ 60eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_REC709_LIMITED = 6, 61eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* SMPTE 240 with full range */ 62eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_SMPTE240_FULL = 7, 63eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* SMPTE 240 with limited range */ 64eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_SMPTE240_LIMITED = 8, 65eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_CS_MAX = 9, 66eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 67eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 68eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 69eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_FMT_EXT_FLAG_BT 1 /* bottom field first */ 70eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_FMT_EXT_FLAG_TB 2 /* top field first */ 71eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_FMT_EXT_FLAG_3D 4 /* 3D format */ 72eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct v4l2_format_vpu_extension { 73eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u8 flag; 74eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u8 gap_in_lines; 75eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 76eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 77eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 78eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Supported pixel formats: 79eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 80eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU supported pixel format fourcc codes (use in s_fmt pixelformat field). 81eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Can be enumerated using VIDIOC_ENUM_FMT 82eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 83eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Standard V4L2 formats, defined in videodev2.h : 84eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 85eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_RGB24 24 bit RGB-8-8-8 86eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_RGB32 32 bit XRGB-8-8-8-8 87eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_BGR24 24 bit BGR-8-8-8 88eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_BGR32 32 bit BGRX-8-8-8-8 89eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 90eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_NV12 12 bit YUV 4:2:0 semi-planar NV12 91eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_NV21 12 bit YUV 4:2:0 semi-planar NV21 92eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YUYV 16 bit YUYV 4:2:2 interleaved 93eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YVYU 16 bit YVYU 4:2:2 interleaved 94eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_UYVY 16 bit UYVY 4:2:2 interleaved 95eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_VYUY 16 bit VYUY 4:2:2 interleaved 96eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 97eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 98eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Private VPU formats, defined here : 99eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 100eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_XRGB2 32 bit XRGB-2-10-10-10 101eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_XBGR2 32 bit XBGR-2-10-10-10 102eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 103eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YUYV10 24 bit YUYV 4:2:2 10 bit per component loose 104eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YUV8 24 bit YUV 4:4:4 8 bit per component 105eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YUV10 32 bit YUV 4:4:4 10 bit per component loose 106eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V4L2_PIX_FMT_YUYV10BWC 10 bit YUYV 4:2:2 compressed, for output only 107eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 108eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_XRGB2 v4l2_fourcc('X', 'R', 'G', '2') 109eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_XBGR2 v4l2_fourcc('X', 'B', 'G', '2') 110eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_YUYV10 v4l2_fourcc('Y', 'U', 'Y', 'L') 111eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_YUV8 v4l2_fourcc('Y', 'U', 'V', '8') 112eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_YUV10 v4l2_fourcc('Y', 'U', 'V', 'L') 113eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define V4L2_PIX_FMT_YUYV10BWC v4l2_fourcc('Y', 'B', 'W', 'C') 114eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 115eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 116eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VIDIOC_S_INPUT/VIDIOC_S_OUTPUT 117eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 118eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * The single integer passed by these commands specifies port type in the 119eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * lower 16 bits, and pipe bit mask in the higher 16 bits. 120eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 121eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* input / output types */ 122eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_INPUT_TYPE_HOST 0 123eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_INPUT_TYPE_VCAP 1 124eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_OUTPUT_TYPE_HOST 0 125eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_OUTPUT_TYPE_DISPLAY 1 126eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 127eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* input / output pipe bit fields */ 128eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_VCAP0 (1 << 16) 129eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_VCAP1 (1 << 17) 130eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_DISPLAY0 (1 << 18) 131eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_DISPLAY1 (1 << 19) 132eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_DISPLAY2 (1 << 20) 133eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PIPE_DISPLAY3 (1 << 21) 134eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 135eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 136eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V P U E V E N T S : I D s A N D D A T A P A Y L O A D S 137eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 138eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 139eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 140eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Event ID: set in type field of struct v4l2_event 141eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload: returned in u.data array of struct v4l2_event 142eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 143eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 144eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_FLUSH_DONE: Done flushing buffers after VPU_FLUSH_BUFS ioctl 145eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: enum v4l2_buf_type (buffer type of flushed port) 146eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 147eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_ACTIVE_REGION_CHANGED: New Active Region Detected 148eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: struct v4l2_rect (new active region rectangle) 149eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 150eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_SESSION_TIMESTAMP: New Session timestamp 151eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: vpu_frame_timestamp_info 152eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 153eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_SESSION_CREATED: New session has been created 154eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: int (number of the attached session) 155eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 156eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_SESSION_FREED: Session is detached and free 157eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: int (number of the detached session) 158eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 159eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_SESSION_CLIENT_EXITED: Indicates that clients of current 160eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * session have exited. 161eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: int (number of all remaining clients for this session) 162eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 163eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_HW_ERROR: a hardware error occurred in VPU 164eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: NULL 165eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 166eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_INVALID_CONFIG: invalid VPU session configuration 167eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: NULL 168eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 169eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_EVENT_FAILED_SESSION_STREAMING: Failed to stream session 170eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * payload data: NULL 171eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 172eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_PRIVATE_EVENT_BASE (V4L2_EVENT_PRIVATE_START + 6 * 1000) 173eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelenum VPU_PRIVATE_EVENT { 174eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_START = VPU_PRIVATE_EVENT_BASE, 175eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 176eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_FLUSH_DONE = VPU_EVENT_START + 1, 177eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_ACTIVE_REGION_CHANGED = VPU_EVENT_START + 2, 178eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_SESSION_TIMESTAMP = VPU_EVENT_START + 3, 179eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_SESSION_CREATED = VPU_EVENT_START + 4, 180eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_SESSION_FREED = VPU_EVENT_START + 5, 181eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_SESSION_CLIENT_EXITED = VPU_EVENT_START + 6, 182eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 183eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_HW_ERROR = VPU_EVENT_START + 11, 184eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_INVALID_CONFIG = VPU_EVENT_START + 12, 185eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_FAILED_SESSION_STREAMING = VPU_EVENT_START + 13, 186eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 187eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel VPU_EVENT_END 188eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 189eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 190eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 191eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 192eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V P U CO N T R O L S : S T R U C T S A N D I D s 193eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 194eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Controls are video processing parameters 195eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 196eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 197eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 198eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Standard VPU Controls 199eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 200eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_standard { 201eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 enable; /* boolean: 0=disable, else=enable */ 202eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __s32 value; 203eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 204eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 205eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_auto_manual { 206eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 enable; /* boolean: 0=disable, else=enable */ 207eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 auto_mode; /* boolean: 0=manual, else=automatic */ 208eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __s32 value; 209eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 210eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 211eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_range_mapping { 212eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 enable; /* boolean: 0=disable, else=enable */ 213eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 y_range; /* the range mapping set for Y [0, 7] */ 214eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 uv_range; /* the range mapping set for UV [0, 7] */ 215eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 216eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 217eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_ACTIVE_REGION_N_EXCLUSIONS 1 218eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_active_region_param { 219eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 enable; /* boolean: 0=disable, else=enable */ 220eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* number of exclusion regions */ 221eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 num_exclusions; 222eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* roi where active region detection is applied */ 223eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct v4l2_rect detection_region; 224eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* roi(s) excluded from active region detection*/ 225eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct v4l2_rect excluded_regions[VPU_ACTIVE_REGION_N_EXCLUSIONS]; 226eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 227eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 228eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_deinterlacing_mode { 229eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 field_polarity; 230eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 mvp_mode; 231eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 232eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 233eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_ctrl_hqv { 234eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 enable; 235eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* strength control of all sharpening features [0, 100] */ 236eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 sharpen_strength; 237eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* strength control of Auto NR feature [0, 100] */ 238eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 auto_nr_strength; 239eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 240eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 241eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_info_frame_timestamp { 242eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* presentation timestamp of the frame */ 243eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 pts_low; 244eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 pts_high; 245eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* qtimer snapshot */ 246eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 qtime_low; 247eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 qtime_high; 248eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 249eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 250eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_control { 251eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 control_id; 252eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel union control_data { 253eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __s32 value; 254eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_standard standard; 255eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_auto_manual auto_manual; 256eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_range_mapping range_mapping; 257eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_active_region_param active_region_param; 258eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct v4l2_rect active_region_result; 259eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_deinterlacing_mode deinterlacing_mode; 260eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_ctrl_hqv hqv; 261eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_info_frame_timestamp timestamp; 262eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u8 reserved[124]; 263eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel } data; 264eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 265eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 266eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 267eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IDs for standard controls (use in control_id field of struct vpu_control) 268eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 269eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_NOISE_REDUCTION: noise reduction level, data: auto_manual, 270eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [0, 100] (step in increments of 25). 271eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 272eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_IMAGE_ENHANCEMENT: image enhancement level, data: auto_manual, 273eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [-100, 100] (step in increments of 1). 274eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 275eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ANAMORPHIC_SCALING: anamorphic scaling config, data: standard, 276eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [0, 100] (step in increments of 1). 277eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 278eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_DIRECTIONAL_INTERPOLATION: directional interpolation config 279eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: standard, value: [0, 100] (step in increments of 1). 280eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 281eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_BACKGROUND_COLOR: , data: value, 282eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: red[0:7] green[8:15] blue[16:23] alpha[24:31] 283eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 284eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_RANGE_MAPPING: Y/UV range mapping, data: range_mapping, 285eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * y_range: [0, 7], uv_range: [0, 7] (step in increments of 1). 286eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 287eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_DEINTERLACING_MODE: deinterlacing mode, data: deinterlacing_mode, 288eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * field_polarity: [0, 2], mvp_mode: [0, 2] (step in increments of 1). 289eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 290eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ACTIVE_REGION_PARAM: active region detection parameters (set only) 291eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: active_region_param, 292eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 293eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ACTIVE_REGION_RESULT: detected active region roi (get only) 294eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: active_region_result 295eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 296eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_PRIORITY: Session priority, data: value, 297eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: high 100, normal 50 298eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 299eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_CONTENT_PROTECTION: input content protection status, data: value, 300eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: secure 1, non-secure 0 301eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 302eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_DISPLAY_REFRESH_RATE: display refresh rate (set only) 303eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: value (set to __u32 16.16 format) 304eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 305eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_HQV: hqv block config, data: hqv, 306eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * sharpen_strength: [0, 100] (step in increments of 25), 307eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * auto_nr_strength: [0, 100] (step in increments of 1). 308eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 309eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_HQV_SHARPEN: , data: value, 310eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * sharpen_strength: [0, 100] (step in increments of 1). 311eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 312eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_HQV_AUTONR: , data: value, 313eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * auto_nr_strength: [0, 100] (step in increments of 1). 314eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 315eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ACE: , data: value 316eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 317eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ACE_BRIGHTNESS: , data: value, 318eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [-100, 100] (step in increments of 1). 319eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 320eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_ACE_CONTRAST: , data: value, 321eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [-100, 100] (step in increments of 1). 322eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 323eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_2D3D: , data: value, 324eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: 1 enabled, 0 disabled 325eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 326eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_2D3D_DEPTH: , data: value, 327eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [0, 100] (step in increments of 1). 328eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 329eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_TIMESTAMP_INFO_MODE: timestamp reporting mode, 330eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: value specifying how frequent a timestamp reporting info, value 331eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * is in frames 332eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 333eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_INFO_TIMESTAMP: timestamp information (get only) 334eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: struct vpu_frame_timestamp_info 335eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 336eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_FRC: enable/disable FRC, data: value, 337eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: 1 enable, 0 disable 338eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 339eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_FRC_MOTION_SMOOTHNESS: , data: value, 340eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [0, 100] (step in increments of 1). 341eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 342eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_FRC_MOTION_CLEAR: , data: value, 343eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * value: [0, 100] (step in increments of 1). 344eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 345eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_LATENCY: session latency, data: value in us 346eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 347eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_LATENCY_MODE: data: value (ultra low, low, etc.) 348eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 349eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_INFO_STATISTICS: frames dropped, etc (get only), 350eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * data: reserved 351eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 352eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ID_MIN 0 353eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 354eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_NOISE_REDUCTION 1 355eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_IMAGE_ENHANCEMENT 2 356eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ANAMORPHIC_SCALING 3 357eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_DIRECTIONAL_INTERPOLATION 4 358eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_BACKGROUND_COLOR 5 359eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_RANGE_MAPPING 6 360eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_DEINTERLACING_MODE 7 361eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ACTIVE_REGION_PARAM 8 362eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ACTIVE_REGION_RESULT 9 363eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_PRIORITY 10 364eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_CONTENT_PROTECTION 11 365eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_DISPLAY_REFRESH_RATE 12 366eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 367eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_HQV 20 368eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_HQV_SHARPEN 21 369eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_HQV_AUTONR 22 370eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ACE 23 371eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ACE_BRIGHTNESS 24 372eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ACE_CONTRAST 25 373eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_2D3D 26 374eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_2D3D_DEPTH 27 375eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_FRC 28 376eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_FRC_MOTION_SMOOTHNESS 29 377eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_FRC_MOTION_CLEAR 30 378eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 379eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_INFO_TIMESTAMP 35 380eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_TIMESTAMP_INFO_MODE 36 381eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_INFO_STATISTICS 37 382eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_LATENCY 38 383eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_LATENCY_MODE 39 384eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 385eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_ID_MAX 40 386eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 387eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 388eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 389eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Extended VPU Controls (large data payloads) 390eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 391eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_MAX_EXT_DATA_SIZE 720 392eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_control_extended { 393eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* 394eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * extended control type 395eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 0: system 396eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 1: session 397eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 398eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 type; 399eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 400eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* 401eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * size and ptr of the data to send 402eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * maximum VPU_MAX_EXT_DATA_SIZE bytes 403eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 404eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 data_len; 405eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *data_ptr; 406eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 407eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel /* 408eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * size and ptr of the buffer to recv data 409eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * maximum VPU_MAX_EXT_DATA_SIZE bytes 410eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 411eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 buf_size; 412eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel void *buf_ptr; 413eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 414eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 415eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 416eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * Port specific controls 417eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 418eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudelstruct vpu_control_port { 419eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 control_id; 420eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 port; /* 0: INPUT, 1: OUTPUT */ 421eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel union control_port_data { 422eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel __u32 framerate; 423eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel } data; 424eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel}; 425eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 426eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 427eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * IDs for port controls (use in control_id field of struct vpu_control_port) 428eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * 429eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * VPU_CTRL_FPS: set frame rate, data: __u32, 16.16 format 430eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 431eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CTRL_FPS 1000 432eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 433eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 434eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* 435eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel * V P U D E V I C E P R I V A T E I O C T L C O D E S 436eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel */ 437eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 438eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* VPU Session ioctls (deprecated) */ 439eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_ATTACH_TO_SESSION _IOW('V', (BASE_VIDIOC_PRIVATE + 1), int) 440eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 441eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* VPU Session ioctls */ 442eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_QUERY_SESSIONS _IOR('V', (BASE_VIDIOC_PRIVATE + 0), int) 443eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CREATE_SESSION _IOR('V', (BASE_VIDIOC_PRIVATE + 2), int) 444eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_JOIN_SESSION _IOW('V', (BASE_VIDIOC_PRIVATE + 3), int) 445eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 446eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Enable second VPU output port and use with current client */ 447eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_CREATE_OUTPUT2 _IO('V', (BASE_VIDIOC_PRIVATE + 5)) 448eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 449eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Explicit commit of session configuration */ 450eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_COMMIT_CONFIGURATION _IO('V', (BASE_VIDIOC_PRIVATE + 10)) 451eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 452eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* Flush all buffers of given type (port) */ 453eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_FLUSH_BUFS _IOW('V', (BASE_VIDIOC_PRIVATE + 15), \ 454eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel enum v4l2_buf_type) 455eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 456eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* VPU controls get/set ioctls (for most controls with small data) */ 457eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_G_CONTROL _IOWR('V', (BASE_VIDIOC_PRIVATE + 20), \ 458eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control) 459eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_S_CONTROL _IOW('V', (BASE_VIDIOC_PRIVATE + 21), \ 460eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control) 461eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 462eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* extended control set/get ioctls (large data payloads) */ 463eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_G_CONTROL_EXTENDED _IOWR('V', (BASE_VIDIOC_PRIVATE + 22), \ 464eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control_extended) 465eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_S_CONTROL_EXTENDED _IOW('V', (BASE_VIDIOC_PRIVATE + 23), \ 466eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control_extended) 467eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 468eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel/* VPU port (input/output) specific controls get/set ioctls */ 469eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_G_CONTROL_PORT _IOWR('V', (BASE_VIDIOC_PRIVATE + 24), \ 470eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control_port) 471eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#define VPU_S_CONTROL_PORT _IOW('V', (BASE_VIDIOC_PRIVATE + 25), \ 472eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel struct vpu_control_port) 473eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 474eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel#endif /* _H_MSM_VPU_H_ */ 475eaaae07f42deb6723ff2804e87964da172b94e6bThierry Strudel 476