2 * Support for Clovertrail PNW Camera Imaging ISP subsystem.
4 * Copyright (c) 2013 Intel Corporation. All Rights Reserved.
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.
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.
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
22 #ifndef __ATOMISP_COMPAT_CSS20_H__
23 #define __ATOMISP_COMPAT_CSS20_H__
25 #include <media/v4l2-mediabus.h>
28 #include "ia_css_types.h"
29 #include "ia_css_acc_types.h"
30 #include "sh_css_legacy.h"
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
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
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
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
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
108 #define CSS_BUFFER_TYPE_NUM IA_CSS_BUFFER_TYPE_NUM
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
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
120 * Hide IA_ naming difference in otherwise common CSS macros.
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)
126 #define CSS_EVENT_PORT_EOF CSS_EVENT(PORT_EOF)
127 #define CSS_EVENT_FRAME_TAGGED CSS_EVENT(FRAME_TAGGED)
129 #define CSS_MIPI_FRAME_BUFFER_SIZE_1 0x60000
130 #define CSS_MIPI_FRAME_BUFFER_SIZE_2 0x80000
132 struct atomisp_device
;
133 struct atomisp_sub_device
;
135 #define MAX_STREAMS_PER_CHANNEL 2
138 * These are used to indicate the css stream state, corresponding
139 * stream handling can be done via judging the different state.
141 enum atomisp_css_stream_state
{
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
153 struct atomisp_css_isys_config_info
{
154 unsigned int input_format
;
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
];
177 struct atomisp_css_env
{
178 struct ia_css_env isp_css_env
;
179 struct ia_css_fw isp_css_fw
;
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
;
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
;
194 struct atomisp_css_buffer
{
195 struct ia_css_buffer css_buffer
;
198 struct atomisp_css_event
{
199 enum atomisp_css_pipe_id pipe
;
200 struct ia_css_event event
;
203 void atomisp_css_set_macc_config(struct atomisp_sub_device
*asd
,
204 struct atomisp_css_macc_config
*macc_config
);
206 void atomisp_css_set_ecd_config(struct atomisp_sub_device
*asd
,
207 struct atomisp_css_ecd_config
*ecd_config
);
209 void atomisp_css_set_ynr_config(struct atomisp_sub_device
*asd
,
210 struct atomisp_css_ynr_config
*ynr_config
);
212 void atomisp_css_set_fc_config(struct atomisp_sub_device
*asd
,
213 struct atomisp_css_fc_config
*fc_config
);
215 void atomisp_css_set_aa_config(struct atomisp_sub_device
*asd
,
216 struct atomisp_css_aa_config
*aa_config
);
218 void atomisp_css_set_baa_config(struct atomisp_sub_device
*asd
,
219 struct atomisp_css_baa_config
*baa_config
);
221 void atomisp_css_set_anr_config(struct atomisp_sub_device
*asd
,
222 struct atomisp_css_anr_config
*anr_config
);
224 void atomisp_css_set_xnr_config(struct atomisp_sub_device
*asd
,
225 struct atomisp_css_xnr_config
*xnr_config
);
227 void atomisp_css_set_cnr_config(struct atomisp_sub_device
*asd
,
228 struct atomisp_css_cnr_config
*cnr_config
);
230 void atomisp_css_set_ctc_config(struct atomisp_sub_device
*asd
,
231 struct atomisp_css_ctc_config
*ctc_config
);
233 void atomisp_css_set_yuv2rgb_cc_config(struct atomisp_sub_device
*asd
,
234 struct atomisp_css_cc_config
*yuv2rgb_cc_config
);
236 void atomisp_css_set_rgb2yuv_cc_config(struct atomisp_sub_device
*asd
,
237 struct atomisp_css_cc_config
*rgb2yuv_cc_config
);
239 void atomisp_css_set_xnr_table(struct atomisp_sub_device
*asd
,
240 struct atomisp_css_xnr_table
*xnr_table
);
242 void atomisp_css_set_r_gamma_table(struct atomisp_sub_device
*asd
,
243 struct atomisp_css_rgb_gamma_table
*r_gamma_table
);
245 void atomisp_css_set_g_gamma_table(struct atomisp_sub_device
*asd
,
246 struct atomisp_css_rgb_gamma_table
*g_gamma_table
);
248 void atomisp_css_set_b_gamma_table(struct atomisp_sub_device
*asd
,
249 struct atomisp_css_rgb_gamma_table
*b_gamma_table
);
251 void atomisp_css_set_anr_thres(struct atomisp_sub_device
*asd
,
252 struct atomisp_css_anr_thres
*anr_thres
);
254 int atomisp_css_check_firmware_version(struct atomisp_device
*isp
);
256 int atomisp_css_load_firmware(struct atomisp_device
*isp
);
258 void atomisp_css_unload_firmware(struct atomisp_device
*isp
);
260 void atomisp_css_set_dvs_6axis(struct atomisp_sub_device
*asd
,
261 struct atomisp_css_dvs_6axis
*dvs_6axis
);
263 unsigned int atomisp_css_debug_get_dtrace_level(void);
265 int atomisp_css_debug_dump_isp_binary(void);
267 int atomisp_css_dump_sp_raw_copy_linecount(bool reduced
);
269 int atomisp_css_dump_blob_infor(void);
271 void atomisp_css_set_isp_config_id(struct atomisp_sub_device
*asd
,
272 uint32_t isp_config_id
);
274 void atomisp_css_set_isp_config_applied_frame(struct atomisp_sub_device
*asd
,
275 struct atomisp_css_frame
*output_frame
);
277 int atomisp_get_css_dbgfunc(void);
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
);