161890ccaSMoudy Ho /* SPDX-License-Identifier: GPL-2.0-only */
261890ccaSMoudy Ho /*
361890ccaSMoudy Ho  * Copyright (c) 2022 MediaTek Inc.
461890ccaSMoudy Ho  * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
561890ccaSMoudy Ho  */
661890ccaSMoudy Ho 
761890ccaSMoudy Ho #ifndef __MTK_MDP3_REGS_H__
861890ccaSMoudy Ho #define __MTK_MDP3_REGS_H__
961890ccaSMoudy Ho 
1061890ccaSMoudy Ho #include <linux/videodev2.h>
1161890ccaSMoudy Ho #include <media/videobuf2-core.h>
1261890ccaSMoudy Ho #include "mtk-img-ipi.h"
1361890ccaSMoudy Ho 
1461890ccaSMoudy Ho /*
1561890ccaSMoudy Ho  * MDP native color code
1661890ccaSMoudy Ho  * Plane count: 1, 2, 3
1761890ccaSMoudy Ho  * H-subsample: 0, 1, 2
1861890ccaSMoudy Ho  * V-subsample: 0, 1
1961890ccaSMoudy Ho  * Color group: 0-RGB, 1-YUV, 2-raw
2061890ccaSMoudy Ho  */
2161890ccaSMoudy Ho #define MDP_COLOR(PACKED, LOOSE, VIDEO, PLANE, HF, VF, BITS, GROUP, SWAP, ID)\
2261890ccaSMoudy Ho 	(((PACKED) << 27) | ((LOOSE) << 26) | ((VIDEO) << 23) |\
2361890ccaSMoudy Ho 	 ((PLANE) << 21) | ((HF) << 19) | ((VF) << 18) | ((BITS) << 8) |\
2461890ccaSMoudy Ho 	 ((GROUP) << 6) | ((SWAP) << 5) | ((ID) << 0))
2561890ccaSMoudy Ho 
2661890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_PACKED(c)	((0x08000000 & (c)) >> 27)
2761890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_LOOSE(c)	(((0x0c000000 & (c)) >> 26) == 1)
2861890ccaSMoudy Ho #define MDP_COLOR_IS_10BIT_TILE(c)	(((0x0c000000 & (c)) >> 26) == 3)
2961890ccaSMoudy Ho #define MDP_COLOR_IS_UFP(c)		((0x02000000 & (c)) >> 25)
3061890ccaSMoudy Ho #define MDP_COLOR_IS_INTERLACED(c)	((0x01000000 & (c)) >> 24)
3161890ccaSMoudy Ho #define MDP_COLOR_IS_BLOCK_MODE(c)	((0x00800000 & (c)) >> 23)
3261890ccaSMoudy Ho #define MDP_COLOR_GET_PLANE_COUNT(c)	((0x00600000 & (c)) >> 21)
3361890ccaSMoudy Ho #define MDP_COLOR_GET_H_SUBSAMPLE(c)	((0x00180000 & (c)) >> 19)
3461890ccaSMoudy Ho #define MDP_COLOR_GET_V_SUBSAMPLE(c)	((0x00040000 & (c)) >> 18)
3561890ccaSMoudy Ho #define MDP_COLOR_BITS_PER_PIXEL(c)	((0x0003ff00 & (c)) >>  8)
3661890ccaSMoudy Ho #define MDP_COLOR_GET_GROUP(c)		((0x000000c0 & (c)) >>  6)
3761890ccaSMoudy Ho #define MDP_COLOR_IS_SWAPPED(c)		((0x00000020 & (c)) >>  5)
3861890ccaSMoudy Ho #define MDP_COLOR_GET_UNIQUE_ID(c)	((0x0000001f & (c)) >>  0)
3961890ccaSMoudy Ho #define MDP_COLOR_GET_HW_FORMAT(c)	((0x0000001f & (c)) >>  0)
4061890ccaSMoudy Ho 
4161890ccaSMoudy Ho #define MDP_COLOR_IS_RGB(c)		(MDP_COLOR_GET_GROUP(c) == 0)
4261890ccaSMoudy Ho #define MDP_COLOR_IS_YUV(c)		(MDP_COLOR_GET_GROUP(c) == 1)
4361890ccaSMoudy Ho 
4461890ccaSMoudy Ho enum mdp_color {
4561890ccaSMoudy Ho 	MDP_COLOR_UNKNOWN	= 0,
4661890ccaSMoudy Ho 
4761890ccaSMoudy Ho 	//MDP_COLOR_FULLG8,
4861890ccaSMoudy Ho 	MDP_COLOR_FULLG8_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0,  8, 2,  0, 21),
4961890ccaSMoudy Ho 	MDP_COLOR_FULLG8_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1,  8, 2,  0, 21),
5061890ccaSMoudy Ho 	MDP_COLOR_FULLG8_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0,  8, 2,  0, 21),
5161890ccaSMoudy Ho 	MDP_COLOR_FULLG8_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1,  8, 2,  0, 21),
5261890ccaSMoudy Ho 	MDP_COLOR_FULLG8	= MDP_COLOR_FULLG8_BGGR,
5361890ccaSMoudy Ho 
5461890ccaSMoudy Ho 	//MDP_COLOR_FULLG10,
5561890ccaSMoudy Ho 	MDP_COLOR_FULLG10_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2,  0, 21),
5661890ccaSMoudy Ho 	MDP_COLOR_FULLG10_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 10, 2,  0, 21),
5761890ccaSMoudy Ho 	MDP_COLOR_FULLG10_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 10, 2,  0, 21),
5861890ccaSMoudy Ho 	MDP_COLOR_FULLG10_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 10, 2,  0, 21),
5961890ccaSMoudy Ho 	MDP_COLOR_FULLG10	= MDP_COLOR_FULLG10_BGGR,
6061890ccaSMoudy Ho 
6161890ccaSMoudy Ho 	//MDP_COLOR_FULLG12,
6261890ccaSMoudy Ho 	MDP_COLOR_FULLG12_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2,  0, 21),
6361890ccaSMoudy Ho 	MDP_COLOR_FULLG12_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 12, 2,  0, 21),
6461890ccaSMoudy Ho 	MDP_COLOR_FULLG12_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 12, 2,  0, 21),
6561890ccaSMoudy Ho 	MDP_COLOR_FULLG12_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 12, 2,  0, 21),
6661890ccaSMoudy Ho 	MDP_COLOR_FULLG12	= MDP_COLOR_FULLG12_BGGR,
6761890ccaSMoudy Ho 
6861890ccaSMoudy Ho 	//MDP_COLOR_FULLG14,
6961890ccaSMoudy Ho 	MDP_COLOR_FULLG14_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2,  0, 21),
7061890ccaSMoudy Ho 	MDP_COLOR_FULLG14_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 14, 2,  0, 21),
7161890ccaSMoudy Ho 	MDP_COLOR_FULLG14_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 14, 2,  0, 21),
7261890ccaSMoudy Ho 	MDP_COLOR_FULLG14_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 14, 2,  0, 21),
7361890ccaSMoudy Ho 	MDP_COLOR_FULLG14	= MDP_COLOR_FULLG14_BGGR,
7461890ccaSMoudy Ho 
7561890ccaSMoudy Ho 	MDP_COLOR_UFO10		= MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2,  0, 24),
7661890ccaSMoudy Ho 
7761890ccaSMoudy Ho 	//MDP_COLOR_BAYER8,
7861890ccaSMoudy Ho 	MDP_COLOR_BAYER8_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0,  8, 2,  0, 20),
7961890ccaSMoudy Ho 	MDP_COLOR_BAYER8_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1,  8, 2,  0, 20),
8061890ccaSMoudy Ho 	MDP_COLOR_BAYER8_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0,  8, 2,  0, 20),
8161890ccaSMoudy Ho 	MDP_COLOR_BAYER8_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1,  8, 2,  0, 20),
8261890ccaSMoudy Ho 	MDP_COLOR_BAYER8	= MDP_COLOR_BAYER8_BGGR,
8361890ccaSMoudy Ho 
8461890ccaSMoudy Ho 	//MDP_COLOR_BAYER10,
8561890ccaSMoudy Ho 	MDP_COLOR_BAYER10_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2,  0, 20),
8661890ccaSMoudy Ho 	MDP_COLOR_BAYER10_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 10, 2,  0, 20),
8761890ccaSMoudy Ho 	MDP_COLOR_BAYER10_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 10, 2,  0, 20),
8861890ccaSMoudy Ho 	MDP_COLOR_BAYER10_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 10, 2,  0, 20),
8961890ccaSMoudy Ho 	MDP_COLOR_BAYER10	= MDP_COLOR_BAYER10_BGGR,
9061890ccaSMoudy Ho 
9161890ccaSMoudy Ho 	//MDP_COLOR_BAYER12,
9261890ccaSMoudy Ho 	MDP_COLOR_BAYER12_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2,  0, 20),
9361890ccaSMoudy Ho 	MDP_COLOR_BAYER12_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 12, 2,  0, 20),
9461890ccaSMoudy Ho 	MDP_COLOR_BAYER12_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 12, 2,  0, 20),
9561890ccaSMoudy Ho 	MDP_COLOR_BAYER12_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 12, 2,  0, 20),
9661890ccaSMoudy Ho 	MDP_COLOR_BAYER12	= MDP_COLOR_BAYER12_BGGR,
9761890ccaSMoudy Ho 
9861890ccaSMoudy Ho 	//MDP_COLOR_BAYER14,
9961890ccaSMoudy Ho 	MDP_COLOR_BAYER14_RGGB	= MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2,  0, 20),
10061890ccaSMoudy Ho 	MDP_COLOR_BAYER14_GRBG	= MDP_COLOR(0, 0, 0, 1, 0, 1, 14, 2,  0, 20),
10161890ccaSMoudy Ho 	MDP_COLOR_BAYER14_GBRG	= MDP_COLOR(0, 0, 0, 1, 1, 0, 14, 2,  0, 20),
10261890ccaSMoudy Ho 	MDP_COLOR_BAYER14_BGGR	= MDP_COLOR(0, 0, 0, 1, 1, 1, 14, 2,  0, 20),
10361890ccaSMoudy Ho 	MDP_COLOR_BAYER14	= MDP_COLOR_BAYER14_BGGR,
10461890ccaSMoudy Ho 
10561890ccaSMoudy Ho 	MDP_COLOR_RGB48		= MDP_COLOR(0, 0, 0, 1, 0, 0, 48, 0,  0, 23),
10661890ccaSMoudy Ho 	/* For bayer+mono raw-16 */
10761890ccaSMoudy Ho 	MDP_COLOR_RGB565_RAW	= MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 2,  0, 0),
10861890ccaSMoudy Ho 
10961890ccaSMoudy Ho 	MDP_COLOR_BAYER8_UNPAK	= MDP_COLOR(0, 0, 0, 1, 0, 0,  8, 2,  0, 22),
11061890ccaSMoudy Ho 	MDP_COLOR_BAYER10_UNPAK	= MDP_COLOR(0, 0, 0, 1, 0, 0, 10, 2,  0, 22),
11161890ccaSMoudy Ho 	MDP_COLOR_BAYER12_UNPAK	= MDP_COLOR(0, 0, 0, 1, 0, 0, 12, 2,  0, 22),
11261890ccaSMoudy Ho 	MDP_COLOR_BAYER14_UNPAK	= MDP_COLOR(0, 0, 0, 1, 0, 0, 14, 2,  0, 22),
11361890ccaSMoudy Ho 
11461890ccaSMoudy Ho 	/* Unified formats */
11561890ccaSMoudy Ho 	MDP_COLOR_GREY		= MDP_COLOR(0, 0, 0, 1, 0, 0,  8, 1,  0, 7),
11661890ccaSMoudy Ho 
11761890ccaSMoudy Ho 	MDP_COLOR_RGB565	= MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 0,  0, 0),
11861890ccaSMoudy Ho 	MDP_COLOR_BGR565	= MDP_COLOR(0, 0, 0, 1, 0, 0, 16, 0,  1, 0),
11961890ccaSMoudy Ho 	MDP_COLOR_RGB888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 0,  1, 1),
12061890ccaSMoudy Ho 	MDP_COLOR_BGR888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 24, 0,  0, 1),
12161890ccaSMoudy Ho 	MDP_COLOR_RGBA8888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0,  1, 2),
12261890ccaSMoudy Ho 	MDP_COLOR_BGRA8888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0,  0, 2),
12361890ccaSMoudy Ho 	MDP_COLOR_ARGB8888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0,  1, 3),
12461890ccaSMoudy Ho 	MDP_COLOR_ABGR8888	= MDP_COLOR(0, 0, 0, 1, 0, 0, 32, 0,  0, 3),
12561890ccaSMoudy Ho 
12661890ccaSMoudy Ho 	MDP_COLOR_UYVY		= MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1,  0, 4),
12761890ccaSMoudy Ho 	MDP_COLOR_VYUY		= MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1,  1, 4),
12861890ccaSMoudy Ho 	MDP_COLOR_YUYV		= MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1,  0, 5),
12961890ccaSMoudy Ho 	MDP_COLOR_YVYU		= MDP_COLOR(0, 0, 0, 1, 1, 0, 16, 1,  1, 5),
13061890ccaSMoudy Ho 
13161890ccaSMoudy Ho 	MDP_COLOR_I420		= MDP_COLOR(0, 0, 0, 3, 1, 1,  8, 1,  0, 8),
13261890ccaSMoudy Ho 	MDP_COLOR_YV12		= MDP_COLOR(0, 0, 0, 3, 1, 1,  8, 1,  1, 8),
13361890ccaSMoudy Ho 	MDP_COLOR_I422		= MDP_COLOR(0, 0, 0, 3, 1, 0,  8, 1,  0, 9),
13461890ccaSMoudy Ho 	MDP_COLOR_YV16		= MDP_COLOR(0, 0, 0, 3, 1, 0,  8, 1,  1, 9),
13561890ccaSMoudy Ho 	MDP_COLOR_I444		= MDP_COLOR(0, 0, 0, 3, 0, 0,  8, 1,  0, 10),
13661890ccaSMoudy Ho 	MDP_COLOR_YV24		= MDP_COLOR(0, 0, 0, 3, 0, 0,  8, 1,  1, 10),
13761890ccaSMoudy Ho 
13861890ccaSMoudy Ho 	MDP_COLOR_NV12		= MDP_COLOR(0, 0, 0, 2, 1, 1,  8, 1,  0, 12),
13961890ccaSMoudy Ho 	MDP_COLOR_NV21		= MDP_COLOR(0, 0, 0, 2, 1, 1,  8, 1,  1, 12),
14061890ccaSMoudy Ho 	MDP_COLOR_NV16		= MDP_COLOR(0, 0, 0, 2, 1, 0,  8, 1,  0, 13),
14161890ccaSMoudy Ho 	MDP_COLOR_NV61		= MDP_COLOR(0, 0, 0, 2, 1, 0,  8, 1,  1, 13),
14261890ccaSMoudy Ho 	MDP_COLOR_NV24		= MDP_COLOR(0, 0, 0, 2, 0, 0,  8, 1,  0, 14),
14361890ccaSMoudy Ho 	MDP_COLOR_NV42		= MDP_COLOR(0, 0, 0, 2, 0, 0,  8, 1,  1, 14),
14461890ccaSMoudy Ho 
14561890ccaSMoudy Ho 	/* MediaTek proprietary formats */
14661890ccaSMoudy Ho 	/* UFO encoded block mode */
14761890ccaSMoudy Ho 	MDP_COLOR_420_BLK_UFO	= MDP_COLOR(0, 0, 5, 2, 1, 1, 256, 1, 0, 12),
14861890ccaSMoudy Ho 	/* Block mode */
14961890ccaSMoudy Ho 	MDP_COLOR_420_BLK	= MDP_COLOR(0, 0, 1, 2, 1, 1, 256, 1, 0, 12),
15061890ccaSMoudy Ho 	/* Block mode + field mode */
15161890ccaSMoudy Ho 	MDP_COLOR_420_BLKI	= MDP_COLOR(0, 0, 3, 2, 1, 1, 256, 1, 0, 12),
15261890ccaSMoudy Ho 	/* Block mode */
15361890ccaSMoudy Ho 	MDP_COLOR_422_BLK	= MDP_COLOR(0, 0, 1, 1, 1, 0, 512, 1, 0, 4),
15461890ccaSMoudy Ho 
15561890ccaSMoudy Ho 	MDP_COLOR_IYU2		= MDP_COLOR(0, 0, 0, 1, 0, 0, 24,  1, 0, 25),
15661890ccaSMoudy Ho 	MDP_COLOR_YUV444	= MDP_COLOR(0, 0, 0, 1, 0, 0, 24,  1, 0, 30),
15761890ccaSMoudy Ho 
15861890ccaSMoudy Ho 	/* Packed 10-bit formats */
15961890ccaSMoudy Ho 	MDP_COLOR_RGBA1010102	= MDP_COLOR(1, 0, 0, 1, 0, 0, 32,  0, 1, 2),
16061890ccaSMoudy Ho 	MDP_COLOR_BGRA1010102	= MDP_COLOR(1, 0, 0, 1, 0, 0, 32,  0, 0, 2),
16161890ccaSMoudy Ho 	/* Packed 10-bit UYVY */
16261890ccaSMoudy Ho 	MDP_COLOR_UYVY_10P	= MDP_COLOR(1, 0, 0, 1, 1, 0, 20,  1, 0, 4),
16361890ccaSMoudy Ho 	/* Packed 10-bit NV21 */
16461890ccaSMoudy Ho 	MDP_COLOR_NV21_10P	= MDP_COLOR(1, 0, 0, 2, 1, 1, 10,  1, 1, 12),
16561890ccaSMoudy Ho 	/* 10-bit block mode */
16661890ccaSMoudy Ho 	MDP_COLOR_420_BLK_10_H	= MDP_COLOR(1, 0, 1, 2, 1, 1, 320, 1, 0, 12),
16761890ccaSMoudy Ho 	/* 10-bit HEVC tile mode */
16861890ccaSMoudy Ho 	MDP_COLOR_420_BLK_10_V	= MDP_COLOR(1, 1, 1, 2, 1, 1, 320, 1, 0, 12),
16961890ccaSMoudy Ho 	/* UFO encoded 10-bit block mode */
17061890ccaSMoudy Ho 	MDP_COLOR_420_BLK_U10_H	= MDP_COLOR(1, 0, 5, 2, 1, 1, 320, 1, 0, 12),
17161890ccaSMoudy Ho 	/* UFO encoded 10-bit HEVC tile mode */
17261890ccaSMoudy Ho 	MDP_COLOR_420_BLK_U10_V	= MDP_COLOR(1, 1, 5, 2, 1, 1, 320, 1, 0, 12),
17361890ccaSMoudy Ho 
17461890ccaSMoudy Ho 	/* Loose 10-bit formats */
17561890ccaSMoudy Ho 	MDP_COLOR_UYVY_10L	= MDP_COLOR(0, 1, 0, 1, 1, 0, 20,  1, 0, 4),
17661890ccaSMoudy Ho 	MDP_COLOR_VYUY_10L	= MDP_COLOR(0, 1, 0, 1, 1, 0, 20,  1, 1, 4),
17761890ccaSMoudy Ho 	MDP_COLOR_YUYV_10L	= MDP_COLOR(0, 1, 0, 1, 1, 0, 20,  1, 0, 5),
17861890ccaSMoudy Ho 	MDP_COLOR_YVYU_10L	= MDP_COLOR(0, 1, 0, 1, 1, 0, 20,  1, 1, 5),
17961890ccaSMoudy Ho 	MDP_COLOR_NV12_10L	= MDP_COLOR(0, 1, 0, 2, 1, 1, 10,  1, 0, 12),
18061890ccaSMoudy Ho 	MDP_COLOR_NV21_10L	= MDP_COLOR(0, 1, 0, 2, 1, 1, 10,  1, 1, 12),
18161890ccaSMoudy Ho 	MDP_COLOR_NV16_10L	= MDP_COLOR(0, 1, 0, 2, 1, 0, 10,  1, 0, 13),
18261890ccaSMoudy Ho 	MDP_COLOR_NV61_10L	= MDP_COLOR(0, 1, 0, 2, 1, 0, 10,  1, 1, 13),
18361890ccaSMoudy Ho 	MDP_COLOR_YV12_10L	= MDP_COLOR(0, 1, 0, 3, 1, 1, 10,  1, 1, 8),
18461890ccaSMoudy Ho 	MDP_COLOR_I420_10L	= MDP_COLOR(0, 1, 0, 3, 1, 1, 10,  1, 0, 8),
18561890ccaSMoudy Ho };
18661890ccaSMoudy Ho 
18761890ccaSMoudy Ho static inline bool MDP_COLOR_IS_UV_COPLANE(enum mdp_color c)
18861890ccaSMoudy Ho {
18961890ccaSMoudy Ho 	return (MDP_COLOR_GET_PLANE_COUNT(c) == 2 && MDP_COLOR_IS_YUV(c));
19061890ccaSMoudy Ho }
19161890ccaSMoudy Ho 
19261890ccaSMoudy Ho /* Minimum Y stride that is accepted by MDP HW */
19361890ccaSMoudy Ho static inline u32 mdp_color_get_min_y_stride(enum mdp_color c, u32 width)
19461890ccaSMoudy Ho {
19561890ccaSMoudy Ho 	return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) + 4) >> 3;
19661890ccaSMoudy Ho }
19761890ccaSMoudy Ho 
19861890ccaSMoudy Ho /* Minimum UV stride that is accepted by MDP HW */
19961890ccaSMoudy Ho static inline u32 mdp_color_get_min_uv_stride(enum mdp_color c, u32 width)
20061890ccaSMoudy Ho {
20161890ccaSMoudy Ho 	u32 min_stride;
20261890ccaSMoudy Ho 
20361890ccaSMoudy Ho 	if (MDP_COLOR_GET_PLANE_COUNT(c) == 1)
20461890ccaSMoudy Ho 		return 0;
20561890ccaSMoudy Ho 	min_stride = mdp_color_get_min_y_stride(c, width)
20661890ccaSMoudy Ho 		>> MDP_COLOR_GET_H_SUBSAMPLE(c);
20761890ccaSMoudy Ho 	if (MDP_COLOR_IS_UV_COPLANE(c) && !MDP_COLOR_IS_BLOCK_MODE(c))
20861890ccaSMoudy Ho 		min_stride = min_stride * 2;
20961890ccaSMoudy Ho 	return min_stride;
21061890ccaSMoudy Ho }
21161890ccaSMoudy Ho 
21261890ccaSMoudy Ho /* Minimum Y plane size that is necessary in buffer */
21361890ccaSMoudy Ho static inline u32 mdp_color_get_min_y_size(enum mdp_color c,
21461890ccaSMoudy Ho 					   u32 width, u32 height)
21561890ccaSMoudy Ho {
21661890ccaSMoudy Ho 	if (MDP_COLOR_IS_BLOCK_MODE(c))
21761890ccaSMoudy Ho 		return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height;
21861890ccaSMoudy Ho 	return mdp_color_get_min_y_stride(c, width) * height;
21961890ccaSMoudy Ho }
22061890ccaSMoudy Ho 
22161890ccaSMoudy Ho /* Minimum UV plane size that is necessary in buffer */
22261890ccaSMoudy Ho static inline u32 mdp_color_get_min_uv_size(enum mdp_color c,
22361890ccaSMoudy Ho 					    u32 width, u32 height)
22461890ccaSMoudy Ho {
22561890ccaSMoudy Ho 	height = height >> MDP_COLOR_GET_V_SUBSAMPLE(c);
22661890ccaSMoudy Ho 	if (MDP_COLOR_IS_BLOCK_MODE(c) && (MDP_COLOR_GET_PLANE_COUNT(c) > 1))
22761890ccaSMoudy Ho 		return ((MDP_COLOR_BITS_PER_PIXEL(c) * width) >> 8) * height;
22861890ccaSMoudy Ho 	return mdp_color_get_min_uv_stride(c, width) * height;
22961890ccaSMoudy Ho }
23061890ccaSMoudy Ho 
23161890ccaSMoudy Ho /* Combine colorspace, xfer_func, ycbcr_encoding, and quantization */
23261890ccaSMoudy Ho enum mdp_ycbcr_profile {
23361890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_LIM_RANGE */
23461890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_BT601,
23561890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_LIM_RANGE */
23661890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_BT709,
23761890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_601 and V4L2_QUANTIZATION_FULL_RANGE */
23861890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_JPEG,
23961890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_FULL_BT601 = MDP_YCBCR_PROFILE_JPEG,
24061890ccaSMoudy Ho 
24161890ccaSMoudy Ho 	/* Colorspaces not support for capture */
24261890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_LIM_RANGE */
24361890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_BT2020,
24461890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_709 and V4L2_QUANTIZATION_FULL_RANGE */
24561890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_FULL_BT709,
24661890ccaSMoudy Ho 	/* V4L2_YCBCR_ENC_BT2020 and V4L2_QUANTIZATION_FULL_RANGE */
24761890ccaSMoudy Ho 	MDP_YCBCR_PROFILE_FULL_BT2020,
24861890ccaSMoudy Ho };
24961890ccaSMoudy Ho 
25061890ccaSMoudy Ho #define MDP_FMT_FLAG_OUTPUT	BIT(0)
25161890ccaSMoudy Ho #define MDP_FMT_FLAG_CAPTURE	BIT(1)
25261890ccaSMoudy Ho 
25361890ccaSMoudy Ho struct mdp_format {
25461890ccaSMoudy Ho 	u32	pixelformat;
25561890ccaSMoudy Ho 	u32	mdp_color;
25661890ccaSMoudy Ho 	u8	depth[VIDEO_MAX_PLANES];
25761890ccaSMoudy Ho 	u8	row_depth[VIDEO_MAX_PLANES];
25861890ccaSMoudy Ho 	u8	num_planes;
25961890ccaSMoudy Ho 	u8	walign;
26061890ccaSMoudy Ho 	u8	halign;
26161890ccaSMoudy Ho 	u8	salign;
26261890ccaSMoudy Ho 	u32	flags;
26361890ccaSMoudy Ho };
26461890ccaSMoudy Ho 
26561890ccaSMoudy Ho struct mdp_pix_limit {
26661890ccaSMoudy Ho 	u32	wmin;
26761890ccaSMoudy Ho 	u32	hmin;
26861890ccaSMoudy Ho 	u32	wmax;
26961890ccaSMoudy Ho 	u32	hmax;
27061890ccaSMoudy Ho };
27161890ccaSMoudy Ho 
27261890ccaSMoudy Ho struct mdp_limit {
27361890ccaSMoudy Ho 	struct mdp_pix_limit	out_limit;
27461890ccaSMoudy Ho 	struct mdp_pix_limit	cap_limit;
27561890ccaSMoudy Ho 	u32			h_scale_up_max;
27661890ccaSMoudy Ho 	u32			v_scale_up_max;
27761890ccaSMoudy Ho 	u32			h_scale_down_max;
27861890ccaSMoudy Ho 	u32			v_scale_down_max;
27961890ccaSMoudy Ho };
28061890ccaSMoudy Ho 
28161890ccaSMoudy Ho enum mdp_stream_type {
28261890ccaSMoudy Ho 	MDP_STREAM_TYPE_UNKNOWN,
28361890ccaSMoudy Ho 	MDP_STREAM_TYPE_BITBLT,
28461890ccaSMoudy Ho 	MDP_STREAM_TYPE_GPU_BITBLT,
28561890ccaSMoudy Ho 	MDP_STREAM_TYPE_DUAL_BITBLT,
28661890ccaSMoudy Ho 	MDP_STREAM_TYPE_2ND_BITBLT,
28761890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_IC,
28861890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_VR,
28961890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_ZSD,
29061890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_IP,
29161890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_VSS,
29261890ccaSMoudy Ho 	MDP_STREAM_TYPE_ISP_ZSD_SLOW,
29361890ccaSMoudy Ho 	MDP_STREAM_TYPE_WPE,
29461890ccaSMoudy Ho 	MDP_STREAM_TYPE_WPE2,
29561890ccaSMoudy Ho };
29661890ccaSMoudy Ho 
29761890ccaSMoudy Ho struct mdp_crop {
29861890ccaSMoudy Ho 	struct v4l2_rect	c;
29961890ccaSMoudy Ho 	struct v4l2_fract	left_subpix;
30061890ccaSMoudy Ho 	struct v4l2_fract	top_subpix;
30161890ccaSMoudy Ho 	struct v4l2_fract	width_subpix;
30261890ccaSMoudy Ho 	struct v4l2_fract	height_subpix;
30361890ccaSMoudy Ho };
30461890ccaSMoudy Ho 
30561890ccaSMoudy Ho struct mdp_frame {
30661890ccaSMoudy Ho 	struct v4l2_format	format;
30761890ccaSMoudy Ho 	const struct mdp_format	*mdp_fmt;
30861890ccaSMoudy Ho 	u32			ycbcr_prof;	/* enum mdp_ycbcr_profile */
30961890ccaSMoudy Ho 	u32			usage;		/* enum mdp_buffer_usage */
31061890ccaSMoudy Ho 	struct mdp_crop		crop;
31161890ccaSMoudy Ho 	struct v4l2_rect	compose;
31261890ccaSMoudy Ho 	s32			rotation;
31361890ccaSMoudy Ho 	u32			hflip:1;
31461890ccaSMoudy Ho 	u32			vflip:1;
31561890ccaSMoudy Ho 	u32			hdr:1;
31661890ccaSMoudy Ho 	u32			dre:1;
31761890ccaSMoudy Ho 	u32			sharpness:1;
31861890ccaSMoudy Ho 	u32			dither:1;
31961890ccaSMoudy Ho };
32061890ccaSMoudy Ho 
32161890ccaSMoudy Ho static inline bool mdp_target_is_crop(u32 target)
32261890ccaSMoudy Ho {
32361890ccaSMoudy Ho 	return (target == V4L2_SEL_TGT_CROP) ||
32461890ccaSMoudy Ho 		(target == V4L2_SEL_TGT_CROP_DEFAULT) ||
32561890ccaSMoudy Ho 		(target == V4L2_SEL_TGT_CROP_BOUNDS);
32661890ccaSMoudy Ho }
32761890ccaSMoudy Ho 
32861890ccaSMoudy Ho static inline bool mdp_target_is_compose(u32 target)
32961890ccaSMoudy Ho {
33061890ccaSMoudy Ho 	return (target == V4L2_SEL_TGT_COMPOSE) ||
33161890ccaSMoudy Ho 		(target == V4L2_SEL_TGT_COMPOSE_DEFAULT) ||
33261890ccaSMoudy Ho 		(target == V4L2_SEL_TGT_COMPOSE_BOUNDS);
33361890ccaSMoudy Ho }
33461890ccaSMoudy Ho 
33561890ccaSMoudy Ho #define MDP_MAX_CAPTURES	IMG_MAX_HW_OUTPUTS
33661890ccaSMoudy Ho 
33761890ccaSMoudy Ho #define MDP_VPU_INIT		BIT(0)
33861890ccaSMoudy Ho #define MDP_M2M_CTX_ERROR	BIT(1)
33961890ccaSMoudy Ho 
34061890ccaSMoudy Ho struct mdp_frameparam {
34161890ccaSMoudy Ho 	struct list_head	list;
34261890ccaSMoudy Ho 	struct mdp_m2m_ctx	*ctx;
34361890ccaSMoudy Ho 	atomic_t		state;
34461890ccaSMoudy Ho 	const struct mdp_limit	*limit;
34561890ccaSMoudy Ho 	u32			type;	/* enum mdp_stream_type */
34661890ccaSMoudy Ho 	u32			frame_no;
34761890ccaSMoudy Ho 	struct mdp_frame	output;
34861890ccaSMoudy Ho 	struct mdp_frame	captures[MDP_MAX_CAPTURES];
34961890ccaSMoudy Ho 	u32			num_captures;
35061890ccaSMoudy Ho 	enum v4l2_colorspace		colorspace;
35161890ccaSMoudy Ho 	enum v4l2_ycbcr_encoding	ycbcr_enc;
35261890ccaSMoudy Ho 	enum v4l2_xfer_func		xfer_func;
35361890ccaSMoudy Ho 	enum v4l2_quantization		quant;
35461890ccaSMoudy Ho };
35561890ccaSMoudy Ho 
356*6b8910e3SMoudy Ho struct mdp_dev;
357*6b8910e3SMoudy Ho 
358*6b8910e3SMoudy Ho int mdp_enum_fmt_mplane(struct mdp_dev *mdp, struct v4l2_fmtdesc *f);
359*6b8910e3SMoudy Ho const struct mdp_format *mdp_try_fmt_mplane(struct mdp_dev *mdp,
360*6b8910e3SMoudy Ho 					    struct v4l2_format *f,
36161890ccaSMoudy Ho 					    struct mdp_frameparam *param,
36261890ccaSMoudy Ho 					    u32 ctx_id);
36361890ccaSMoudy Ho enum mdp_ycbcr_profile mdp_map_ycbcr_prof_mplane(struct v4l2_format *f,
36461890ccaSMoudy Ho 						 u32 mdp_color);
36561890ccaSMoudy Ho int mdp_try_crop(struct mdp_m2m_ctx *ctx, struct v4l2_rect *r,
36661890ccaSMoudy Ho 		 const struct v4l2_selection *s, struct mdp_frame *frame);
36761890ccaSMoudy Ho int mdp_check_scaling_ratio(const struct v4l2_rect *crop,
36861890ccaSMoudy Ho 			    const struct v4l2_rect *compose, s32 rotation,
36961890ccaSMoudy Ho 	const struct mdp_limit *limit);
37061890ccaSMoudy Ho void mdp_set_src_config(struct img_input *in,
37161890ccaSMoudy Ho 			struct mdp_frame *frame, struct vb2_buffer *vb);
37261890ccaSMoudy Ho void mdp_set_dst_config(struct img_output *out,
37361890ccaSMoudy Ho 			struct mdp_frame *frame, struct vb2_buffer *vb);
374*6b8910e3SMoudy Ho int mdp_frameparam_init(struct mdp_dev *mdp, struct mdp_frameparam *param);
37561890ccaSMoudy Ho 
37661890ccaSMoudy Ho #endif  /* __MTK_MDP3_REGS_H__ */
377