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_M2M_H__
8 #define __MTK_MDP3_M2M_H__
9 
10 #include <media/v4l2-ctrls.h>
11 #include "mtk-mdp3-core.h"
12 #include "mtk-mdp3-vpu.h"
13 #include "mtk-mdp3-regs.h"
14 
15 #define MDP_MAX_CTRLS	10
16 
17 enum {
18 	MDP_M2M_SRC = 0,
19 	MDP_M2M_DST = 1,
20 	MDP_M2M_MAX,
21 };
22 
23 struct mdp_m2m_ctrls {
24 	struct v4l2_ctrl	*hflip;
25 	struct v4l2_ctrl	*vflip;
26 	struct v4l2_ctrl	*rotate;
27 };
28 
29 struct mdp_m2m_ctx {
30 	u32				id;
31 	struct mdp_dev			*mdp_dev;
32 	struct v4l2_fh			fh;
33 	struct v4l2_ctrl_handler	ctrl_handler;
34 	struct mdp_m2m_ctrls		ctrls;
35 	struct v4l2_m2m_ctx		*m2m_ctx;
36 	struct mdp_vpu_ctx		vpu;
37 	u32				frame_count[MDP_M2M_MAX];
38 
39 	struct mdp_frameparam		curr_param;
40 	/* synchronization protect for mdp m2m context */
41 	struct mutex			ctx_lock;
42 };
43 
44 int mdp_m2m_device_register(struct mdp_dev *mdp);
45 void mdp_m2m_device_unregister(struct mdp_dev *mdp);
46 void mdp_m2m_job_finish(struct mdp_m2m_ctx *ctx);
47 
48 #endif  /* __MTK_MDP3_M2M_H__ */
49