android13/kernel-5.10/include/soc/rockchip/rockchip_rockit.h

181 lines
4.4 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2021 Rockchip Electronics Co., Ltd
*/
#ifndef __SOC_ROCKCHIP_ROCKIT_H
#define __SOC_ROCKCHIP_ROCKIT_H
#include <linux/dma-buf.h>
#include <linux/rk-isp2-config.h>
#define ROCKIT_BUF_NUM_MAX 5
#define ROCKIT_ISP_NUM_MAX 3
#define ROCKIT_STREAM_NUM_MAX 12
#define ROCKIT_VICAP_NUM_MAX 6
enum {
RKISP_NORMAL_ONLINE,
RKISP_NORMAL_OFFLINE,
RKISP_FAST_ONLINE,
RKISP_FAST_OFFLINE,
};
enum function_cmd {
ROCKIT_BUF_QUE,
ROCKIT_MPIBUF_DONE
};
struct rkisp_stream_cfg {
struct rkisp_rockit_buffer *rkisp_buff[ROCKIT_BUF_NUM_MAX];
int buff_id[ROCKIT_BUF_NUM_MAX];
void *node;
int fps_cnt;
int dst_fps;
int cur_fps;
u64 old_time;
bool is_discard;
};
struct ISP_VIDEO_FRAMES {
u32 pMbBlk;
u32 u32Width;
u32 u32Height;
u32 u32VirWidth;
u32 u32VirHeight;
u32 enField;
u32 enPixelFormat;
u32 enVideoFormat;
u32 enCompressMode;
u32 enDynamicRange;
u32 enColorGamut;
u32 u32TimeRef;
u64 u64PTS;
u64 u64PrivateData;
u32 u32FrameFlag; /* FRAME_FLAG_E, can be OR operation. */
};
struct rkisp_dev_cfg {
char *isp_name;
void *isp_dev;
struct rkisp_stream_cfg rkisp_stream_cfg[ROCKIT_STREAM_NUM_MAX];
};
struct rockit_cfg {
bool is_alloc;
bool is_empty;
bool is_qbuf;
bool is_color;
char *current_name;
dma_addr_t dma_addr;
int *buff_id;
int mpi_id;
int isp_num;
u32 nick_id;
u32 event;
void *node;
void *mpibuf;
void *vvi_dev[ROCKIT_ISP_NUM_MAX];
struct dma_buf *buf;
struct ISP_VIDEO_FRAMES frame;
struct rkisp_dev_cfg rkisp_dev_cfg[ROCKIT_ISP_NUM_MAX];
int (*rkisp_rockit_mpibuf_done)(struct rockit_cfg *rockit_isp_cfg);
};
struct rkcif_stream_cfg {
struct rkcif_rockit_buffer *rkcif_buff[ROCKIT_BUF_NUM_MAX];
int buff_id[ROCKIT_BUF_NUM_MAX];
void *node;
int fps_cnt;
int dst_fps;
int cur_fps;
u64 old_time;
bool is_discard;
};
struct rkcif_dev_cfg {
const char *cif_name;
void *cif_dev;
struct rkcif_stream_cfg rkcif_stream_cfg[ROCKIT_STREAM_NUM_MAX];
};
struct rockit_rkcif_cfg {
bool is_alloc;
bool is_empty;
bool is_qbuf;
const char *cur_name;
int *buff_id;
int mpi_id;
u32 nick_id;
u32 event;
int cif_num;
void *node;
void *mpibuf;
void *vvi_dev[ROCKIT_VICAP_NUM_MAX];
struct dma_buf *buf;
struct ISP_VIDEO_FRAMES frame;
struct rkcif_dev_cfg rkcif_dev_cfg[ROCKIT_VICAP_NUM_MAX];
int (*rkcif_rockit_mpibuf_done)(struct rockit_rkcif_cfg *rockit_cif_cfg);
};
#if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V32)
void *rkisp_rockit_function_register(void *function, int cmd);
int rkisp_rockit_get_ispdev(char **name);
int rkisp_rockit_get_isp_mode(const char *name);
int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg);
int rkisp_rockit_pause_stream(struct rockit_cfg *input_rockit_cfg);
int rkisp_rockit_resume_stream(struct rockit_cfg *input_rockit_cfg);
int rkisp_rockit_config_stream(struct rockit_cfg *input_rockit_cfg,
int width, int height, int wrap_line);
int rkisp_rockit_get_tb_stream_info(struct rockit_cfg *input_rockit_cfg,
struct rkisp_tb_stream_info *info);
int rkisp_rockit_free_tb_stream_buf(struct rockit_cfg *input_rockit_cfg);
void *rkcif_rockit_function_register(void *function, int cmd);
int rkcif_rockit_get_cifdev(char **name);
int rkcif_rockit_buf_queue(struct rockit_rkcif_cfg *input_rockit_cfg);
int rkcif_rockit_config_stream(struct rockit_rkcif_cfg *input_rockit_cfg,
int width, int height, int v4l2_fmt);
int rkcif_rockit_resume_stream(struct rockit_rkcif_cfg *input_rockit_cfg);
int rkcif_rockit_pause_stream(struct rockit_rkcif_cfg *input_rockit_cfg);
#else
static inline void *rkisp_rockit_function_register(void *function, int cmd) { return NULL; }
static inline int rkisp_rockit_get_ispdev(char **name) { return -EINVAL; }
static inline int rkisp_rockit_get_isp_mode(const char *name) { return -EINVAL; }
static inline int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg)
{
return -EINVAL;
}
static inline int rkisp_rockit_pause_stream(struct rockit_cfg *input_rockit_cfg)
{
return -EINVAL;
}
static inline int rkisp_rockit_resume_stream(struct rockit_cfg *input_rockit_cfg)
{
return -EINVAL;
}
static inline int rkisp_rockit_config_stream(struct rockit_cfg *input_rockit_cfg,
int width, int height, int wrap_line)
{
return -EINVAL;
}
static inline int rkisp_rockit_get_tb_stream_info(struct rockit_cfg *input_rockit_cfg,
struct rkisp_tb_stream_info *info)
{
return -EINVAL;
}
static inline int rkisp_rockit_free_tb_stream_buf(struct rockit_cfg *input_rockit_cfg)
{
return -EINVAL;
}
#endif
#endif