1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Clovertrail PNW Camera Imaging ISP subsystem.
4  *
5  * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
6  */
7 
8 #ifndef __ATOMISP_COMPAT_CSS20_H__
9 #define __ATOMISP_COMPAT_CSS20_H__
10 
11 #include <media/v4l2-mediabus.h>
12 
13 #include "ia_css.h"
14 #include "ia_css_types.h"
15 #include "ia_css_acc_types.h"
16 #include "sh_css_legacy.h"
17 
18 #define ATOMISP_CSS2_PIPE_MAX	2
19 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES     3
20 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES_LOCK_EN     4
21 #define ATOMISP_CSS2_NUM_DVS_FRAME_DELAY     2
22 
23 #define CSS_MIPI_FRAME_BUFFER_SIZE_1	0x60000
24 #define CSS_MIPI_FRAME_BUFFER_SIZE_2	0x80000
25 
26 struct atomisp_device;
27 struct atomisp_sub_device;
28 
29 #define MAX_STREAMS_PER_CHANNEL	2
30 
31 /*
32  * These are used to indicate the css stream state, corresponding
33  * stream handling can be done via judging the different state.
34  */
35 enum atomisp_css_stream_state {
36 	CSS_STREAM_UNINIT,
37 	CSS_STREAM_CREATED,
38 	CSS_STREAM_STARTED,
39 	CSS_STREAM_STOPPED,
40 };
41 
42 /*
43  *  Sensor of external ISP can send multiple steams with different mipi data
44  * type in the same virtual channel. This information needs to come from the
45  * sensor or external ISP
46  */
47 struct atomisp_css_isys_config_info {
48 	unsigned int input_format;
49 	unsigned int width;
50 	unsigned int height;
51 };
52 
53 struct atomisp_stream_env {
54 	struct ia_css_stream *stream;
55 	struct ia_css_stream_config stream_config;
56 	struct ia_css_stream_info stream_info;
57 	struct ia_css_pipe *pipes[IA_CSS_PIPE_ID_NUM];
58 	struct ia_css_pipe *multi_pipes[IA_CSS_PIPE_ID_NUM];
59 	struct ia_css_pipe_config pipe_configs[IA_CSS_PIPE_ID_NUM];
60 	struct ia_css_pipe_extra_config pipe_extra_configs[IA_CSS_PIPE_ID_NUM];
61 	bool update_pipe[IA_CSS_PIPE_ID_NUM];
62 	enum atomisp_css_stream_state stream_state;
63 	struct ia_css_stream *acc_stream;
64 	enum atomisp_css_stream_state acc_stream_state;
65 	struct ia_css_stream_config acc_stream_config;
66 	unsigned int ch_id; /* virtual channel ID */
67 	unsigned int isys_configs;
68 	struct atomisp_css_isys_config_info isys_info[MAX_STREAMS_PER_CHANNEL];
69 };
70 
71 struct atomisp_css_env {
72 	struct ia_css_env isp_css_env;
73 	struct ia_css_fw isp_css_fw;
74 };
75 
76 struct atomisp_s3a_buf {
77 	struct ia_css_isp_3a_statistics *s3a_data;
78 	struct ia_css_isp_3a_statistics_map *s3a_map;
79 	struct list_head list;
80 };
81 
82 struct atomisp_dis_buf {
83 	struct ia_css_isp_dvs_statistics *dis_data;
84 	struct ia_css_isp_dvs_statistics_map *dvs_map;
85 	struct list_head list;
86 };
87 
88 struct atomisp_css_buffer {
89 	struct ia_css_buffer css_buffer;
90 };
91 
92 struct atomisp_css_event {
93 	enum ia_css_pipe_id pipe;
94 	struct ia_css_event event;
95 };
96 
97 void atomisp_css_set_macc_config(struct atomisp_sub_device *asd,
98 				 struct ia_css_macc_config *macc_config);
99 
100 void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd,
101 				struct ia_css_ecd_config *ecd_config);
102 
103 void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd,
104 				struct ia_css_ynr_config *ynr_config);
105 
106 void atomisp_css_set_fc_config(struct atomisp_sub_device *asd,
107 			       struct ia_css_fc_config *fc_config);
108 
109 void atomisp_css_set_aa_config(struct atomisp_sub_device *asd,
110 			       struct ia_css_aa_config *aa_config);
111 
112 void atomisp_css_set_baa_config(struct atomisp_sub_device *asd,
113 				struct ia_css_aa_config *baa_config);
114 
115 void atomisp_css_set_anr_config(struct atomisp_sub_device *asd,
116 				struct ia_css_anr_config *anr_config);
117 
118 void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd,
119 				struct ia_css_xnr_config *xnr_config);
120 
121 void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd,
122 				struct ia_css_cnr_config *cnr_config);
123 
124 void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd,
125 				struct ia_css_ctc_config *ctc_config);
126 
127 void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd,
128 				       struct ia_css_cc_config *yuv2rgb_cc_config);
129 
130 void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd,
131 				       struct ia_css_cc_config *rgb2yuv_cc_config);
132 
133 void atomisp_css_set_anr_thres(struct atomisp_sub_device *asd,
134 			       struct ia_css_anr_thres *anr_thres);
135 
136 int atomisp_css_load_firmware(struct atomisp_device *isp);
137 
138 void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd,
139 			       struct ia_css_dvs_6axis_config *dvs_6axis);
140 
141 int atomisp_css_debug_dump_isp_binary(void);
142 
143 int atomisp_css_dump_sp_raw_copy_linecount(bool reduced);
144 
145 int atomisp_css_dump_blob_infor(struct atomisp_device *isp);
146 
147 void atomisp_css_set_isp_config_id(struct atomisp_sub_device *asd,
148 				   uint32_t isp_config_id);
149 
150 void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device *asd,
151 	struct ia_css_frame *output_frame);
152 
153 int atomisp_get_css_dbgfunc(void);
154 
155 int atomisp_set_css_dbgfunc(struct atomisp_device *isp, int opt);
156 struct ia_css_dvs_grid_info *atomisp_css_get_dvs_grid_info(
157     struct ia_css_grid_info *grid_info);
158 #endif
159