GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / staging / media / atomisp / pci / atomisp_cmd.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Support for Medifield PNW Camera Imaging ISP subsystem.
4  *
5  * Copyright (c) 2010 Intel Corporation. All Rights Reserved.
6  *
7  * Copyright (c) 2010 Silicon Hive www.siliconhive.com.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License version
11  * 2 as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  *
19  */
20
21 #ifndef __ATOMISP_CMD_H__
22 #define __ATOMISP_CMD_H__
23
24 #include "../../include/linux/atomisp.h"
25 #include <linux/interrupt.h>
26 #include <linux/videodev2.h>
27
28 #include <media/v4l2-subdev.h>
29
30 #include "atomisp_internal.h"
31
32 #include "ia_css_types.h"
33 #include "ia_css.h"
34
35 struct atomisp_device;
36 struct ia_css_frame;
37
38 #define MSI_ENABLE_BIT          16
39 #define INTR_DISABLE_BIT        10
40 #define BUS_MASTER_ENABLE       2
41 #define MEMORY_SPACE_ENABLE     1
42 #define INTR_IER                24
43 #define INTR_IIR                16
44
45 /* ISP2401 */
46 #define RUNMODE_MASK (ATOMISP_RUN_MODE_VIDEO | ATOMISP_RUN_MODE_STILL_CAPTURE \
47                         | ATOMISP_RUN_MODE_PREVIEW)
48
49 /* FIXME: check if can go */
50 extern int atomisp_punit_hpll_freq;
51
52 /* Helper function */
53 void dump_sp_dmem(struct atomisp_device *isp, unsigned int addr,
54                   unsigned int size);
55 struct camera_mipi_info *atomisp_to_sensor_mipi_info(struct v4l2_subdev *sd);
56 struct atomisp_video_pipe *atomisp_to_video_pipe(struct video_device *dev);
57 struct atomisp_acc_pipe *atomisp_to_acc_pipe(struct video_device *dev);
58 int atomisp_reset(struct atomisp_device *isp);
59 void atomisp_flush_bufs_and_wakeup(struct atomisp_sub_device *asd);
60 void atomisp_clear_css_buffer_counters(struct atomisp_sub_device *asd);
61 /* ISP2400 */
62 bool atomisp_buffers_queued(struct atomisp_sub_device *asd);
63 /* ISP2401 */
64 bool atomisp_buffers_queued_pipe(struct atomisp_video_pipe *pipe);
65
66 /* Interrupt functions */
67 void atomisp_msi_irq_init(struct atomisp_device *isp);
68 void atomisp_msi_irq_uninit(struct atomisp_device *isp);
69 void atomisp_wdt_work(struct work_struct *work);
70 void atomisp_wdt(struct timer_list *t);
71 void atomisp_setup_flash(struct atomisp_sub_device *asd);
72 irqreturn_t atomisp_isr(int irq, void *dev);
73 irqreturn_t atomisp_isr_thread(int irq, void *isp_ptr);
74 const struct atomisp_format_bridge *get_atomisp_format_bridge_from_mbus(
75     u32 mbus_code);
76 bool atomisp_is_mbuscode_raw(uint32_t code);
77 void atomisp_delayed_init_work(struct work_struct *work);
78
79 /* Get internal fmt according to V4L2 fmt */
80 bool atomisp_is_viewfinder_support(struct atomisp_device *isp);
81
82 /* ISP features control function */
83
84 /*
85  * Function to set sensor runmode by user when
86  * ATOMISP_IOC_S_SENSOR_RUNMODE ioctl was called
87  */
88 int atomisp_set_sensor_runmode(struct atomisp_sub_device *asd,
89                                struct atomisp_s_runmode *runmode);
90 /*
91  * Function to enable/disable lens geometry distortion correction (GDC) and
92  * chromatic aberration correction (CAC)
93  */
94 int atomisp_gdc_cac(struct atomisp_sub_device *asd, int flag,
95                     __s32 *value);
96
97 /* Function to enable/disable low light mode (including ANR) */
98 int atomisp_low_light(struct atomisp_sub_device *asd, int flag,
99                       __s32 *value);
100
101 /*
102  * Function to enable/disable extra noise reduction (XNR) in low light
103  * condition
104  */
105 int atomisp_xnr(struct atomisp_sub_device *asd, int flag, int *arg);
106
107 int atomisp_formats(struct atomisp_sub_device *asd, int flag,
108                     struct atomisp_formats_config *config);
109
110 /* Function to configure noise reduction */
111 int atomisp_nr(struct atomisp_sub_device *asd, int flag,
112                struct atomisp_nr_config *config);
113
114 /* Function to configure temporal noise reduction (TNR) */
115 int atomisp_tnr(struct atomisp_sub_device *asd, int flag,
116                 struct atomisp_tnr_config *config);
117
118 /* Function to configure black level compensation */
119 int atomisp_black_level(struct atomisp_sub_device *asd, int flag,
120                         struct atomisp_ob_config *config);
121
122 /* Function to configure edge enhancement */
123 int atomisp_ee(struct atomisp_sub_device *asd, int flag,
124                struct atomisp_ee_config *config);
125
126 /* Function to update Gamma table for gamma, brightness and contrast config */
127 int atomisp_gamma(struct atomisp_sub_device *asd, int flag,
128                   struct atomisp_gamma_table *config);
129
130 /* Function to update Ctc table for Chroma Enhancement */
131 int atomisp_ctc(struct atomisp_sub_device *asd, int flag,
132                 struct atomisp_ctc_table *config);
133
134 /* Function to update gamma correction parameters */
135 int atomisp_gamma_correction(struct atomisp_sub_device *asd, int flag,
136                              struct atomisp_gc_config *config);
137
138 /* Function to update Gdc table for gdc */
139 int atomisp_gdc_cac_table(struct atomisp_sub_device *asd, int flag,
140                           struct atomisp_morph_table *config);
141
142 /* Function to update table for macc */
143 int atomisp_macc_table(struct atomisp_sub_device *asd, int flag,
144                        struct atomisp_macc_config *config);
145
146 /* Function to get DIS statistics. */
147 int atomisp_get_dis_stat(struct atomisp_sub_device *asd,
148                          struct atomisp_dis_statistics *stats);
149
150 /* Function to get DVS2 BQ resolution settings */
151 int atomisp_get_dvs2_bq_resolutions(struct atomisp_sub_device *asd,
152                                     struct atomisp_dvs2_bq_resolutions *bq_res);
153
154 /* Function to set the DIS coefficients. */
155 int atomisp_set_dis_coefs(struct atomisp_sub_device *asd,
156                           struct atomisp_dis_coefficients *coefs);
157
158 /* Function to set the DIS motion vector. */
159 int atomisp_set_dis_vector(struct atomisp_sub_device *asd,
160                            struct atomisp_dis_vector *vector);
161
162 /* Function to set/get 3A stat from isp */
163 int atomisp_3a_stat(struct atomisp_sub_device *asd, int flag,
164                     struct atomisp_3a_statistics *config);
165
166 /* Function to get metadata from isp */
167 int atomisp_get_metadata(struct atomisp_sub_device *asd, int flag,
168                          struct atomisp_metadata *config);
169
170 int atomisp_get_metadata_by_type(struct atomisp_sub_device *asd, int flag,
171                                  struct atomisp_metadata_with_type *config);
172
173 int atomisp_set_parameters(struct video_device *vdev,
174                            struct atomisp_parameters *arg);
175
176 /* Function to set/get isp parameters to isp */
177 int atomisp_param(struct atomisp_sub_device *asd, int flag,
178                   struct atomisp_parm *config);
179
180 /* Function to configure color effect of the image */
181 int atomisp_color_effect(struct atomisp_sub_device *asd, int flag,
182                          __s32 *effect);
183
184 /* Function to configure bad pixel correction */
185 int atomisp_bad_pixel(struct atomisp_sub_device *asd, int flag,
186                       __s32 *value);
187
188 /* Function to configure bad pixel correction params */
189 int atomisp_bad_pixel_param(struct atomisp_sub_device *asd, int flag,
190                             struct atomisp_dp_config *config);
191
192 /* Function to enable/disable video image stablization */
193 int atomisp_video_stable(struct atomisp_sub_device *asd, int flag,
194                          __s32 *value);
195
196 /* Function to configure fixed pattern noise */
197 int atomisp_fixed_pattern(struct atomisp_sub_device *asd, int flag,
198                           __s32 *value);
199
200 /* Function to configure fixed pattern noise table */
201 int atomisp_fixed_pattern_table(struct atomisp_sub_device *asd,
202                                 struct v4l2_framebuffer *config);
203
204 /* Function to configure false color correction */
205 int atomisp_false_color(struct atomisp_sub_device *asd, int flag,
206                         __s32 *value);
207
208 /* Function to configure false color correction params */
209 int atomisp_false_color_param(struct atomisp_sub_device *asd, int flag,
210                               struct atomisp_de_config *config);
211
212 /* Function to configure white balance params */
213 int atomisp_white_balance_param(struct atomisp_sub_device *asd, int flag,
214                                 struct atomisp_wb_config *config);
215
216 int atomisp_3a_config_param(struct atomisp_sub_device *asd, int flag,
217                             struct atomisp_3a_config *config);
218
219 /* Function to setup digital zoom */
220 int atomisp_digital_zoom(struct atomisp_sub_device *asd, int flag,
221                          __s32 *value);
222
223 /* Function  set camera_prefiles.xml current sensor pixel array size */
224 int atomisp_set_array_res(struct atomisp_sub_device *asd,
225                           struct atomisp_resolution  *config);
226
227 /* Function to calculate real zoom region for every pipe */
228 int atomisp_calculate_real_zoom_region(struct atomisp_sub_device *asd,
229                                        struct ia_css_dz_config   *dz_config,
230                                        enum ia_css_pipe_id css_pipe_id);
231
232 int atomisp_cp_general_isp_parameters(struct atomisp_sub_device *asd,
233                                       struct atomisp_parameters *arg,
234                                       struct atomisp_css_params *css_param,
235                                       bool from_user);
236
237 int atomisp_cp_lsc_table(struct atomisp_sub_device *asd,
238                          struct atomisp_shading_table *source_st,
239                          struct atomisp_css_params *css_param,
240                          bool from_user);
241
242 int atomisp_css_cp_dvs2_coefs(struct atomisp_sub_device *asd,
243                               struct ia_css_dvs2_coefficients *coefs,
244                               struct atomisp_css_params *css_param,
245                               bool from_user);
246
247 int atomisp_cp_morph_table(struct atomisp_sub_device *asd,
248                            struct atomisp_morph_table *source_morph_table,
249                            struct atomisp_css_params *css_param,
250                            bool from_user);
251
252 int atomisp_cp_dvs_6axis_config(struct atomisp_sub_device *asd,
253                                 struct atomisp_dvs_6axis_config *user_6axis_config,
254                                 struct atomisp_css_params *css_param,
255                                 bool from_user);
256
257 int atomisp_makeup_css_parameters(struct atomisp_sub_device *asd,
258                                   struct atomisp_parameters *arg,
259                                   struct atomisp_css_params *css_param);
260
261 int atomisp_compare_grid(struct atomisp_sub_device *asd,
262                          struct atomisp_grid_info *atomgrid);
263
264 int atomisp_get_sensor_mode_data(struct atomisp_sub_device *asd,
265                                  struct atomisp_sensor_mode_data *config);
266
267 /* This function looks up the closest available resolution. */
268 int atomisp_try_fmt(struct video_device *vdev, struct v4l2_pix_format *f,
269                     bool *res_overflow);
270
271 int atomisp_set_fmt(struct video_device *vdev, struct v4l2_format *f);
272 int atomisp_set_fmt_file(struct video_device *vdev, struct v4l2_format *f);
273
274 int atomisp_set_shading_table(struct atomisp_sub_device *asd,
275                               struct atomisp_shading_table *shading_table);
276
277 int atomisp_offline_capture_configure(struct atomisp_sub_device *asd,
278                                       struct atomisp_cont_capture_conf *cvf_config);
279
280 int atomisp_ospm_dphy_down(struct atomisp_device *isp);
281 int atomisp_ospm_dphy_up(struct atomisp_device *isp);
282 int atomisp_exif_makernote(struct atomisp_sub_device *asd,
283                            struct atomisp_makernote_info *config);
284
285 void atomisp_free_internal_buffers(struct atomisp_sub_device *asd);
286
287 int atomisp_s_ae_window(struct atomisp_sub_device *asd,
288                         struct atomisp_ae_window *arg);
289
290 int  atomisp_flash_enable(struct atomisp_sub_device *asd,
291                           int num_frames);
292
293 int atomisp_freq_scaling(struct atomisp_device *vdev,
294                          enum atomisp_dfs_mode mode,
295                          bool force);
296
297 void atomisp_buf_done(struct atomisp_sub_device *asd, int error,
298                       enum ia_css_buffer_type buf_type,
299                       enum ia_css_pipe_id css_pipe_id,
300                       bool q_buffers, enum atomisp_input_stream_id stream_id);
301
302 void atomisp_css_flush(struct atomisp_device *isp);
303 int atomisp_source_pad_to_stream_id(struct atomisp_sub_device *asd,
304                                     uint16_t source_pad);
305
306 /* Events. Only one event has to be exported for now. */
307 void atomisp_eof_event(struct atomisp_sub_device *asd, uint8_t exp_id);
308
309 enum mipi_port_id __get_mipi_port(struct atomisp_device *isp,
310                                   enum atomisp_camera_port port);
311
312 bool atomisp_is_vf_pipe(struct atomisp_video_pipe *pipe);
313
314 void atomisp_apply_css_parameters(
315     struct atomisp_sub_device *asd,
316     struct atomisp_css_params *css_param);
317 void atomisp_free_css_parameters(struct atomisp_css_params *css_param);
318
319 void atomisp_handle_parameter_and_buffer(struct atomisp_video_pipe *pipe);
320
321 void atomisp_flush_params_queue(struct atomisp_video_pipe *asd);
322
323 /* Function to do Raw Buffer related operation, after enable Lock Unlock Raw Buffer */
324 int atomisp_exp_id_unlock(struct atomisp_sub_device *asd, int *exp_id);
325 int atomisp_exp_id_capture(struct atomisp_sub_device *asd, int *exp_id);
326
327 /* Function to update Raw Buffer bitmap */
328 int atomisp_set_raw_buffer_bitmap(struct atomisp_sub_device *asd, int exp_id);
329 void atomisp_init_raw_buffer_bitmap(struct atomisp_sub_device *asd);
330
331 /* Function to enable/disable zoom for capture pipe */
332 int atomisp_enable_dz_capt_pipe(struct atomisp_sub_device *asd,
333                                 unsigned int *enable);
334
335 /* Function to get metadata type bu pipe id */
336 enum atomisp_metadata_type
337 atomisp_get_metadata_type(struct atomisp_sub_device *asd,
338                           enum ia_css_pipe_id pipe_id);
339
340 u32 atomisp_get_pixel_depth(u32 pixelformat);
341
342 /* Function for HAL to inject a fake event to wake up poll thread */
343 int atomisp_inject_a_fake_event(struct atomisp_sub_device *asd, int *event);
344
345 /*
346  * Function for HAL to query how many invalid frames at the beginning of ISP
347  * pipeline output
348  */
349 int atomisp_get_invalid_frame_num(struct video_device *vdev,
350                                   int *invalid_frame_num);
351
352 int atomisp_mrfld_power_up(struct atomisp_device *isp);
353 int atomisp_mrfld_power_down(struct atomisp_device *isp);
354 int atomisp_runtime_suspend(struct device *dev);
355 int atomisp_runtime_resume(struct device *dev);
356 #endif /* __ATOMISP_CMD_H__ */