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