162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2022 MediaTek Inc.
462306a36Sopenharmony_ci * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __MTK_MDP3_M2M_H__
862306a36Sopenharmony_ci#define __MTK_MDP3_M2M_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <media/v4l2-ctrls.h>
1162306a36Sopenharmony_ci#include "mtk-mdp3-core.h"
1262306a36Sopenharmony_ci#include "mtk-mdp3-vpu.h"
1362306a36Sopenharmony_ci#include "mtk-mdp3-regs.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define MDP_MAX_CTRLS	10
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum {
1862306a36Sopenharmony_ci	MDP_M2M_SRC = 0,
1962306a36Sopenharmony_ci	MDP_M2M_DST = 1,
2062306a36Sopenharmony_ci	MDP_M2M_MAX,
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct mdp_m2m_ctrls {
2462306a36Sopenharmony_ci	struct v4l2_ctrl	*hflip;
2562306a36Sopenharmony_ci	struct v4l2_ctrl	*vflip;
2662306a36Sopenharmony_ci	struct v4l2_ctrl	*rotate;
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct mdp_m2m_ctx {
3062306a36Sopenharmony_ci	u32				id;
3162306a36Sopenharmony_ci	struct mdp_dev			*mdp_dev;
3262306a36Sopenharmony_ci	struct v4l2_fh			fh;
3362306a36Sopenharmony_ci	struct v4l2_ctrl_handler	ctrl_handler;
3462306a36Sopenharmony_ci	struct mdp_m2m_ctrls		ctrls;
3562306a36Sopenharmony_ci	struct v4l2_m2m_ctx		*m2m_ctx;
3662306a36Sopenharmony_ci	u32				frame_count[MDP_M2M_MAX];
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	struct mdp_frameparam		curr_param;
3962306a36Sopenharmony_ci	/* synchronization protect for mdp m2m context */
4062306a36Sopenharmony_ci	struct mutex			ctx_lock;
4162306a36Sopenharmony_ci};
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciint mdp_m2m_device_register(struct mdp_dev *mdp);
4462306a36Sopenharmony_civoid mdp_m2m_device_unregister(struct mdp_dev *mdp);
4562306a36Sopenharmony_civoid mdp_m2m_job_finish(struct mdp_m2m_ctx *ctx);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci#endif  /* __MTK_MDP3_M2M_H__ */
48