138 lines
2.8 KiB
C
138 lines
2.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. */
|
|
|
|
#ifndef _RKISP_ISPP_H
|
|
#define _RKISP_ISPP_H
|
|
|
|
#include <linux/platform_device.h>
|
|
#include <media/v4l2-subdev.h>
|
|
#include <media/videobuf2-v4l2.h>
|
|
#include <linux/rk-isp1-config.h>
|
|
#include <linux/rk-ispp-config.h>
|
|
|
|
#define RKISP_BUF_MAX 2
|
|
#define RKISPP_BUF_MAX 2
|
|
#define RKISP_ISPP_BUF_MAX (RKISP_BUF_MAX + RKISPP_BUF_MAX + (2 * (DEV_MAX - 1)))
|
|
|
|
#define RKISP_ISPP_REGBUF_NUM RKISPP_BUF_POOL_MAX
|
|
#define RKISP_ISP_SW_REG_SIZE 0x6000
|
|
#define RKISP_ISP_SW_MAX_SIZE (RKISP_ISP_SW_REG_SIZE * 2)
|
|
#define RKISP_ISPP_SW_REG_SIZE 0x0d00
|
|
#define RKISP_ISPP_SW_MAX_SIZE (RKISP_ISPP_SW_REG_SIZE * 2)
|
|
|
|
#define RKISP_ISPP_CMD_SET_MODE \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 0, struct rkisp_ispp_mode)
|
|
#define RKISP_ISPP_CMD_SET_FMT \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 1, struct max_input)
|
|
#define RKISP_ISPP_CMD_REQUEST_REGBUF \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 2, struct rkisp_ispp_reg *)
|
|
#define RKISP_ISPP_CMD_GET_REG_WITHSTREAM \
|
|
_IOW('V', BASE_VIDIOC_PRIVATE + 3, bool)
|
|
|
|
enum frame_end_state {
|
|
FRAME_INIT,
|
|
FRAME_IRQ,
|
|
FRAME_WORK,
|
|
};
|
|
|
|
enum rkisp_ispp_dev {
|
|
DEV_ID0 = 0,
|
|
DEV_ID1,
|
|
DEV_ID2,
|
|
DEV_ID3,
|
|
DEV_MAX,
|
|
};
|
|
|
|
enum rkisp_ispp_sw_reg {
|
|
SW_REG_CACHE = 0xffffffff,
|
|
SW_REG_CACHE_SYNC = 0xeeeeeeee,
|
|
};
|
|
|
|
enum rkisp_ispp_buf_group {
|
|
GROUP_BUF_PIC = 0,
|
|
GROUP_BUF_GAIN,
|
|
GROUP_BUF_MAX,
|
|
};
|
|
|
|
enum rkisp_ispp_work_mode {
|
|
ISP_ISPP_FBC = BIT(0),
|
|
ISP_ISPP_422 = BIT(1),
|
|
ISP_ISPP_QUICK = BIT(2),
|
|
ISP_ISPP_INIT_FAIL = BIT(7),
|
|
};
|
|
|
|
enum rkisp_ispp_reg_stat {
|
|
ISP_ISPP_FREE = 0,
|
|
ISP_ISPP_INUSE,
|
|
};
|
|
|
|
struct frame_debug_info {
|
|
u64 timestamp;
|
|
u32 interval;
|
|
u32 delay;
|
|
u32 id;
|
|
u32 frameloss;
|
|
};
|
|
|
|
struct max_input {
|
|
u32 w;
|
|
u32 h;
|
|
u32 fps;
|
|
bool is_fix;
|
|
};
|
|
|
|
struct rkisp_ispp_mode {
|
|
u8 work_mode;
|
|
u8 buf_num;
|
|
};
|
|
|
|
struct rkisp_ispp_reg {
|
|
enum rkisp_ispp_reg_stat stat;
|
|
u32 dev_id;
|
|
u32 frame_id;
|
|
u32 reg_size;
|
|
s32 isp_offset[ISP2X_ID_MAX];
|
|
s32 ispp_offset[ISPP_ID_MAX];
|
|
u32 isp_size[ISP2X_ID_MAX];
|
|
u32 isp_stats_size[ISP2X_ID_MAX];
|
|
u32 ispp_size[ISPP_ID_MAX];
|
|
u64 sof_timestamp;
|
|
u64 frame_timestamp;
|
|
struct sensor_exposure_cfg exposure;
|
|
u8 reg[RKISP_ISP_SW_REG_SIZE + RKISP_ISPP_SW_REG_SIZE];
|
|
};
|
|
|
|
struct rkisp_ispp_buf {
|
|
struct list_head list;
|
|
struct dma_buf *dbuf[GROUP_BUF_MAX];
|
|
int dfd[GROUP_BUF_MAX];
|
|
u32 didx[GROUP_BUF_MAX];
|
|
/* timestamp in ns */
|
|
u64 frame_timestamp;
|
|
u32 frame_id;
|
|
u32 index;
|
|
bool is_isp;
|
|
bool is_move_judge;
|
|
u32 buf_idx;
|
|
u32 gain_dmaidx;
|
|
u32 mfbc_dmaidx;
|
|
u32 gain_size;
|
|
u32 mfbc_size;
|
|
void *priv;
|
|
};
|
|
|
|
int __init rkispp_hw_drv_init(void);
|
|
|
|
#if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V20) || IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V30)
|
|
void rkisp_get_bridge_sd(struct platform_device *dev,
|
|
struct v4l2_subdev **sd);
|
|
#else
|
|
static inline void rkisp_get_bridge_sd(struct platform_device *dev,
|
|
struct v4l2_subdev **sd)
|
|
{
|
|
*sd = NULL;
|
|
}
|
|
#endif
|
|
|
|
#endif
|