GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / media / platform / mediatek / mdp3 / mtk-mdp3-regs.h
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
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 */
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 */
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 */
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 */
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
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
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 void mdp_set_src_config(struct img_input *in,
372                         struct mdp_frame *frame, struct vb2_buffer *vb);
373 void mdp_set_dst_config(struct img_output *out,
374                         struct mdp_frame *frame, struct vb2_buffer *vb);
375 int mdp_frameparam_init(struct mdp_dev *mdp, struct mdp_frameparam *param);
376
377 #endif  /* __MTK_MDP3_REGS_H__ */