blob: 19f46da487aa8c8d1901bd133d5382ad7becc2c2 [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2018 MediaTek Inc.
* Author: Ping-Hsun Wu <ping-hsun.wu@mediatek.com>
*/
#ifndef __MTK_MDP3_CORE_H__
#define __MTK_MDP3_CORE_H__
#include <media/v4l2-device.h>
#include <media/v4l2-mem2mem.h>
#include "mtk-mdp3-comp.h"
#include "mtk-mdp3-vpu.h"
#define MDP_MODULE_NAME "mtk-mdp3"
enum mdp_buffer_usage {
MDP_BUFFER_USAGE_HW_READ,
MDP_BUFFER_USAGE_MDP,
MDP_BUFFER_USAGE_MDP2,
MDP_BUFFER_USAGE_ISP,
MDP_BUFFER_USAGE_WPE,
};
struct mdp_dev {
struct platform_device *pdev;
struct mdp_comp mmsys;
struct mdp_comp mm_mutex;
struct mdp_comp *comp[MDP_MAX_COMP_COUNT];
s32 event[MDP_MAX_EVENT_COUNT];
struct workqueue_struct *job_wq;
struct workqueue_struct *clock_wq;
struct mdp_vpu_dev vpu;
struct mtk_scp *scp;
struct rproc *rproc_handle;
/* synchronization protect for accessing vpu working buffer info */
struct mutex vpu_lock;
s32 vpu_count;
u32 id_count;
struct ida mdp_ida;
struct cmdq_client *cmdq_clt;
wait_queue_head_t callback_wq;
struct v4l2_device v4l2_dev;
struct video_device *m2m_vdev;
struct v4l2_m2m_dev *m2m_dev;
/* synchronization protect for m2m device operation */
struct mutex m2m_lock;
atomic_t suspended;
atomic_t job_count;
};
int mdp_vpu_get_locked(struct mdp_dev *mdp);
void mdp_vpu_put_locked(struct mdp_dev *mdp);
int mdp_vpu_register(struct mdp_dev *mdp);
void mdp_vpu_unregister(struct mdp_dev *mdp);
extern int mtk_mdp_debug;
#define DEBUG
#if defined(DEBUG)
#define mdp_dbg(level, fmt, ...)\
do {\
if (mtk_mdp_debug >= (level))\
pr_info("[MTK-MDP3] %d %s:%d: " fmt,\
level, __func__, __LINE__, ##__VA_ARGS__);\
} while (0)
#define mdp_err(fmt, ...)\
pr_err("[MTK-MDP3][ERR] %s:%d: " fmt, __func__, __LINE__,\
##__VA_ARGS__)
#else
#define mdp_dbg(level, fmt, ...) do {} while (0)
#define mdp_err(fmt, ...) do {} while (0)
#endif
#define mdp_dbg_enter() mdp_dbg(3, "+")
#define mdp_dbg_leave() mdp_dbg(3, "-")
#endif /* __MTK_MDP3_CORE_H__ */