root/drivers/media/platform/mediatek/mdp3/mtk-mdp3-m2m.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2022 MediaTek Inc.
 * Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
 */

#ifndef __MTK_MDP3_M2M_H__
#define __MTK_MDP3_M2M_H__

#include <media/v4l2-ctrls.h>
#include "mtk-mdp3-core.h"
#include "mtk-mdp3-vpu.h"
#include "mtk-mdp3-regs.h"

#define MDP_MAX_CTRLS   10

enum {
        MDP_M2M_SRC = 0,
        MDP_M2M_DST = 1,
        MDP_M2M_MAX,
};

struct mdp_m2m_ctrls {
        struct v4l2_ctrl        *hflip;
        struct v4l2_ctrl        *vflip;
        struct v4l2_ctrl        *rotate;
};

struct mdp_m2m_ctx {
        u32                             id;
        struct mdp_dev                  *mdp_dev;
        struct v4l2_fh                  fh;
        struct v4l2_ctrl_handler        ctrl_handler;
        struct mdp_m2m_ctrls            ctrls;
        struct v4l2_m2m_ctx             *m2m_ctx;
        u32                             frame_count[MDP_M2M_MAX];

        struct mdp_frameparam           curr_param;
        /* synchronization protect for mdp m2m context */
        struct mutex                    ctx_lock;
};

int mdp_m2m_device_register(struct mdp_dev *mdp);
void mdp_m2m_device_unregister(struct mdp_dev *mdp);
void mdp_m2m_job_finish(struct mdp_m2m_ctx *ctx);

#endif  /* __MTK_MDP3_M2M_H__ */