// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2016 MediaTek Inc.
* Author: PC Chen <pc.chen@mediatek.com>
* Tiffany Lin <tiffany.lin@mediatek.com>
*/
#include <media/v4l2-event.h>
#include <media/v4l2-mem2mem.h>
#include <media/videobuf2-dma-contig.h>
#include <linux/pm_runtime.h>
#include "mtk_vcodec_enc.h"
#include "venc_drv_if.h"
#define MTK_VENC_MIN_W 160U
#define MTK_VENC_MIN_H 128U
#define MTK_VENC_HD_MAX_W 1920U
#define MTK_VENC_HD_MAX_H 1088U
#define MTK_VENC_4K_MAX_W 3840U
#define MTK_VENC_4K_MAX_H 2176U
#define DFT_CFG_WIDTH MTK_VENC_MIN_W
#define DFT_CFG_HEIGHT MTK_VENC_MIN_H
#define MTK_MAX_CTRLS_HINT 20
#define MTK_DEFAULT_FRAMERATE_NUM 1001
#define MTK_DEFAULT_FRAMERATE_DENOM 30000
#define MTK_VENC_4K_CAPABILITY_ENABLE BIT(0)
static void mtk_venc_worker(struct work_struct *work);
static const struct v4l2_frmsize_stepwise mtk_venc_hd_framesizes = {
MTK_VENC_MIN_W, MTK_VENC_HD_MAX_W, 16,
MTK_VENC_MIN_H, MTK_VENC_HD_MAX_H, 16,
};
static const struct v4l2_frmsize_stepwise mtk_venc_4k_framesizes = {
MTK_VENC_MIN_W, MTK_VENC_4K_MAX_W, 16,
MTK_VENC_MIN_H, MTK_VENC_4K_MAX_H, 16,
};
static int vidioc_venc_s_ctrl(struct v4l2_ctrl *ctrl)
{
struct mtk_vcodec_enc_ctx *ctx = ctrl_to_enc_ctx(ctrl);
struct mtk_enc_params *p = &ctx->enc_params;