1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3 * Copyright (c) 2022 MediaTek Inc.
4 * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
5 */
6
7 #ifndef __MTK_MDP3_REGS_H__
8 #define __MTK_MDP3_REGS_H__
9
10 #include <linux/videodev2.h>
11 #include <media/videobuf2-core.h>
12 #include "mtk-img-ipi.h"
13
14 /*
15 * MDP native color code
16 * Plane count: 1, 2, 3
17 * H-subsample: 0, 1, 2
18 * V-subsample: 0, 1
19 * Color group: 0-RGB, 1-YUV, 2-raw
20 */
21 #define MDP_COLOR(COMPRESS, PACKED, LOOSE, VIDEO, PLANE, HF, VF, BITS, GROUP, SWAP, ID)\
22 (((COMPRESS) << 29) | ((PACKED) << 27) | ((LOOSE) << 26) | ((VIDEO) << 23) |\
23 ((PLANE) << 21) | ((HF) << 19) | ((VF) << 18) | ((BITS) << 8) |\
24 ((GROUP) << 6) | ((SWAP) << 5) | ((ID) << 0))
25
26 #define MDP_COLOR_IS_COMPRESS(c) ((0x20000000 & (c)) >> 29)
27 #define MDP_COLOR_IS_10BIT_PACKED(c) ((0x08000000 & (c)) >> 27)
28 #define MDP_COLOR_IS_10BIT_LOOSE(c) (((0x0c000000 & (c)) >> 26) == 1)
29 #define MDP_COLOR_IS_10BIT_TILE(c) (((0x0c000000 & (c)) >> 26) == 3)
30 #define MDP_COLOR_IS_UFP(c) ((0x02000000 & (c)) >> 25)
31 #define MDP_COLOR_IS_INTERLACED(c) ((0x01000000 & (c)) >> 24)
32 #define MDP_COLOR_IS_BLOCK_MODE(c) ((0x00800000 & (c)) >> 23)
33 #define MDP_COLOR_GET_PLANE_COUNT(c) ((0x00600000 & (c)) >> 21)
34 #define MDP_COLOR_GET_H_SUBSAMPLE(c) ((0x00180000 & (c)) >> 19)
35 #define MDP_COLOR_GET_V_SUBSAMPLE(c) ((0x00040000 & (c)) >> 18)
36 #define MDP_COLOR_BITS_PER_PIXEL(c) ((0x0003ff00 & (c)) >> 8)
37 #define MDP_COLOR_GET_GROUP(c) ((0x000000c0 & (c)) >> 6)
38 #define MDP_COLOR_IS_SWAPPED(c) ((0x00000020 & (c)) >> 5)
39 #define MDP_COLOR_GET_UNIQUE_ID(c) ((0x0000001f & (c)) >> 0)
40 #define MDP_COLOR_GET_HW_FORMAT(c) ((0x0000001f & (c)) >> 0)
41
42 #define MDP_COLOR_IS_RGB(c) (MDP_COLOR_GET_GROUP(c) == 0)
43 #define MDP_COLOR_IS_YUV(c) (MDP_COLOR_GET_GROUP(c) == 1)
44
45 enum mdp_color {
46 MDP_COLOR_UNKNOWN = 0,
47
48 /* MDP_COLOR_FULLG8 */
49 MDP_COLOR_FULLG8_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 8, 2, 0, 21),
50 MDP_COLOR_FULLG8_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 8, 2, 0, 21),
51 MDP_COLOR_FULLG8_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 8, 2, 0, 21),
52 MDP_COLOR_FULLG8_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 8, 2, 0, 21),
53 MDP_COLOR_FULLG8 = MDP_COLOR_FULLG8_BGGR,
54
55 /* MDP_COLOR_FULLG10 */
56 MDP_COLOR_FULLG10_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 10, 2, 0, 21),
57 MDP_COLOR_FULLG10_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 10, 2, 0, 21),
58 MDP_COLOR_FULLG10_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 10, 2, 0, 21),
59 MDP_COLOR_FULLG10_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 10, 2, 0, 21),
60 MDP_COLOR_FULLG10 = MDP_COLOR_FULLG10_BGGR,
61
62 /* MDP_COLOR_FULLG12 */
63 MDP_COLOR_FULLG12_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 12, 2, 0, 21),
64 MDP_COLOR_FULLG12_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 12, 2, 0, 21),
65 MDP_COLOR_FULLG12_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 12, 2, 0, 21),
66 MDP_COLOR_FULLG12_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 12, 2, 0, 21),
67 MDP_COLOR_FULLG12 = MDP_COLOR_FULLG12_BGGR,
68
69 /* MDP_COLOR_FULLG14 */
70 MDP_COLOR_FULLG14_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 14, 2, 0, 21),
71 MDP_COLOR_FULLG14_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 14, 2, 0, 21),
72 MDP_COLOR_FULLG14_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 14, 2, 0, 21),
73 MDP_COLOR_FULLG14_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 14, 2, 0, 21),
74 MDP_COLOR_FULLG14 = MDP_COLOR_FULLG14_BGGR,
75
76 MDP_COLOR_UFO10 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 10, 2, 0, 24),
77
78 /* MDP_COLOR_BAYER8 */
79 MDP_COLOR_BAYER8_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 8, 2, 0, 20),
80 MDP_COLOR_BAYER8_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 8, 2, 0, 20),
81 MDP_COLOR_BAYER8_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 8, 2, 0, 20),
82 MDP_COLOR_BAYER8_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 8, 2, 0, 20),
83 MDP_COLOR_BAYER8 = MDP_COLOR_BAYER8_BGGR,
84
85 /* MDP_COLOR_BAYER10 */
86 MDP_COLOR_BAYER10_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 10, 2, 0, 20),
87 MDP_COLOR_BAYER10_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 10, 2, 0, 20),
88 MDP_COLOR_BAYER10_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 10, 2, 0, 20),
89 MDP_COLOR_BAYER10_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 10, 2, 0, 20),
90 MDP_COLOR_BAYER10 = MDP_COLOR_BAYER10_BGGR,
91
92 /* MDP_COLOR_BAYER12 */
93 MDP_COLOR_BAYER12_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 12, 2, 0, 20),
94 MDP_COLOR_BAYER12_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 12, 2, 0, 20),
95 MDP_COLOR_BAYER12_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 12, 2, 0, 20),
96 MDP_COLOR_BAYER12_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 12, 2, 0, 20),
97 MDP_COLOR_BAYER12 = MDP_COLOR_BAYER12_BGGR,
98
99 /* MDP_COLOR_BAYER14 */
100 MDP_COLOR_BAYER14_RGGB = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 14, 2, 0, 20),
101 MDP_COLOR_BAYER14_GRBG = MDP_COLOR(0, 0, 0, 0, 1, 0, 1, 14, 2, 0, 20),
102 MDP_COLOR_BAYER14_GBRG = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 14, 2, 0, 20),
103 MDP_COLOR_BAYER14_BGGR = MDP_COLOR(0, 0, 0, 0, 1, 1, 1, 14, 2, 0, 20),
104 MDP_COLOR_BAYER14 = MDP_COLOR_BAYER14_BGGR,
105
106 MDP_COLOR_RGB48 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 48, 0, 0, 23),
107 /* For bayer+mono raw-16 */
108 MDP_COLOR_RGB565_RAW = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 16, 2, 0, 0),
109
110 MDP_COLOR_BAYER8_UNPAK = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 8, 2, 0, 22),
111 MDP_COLOR_BAYER10_UNPAK = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 10, 2, 0, 22),
112 MDP_COLOR_BAYER12_UNPAK = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 12, 2, 0, 22),
113 MDP_COLOR_BAYER14_UNPAK = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 14, 2, 0, 22),
114
115 /* Unified formats */
116 MDP_COLOR_GREY = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 8, 1, 0, 7),
117
118 MDP_COLOR_RGB565 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 16, 0, 0, 0),
119 MDP_COLOR_BGR565 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 16, 0, 1, 0),
120 MDP_COLOR_RGB888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 24, 0, 1, 1),
121 MDP_COLOR_BGR888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 24, 0, 0, 1),
122 MDP_COLOR_RGBA8888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 32, 0, 1, 2),
123 MDP_COLOR_BGRA8888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 32, 0, 0, 2),
124 MDP_COLOR_ARGB8888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 32, 0, 1, 3),
125 MDP_COLOR_ABGR8888 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 32, 0, 0, 3),
126
127 MDP_COLOR_UYVY = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 16, 1, 0, 4),
128 MDP_COLOR_VYUY = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 16, 1, 1, 4),
129 MDP_COLOR_YUYV = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 16, 1, 0, 5),
130 MDP_COLOR_YVYU = MDP_COLOR(0, 0, 0, 0, 1, 1, 0, 16, 1, 1, 5),
131
132 MDP_COLOR_I420 = MDP_COLOR(0, 0, 0, 0, 3, 1, 1, 8, 1, 0, 8),
133 MDP_COLOR_YV12 = MDP_COLOR(0, 0, 0, 0, 3, 1, 1, 8, 1, 1, 8),
134 MDP_COLOR_I422 = MDP_COLOR(0, 0, 0, 0, 3, 1, 0, 8, 1, 0, 9),
135 MDP_COLOR_YV16 = MDP_COLOR(0, 0, 0, 0, 3, 1, 0, 8, 1, 1, 9),
136 MDP_COLOR_I444 = MDP_COLOR(0, 0, 0, 0, 3, 0, 0, 8, 1, 0, 10),
137 MDP_COLOR_YV24 = MDP_COLOR(0, 0, 0, 0, 3, 0, 0, 8, 1, 1, 10),
138
139 MDP_COLOR_NV12 = MDP_COLOR(0, 0, 0, 0, 2, 1, 1, 8, 1, 0, 12),
140 MDP_COLOR_NV21 = MDP_COLOR(0, 0, 0, 0, 2, 1, 1, 8, 1, 1, 12),
141 MDP_COLOR_NV16 = MDP_COLOR(0, 0, 0, 0, 2, 1, 0, 8, 1, 0, 13),
142 MDP_COLOR_NV61 = MDP_COLOR(0, 0, 0, 0, 2, 1, 0, 8, 1, 1, 13),
143 MDP_COLOR_NV24 = MDP_COLOR(0, 0, 0, 0, 2, 0, 0, 8, 1, 0, 14),
144 MDP_COLOR_NV42 = MDP_COLOR(0, 0, 0, 0, 2, 0, 0, 8, 1, 1, 14),
145
146 /* MediaTek proprietary formats */
147 /* UFO encoded block mode */
148 MDP_COLOR_420_BLK_UFO = MDP_COLOR(0, 0, 0, 5, 2, 1, 1, 256, 1, 0, 12),
149 /* Block mode */
150 MDP_COLOR_420_BLK = MDP_COLOR(0, 0, 0, 1, 2, 1, 1, 256, 1, 0, 12),
151 /* Block mode + field mode */
152 MDP_COLOR_420_BLKI = MDP_COLOR(0, 0, 0, 3, 2, 1, 1, 256, 1, 0, 12),
153 /* Block mode */
154 MDP_COLOR_422_BLK = MDP_COLOR(0, 0, 0, 1, 1, 1, 0, 512, 1, 0, 4),
155
156 MDP_COLOR_IYU2 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 24, 1, 0, 25),
157 MDP_COLOR_YUV444 = MDP_COLOR(0, 0, 0, 0, 1, 0, 0, 24, 1, 0, 30),
158
159 /* Packed 10-bit formats */
160 MDP_COLOR_RGBA1010102 = MDP_COLOR(0, 1, 0, 0, 1, 0, 0, 32, 0, 1, 2),
161 MDP_COLOR_BGRA1010102 = MDP_COLOR(0, 1, 0, 0, 1, 0, 0, 32, 0, 0, 2),
162 /* Packed 10-bit UYVY */
163 MDP_COLOR_UYVY_10P = MDP_COLOR(0, 1, 0, 0, 1, 1, 0, 20, 1, 0, 4),
164 /* Packed 10-bit NV21 */
165 MDP_COLOR_NV21_10P = MDP_COLOR(0, 1, 0, 0, 2, 1, 1, 10, 1, 1, 12),
166 /* 10-bit block mode */
167 MDP_COLOR_420_BLK_10_H = MDP_COLOR(0, 1, 0, 1, 2, 1, 1, 320, 1, 0, 12),
168 /* 10-bit HEVC tile mode */
169 MDP_COLOR_420_BLK_10_V = MDP_COLOR(0, 1, 1, 1, 2, 1, 1, 320, 1, 0, 12),
170 /* UFO encoded 10-bit block mode */
171 MDP_COLOR_420_BLK_U10_H = MDP_COLOR(0, 1, 0, 5, 2, 1, 1, 320, 1, 0, 12),
172 /* UFO encoded 10-bit HEVC tile mode */
173 MDP_COLOR_420_BLK_U10_V = MDP_COLOR(0, 1, 1, 5, 2, 1, 1, 320, 1, 0, 12),
174
175 /* Loose 10-bit formats */
176 MDP_COLOR_UYVY_10L = MDP_COLOR(0, 0, 1, 0, 1, 1, 0, 20, 1, 0, 4),
177 MDP_COLOR_VYUY_10L = MDP_COLOR(0, 0, 1, 0, 1, 1, 0, 20, 1, 1, 4),
178 MDP_COLOR_YUYV_10L = MDP_COLOR(0, 0, 1, 0, 1, 1, 0, 20, 1, 0, 5),
179 MDP_COLOR_YVYU_10L = MDP_COLOR(0, 0, 1, 0, 1, 1, 0, 20, 1, 1, 5),
180 MDP_COLOR_NV12_10L = MDP_COLOR(0, 0, 1, 0, 2, 1, 1, 10, 1, 0, 12),
181 MDP_COLOR_NV21_10L = MDP_COLOR(0, 0, 1, 0, 2, 1, 1, 10, 1, 1, 12),
182 MDP_COLOR_NV16_10L = MDP_COLOR(0, 0, 1, 0, 2, 1, 0, 10, 1, 0, 13),
183 MDP_COLOR_NV61_10L = MDP_COLOR(0, 0, 1, 0, 2, 1, 0, 10, 1, 1, 13),
184 MDP_COLOR_YV12_10L = MDP_COLOR(0, 0, 1, 0, 3, 1, 1, 10, 1, 1, 8),
185 MDP_COLOR_I420_10L = MDP_COLOR(0, 0, 1, 0, 3, 1, 1, 10, 1, 0, 8),
186 };
187
MDP_COLOR_IS_UV_COPLANE(enum mdp_color c)188 static inline bool MDP_COLOR_IS_UV_COPLANE(enum mdp_color c)
189 {
190 return (MDP_COLOR_GET_PLANE_COUNT(c) == 2 && MDP_COLOR_IS_YUV(c));
191 }
192
193 /* Minimum Y stride that is accepted by MDP HW */
mdp_color_get_min_y_stride(enum mdp_color c,u32 width)194 static inline u32 mdp_color_get_min_y_stride(enum mdp_color c, u32 width)
195 {
196 return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) + 4) >> 3;
197 }
198
199 /* Minimum UV stride that is accepted by MDP HW */
mdp_color_get_min_uv_stride(enum mdp_color c,u32 width)200 static inline u32 mdp_color_get_min_uv_stride(enum mdp_color c, u32 width)
201 {
202 u32 min_stride;
203
204 if (MDP_COLOR_GET_PLANE_COUNT(c) == 1)
205 return 0;
206 min_stride = mdp_color_get_min_y_stride(c, width)
207 >> MDP_COLOR_GET_H_SUBSAMPLE(c);
208 if (MDP_COLOR_IS_UV_COPLANE(c) && !MDP_COLOR_IS_BLOCK_MODE(c))
209 min_stride = min_stride * 2;
210 return min_stride;
211 }
212
213 /* Minimum Y plane size that is necessary in buffer */
mdp_color_get_min_y_size(enum mdp_color c,u32 width,u32 height)214 static inline u32 mdp_color_get_min_y_size(enum mdp_color c,
215 u32 width, u32 height)
216 {
217 if (MDP_COLOR_IS_BLOCK_MODE(c))
218 return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height;
219 return mdp_color_get_min_y_stride(c, width) * height;
220 }
221
222 /* Minimum UV plane size that is necessary in buffer */
mdp_color_get_min_uv_size(enum mdp_color c,u32 width,u32 height)223 static inline u32 mdp_color_get_min_uv_size(enum mdp_color c,
224 u32 width, u32 height)
225 {
226 height = height >> MDP_COLOR_GET_V_SUBSAMPLE(c);
227 if (MDP_COLOR_IS_BLOCK_MODE(c) && (MDP_COLOR_GET_PLANE_COUNT(c) > 1))
228 return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height;
229 return mdp_color_get_min_uv_stride(c, width) * height;
230 }
231
232 /* Combine colorspace, xfer_func, ycbcr_encoding, and quantization */
233 enum mdp_ycbcr_profile {
234 /* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_LIM_RANGE */
235 MDP_YCBCR_PROFILE_BT601,
236 /* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_LIM_RANGE */
237 MDP_YCBCR_PROFILE_BT709,
238 /* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_FULL_RANGE */
239 MDP_YCBCR_PROFILE_JPEG,
240 MDP_YCBCR_PROFILE_FULL_BT601 = MDP_YCBCR_PROFILE_JPEG,
241
242 /* Colorspaces not support for capture */
243 /* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_LIM_RANGE */
244 MDP_YCBCR_PROFILE_BT2020,
245 /* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_FULL_RANGE */
246 MDP_YCBCR_PROFILE_FULL_BT709,
247 /* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_FULL_RANGE */
248 MDP_YCBCR_PROFILE_FULL_BT2020,
249 };
250
251 #define MDP_FMT_FLAG_OUTPUT BIT(0)
252 #define MDP_FMT_FLAG_CAPTURE BIT(1)
253
254 struct mdp_format {
255 u32 pixelformat;
256 u32 mdp_color;
257 u8 depth[VIDEO_MAX_PLANES];
258 u8 row_depth[VIDEO_MAX_PLANES];
259 u8 num_planes;
260 u8 walign;
261 u8 halign;
262 u8 salign;
263 u32 flags;
264 };
265
266 struct mdp_pix_limit {
267 u32 wmin;
268 u32 hmin;
269 u32 wmax;
270 u32 hmax;
271 };
272
273 struct mdp_limit {
274 struct mdp_pix_limit out_limit;
275 struct mdp_pix_limit cap_limit;
276 u32 h_scale_up_max;
277 u32 v_scale_up_max;
278 u32 h_scale_down_max;
279 u32 v_scale_down_max;
280 };
281
282 enum mdp_stream_type {
283 MDP_STREAM_TYPE_UNKNOWN,
284 MDP_STREAM_TYPE_BITBLT,
285 MDP_STREAM_TYPE_GPU_BITBLT,
286 MDP_STREAM_TYPE_DUAL_BITBLT,
287 MDP_STREAM_TYPE_2ND_BITBLT,
288 MDP_STREAM_TYPE_ISP_IC,
289 MDP_STREAM_TYPE_ISP_VR,
290 MDP_STREAM_TYPE_ISP_ZSD,
291 MDP_STREAM_TYPE_ISP_IP,
292 MDP_STREAM_TYPE_ISP_VSS,
293 MDP_STREAM_TYPE_ISP_ZSD_SLOW,
294 MDP_STREAM_TYPE_WPE,
295 MDP_STREAM_TYPE_WPE2,
296 };
297
298 struct mdp_crop {
299 struct v4l2_rect c;
300 struct v4l2_fract left_subpix;
301 struct v4l2_fract top_subpix;
302 struct v4l2_fract width_subpix;
303 struct v4l2_fract height_subpix;
304 };
305
306 struct mdp_frame {
307 struct v4l2_format format;
308 const struct mdp_format *mdp_fmt;
309 u32 ycbcr_prof; /* enum mdp_ycbcr_profile */
310 u32 usage; /* enum mdp_buffer_usage */
311 struct mdp_crop crop;
312 struct v4l2_rect compose;
313 s32 rotation;
314 u32 hflip:1;
315 u32 vflip:1;
316 u32 hdr:1;
317 u32 dre:1;
318 u32 sharpness:1;
319 u32 dither:1;
320 };
321
mdp_target_is_crop(u32 target)322 static inline bool mdp_target_is_crop(u32 target)
323 {
324 return (target == V4L2_SEL_TGT_CROP) ||
325 (target == V4L2_SEL_TGT_CROP_DEFAULT) ||
326 (target == V4L2_SEL_TGT_CROP_BOUNDS);
327 }
328
mdp_target_is_compose(u32 target)329 static inline bool mdp_target_is_compose(u32 target)
330 {
331 return (target == V4L2_SEL_TGT_COMPOSE) ||
332 (target == V4L2_SEL_TGT_COMPOSE_DEFAULT) ||
333 (target == V4L2_SEL_TGT_COMPOSE_BOUNDS);
334 }
335
336 #define MDP_MAX_CAPTURES IMG_MAX_HW_OUTPUTS
337
338 #define MDP_VPU_INIT BIT(0)
339 #define MDP_M2M_CTX_ERROR BIT(1)
340
341 struct mdp_frameparam {
342 struct list_head list;
343 struct mdp_m2m_ctx *ctx;
344 atomic_t state;
345 const struct mdp_limit *limit;
346 u32 type; /* enum mdp_stream_type */
347 u32 frame_no;
348 struct mdp_frame output;
349 struct mdp_frame captures[MDP_MAX_CAPTURES];
350 u32 num_captures;
351 enum v4l2_colorspace colorspace;
352 enum v4l2_ycbcr_encoding ycbcr_enc;
353 enum v4l2_xfer_func xfer_func;
354 enum v4l2_quantization quant;
355 };
356
357 struct mdp_dev;
358
359 int mdp_enum_fmt_mplane(struct mdp_dev *mdp, struct v4l2_fmtdesc *f);
360 const struct mdp_format *mdp_try_fmt_mplane(struct mdp_dev *mdp,
361 struct v4l2_format *f,
362 struct mdp_frameparam *param,
363 u32 ctx_id);
364 enum mdp_ycbcr_profile mdp_map_ycbcr_prof_mplane(struct v4l2_format *f,
365 u32 mdp_color);
366 int mdp_try_crop(struct mdp_m2m_ctx *ctx, struct v4l2_rect *r,
367 const struct v4l2_selection *s, struct mdp_frame *frame);
368 int mdp_check_scaling_ratio(const struct v4l2_rect *crop,
369 const struct v4l2_rect *compose, s32 rotation,
370 const struct mdp_limit *limit);
371 bool mdp_check_pp_enable(struct mdp_dev *mdp, struct mdp_frame *frame);
372 void mdp_set_src_config(struct img_input *in,
373 struct mdp_frame *frame, struct vb2_buffer *vb);
374 void mdp_set_dst_config(struct img_output *out,
375 struct mdp_frame *frame, struct vb2_buffer *vb);
376 int mdp_frameparam_init(struct mdp_dev *mdp, struct mdp_frameparam *param);
377
378 #endif /* __MTK_MDP3_REGS_H__ */
379