1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Copyright (c) 2021 Rockchip Electronics Co., Ltd
4*4882a593Smuzhiyun */
5*4882a593Smuzhiyun #ifndef __SOC_ROCKCHIP_ROCKIT_H
6*4882a593Smuzhiyun #define __SOC_ROCKCHIP_ROCKIT_H
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun #include <linux/dma-buf.h>
9*4882a593Smuzhiyun #include <linux/rk-isp2-config.h>
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #define ROCKIT_BUF_NUM_MAX 5
12*4882a593Smuzhiyun #define ROCKIT_ISP_NUM_MAX 3
13*4882a593Smuzhiyun #define ROCKIT_STREAM_NUM_MAX 12
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun #define ROCKIT_VICAP_NUM_MAX 6
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun enum function_cmd {
18*4882a593Smuzhiyun ROCKIT_BUF_QUE,
19*4882a593Smuzhiyun ROCKIT_MPIBUF_DONE
20*4882a593Smuzhiyun };
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun struct rkisp_stream_cfg {
23*4882a593Smuzhiyun struct rkisp_rockit_buffer *rkisp_buff[ROCKIT_BUF_NUM_MAX];
24*4882a593Smuzhiyun int buff_id[ROCKIT_BUF_NUM_MAX];
25*4882a593Smuzhiyun void *node;
26*4882a593Smuzhiyun int fps_cnt;
27*4882a593Smuzhiyun int dst_fps;
28*4882a593Smuzhiyun int cur_fps;
29*4882a593Smuzhiyun u64 old_time;
30*4882a593Smuzhiyun bool is_discard;
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun struct ISP_VIDEO_FRAMES {
34*4882a593Smuzhiyun u32 pMbBlk;
35*4882a593Smuzhiyun u32 u32Width;
36*4882a593Smuzhiyun u32 u32Height;
37*4882a593Smuzhiyun u32 u32VirWidth;
38*4882a593Smuzhiyun u32 u32VirHeight;
39*4882a593Smuzhiyun u32 enField;
40*4882a593Smuzhiyun u32 enPixelFormat;
41*4882a593Smuzhiyun u32 enVideoFormat;
42*4882a593Smuzhiyun u32 enCompressMode;
43*4882a593Smuzhiyun u32 enDynamicRange;
44*4882a593Smuzhiyun u32 enColorGamut;
45*4882a593Smuzhiyun u32 u32TimeRef;
46*4882a593Smuzhiyun u64 u64PTS;
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun u64 u64PrivateData;
49*4882a593Smuzhiyun u32 u32FrameFlag; /* FRAME_FLAG_E, can be OR operation. */
50*4882a593Smuzhiyun };
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun struct rkisp_dev_cfg {
53*4882a593Smuzhiyun char *isp_name;
54*4882a593Smuzhiyun void *isp_dev;
55*4882a593Smuzhiyun struct rkisp_stream_cfg rkisp_stream_cfg[ROCKIT_STREAM_NUM_MAX];
56*4882a593Smuzhiyun };
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun struct rockit_cfg {
59*4882a593Smuzhiyun bool is_alloc;
60*4882a593Smuzhiyun bool is_empty;
61*4882a593Smuzhiyun bool is_qbuf;
62*4882a593Smuzhiyun bool is_color;
63*4882a593Smuzhiyun char *current_name;
64*4882a593Smuzhiyun dma_addr_t dma_addr;
65*4882a593Smuzhiyun int *buff_id;
66*4882a593Smuzhiyun int mpi_id;
67*4882a593Smuzhiyun int isp_num;
68*4882a593Smuzhiyun u32 nick_id;
69*4882a593Smuzhiyun u32 event;
70*4882a593Smuzhiyun void *node;
71*4882a593Smuzhiyun void *mpibuf;
72*4882a593Smuzhiyun void *vvi_dev[ROCKIT_ISP_NUM_MAX];
73*4882a593Smuzhiyun struct dma_buf *buf;
74*4882a593Smuzhiyun struct ISP_VIDEO_FRAMES frame;
75*4882a593Smuzhiyun struct rkisp_dev_cfg rkisp_dev_cfg[ROCKIT_ISP_NUM_MAX];
76*4882a593Smuzhiyun int (*rkisp_rockit_mpibuf_done)(struct rockit_cfg *rockit_isp_cfg);
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun struct rkcif_stream_cfg {
80*4882a593Smuzhiyun struct rkcif_rockit_buffer *rkcif_buff[ROCKIT_BUF_NUM_MAX];
81*4882a593Smuzhiyun int buff_id[ROCKIT_BUF_NUM_MAX];
82*4882a593Smuzhiyun void *node;
83*4882a593Smuzhiyun int fps_cnt;
84*4882a593Smuzhiyun int dst_fps;
85*4882a593Smuzhiyun int cur_fps;
86*4882a593Smuzhiyun u64 old_time;
87*4882a593Smuzhiyun bool is_discard;
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun struct rkcif_dev_cfg {
91*4882a593Smuzhiyun const char *cif_name;
92*4882a593Smuzhiyun void *cif_dev;
93*4882a593Smuzhiyun struct rkcif_stream_cfg rkcif_stream_cfg[ROCKIT_STREAM_NUM_MAX];
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun struct rockit_rkcif_cfg {
97*4882a593Smuzhiyun bool is_alloc;
98*4882a593Smuzhiyun bool is_empty;
99*4882a593Smuzhiyun bool is_qbuf;
100*4882a593Smuzhiyun const char *cur_name;
101*4882a593Smuzhiyun int *buff_id;
102*4882a593Smuzhiyun int mpi_id;
103*4882a593Smuzhiyun u32 nick_id;
104*4882a593Smuzhiyun u32 event;
105*4882a593Smuzhiyun int cif_num;
106*4882a593Smuzhiyun void *node;
107*4882a593Smuzhiyun void *mpibuf;
108*4882a593Smuzhiyun void *vvi_dev[ROCKIT_VICAP_NUM_MAX];
109*4882a593Smuzhiyun struct dma_buf *buf;
110*4882a593Smuzhiyun struct ISP_VIDEO_FRAMES frame;
111*4882a593Smuzhiyun struct rkcif_dev_cfg rkcif_dev_cfg[ROCKIT_VICAP_NUM_MAX];
112*4882a593Smuzhiyun int (*rkcif_rockit_mpibuf_done)(struct rockit_rkcif_cfg *rockit_cif_cfg);
113*4882a593Smuzhiyun };
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V32)
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun void *rkisp_rockit_function_register(void *function, int cmd);
118*4882a593Smuzhiyun int rkisp_rockit_get_ispdev(char **name);
119*4882a593Smuzhiyun int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg);
120*4882a593Smuzhiyun int rkisp_rockit_pause_stream(struct rockit_cfg *input_rockit_cfg);
121*4882a593Smuzhiyun int rkisp_rockit_resume_stream(struct rockit_cfg *input_rockit_cfg);
122*4882a593Smuzhiyun int rkisp_rockit_config_stream(struct rockit_cfg *input_rockit_cfg,
123*4882a593Smuzhiyun int width, int height, int wrap_line);
124*4882a593Smuzhiyun int rkisp_rockit_get_tb_stream_info(struct rockit_cfg *input_rockit_cfg,
125*4882a593Smuzhiyun struct rkisp_tb_stream_info *info);
126*4882a593Smuzhiyun int rkisp_rockit_free_tb_stream_buf(struct rockit_cfg *input_rockit_cfg);
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun void *rkcif_rockit_function_register(void *function, int cmd);
129*4882a593Smuzhiyun int rkcif_rockit_get_cifdev(char **name);
130*4882a593Smuzhiyun int rkcif_rockit_buf_queue(struct rockit_rkcif_cfg *input_rockit_cfg);
131*4882a593Smuzhiyun int rkcif_rockit_config_stream(struct rockit_rkcif_cfg *input_rockit_cfg,
132*4882a593Smuzhiyun int width, int height, int v4l2_fmt);
133*4882a593Smuzhiyun int rkcif_rockit_resume_stream(struct rockit_rkcif_cfg *input_rockit_cfg);
134*4882a593Smuzhiyun int rkcif_rockit_pause_stream(struct rockit_rkcif_cfg *input_rockit_cfg);
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun #else
137*4882a593Smuzhiyun
rkisp_rockit_function_register(void * function,int cmd)138*4882a593Smuzhiyun static inline void *rkisp_rockit_function_register(void *function, int cmd) { return NULL; }
rkisp_rockit_get_ispdev(char ** name)139*4882a593Smuzhiyun static inline int rkisp_rockit_get_ispdev(char **name) { return -EINVAL; }
rkisp_rockit_buf_queue(struct rockit_cfg * input_rockit_cfg)140*4882a593Smuzhiyun static inline int rkisp_rockit_buf_queue(struct rockit_cfg *input_rockit_cfg)
141*4882a593Smuzhiyun {
142*4882a593Smuzhiyun return -EINVAL;
143*4882a593Smuzhiyun }
rkisp_rockit_pause_stream(struct rockit_cfg * input_rockit_cfg)144*4882a593Smuzhiyun static inline int rkisp_rockit_pause_stream(struct rockit_cfg *input_rockit_cfg)
145*4882a593Smuzhiyun {
146*4882a593Smuzhiyun return -EINVAL;
147*4882a593Smuzhiyun }
rkisp_rockit_resume_stream(struct rockit_cfg * input_rockit_cfg)148*4882a593Smuzhiyun static inline int rkisp_rockit_resume_stream(struct rockit_cfg *input_rockit_cfg)
149*4882a593Smuzhiyun {
150*4882a593Smuzhiyun return -EINVAL;
151*4882a593Smuzhiyun }
rkisp_rockit_config_stream(struct rockit_cfg * input_rockit_cfg,int width,int height,int wrap_line)152*4882a593Smuzhiyun static inline int rkisp_rockit_config_stream(struct rockit_cfg *input_rockit_cfg,
153*4882a593Smuzhiyun int width, int height, int wrap_line)
154*4882a593Smuzhiyun {
155*4882a593Smuzhiyun return -EINVAL;
156*4882a593Smuzhiyun }
157*4882a593Smuzhiyun
rkisp_rockit_get_tb_stream_info(struct rockit_cfg * input_rockit_cfg,struct rkisp_tb_stream_info * info)158*4882a593Smuzhiyun static inline int rkisp_rockit_get_tb_stream_info(struct rockit_cfg *input_rockit_cfg,
159*4882a593Smuzhiyun struct rkisp_tb_stream_info *info)
160*4882a593Smuzhiyun {
161*4882a593Smuzhiyun return -EINVAL;
162*4882a593Smuzhiyun }
163*4882a593Smuzhiyun
rkisp_rockit_free_tb_stream_buf(struct rockit_cfg * input_rockit_cfg)164*4882a593Smuzhiyun static inline int rkisp_rockit_free_tb_stream_buf(struct rockit_cfg *input_rockit_cfg)
165*4882a593Smuzhiyun {
166*4882a593Smuzhiyun return -EINVAL;
167*4882a593Smuzhiyun }
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun #endif
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun #endif
172