GNU Linux-libre 4.14.251-gnu1
[releases.git] / drivers / staging / media / atomisp / pci / atomisp2 / atomisp_compat_css20.h
1 /*
2  * Support for Clovertrail PNW Camera Imaging ISP subsystem.
3  *
4  * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License version
8  * 2 as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18  * 02110-1301, USA.
19  *
20  */
21
22 #ifndef __ATOMISP_COMPAT_CSS20_H__
23 #define __ATOMISP_COMPAT_CSS20_H__
24
25 #include <media/v4l2-mediabus.h>
26
27 #include "ia_css.h"
28 #include "ia_css_types.h"
29 #include "ia_css_acc_types.h"
30 #include "sh_css_legacy.h"
31
32 #define ATOMISP_CSS2_PIPE_MAX   2
33 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES     3
34 #define ATOMISP_CSS2_NUM_OFFLINE_INIT_CONTINUOUS_FRAMES_LOCK_EN     4
35 #define ATOMISP_CSS2_NUM_DVS_FRAME_DELAY     2
36
37 #define atomisp_css_pipe_id ia_css_pipe_id
38 #define atomisp_css_pipeline    ia_css_pipe
39 #define atomisp_css_buffer_type ia_css_buffer_type
40 #define atomisp_css_dis_data ia_css_isp_dvs_statistics
41 #define atomisp_css_irq_info  ia_css_irq_info
42 #define atomisp_css_isp_config ia_css_isp_config
43 #define atomisp_css_bayer_order ia_css_bayer_order
44 #define atomisp_css_stream_format ia_css_stream_format
45 #define atomisp_css_capture_mode ia_css_capture_mode
46 #define atomisp_css_input_mode ia_css_input_mode
47 #define atomisp_css_frame ia_css_frame
48 #define atomisp_css_frame_format ia_css_frame_format
49 #define atomisp_css_frame_info ia_css_frame_info
50 #define atomisp_css_dp_config   ia_css_dp_config
51 #define atomisp_css_wb_config   ia_css_wb_config
52 #define atomisp_css_cc_config   ia_css_cc_config
53 #define atomisp_css_nr_config   ia_css_nr_config
54 #define atomisp_css_ee_config   ia_css_ee_config
55 #define atomisp_css_ob_config   ia_css_ob_config
56 #define atomisp_css_de_config   ia_css_de_config
57 #define atomisp_css_dz_config   ia_css_dz_config
58 #define atomisp_css_ce_config   ia_css_ce_config
59 #define atomisp_css_gc_config   ia_css_gc_config
60 #define atomisp_css_tnr_config  ia_css_tnr_config
61 #define atomisp_css_cnr_config  ia_css_cnr_config
62 #define atomisp_css_ctc_config  ia_css_ctc_config
63 #define atomisp_css_3a_config   ia_css_3a_config
64 #define atomisp_css_ecd_config  ia_css_ecd_config
65 #define atomisp_css_ynr_config  ia_css_ynr_config
66 #define atomisp_css_fc_config   ia_css_fc_config
67 #define atomisp_css_aa_config   ia_css_aa_config
68 #define atomisp_css_baa_config  ia_css_aa_config
69 #define atomisp_css_anr_config  ia_css_anr_config
70 #define atomisp_css_xnr_config  ia_css_xnr_config
71 #define atomisp_css_macc_config ia_css_macc_config
72 #define atomisp_css_gamma_table ia_css_gamma_table
73 #define atomisp_css_ctc_table   ia_css_ctc_table
74 #define atomisp_css_macc_table  ia_css_macc_table
75 #define atomisp_css_xnr_table   ia_css_xnr_table
76 #define atomisp_css_rgb_gamma_table     ia_css_rgb_gamma_table
77 #define atomisp_css_anr_thres   ia_css_anr_thres
78 #define atomisp_css_dvs_6axis   ia_css_dvs_6axis_config
79 #define atomisp_css_grid_info   ia_css_grid_info
80 #define atomisp_css_3a_grid_info        ia_css_3a_grid_info
81 #define atomisp_css_dvs_grid_info       ia_css_dvs_grid_info
82 #define atomisp_css_shading_table       ia_css_shading_table
83 #define atomisp_css_morph_table ia_css_morph_table
84 #define atomisp_css_dvs_6axis_config    ia_css_dvs_6axis_config
85 #define atomisp_css_fw_info     ia_css_fw_info
86 #define atomisp_css_formats_config      ia_css_formats_config
87
88 #define CSS_PIPE_ID_PREVIEW     IA_CSS_PIPE_ID_PREVIEW
89 #define CSS_PIPE_ID_COPY        IA_CSS_PIPE_ID_COPY
90 #define CSS_PIPE_ID_VIDEO       IA_CSS_PIPE_ID_VIDEO
91 #define CSS_PIPE_ID_CAPTURE     IA_CSS_PIPE_ID_CAPTURE
92 #define CSS_PIPE_ID_ACC         IA_CSS_PIPE_ID_ACC
93 #define CSS_PIPE_ID_YUVPP       IA_CSS_PIPE_ID_YUVPP
94 #define CSS_PIPE_ID_NUM         IA_CSS_PIPE_ID_NUM
95
96 #define CSS_INPUT_MODE_SENSOR   IA_CSS_INPUT_MODE_BUFFERED_SENSOR
97 #define CSS_INPUT_MODE_FIFO     IA_CSS_INPUT_MODE_FIFO
98 #define CSS_INPUT_MODE_TPG      IA_CSS_INPUT_MODE_TPG
99 #define CSS_INPUT_MODE_PRBS     IA_CSS_INPUT_MODE_PRBS
100 #define CSS_INPUT_MODE_MEMORY   IA_CSS_INPUT_MODE_MEMORY
101
102 #define CSS_IRQ_INFO_CSS_RECEIVER_ERROR IA_CSS_IRQ_INFO_CSS_RECEIVER_ERROR
103 #define CSS_IRQ_INFO_EVENTS_READY       IA_CSS_IRQ_INFO_EVENTS_READY
104 #define CSS_IRQ_INFO_INPUT_SYSTEM_ERROR \
105         IA_CSS_IRQ_INFO_INPUT_SYSTEM_ERROR
106 #define CSS_IRQ_INFO_IF_ERROR   IA_CSS_IRQ_INFO_IF_ERROR
107
108 #define CSS_BUFFER_TYPE_NUM     IA_CSS_BUFFER_TYPE_NUM
109
110 #define CSS_FRAME_FLASH_STATE_NONE      IA_CSS_FRAME_FLASH_STATE_NONE
111 #define CSS_FRAME_FLASH_STATE_PARTIAL   IA_CSS_FRAME_FLASH_STATE_PARTIAL
112 #define CSS_FRAME_FLASH_STATE_FULL      IA_CSS_FRAME_FLASH_STATE_FULL
113
114 #define CSS_BAYER_ORDER_GRBG    IA_CSS_BAYER_ORDER_GRBG
115 #define CSS_BAYER_ORDER_RGGB    IA_CSS_BAYER_ORDER_RGGB
116 #define CSS_BAYER_ORDER_BGGR    IA_CSS_BAYER_ORDER_BGGR
117 #define CSS_BAYER_ORDER_GBRG    IA_CSS_BAYER_ORDER_GBRG
118
119 /*
120  * Hide IA_ naming difference in otherwise common CSS macros.
121  */
122 #define CSS_ID(val)     (IA_ ## val)
123 #define CSS_EVENT(val)  (IA_CSS_EVENT_TYPE_ ## val)
124 #define CSS_FORMAT(val) (IA_CSS_STREAM_FORMAT_ ## val)
125
126 #define CSS_EVENT_PORT_EOF      CSS_EVENT(PORT_EOF)
127 #define CSS_EVENT_FRAME_TAGGED  CSS_EVENT(FRAME_TAGGED)
128
129 #define CSS_MIPI_FRAME_BUFFER_SIZE_1    0x60000
130 #define CSS_MIPI_FRAME_BUFFER_SIZE_2    0x80000
131
132 struct atomisp_device;
133 struct atomisp_sub_device;
134
135 #define MAX_STREAMS_PER_CHANNEL 2
136
137 /*
138  * These are used to indicate the css stream state, corresponding
139  * stream handling can be done via judging the different state.
140  */
141 enum atomisp_css_stream_state {
142         CSS_STREAM_UNINIT,
143         CSS_STREAM_CREATED,
144         CSS_STREAM_STARTED,
145         CSS_STREAM_STOPPED,
146 };
147
148 /*
149  *  Sensor of external ISP can send multiple steams with different mipi data
150  * type in the same virtual channel. This information needs to come from the
151  * sensor or external ISP
152  */
153 struct atomisp_css_isys_config_info {
154         unsigned int input_format;
155         unsigned int width;
156         unsigned int height;
157 };
158
159 struct atomisp_stream_env {
160         struct ia_css_stream *stream;
161         struct ia_css_stream_config stream_config;
162         struct ia_css_stream_info stream_info;
163         struct ia_css_pipe *pipes[IA_CSS_PIPE_ID_NUM];
164         struct ia_css_pipe *multi_pipes[IA_CSS_PIPE_ID_NUM];
165         struct ia_css_pipe_config pipe_configs[IA_CSS_PIPE_ID_NUM];
166         struct ia_css_pipe_extra_config pipe_extra_configs[IA_CSS_PIPE_ID_NUM];
167         bool update_pipe[IA_CSS_PIPE_ID_NUM];
168         enum atomisp_css_stream_state stream_state;
169         struct ia_css_stream *acc_stream;
170         enum atomisp_css_stream_state acc_stream_state;
171         struct ia_css_stream_config acc_stream_config;
172         unsigned int ch_id; /* virtual channel ID */
173         unsigned int isys_configs;
174         struct atomisp_css_isys_config_info isys_info[MAX_STREAMS_PER_CHANNEL];
175 };
176
177 struct atomisp_css_env {
178         struct ia_css_env isp_css_env;
179         struct ia_css_fw isp_css_fw;
180 };
181
182 struct atomisp_s3a_buf {
183         struct ia_css_isp_3a_statistics *s3a_data;
184         struct ia_css_isp_3a_statistics_map *s3a_map;
185         struct list_head list;
186 };
187
188 struct atomisp_dis_buf {
189         struct atomisp_css_dis_data *dis_data;
190         struct ia_css_isp_dvs_statistics_map *dvs_map;
191         struct list_head list;
192 };
193
194 struct atomisp_css_buffer {
195         struct ia_css_buffer css_buffer;
196 };
197
198 struct atomisp_css_event {
199         enum atomisp_css_pipe_id pipe;
200         struct ia_css_event event;
201 };
202
203 void atomisp_css_set_macc_config(struct atomisp_sub_device *asd,
204                         struct atomisp_css_macc_config *macc_config);
205
206 void atomisp_css_set_ecd_config(struct atomisp_sub_device *asd,
207                         struct atomisp_css_ecd_config *ecd_config);
208
209 void atomisp_css_set_ynr_config(struct atomisp_sub_device *asd,
210                         struct atomisp_css_ynr_config *ynr_config);
211
212 void atomisp_css_set_fc_config(struct atomisp_sub_device *asd,
213                         struct atomisp_css_fc_config *fc_config);
214
215 void atomisp_css_set_aa_config(struct atomisp_sub_device *asd,
216                         struct atomisp_css_aa_config *aa_config);
217
218 void atomisp_css_set_baa_config(struct atomisp_sub_device *asd,
219                         struct atomisp_css_baa_config *baa_config);
220
221 void atomisp_css_set_anr_config(struct atomisp_sub_device *asd,
222                         struct atomisp_css_anr_config *anr_config);
223
224 void atomisp_css_set_xnr_config(struct atomisp_sub_device *asd,
225                         struct atomisp_css_xnr_config *xnr_config);
226
227 void atomisp_css_set_cnr_config(struct atomisp_sub_device *asd,
228                         struct atomisp_css_cnr_config *cnr_config);
229
230 void atomisp_css_set_ctc_config(struct atomisp_sub_device *asd,
231                         struct atomisp_css_ctc_config *ctc_config);
232
233 void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device *asd,
234                         struct atomisp_css_cc_config *yuv2rgb_cc_config);
235
236 void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device *asd,
237                         struct atomisp_css_cc_config *rgb2yuv_cc_config);
238
239 void atomisp_css_set_xnr_table(struct atomisp_sub_device *asd,
240                         struct atomisp_css_xnr_table *xnr_table);
241
242 void atomisp_css_set_r_gamma_table(struct atomisp_sub_device *asd,
243                         struct atomisp_css_rgb_gamma_table *r_gamma_table);
244
245 void atomisp_css_set_g_gamma_table(struct atomisp_sub_device *asd,
246                         struct atomisp_css_rgb_gamma_table *g_gamma_table);
247
248 void atomisp_css_set_b_gamma_table(struct atomisp_sub_device *asd,
249                         struct atomisp_css_rgb_gamma_table *b_gamma_table);
250
251 void atomisp_css_set_anr_thres(struct atomisp_sub_device *asd,
252                         struct atomisp_css_anr_thres *anr_thres);
253
254 int atomisp_css_check_firmware_version(struct atomisp_device *isp);
255
256 int atomisp_css_load_firmware(struct atomisp_device *isp);
257
258 void atomisp_css_unload_firmware(struct atomisp_device *isp);
259
260 void atomisp_css_set_dvs_6axis(struct atomisp_sub_device *asd,
261                         struct atomisp_css_dvs_6axis *dvs_6axis);
262
263 unsigned int atomisp_css_debug_get_dtrace_level(void);
264
265 int atomisp_css_debug_dump_isp_binary(void);
266
267 int atomisp_css_dump_sp_raw_copy_linecount(bool reduced);
268
269 int atomisp_css_dump_blob_infor(void);
270
271 void atomisp_css_set_isp_config_id(struct atomisp_sub_device *asd,
272                         uint32_t isp_config_id);
273
274 void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device *asd,
275                         struct atomisp_css_frame *output_frame);
276
277 int atomisp_get_css_dbgfunc(void);
278
279 int atomisp_set_css_dbgfunc(struct atomisp_device *isp, int opt);
280 struct atomisp_css_dvs_grid_info *atomisp_css_get_dvs_grid_info(
281         struct atomisp_css_grid_info *grid_info);
282 #endif