]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - drivers/staging/media/atomisp/include/linux/atomisp.h
Merge remote-tracking branches 'asoc/topic/cs35l32', 'asoc/topic/cs35l34', 'asoc...
[mirror_ubuntu-jammy-kernel.git] / drivers / staging / media / atomisp / include / linux / atomisp.h
CommitLineData
a49d2536
AC
1/*
2 * Support for Medifield PNW Camera Imaging ISP subsystem.
3 *
4 * Copyright (c) 2010 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 *
a49d2536
AC
15 *
16 */
17#ifdef CSS15
18#include <linux/atomisp_css15.h>
19#else
20
21#ifndef _ATOM_ISP_H
22#define _ATOM_ISP_H
23
24#include <linux/types.h>
25#include <linux/version.h>
26
a49d2536
AC
27/* struct media_device_info.hw_revision */
28#define ATOMISP_HW_REVISION_MASK 0x0000ff00
29#define ATOMISP_HW_REVISION_SHIFT 8
30#define ATOMISP_HW_REVISION_ISP2300 0x00
31#define ATOMISP_HW_REVISION_ISP2400 0x10
32#define ATOMISP_HW_REVISION_ISP2401_LEGACY 0x11
33#define ATOMISP_HW_REVISION_ISP2401 0x20
34
35#define ATOMISP_HW_STEPPING_MASK 0x000000ff
36#define ATOMISP_HW_STEPPING_A0 0x00
37#define ATOMISP_HW_STEPPING_B0 0x10
38
39/*ISP binary running mode*/
40#define CI_MODE_PREVIEW 0x8000
41#define CI_MODE_VIDEO 0x4000
42#define CI_MODE_STILL_CAPTURE 0x2000
43#define CI_MODE_CONTINUOUS 0x1000
44#define CI_MODE_NONE 0x0000
45
46#define OUTPUT_MODE_FILE 0x0100
47#define OUTPUT_MODE_TEXT 0x0200
48
49/*
50 * Camera HAL sets this flag in v4l2_buffer reserved2 to indicate this
51 * buffer has a per-frame parameter.
52 */
53#define ATOMISP_BUFFER_HAS_PER_FRAME_SETTING 0x80000000
54
55/* Custom format for RAW capture from M10MO 0x3130314d */
56#define V4L2_PIX_FMT_CUSTOM_M10MO_RAW v4l2_fourcc('M', '1', '0', '1')
57
58/* Custom media bus formats being used in atomisp */
59#define V4L2_MBUS_FMT_CUSTOM_YUV420 0x8001
60#define V4L2_MBUS_FMT_CUSTOM_YVU420 0x8002
61#define V4L2_MBUS_FMT_CUSTOM_YUV422P 0x8003
62#define V4L2_MBUS_FMT_CUSTOM_YUV444 0x8004
63#define V4L2_MBUS_FMT_CUSTOM_NV12 0x8005
64#define V4L2_MBUS_FMT_CUSTOM_NV21 0x8006
65#define V4L2_MBUS_FMT_CUSTOM_NV16 0x8007
66#define V4L2_MBUS_FMT_CUSTOM_YUYV 0x8008
67#define V4L2_MBUS_FMT_CUSTOM_SBGGR16 0x8009
68#define V4L2_MBUS_FMT_CUSTOM_RGB32 0x800a
69
70/* Custom media bus format for M10MO RAW capture */
71#define V4L2_MBUS_FMT_CUSTOM_M10MO_RAW 0x800b
72
73/* Configuration used by Bayer noise reduction and YCC noise reduction */
74struct atomisp_nr_config {
75 /* [gain] Strength of noise reduction for Bayer NR (Used by Bayer NR) */
76 unsigned int bnr_gain;
77 /* [gain] Strength of noise reduction for YCC NR (Used by YCC NR) */
78 unsigned int ynr_gain;
79 /* [intensity] Sensitivity of Edge (Used by Bayer NR) */
80 unsigned int direction;
81 /* [intensity] coring threshold for Cb (Used by YCC NR) */
82 unsigned int threshold_cb;
83 /* [intensity] coring threshold for Cr (Used by YCC NR) */
84 unsigned int threshold_cr;
85};
86
87/* Temporal noise reduction configuration */
88struct atomisp_tnr_config {
89 unsigned int gain; /* [gain] Strength of NR */
90 unsigned int threshold_y;/* [intensity] Motion sensitivity for Y */
91 unsigned int threshold_uv;/* [intensity] Motion sensitivity for U/V */
92};
93
94/* Histogram. This contains num_elements values of type unsigned int.
95 * The data pointer is a DDR pointer (virtual address).
96 */
97struct atomisp_histogram {
98 unsigned int num_elements;
99 void __user *data;
100};
101
102enum atomisp_ob_mode {
103 atomisp_ob_mode_none,
104 atomisp_ob_mode_fixed,
105 atomisp_ob_mode_raster
106};
107
108/* Optical black level configuration */
109struct atomisp_ob_config {
110 /* Obtical black level mode (Fixed / Raster) */
111 enum atomisp_ob_mode mode;
112 /* [intensity] optical black level for GR (relevant for fixed mode) */
113 unsigned int level_gr;
114 /* [intensity] optical black level for R (relevant for fixed mode) */
115 unsigned int level_r;
116 /* [intensity] optical black level for B (relevant for fixed mode) */
117 unsigned int level_b;
118 /* [intensity] optical black level for GB (relevant for fixed mode) */
119 unsigned int level_gb;
120 /* [BQ] 0..63 start position of OB area (relevant for raster mode) */
121 unsigned short start_position;
122 /* [BQ] start..63 end position of OB area (relevant for raster mode) */
123 unsigned short end_position;
124};
125
126/* Edge enhancement (sharpen) configuration */
127struct atomisp_ee_config {
128 /* [gain] The strength of sharpness. u5_11 */
129 unsigned int gain;
130 /* [intensity] The threshold that divides noises from edge. u8_8 */
131 unsigned int threshold;
132 /* [gain] The strength of sharpness in pell-mell area. u5_11 */
133 unsigned int detail_gain;
134};
135
136struct atomisp_3a_output {
137 int ae_y;
138 int awb_cnt;
139 int awb_gr;
140 int awb_r;
141 int awb_b;
142 int awb_gb;
143 int af_hpf1;
144 int af_hpf2;
145};
146
147enum atomisp_calibration_type {
148 calibration_type1,
149 calibration_type2,
150 calibration_type3
151};
152
153struct atomisp_calibration_group {
154 unsigned int size;
155 unsigned int type;
156 unsigned short *calb_grp_values;
157};
158
159struct atomisp_gc_config {
160 __u16 gain_k1;
161 __u16 gain_k2;
162};
163
164struct atomisp_3a_config {
165 unsigned int ae_y_coef_r; /* [gain] Weight of R for Y */
166 unsigned int ae_y_coef_g; /* [gain] Weight of G for Y */
167 unsigned int ae_y_coef_b; /* [gain] Weight of B for Y */
168 unsigned int awb_lg_high_raw; /* [intensity]
169 AWB level gate high for raw */
170 unsigned int awb_lg_low; /* [intensity] AWB level gate low */
171 unsigned int awb_lg_high; /* [intensity] AWB level gate high */
172 int af_fir1_coef[7]; /* [factor] AF FIR coefficients of fir1 */
173 int af_fir2_coef[7]; /* [factor] AF FIR coefficients of fir2 */
174};
175
176struct atomisp_dvs_grid_info {
177 uint32_t enable;
178 uint32_t width;
179 uint32_t aligned_width;
180 uint32_t height;
181 uint32_t aligned_height;
182 uint32_t bqs_per_grid_cell;
183 uint32_t num_hor_coefs;
184 uint32_t num_ver_coefs;
185};
186
187struct atomisp_dvs_envelop {
188 unsigned int width;
189 unsigned int height;
190};
191
192struct atomisp_grid_info {
193 uint32_t enable;
194 uint32_t use_dmem;
195 uint32_t has_histogram;
196 uint32_t s3a_width;
197 uint32_t s3a_height;
198 uint32_t aligned_width;
199 uint32_t aligned_height;
200 uint32_t s3a_bqs_per_grid_cell;
201 uint32_t deci_factor_log2;
202 uint32_t elem_bit_depth;
203};
204
205struct atomisp_dis_vector {
206 int x;
207 int y;
208};
209
210
d929fb4e 211/* DVS 2.0 Coefficient types. This structure contains 4 pointers to
a49d2536
AC
212 * arrays that contain the coeffients for each type.
213 */
214struct atomisp_dvs2_coef_types {
d929fb4e
MCC
215 short __user *odd_real; /** real part of the odd coefficients*/
216 short __user *odd_imag; /** imaginary part of the odd coefficients*/
217 short __user *even_real;/** real part of the even coefficients*/
218 short __user *even_imag;/** imaginary part of the even coefficients*/
a49d2536
AC
219};
220
221/*
222 * DVS 2.0 Statistic types. This structure contains 4 pointers to
223 * arrays that contain the statistics for each type.
224 */
225struct atomisp_dvs2_stat_types {
d929fb4e
MCC
226 int __user *odd_real; /** real part of the odd statistics*/
227 int __user *odd_imag; /** imaginary part of the odd statistics*/
228 int __user *even_real;/** real part of the even statistics*/
229 int __user *even_imag;/** imaginary part of the even statistics*/
a49d2536
AC
230};
231
232struct atomisp_dis_coefficients {
233 struct atomisp_dvs_grid_info grid_info;
234 struct atomisp_dvs2_coef_types hor_coefs;
235 struct atomisp_dvs2_coef_types ver_coefs;
236};
237
238struct atomisp_dvs2_statistics {
239 struct atomisp_dvs_grid_info grid_info;
240 struct atomisp_dvs2_stat_types hor_prod;
241 struct atomisp_dvs2_stat_types ver_prod;
242};
243
244struct atomisp_dis_statistics {
245 struct atomisp_dvs2_statistics dvs2_stat;
246 uint32_t exp_id;
247};
248
249struct atomisp_3a_rgby_output {
250 uint32_t r;
251 uint32_t g;
252 uint32_t b;
253 uint32_t y;
254};
255
256/*
257 * Because we have 2 pipes at max to output metadata, therefore driver will use
258 * ATOMISP_MAIN_METADATA to specify the metadata from the pipe which keeps
259 * streaming always and use ATOMISP_SEC_METADATA to specify the metadata from
260 * the pipe which is streaming by request like capture pipe of ZSL or SDV mode
261 * as secondary metadata. And for the use case which has only one pipe
262 * streaming like online capture, ATOMISP_MAIN_METADATA will be used.
263 */
264enum atomisp_metadata_type {
265 ATOMISP_MAIN_METADATA = 0,
266 ATOMISP_SEC_METADATA,
267 ATOMISP_METADATA_TYPE_NUM,
268};
269
270struct atomisp_metadata_with_type {
271 /* to specify which type of metadata to get */
272 enum atomisp_metadata_type type;
273 void __user *data;
274 uint32_t width;
275 uint32_t height;
276 uint32_t stride; /* in bytes */
277 uint32_t exp_id; /* exposure ID */
278 uint32_t *effective_width; /* mipi packets valid data size */
279};
280
281struct atomisp_metadata {
282 void __user *data;
283 uint32_t width;
284 uint32_t height;
285 uint32_t stride; /* in bytes */
286 uint32_t exp_id; /* exposure ID */
287 uint32_t *effective_width; /* mipi packets valid data size */
288};
289
290struct atomisp_ext_isp_ctrl {
291 uint32_t id;
292 uint32_t data;
293};
294
295struct atomisp_3a_statistics {
296 struct atomisp_grid_info grid_info;
297 struct atomisp_3a_output __user *data;
298 struct atomisp_3a_rgby_output __user *rgby_data;
299 uint32_t exp_id; /* exposure ID */
300 uint32_t isp_config_id; /* isp config ID */
301};
302
303/**
304 * struct atomisp_cont_capture_conf - continuous capture parameters
305 * @num_captures: number of still images to capture
306 * @skip_frames: number of frames to skip between 2 captures
307 * @offset: offset in ring buffer to start capture
308 *
309 * For example, to capture 1 frame from past, current, and 1 from future
310 * and skip one frame between each capture, parameters would be:
311 * num_captures:3
312 * skip_frames:1
313 * offset:-2
314 */
315
316struct atomisp_cont_capture_conf {
317 int num_captures;
318 unsigned int skip_frames;
319 int offset;
320 __u32 reserved[5];
321};
322
323struct atomisp_ae_window {
324 int x_left;
325 int x_right;
326 int y_top;
327 int y_bottom;
328 int weight;
329};
330
331/* White Balance (Gain Adjust) */
332struct atomisp_wb_config {
333 unsigned int integer_bits;
334 unsigned int gr; /* unsigned <integer_bits>.<16-integer_bits> */
335 unsigned int r; /* unsigned <integer_bits>.<16-integer_bits> */
336 unsigned int b; /* unsigned <integer_bits>.<16-integer_bits> */
337 unsigned int gb; /* unsigned <integer_bits>.<16-integer_bits> */
338};
339
340/* Color Space Conversion settings */
341struct atomisp_cc_config {
342 unsigned int fraction_bits;
343 int matrix[3 * 3]; /* RGB2YUV Color matrix, signed
344 <13-fraction_bits>.<fraction_bits> */
345};
346
347/* De pixel noise configuration */
348struct atomisp_de_config {
349 unsigned int pixelnoise;
350 unsigned int c1_coring_threshold;
351 unsigned int c2_coring_threshold;
352};
353
354/* Chroma enhancement */
355struct atomisp_ce_config {
356 unsigned char uv_level_min;
357 unsigned char uv_level_max;
358};
359
360/* Defect pixel correction configuration */
361struct atomisp_dp_config {
362 /* [intensity] The threshold of defect Pixel Correction, representing
363 * the permissible difference of intensity between one pixel and its
364 * surrounding pixels. Smaller values result in more frequent pixel
365 * corrections. u0_16
366 */
367 unsigned int threshold;
368 /* [gain] The sensitivity of mis-correction. ISP will miss a lot of
369 * defects if the value is set too large. u8_8
370 */
371 unsigned int gain;
372 unsigned int gr;
373 unsigned int r;
374 unsigned int b;
375 unsigned int gb;
376};
377
378/* XNR threshold */
379struct atomisp_xnr_config {
380 __u16 threshold;
381};
382
383/* metadata config */
384struct atomisp_metadata_config {
385 uint32_t metadata_height;
386 uint32_t metadata_stride;
387};
388
389/*
390 * Generic resolution structure.
391 */
392struct atomisp_resolution {
d929fb4e
MCC
393 uint32_t width; /** Width */
394 uint32_t height; /** Height */
a49d2536
AC
395};
396
397/*
398 * This specifies the coordinates (x,y)
399 */
400struct atomisp_zoom_point {
d929fb4e
MCC
401 int32_t x; /** x coordinate */
402 int32_t y; /** y coordinate */
a49d2536
AC
403};
404
405/*
406 * This specifies the region
407 */
408struct atomisp_zoom_region {
409 struct atomisp_zoom_point origin; /* Starting point coordinates for the region */
410 struct atomisp_resolution resolution; /* Region resolution */
411};
412
413struct atomisp_dz_config {
d929fb4e
MCC
414 uint32_t dx; /** Horizontal zoom factor */
415 uint32_t dy; /** Vertical zoom factor */
416 struct atomisp_zoom_region zoom_region; /** region for zoom */
a49d2536
AC
417};
418
419struct atomisp_parm {
420 struct atomisp_grid_info info;
421 struct atomisp_dvs_grid_info dvs_grid;
422 struct atomisp_dvs_envelop dvs_envelop;
423 struct atomisp_wb_config wb_config;
424 struct atomisp_cc_config cc_config;
425 struct atomisp_ob_config ob_config;
426 struct atomisp_de_config de_config;
427 struct atomisp_dz_config dz_config;
428 struct atomisp_ce_config ce_config;
429 struct atomisp_dp_config dp_config;
430 struct atomisp_nr_config nr_config;
431 struct atomisp_ee_config ee_config;
432 struct atomisp_tnr_config tnr_config;
433 struct atomisp_metadata_config metadata_config;
434};
435
436struct dvs2_bq_resolution {
437 int width_bq; /* width [BQ] */
438 int height_bq; /* height [BQ] */
439};
440
441struct atomisp_dvs2_bq_resolutions {
442 /* GDC source image size [BQ] */
443 struct dvs2_bq_resolution source_bq;
444 /* GDC output image size [BQ] */
445 struct dvs2_bq_resolution output_bq;
446 /* GDC effective envelope size [BQ] */
447 struct dvs2_bq_resolution envelope_bq;
448 /* isp pipe filter size [BQ] */
449 struct dvs2_bq_resolution ispfilter_bq;
450 /* GDC shit size [BQ] */
451 struct dvs2_bq_resolution gdc_shift_bq;
452};
453
454struct atomisp_dvs_6axis_config {
455 uint32_t exp_id;
456 uint32_t width_y;
457 uint32_t height_y;
458 uint32_t width_uv;
459 uint32_t height_uv;
460 uint32_t *xcoords_y;
461 uint32_t *ycoords_y;
462 uint32_t *xcoords_uv;
463 uint32_t *ycoords_uv;
464};
465
466struct atomisp_formats_config {
467 uint32_t video_full_range_flag;
468};
469
470struct atomisp_parameters {
471 struct atomisp_wb_config *wb_config; /* White Balance config */
472 struct atomisp_cc_config *cc_config; /* Color Correction config */
473 struct atomisp_tnr_config *tnr_config; /* Temporal Noise Reduction */
474 struct atomisp_ecd_config *ecd_config; /* Eigen Color Demosaicing */
475 struct atomisp_ynr_config *ynr_config; /* Y(Luma) Noise Reduction */
476 struct atomisp_fc_config *fc_config; /* Fringe Control */
477 struct atomisp_formats_config *formats_config; /* Formats Control */
478 struct atomisp_cnr_config *cnr_config; /* Chroma Noise Reduction */
479 struct atomisp_macc_config *macc_config; /* MACC */
480 struct atomisp_ctc_config *ctc_config; /* Chroma Tone Control */
481 struct atomisp_aa_config *aa_config; /* Anti-Aliasing */
482 struct atomisp_aa_config *baa_config; /* Anti-Aliasing */
483 struct atomisp_ce_config *ce_config;
484 struct atomisp_dvs_6axis_config *dvs_6axis_config;
485 struct atomisp_ob_config *ob_config; /* Objective Black config */
486 struct atomisp_dp_config *dp_config; /* Dead Pixel config */
487 struct atomisp_nr_config *nr_config; /* Noise Reduction config */
488 struct atomisp_ee_config *ee_config; /* Edge Enhancement config */
489 struct atomisp_de_config *de_config; /* Demosaic config */
490 struct atomisp_gc_config *gc_config; /* Gamma Correction config */
491 struct atomisp_anr_config *anr_config; /* Advanced Noise Reduction */
492 struct atomisp_3a_config *a3a_config; /* 3A Statistics config */
493 struct atomisp_xnr_config *xnr_config; /* eXtra Noise Reduction */
494 struct atomisp_dz_config *dz_config; /* Digital Zoom */
495 struct atomisp_cc_config *yuv2rgb_cc_config; /* Color
496 Correction config */
497 struct atomisp_cc_config *rgb2yuv_cc_config; /* Color
498 Correction config */
499 struct atomisp_macc_table *macc_table;
500 struct atomisp_gamma_table *gamma_table;
501 struct atomisp_ctc_table *ctc_table;
502 struct atomisp_xnr_table *xnr_table;
503 struct atomisp_rgb_gamma_table *r_gamma_table;
504 struct atomisp_rgb_gamma_table *g_gamma_table;
505 struct atomisp_rgb_gamma_table *b_gamma_table;
506 struct atomisp_vector *motion_vector; /* For 2-axis DVS */
507 struct atomisp_shading_table *shading_table;
508 struct atomisp_morph_table *morph_table;
509 struct atomisp_dvs_coefficients *dvs_coefs; /* DVS 1.0 coefficients */
510 struct atomisp_dvs2_coefficients *dvs2_coefs; /* DVS 2.0 coefficients */
511 struct atomisp_capture_config *capture_config;
512 struct atomisp_anr_thres *anr_thres;
513
514 void *lin_2500_config; /* Skylake: Linearization config */
515 void *obgrid_2500_config; /* Skylake: OBGRID config */
516 void *bnr_2500_config; /* Skylake: bayer denoise config */
517 void *shd_2500_config; /* Skylake: shading config */
518 void *dm_2500_config; /* Skylake: demosaic config */
519 void *rgbpp_2500_config; /* Skylake: RGBPP config */
520 void *dvs_stat_2500_config; /* Skylake: DVS STAT config */
521 void *lace_stat_2500_config; /* Skylake: LACE STAT config */
522 void *yuvp1_2500_config; /* Skylake: yuvp1 config */
523 void *yuvp2_2500_config; /* Skylake: yuvp2 config */
524 void *tnr_2500_config; /* Skylake: TNR config */
525 void *dpc_2500_config; /* Skylake: DPC config */
526 void *awb_2500_config; /* Skylake: auto white balance config */
527 void *awb_fr_2500_config; /* Skylake: auto white balance filter response config */
528 void *anr_2500_config; /* Skylake: ANR config */
529 void *af_2500_config; /* Skylake: auto focus config */
530 void *ae_2500_config; /* Skylake: auto exposure config */
531 void *bds_2500_config; /* Skylake: bayer downscaler config */
532 void *dvs_2500_config; /* Skylake: digital video stabilization config */
533 void *res_mgr_2500_config;
534
535 /*
536 * Output frame pointer the config is to be applied to (optional),
537 * set to NULL to make this config is applied as global.
538 */
539 void *output_frame;
540 /*
541 * Unique ID to track which config was actually applied to a particular
542 * frame, driver will send this id back with output frame together.
543 */
544 uint32_t isp_config_id;
545
546 /*
547 * Switch to control per_frame setting:
548 * 0: this is a global setting
549 * 1: this is a per_frame setting
550 * PLEASE KEEP THIS AT THE END OF THE STRUCTURE!!
551 */
552 uint32_t per_frame_setting;
553};
554
555#define ATOMISP_GAMMA_TABLE_SIZE 1024
556struct atomisp_gamma_table {
557 unsigned short data[ATOMISP_GAMMA_TABLE_SIZE];
558};
559
560/* Morphing table for advanced ISP.
561 * Each line of width elements takes up COORD_TABLE_EXT_WIDTH elements
562 * in memory.
563 */
564#define ATOMISP_MORPH_TABLE_NUM_PLANES 6
565struct atomisp_morph_table {
566 unsigned int enabled;
567
568 unsigned int height;
569 unsigned int width; /* number of valid elements per line */
570 unsigned short __user *coordinates_x[ATOMISP_MORPH_TABLE_NUM_PLANES];
571 unsigned short __user *coordinates_y[ATOMISP_MORPH_TABLE_NUM_PLANES];
572};
573
574#define ATOMISP_NUM_SC_COLORS 4
575#define ATOMISP_SC_FLAG_QUERY (1 << 0)
576
577struct atomisp_shading_table {
578 __u32 enable;
579
580 __u32 sensor_width;
581 __u32 sensor_height;
582 __u32 width;
583 __u32 height;
584 __u32 fraction_bits;
585
586 __u16 *data[ATOMISP_NUM_SC_COLORS];
587};
588
589struct atomisp_makernote_info {
590 /* bits 31-16: numerator, bits 15-0: denominator */
591 unsigned int focal_length;
592 /* bits 31-16: numerator, bits 15-0: denominator*/
593 unsigned int f_number_curr;
594 /*
595 * bits 31-24: max f-number numerator
596 * bits 23-16: max f-number denominator
597 * bits 15-8: min f-number numerator
598 * bits 7-0: min f-number denominator
599 */
600 unsigned int f_number_range;
601};
602
603/* parameter for MACC */
604#define ATOMISP_NUM_MACC_AXES 16
605struct atomisp_macc_table {
606 short data[4 * ATOMISP_NUM_MACC_AXES];
607};
608
609struct atomisp_macc_config {
610 int color_effect;
611 struct atomisp_macc_table table;
612};
613
614/* Parameter for ctc parameter control */
615#define ATOMISP_CTC_TABLE_SIZE 1024
616struct atomisp_ctc_table {
617 unsigned short data[ATOMISP_CTC_TABLE_SIZE];
618};
619
620/* Parameter for overlay image loading */
621struct atomisp_overlay {
622 /* the frame containing the overlay data The overlay frame width should
623 * be the multiples of 2*ISP_VEC_NELEMS. The overlay frame height
624 * should be the multiples of 2.
625 */
626 struct v4l2_framebuffer *frame;
627 /* Y value of overlay background */
628 unsigned char bg_y;
629 /* U value of overlay background */
630 char bg_u;
631 /* V value of overlay background */
632 char bg_v;
633 /* the blending percent of input data for Y subpixels */
634 unsigned char blend_input_perc_y;
635 /* the blending percent of input data for U subpixels */
636 unsigned char blend_input_perc_u;
637 /* the blending percent of input data for V subpixels */
638 unsigned char blend_input_perc_v;
639 /* the blending percent of overlay data for Y subpixels */
640 unsigned char blend_overlay_perc_y;
641 /* the blending percent of overlay data for U subpixels */
642 unsigned char blend_overlay_perc_u;
643 /* the blending percent of overlay data for V subpixels */
644 unsigned char blend_overlay_perc_v;
645 /* the overlay start x pixel position on output frame It should be the
646 multiples of 2*ISP_VEC_NELEMS. */
647 unsigned int overlay_start_x;
648 /* the overlay start y pixel position on output frame It should be the
649 multiples of 2. */
650 unsigned int overlay_start_y;
651};
652
653/* Sensor resolution specific data for AE calculation.*/
654struct atomisp_sensor_mode_data {
655 unsigned int coarse_integration_time_min;
656 unsigned int coarse_integration_time_max_margin;
657 unsigned int fine_integration_time_min;
658 unsigned int fine_integration_time_max_margin;
659 unsigned int fine_integration_time_def;
660 unsigned int frame_length_lines;
661 unsigned int line_length_pck;
662 unsigned int read_mode;
663 unsigned int vt_pix_clk_freq_mhz;
664 unsigned int crop_horizontal_start; /* Sensor crop start cord. (x0,y0)*/
665 unsigned int crop_vertical_start;
666 unsigned int crop_horizontal_end; /* Sensor crop end cord. (x1,y1)*/
667 unsigned int crop_vertical_end;
668 unsigned int output_width; /* input size to ISP after binning/scaling */
669 unsigned int output_height;
670 uint8_t binning_factor_x; /* horizontal binning factor used */
671 uint8_t binning_factor_y; /* vertical binning factor used */
672 uint16_t hts;
673};
674
675struct atomisp_exposure {
676 unsigned int integration_time[8];
677 unsigned int shutter_speed[8];
678 unsigned int gain[4];
679 unsigned int aperture;
680};
681
682/* For texture streaming. */
683struct atomisp_bc_video_package {
684 int ioctl_cmd;
685 int device_id;
686 int inputparam;
687 int outputparam;
688};
689
690enum atomisp_focus_hp {
691 ATOMISP_FOCUS_HP_IN_PROGRESS = (1U << 2),
692 ATOMISP_FOCUS_HP_COMPLETE = (2U << 2),
693 ATOMISP_FOCUS_HP_FAILED = (3U << 2)
694};
695
696/* Masks */
697#define ATOMISP_FOCUS_STATUS_MOVING (1U << 0)
698#define ATOMISP_FOCUS_STATUS_ACCEPTS_NEW_MOVE (1U << 1)
699#define ATOMISP_FOCUS_STATUS_HOME_POSITION (3U << 2)
700
701enum atomisp_camera_port {
702 ATOMISP_CAMERA_PORT_SECONDARY,
703 ATOMISP_CAMERA_PORT_PRIMARY,
704 ATOMISP_CAMERA_PORT_TERTIARY,
705 ATOMISP_CAMERA_NR_PORTS
706};
707
708/* Flash modes. Default is off.
709 * Setting a flash to TORCH or INDICATOR mode will automatically
710 * turn it on. Setting it to FLASH mode will not turn on the flash
711 * until the FLASH_STROBE command is sent. */
712enum atomisp_flash_mode {
713 ATOMISP_FLASH_MODE_OFF,
714 ATOMISP_FLASH_MODE_FLASH,
715 ATOMISP_FLASH_MODE_TORCH,
716 ATOMISP_FLASH_MODE_INDICATOR,
717};
718
719/* Flash statuses, used by atomisp driver to check before starting
720 * flash and after having started flash. */
721enum atomisp_flash_status {
722 ATOMISP_FLASH_STATUS_OK,
723 ATOMISP_FLASH_STATUS_HW_ERROR,
724 ATOMISP_FLASH_STATUS_INTERRUPTED,
725 ATOMISP_FLASH_STATUS_TIMEOUT,
726};
727
728/* Frame status. This is used to detect corrupted frames and flash
729 * exposed frames. Usually, the first 2 frames coming out of the sensor
730 * are corrupted. When using flash, the frame before and the frame after
731 * the flash exposed frame may be partially exposed by flash. The ISP
732 * statistics for these frames should not be used by the 3A library.
733 * The frame status value can be found in the "reserved" field in the
734 * v4l2_buffer struct. */
735enum atomisp_frame_status {
736 ATOMISP_FRAME_STATUS_OK,
737 ATOMISP_FRAME_STATUS_CORRUPTED,
738 ATOMISP_FRAME_STATUS_FLASH_EXPOSED,
739 ATOMISP_FRAME_STATUS_FLASH_PARTIAL,
740 ATOMISP_FRAME_STATUS_FLASH_FAILED,
741};
742
743enum atomisp_acc_type {
744 ATOMISP_ACC_STANDALONE, /* Stand-alone acceleration */
745 ATOMISP_ACC_OUTPUT, /* Accelerator stage on output frame */
746 ATOMISP_ACC_VIEWFINDER /* Accelerator stage on viewfinder frame */
747};
748
749enum atomisp_acc_arg_type {
750 ATOMISP_ACC_ARG_SCALAR_IN, /* Scalar input argument */
751 ATOMISP_ACC_ARG_SCALAR_OUT, /* Scalar output argument */
752 ATOMISP_ACC_ARG_SCALAR_IO, /* Scalar in/output argument */
753 ATOMISP_ACC_ARG_PTR_IN, /* Pointer input argument */
754 ATOMISP_ACC_ARG_PTR_OUT, /* Pointer output argument */
755 ATOMISP_ACC_ARG_PTR_IO, /* Pointer in/output argument */
756 ATOMISP_ARG_PTR_NOFLUSH, /* Pointer argument will not be flushed */
757 ATOMISP_ARG_PTR_STABLE, /* Pointer input argument that is stable */
758 ATOMISP_ACC_ARG_FRAME /* Frame argument */
759};
760
d929fb4e 761/* ISP memories, isp2400 */
a49d2536
AC
762enum atomisp_acc_memory {
763 ATOMISP_ACC_MEMORY_PMEM0 = 0,
764 ATOMISP_ACC_MEMORY_DMEM0,
765 /* for backward compatibility */
766 ATOMISP_ACC_MEMORY_DMEM = ATOMISP_ACC_MEMORY_DMEM0,
767 ATOMISP_ACC_MEMORY_VMEM0,
768 ATOMISP_ACC_MEMORY_VAMEM0,
769 ATOMISP_ACC_MEMORY_VAMEM1,
770 ATOMISP_ACC_MEMORY_VAMEM2,
771 ATOMISP_ACC_MEMORY_HMEM0,
772 ATOMISP_ACC_NR_MEMORY
773};
774
775enum atomisp_ext_isp_id {
776 EXT_ISP_CID_ISO = 0,
777 EXT_ISP_CID_CAPTURE_HDR,
778 EXT_ISP_CID_CAPTURE_LLS,
779 EXT_ISP_CID_FOCUS_MODE,
780 EXT_ISP_CID_FOCUS_EXECUTION,
781 EXT_ISP_CID_TOUCH_POSX,
782 EXT_ISP_CID_TOUCH_POSY,
783 EXT_ISP_CID_CAF_STATUS,
784 EXT_ISP_CID_AF_STATUS,
785 EXT_ISP_CID_GET_AF_MODE,
786 EXT_ISP_CID_CAPTURE_BURST,
787 EXT_ISP_CID_FLASH_MODE,
788 EXT_ISP_CID_ZOOM,
789 EXT_ISP_CID_SHOT_MODE
790};
791
792#define EXT_ISP_FOCUS_MODE_NORMAL 0
793#define EXT_ISP_FOCUS_MODE_MACRO 1
794#define EXT_ISP_FOCUS_MODE_TOUCH_AF 2
795#define EXT_ISP_FOCUS_MODE_PREVIEW_CAF 3
796#define EXT_ISP_FOCUS_MODE_MOVIE_CAF 4
797#define EXT_ISP_FOCUS_MODE_FACE_CAF 5
798#define EXT_ISP_FOCUS_MODE_TOUCH_MACRO 6
799#define EXT_ISP_FOCUS_MODE_TOUCH_CAF 7
800
801#define EXT_ISP_FOCUS_STOP 0
802#define EXT_ISP_FOCUS_SEARCH 1
803#define EXT_ISP_PAN_FOCUSING 2
804
805#define EXT_ISP_CAF_RESTART_CHECK 1
806#define EXT_ISP_CAF_STATUS_FOCUSING 2
807#define EXT_ISP_CAF_STATUS_SUCCESS 3
808#define EXT_ISP_CAF_STATUS_FAIL 4
809
810#define EXT_ISP_AF_STATUS_INVALID 1
811#define EXT_ISP_AF_STATUS_FOCUSING 2
812#define EXT_ISP_AF_STATUS_SUCCESS 3
813#define EXT_ISP_AF_STATUS_FAIL 4
814
815enum atomisp_burst_capture_options {
816 EXT_ISP_BURST_CAPTURE_CTRL_START = 0,
817 EXT_ISP_BURST_CAPTURE_CTRL_STOP
818};
819
820#define EXT_ISP_FLASH_MODE_OFF 0
821#define EXT_ISP_FLASH_MODE_ON 1
822#define EXT_ISP_FLASH_MODE_AUTO 2
823#define EXT_ISP_LED_TORCH_OFF 3
824#define EXT_ISP_LED_TORCH_ON 4
825
826#define EXT_ISP_SHOT_MODE_AUTO 0
827#define EXT_ISP_SHOT_MODE_BEAUTY_FACE 1
828#define EXT_ISP_SHOT_MODE_BEST_PHOTO 2
829#define EXT_ISP_SHOT_MODE_DRAMA 3
830#define EXT_ISP_SHOT_MODE_BEST_FACE 4
831#define EXT_ISP_SHOT_MODE_ERASER 5
832#define EXT_ISP_SHOT_MODE_PANORAMA 6
833#define EXT_ISP_SHOT_MODE_RICH_TONE_HDR 7
834#define EXT_ISP_SHOT_MODE_NIGHT 8
835#define EXT_ISP_SHOT_MODE_SOUND_SHOT 9
836#define EXT_ISP_SHOT_MODE_ANIMATED_PHOTO 10
837#define EXT_ISP_SHOT_MODE_SPORTS 11
838
839struct atomisp_sp_arg {
840 enum atomisp_acc_arg_type type; /* Type of SP argument */
841 void *value; /* Value of SP argument */
842 unsigned int size; /* Size of SP argument */
843};
844
845/* Acceleration API */
846
847/* For CSS 1.0 only */
848struct atomisp_acc_fw_arg {
849 unsigned int fw_handle;
850 unsigned int index;
851 void __user *value;
852 size_t size;
853};
854
855/*
856 * Set arguments after first mapping with ATOMISP_IOC_ACC_S_MAPPED_ARG.
857 */
858struct atomisp_acc_s_mapped_arg {
859 unsigned int fw_handle;
860 __u32 memory; /* one of enum atomisp_acc_memory */
861 size_t length;
862 unsigned long css_ptr;
863};
864
865struct atomisp_acc_fw_abort {
866 unsigned int fw_handle;
867 /* Timeout in us */
868 unsigned int timeout;
869};
870
871struct atomisp_acc_fw_load {
872 unsigned int size;
873 unsigned int fw_handle;
874 void __user *data;
875};
876
877/*
878 * Load firmware to specified pipeline.
879 */
880struct atomisp_acc_fw_load_to_pipe {
881 __u32 flags; /* Flags, see below for valid values */
882 unsigned int fw_handle; /* Handle, filled by kernel. */
883 __u32 size; /* Firmware binary size */
884 void __user *data; /* Pointer to firmware */
885 __u32 type; /* Binary type */
886 __u32 reserved[3]; /* Set to zero */
887};
888/*
889 * Set Senor run mode
890 */
891struct atomisp_s_runmode {
892 __u32 mode;
893};
894
895#define ATOMISP_ACC_FW_LOAD_FL_PREVIEW (1 << 0)
896#define ATOMISP_ACC_FW_LOAD_FL_COPY (1 << 1)
897#define ATOMISP_ACC_FW_LOAD_FL_VIDEO (1 << 2)
898#define ATOMISP_ACC_FW_LOAD_FL_CAPTURE (1 << 3)
899#define ATOMISP_ACC_FW_LOAD_FL_ACC (1 << 4)
900#define ATOMISP_ACC_FW_LOAD_FL_ENABLE (1 << 16)
901
902#define ATOMISP_ACC_FW_LOAD_TYPE_NONE 0 /* Normal binary: don't use */
903#define ATOMISP_ACC_FW_LOAD_TYPE_OUTPUT 1 /* Stage on output */
904#define ATOMISP_ACC_FW_LOAD_TYPE_VIEWFINDER 2 /* Stage on viewfinder */
905#define ATOMISP_ACC_FW_LOAD_TYPE_STANDALONE 3 /* Stand-alone acceleration */
906
907struct atomisp_acc_map {
908 __u32 flags; /* Flags, see list below */
909 __u32 length; /* Length of data in bytes */
910 void __user *user_ptr; /* Pointer into user space */
911 unsigned long css_ptr; /* Pointer into CSS address space */
912 __u32 reserved[4]; /* Set to zero */
913};
914
915#define ATOMISP_MAP_FLAG_NOFLUSH 0x0001 /* Do not flush cache */
916#define ATOMISP_MAP_FLAG_CACHED 0x0002 /* Enable cache */
917
918struct atomisp_acc_state {
919 __u32 flags; /* Flags, see list below */
920#define ATOMISP_STATE_FLAG_ENABLE ATOMISP_ACC_FW_LOAD_FL_ENABLE
921 unsigned int fw_handle;
922};
923
924struct atomisp_update_exposure {
925 unsigned int gain;
926 unsigned int digi_gain;
927 unsigned int update_gain;
928 unsigned int update_digi_gain;
929};
930
931/*
932 * V4L2 private internal data interface.
933 * -----------------------------------------------------------------------------
934 * struct v4l2_private_int_data - request private data stored in video device
935 * internal memory.
936 * @size: sanity check to ensure userspace's buffer fits whole private data.
937 * If not, kernel will make partial copy (or nothing if @size == 0).
938 * @size is always corrected for the minimum necessary if IOCTL returns
939 * no error.
940 * @data: pointer to userspace buffer.
941 */
942struct v4l2_private_int_data {
943 __u32 size;
944 void __user *data;
945 __u32 reserved[2];
946};
947
948enum atomisp_sensor_ae_bracketing_mode {
949 SENSOR_AE_BRACKETING_MODE_OFF = 0,
950 SENSOR_AE_BRACKETING_MODE_SINGLE, /* back to SW standby after bracketing */
951 SENSOR_AE_BRACKETING_MODE_SINGLE_TO_STREAMING, /* back to normal streaming after bracketing */
952 SENSOR_AE_BRACKETING_MODE_LOOP, /* continue AE bracketing in loop mode */
953};
954
955struct atomisp_sensor_ae_bracketing_info {
956 unsigned int modes; /* bit mask to indicate supported modes */
957 unsigned int lut_depth;
958};
959
960struct atomisp_sensor_ae_bracketing_lut_entry {
961 __u16 coarse_integration_time;
962 __u16 analog_gain;
963 __u16 digital_gain;
964};
965
966struct atomisp_sensor_ae_bracketing_lut {
967 struct atomisp_sensor_ae_bracketing_lut_entry *lut;
968 unsigned int lut_size;
969};
970
971/*Private IOCTLs for ISP */
972#define ATOMISP_IOC_G_XNR \
973 _IOR('v', BASE_VIDIOC_PRIVATE + 0, int)
974#define ATOMISP_IOC_S_XNR \
975 _IOW('v', BASE_VIDIOC_PRIVATE + 0, int)
976#define ATOMISP_IOC_G_NR \
977 _IOR('v', BASE_VIDIOC_PRIVATE + 1, struct atomisp_nr_config)
978#define ATOMISP_IOC_S_NR \
979 _IOW('v', BASE_VIDIOC_PRIVATE + 1, struct atomisp_nr_config)
980#define ATOMISP_IOC_G_TNR \
981 _IOR('v', BASE_VIDIOC_PRIVATE + 2, struct atomisp_tnr_config)
982#define ATOMISP_IOC_S_TNR \
983 _IOW('v', BASE_VIDIOC_PRIVATE + 2, struct atomisp_tnr_config)
984#define ATOMISP_IOC_G_HISTOGRAM \
985 _IOWR('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram)
986#define ATOMISP_IOC_S_HISTOGRAM \
987 _IOW('v', BASE_VIDIOC_PRIVATE + 3, struct atomisp_histogram)
988#define ATOMISP_IOC_G_BLACK_LEVEL_COMP \
989 _IOR('v', BASE_VIDIOC_PRIVATE + 4, struct atomisp_ob_config)
990#define ATOMISP_IOC_S_BLACK_LEVEL_COMP \
991 _IOW('v', BASE_VIDIOC_PRIVATE + 4, struct atomisp_ob_config)
992#define ATOMISP_IOC_G_EE \
993 _IOR('v', BASE_VIDIOC_PRIVATE + 5, struct atomisp_ee_config)
994#define ATOMISP_IOC_S_EE \
995 _IOW('v', BASE_VIDIOC_PRIVATE + 5, struct atomisp_ee_config)
996/* Digital Image Stabilization:
997 * 1. get dis statistics: reads DIS statistics from ISP (every frame)
998 * 2. set dis coefficients: set DIS filter coefficients (one time)
999 * 3. set dis motion vecotr: set motion vector (result of DIS, every frame)
1000 */
1001#define ATOMISP_IOC_G_DIS_STAT \
1002 _IOWR('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_statistics)
1003
1004#define ATOMISP_IOC_G_DVS2_BQ_RESOLUTIONS \
1005 _IOR('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dvs2_bq_resolutions)
1006
1007#define ATOMISP_IOC_S_DIS_COEFS \
1008 _IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dis_coefficients)
1009
1010#define ATOMISP_IOC_S_DIS_VECTOR \
1011 _IOW('v', BASE_VIDIOC_PRIVATE + 6, struct atomisp_dvs_6axis_config)
1012
1013#define ATOMISP_IOC_G_3A_STAT \
1014 _IOWR('v', BASE_VIDIOC_PRIVATE + 7, struct atomisp_3a_statistics)
1015#define ATOMISP_IOC_G_ISP_PARM \
1016 _IOR('v', BASE_VIDIOC_PRIVATE + 8, struct atomisp_parm)
1017#define ATOMISP_IOC_S_ISP_PARM \
1018 _IOW('v', BASE_VIDIOC_PRIVATE + 8, struct atomisp_parm)
1019#define ATOMISP_IOC_G_ISP_GAMMA \
1020 _IOR('v', BASE_VIDIOC_PRIVATE + 9, struct atomisp_gamma_table)
1021#define ATOMISP_IOC_S_ISP_GAMMA \
1022 _IOW('v', BASE_VIDIOC_PRIVATE + 9, struct atomisp_gamma_table)
1023#define ATOMISP_IOC_G_ISP_GDC_TAB \
1024 _IOR('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table)
1025#define ATOMISP_IOC_S_ISP_GDC_TAB \
1026 _IOW('v', BASE_VIDIOC_PRIVATE + 10, struct atomisp_morph_table)
1027#define ATOMISP_IOC_ISP_MAKERNOTE \
1028 _IOWR('v', BASE_VIDIOC_PRIVATE + 11, struct atomisp_makernote_info)
1029
1030/* macc parameter control*/
1031#define ATOMISP_IOC_G_ISP_MACC \
1032 _IOR('v', BASE_VIDIOC_PRIVATE + 12, struct atomisp_macc_config)
1033#define ATOMISP_IOC_S_ISP_MACC \
1034 _IOW('v', BASE_VIDIOC_PRIVATE + 12, struct atomisp_macc_config)
1035
1036/* Defect pixel detection & Correction */
1037#define ATOMISP_IOC_G_ISP_BAD_PIXEL_DETECTION \
1038 _IOR('v', BASE_VIDIOC_PRIVATE + 13, struct atomisp_dp_config)
1039#define ATOMISP_IOC_S_ISP_BAD_PIXEL_DETECTION \
1040 _IOW('v', BASE_VIDIOC_PRIVATE + 13, struct atomisp_dp_config)
1041
1042/* False Color Correction */
1043#define ATOMISP_IOC_G_ISP_FALSE_COLOR_CORRECTION \
1044 _IOR('v', BASE_VIDIOC_PRIVATE + 14, struct atomisp_de_config)
1045#define ATOMISP_IOC_S_ISP_FALSE_COLOR_CORRECTION \
1046 _IOW('v', BASE_VIDIOC_PRIVATE + 14, struct atomisp_de_config)
1047
1048/* ctc parameter control */
1049#define ATOMISP_IOC_G_ISP_CTC \
1050 _IOR('v', BASE_VIDIOC_PRIVATE + 15, struct atomisp_ctc_table)
1051#define ATOMISP_IOC_S_ISP_CTC \
1052 _IOW('v', BASE_VIDIOC_PRIVATE + 15, struct atomisp_ctc_table)
1053
1054/* white balance Correction */
1055#define ATOMISP_IOC_G_ISP_WHITE_BALANCE \
1056 _IOR('v', BASE_VIDIOC_PRIVATE + 16, struct atomisp_wb_config)
1057#define ATOMISP_IOC_S_ISP_WHITE_BALANCE \
1058 _IOW('v', BASE_VIDIOC_PRIVATE + 16, struct atomisp_wb_config)
1059
1060/* fpn table loading */
1061#define ATOMISP_IOC_S_ISP_FPN_TABLE \
1062 _IOW('v', BASE_VIDIOC_PRIVATE + 17, struct v4l2_framebuffer)
1063
1064/* overlay image loading */
1065#define ATOMISP_IOC_G_ISP_OVERLAY \
1066 _IOWR('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay)
1067#define ATOMISP_IOC_S_ISP_OVERLAY \
1068 _IOW('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_overlay)
1069
1070/* bcd driver bridge */
1071#define ATOMISP_IOC_CAMERA_BRIDGE \
1072 _IOWR('v', BASE_VIDIOC_PRIVATE + 19, struct atomisp_bc_video_package)
1073
1074/* Sensor resolution specific info for AE */
1075#define ATOMISP_IOC_G_SENSOR_MODE_DATA \
1076 _IOR('v', BASE_VIDIOC_PRIVATE + 20, struct atomisp_sensor_mode_data)
1077
1078#define ATOMISP_IOC_S_EXPOSURE \
1079 _IOW('v', BASE_VIDIOC_PRIVATE + 21, struct atomisp_exposure)
1080
1081/* sensor calibration registers group */
1082#define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP \
1083 _IOWR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_calibration_group)
1084
1085/* white balance Correction */
1086#define ATOMISP_IOC_G_3A_CONFIG \
1087 _IOR('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_3a_config)
1088#define ATOMISP_IOC_S_3A_CONFIG \
1089 _IOW('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_3a_config)
1090
1091/* Accelerate ioctls */
1092#define ATOMISP_IOC_ACC_LOAD \
1093 _IOWR('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_acc_fw_load)
1094
1095#define ATOMISP_IOC_ACC_UNLOAD \
1096 _IOWR('v', BASE_VIDIOC_PRIVATE + 24, unsigned int)
1097
1098/* For CSS 1.0 only */
1099#define ATOMISP_IOC_ACC_S_ARG \
1100 _IOW('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_acc_fw_arg)
1101
1102#define ATOMISP_IOC_ACC_START \
1103 _IOW('v', BASE_VIDIOC_PRIVATE + 24, unsigned int)
1104
1105#define ATOMISP_IOC_ACC_WAIT \
1106 _IOW('v', BASE_VIDIOC_PRIVATE + 25, unsigned int)
1107
1108#define ATOMISP_IOC_ACC_ABORT \
1109 _IOW('v', BASE_VIDIOC_PRIVATE + 25, struct atomisp_acc_fw_abort)
1110
1111#define ATOMISP_IOC_ACC_DESTAB \
1112 _IOW('v', BASE_VIDIOC_PRIVATE + 25, struct atomisp_acc_fw_arg)
1113
1114/* sensor OTP memory read */
1115#define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA \
1116 _IOWR('v', BASE_VIDIOC_PRIVATE + 26, struct v4l2_private_int_data)
1117
1118/* LCS (shading) table write */
1119#define ATOMISP_IOC_S_ISP_SHD_TAB \
1120 _IOWR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_shading_table)
1121
1122/* Gamma Correction */
1123#define ATOMISP_IOC_G_ISP_GAMMA_CORRECTION \
1124 _IOR('v', BASE_VIDIOC_PRIVATE + 28, struct atomisp_gc_config)
1125
1126#define ATOMISP_IOC_S_ISP_GAMMA_CORRECTION \
1127 _IOW('v', BASE_VIDIOC_PRIVATE + 28, struct atomisp_gc_config)
1128
1129/* motor internal memory read */
1130#define ATOMISP_IOC_G_MOTOR_PRIV_INT_DATA \
1131 _IOWR('v', BASE_VIDIOC_PRIVATE + 29, struct v4l2_private_int_data)
1132
1133/*
1134 * Ioctls to map and unmap user buffers to CSS address space for acceleration.
1135 * User fills fields length and user_ptr and sets other fields to zero,
1136 * kernel may modify the flags and sets css_ptr.
1137 */
1138#define ATOMISP_IOC_ACC_MAP \
1139 _IOWR('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_map)
1140
1141/* User fills fields length, user_ptr, and css_ptr and zeroes other fields. */
1142#define ATOMISP_IOC_ACC_UNMAP \
1143 _IOW('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_map)
1144
1145#define ATOMISP_IOC_ACC_S_MAPPED_ARG \
1146 _IOW('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_acc_s_mapped_arg)
1147
1148#define ATOMISP_IOC_ACC_LOAD_TO_PIPE \
1149 _IOWR('v', BASE_VIDIOC_PRIVATE + 31, struct atomisp_acc_fw_load_to_pipe)
1150
1151#define ATOMISP_IOC_S_PARAMETERS \
1152 _IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_parameters)
1153
1154#define ATOMISP_IOC_S_CONT_CAPTURE_CONFIG \
1155 _IOWR('v', BASE_VIDIOC_PRIVATE + 33, struct atomisp_cont_capture_conf)
1156
1157#define ATOMISP_IOC_G_METADATA \
1158 _IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata)
1159
1160#define ATOMISP_IOC_G_METADATA_BY_TYPE \
1161 _IOWR('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_metadata_with_type)
1162
1163#define ATOMISP_IOC_EXT_ISP_CTRL \
1164 _IOWR('v', BASE_VIDIOC_PRIVATE + 35, struct atomisp_ext_isp_ctrl)
1165
1166#define ATOMISP_IOC_EXP_ID_UNLOCK \
1167 _IOW('v', BASE_VIDIOC_PRIVATE + 36, int)
1168
1169#define ATOMISP_IOC_EXP_ID_CAPTURE \
1170 _IOW('v', BASE_VIDIOC_PRIVATE + 37, int)
1171
1172#define ATOMISP_IOC_S_ENABLE_DZ_CAPT_PIPE \
1173 _IOWR('v', BASE_VIDIOC_PRIVATE + 38, unsigned int)
1174
1175#define ATOMISP_IOC_G_FORMATS_CONFIG \
1176 _IOR('v', BASE_VIDIOC_PRIVATE + 39, struct atomisp_formats_config)
1177
1178#define ATOMISP_IOC_S_FORMATS_CONFIG \
1179 _IOW('v', BASE_VIDIOC_PRIVATE + 39, struct atomisp_formats_config)
1180
1181#define ATOMISP_IOC_S_EXPOSURE_WINDOW \
1182 _IOW('v', BASE_VIDIOC_PRIVATE + 40, struct atomisp_ae_window)
1183
1184#define ATOMISP_IOC_S_ACC_STATE \
1185 _IOW('v', BASE_VIDIOC_PRIVATE + 41, struct atomisp_acc_state)
1186
1187#define ATOMISP_IOC_G_ACC_STATE \
1188 _IOR('v', BASE_VIDIOC_PRIVATE + 41, struct atomisp_acc_state)
1189
1190#define ATOMISP_IOC_INJECT_A_FAKE_EVENT \
1191 _IOW('v', BASE_VIDIOC_PRIVATE + 42, int)
1192
1193#define ATOMISP_IOC_G_SENSOR_AE_BRACKETING_INFO \
1194 _IOR('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_info)
1195
1196#define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_MODE \
1197 _IOW('v', BASE_VIDIOC_PRIVATE + 43, unsigned int)
1198
1199#define ATOMISP_IOC_G_SENSOR_AE_BRACKETING_MODE \
1200 _IOR('v', BASE_VIDIOC_PRIVATE + 43, unsigned int)
1201
1202#define ATOMISP_IOC_S_SENSOR_AE_BRACKETING_LUT \
1203 _IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_sensor_ae_bracketing_lut)
1204
1205#define ATOMISP_IOC_G_INVALID_FRAME_NUM \
1206 _IOR('v', BASE_VIDIOC_PRIVATE + 44, unsigned int)
1207
1208#define ATOMISP_IOC_S_ARRAY_RESOLUTION \
1209 _IOW('v', BASE_VIDIOC_PRIVATE + 45, struct atomisp_resolution)
1210
1211/* for depth mode sensor frame sync compensation */
1212#define ATOMISP_IOC_G_DEPTH_SYNC_COMP \
1213 _IOR('v', BASE_VIDIOC_PRIVATE + 46, unsigned int)
1214
1215#define ATOMISP_IOC_S_SENSOR_EE_CONFIG \
1216 _IOW('v', BASE_VIDIOC_PRIVATE + 47, unsigned int)
1217
1218#define ATOMISP_IOC_S_SENSOR_RUNMODE \
1219 _IOW('v', BASE_VIDIOC_PRIVATE + 48, struct atomisp_s_runmode)
1220
1221#define ATOMISP_IOC_G_UPDATE_EXPOSURE \
1222 _IOWR('v', BASE_VIDIOC_PRIVATE + 49, struct atomisp_update_exposure)
1223
1224/*
1225 * Reserved ioctls. We have customer implementing it internally.
1226 * We can't use both numbers to not cause ABI conflict.
1227 * Anyway, those ioctls are hacks and not implemented by us:
1228 *
1229 * #define ATOMISP_IOC_G_SENSOR_REG \
1230 * _IOW('v', BASE_VIDIOC_PRIVATE + 55, struct atomisp_sensor_regs)
1231 * #define ATOMISP_IOC_S_SENSOR_REG \
1232 * _IOW('v', BASE_VIDIOC_PRIVATE + 56, struct atomisp_sensor_regs)
1233 */
1234
1235/* ISP Private control IDs */
1236#define V4L2_CID_ATOMISP_BAD_PIXEL_DETECTION \
1237 (V4L2_CID_PRIVATE_BASE + 0)
1238#define V4L2_CID_ATOMISP_POSTPROCESS_GDC_CAC \
1239 (V4L2_CID_PRIVATE_BASE + 1)
1240#define V4L2_CID_ATOMISP_VIDEO_STABLIZATION \
1241 (V4L2_CID_PRIVATE_BASE + 2)
1242#define V4L2_CID_ATOMISP_FIXED_PATTERN_NR \
1243 (V4L2_CID_PRIVATE_BASE + 3)
1244#define V4L2_CID_ATOMISP_FALSE_COLOR_CORRECTION \
1245 (V4L2_CID_PRIVATE_BASE + 4)
1246#define V4L2_CID_ATOMISP_LOW_LIGHT \
1247 (V4L2_CID_PRIVATE_BASE + 5)
1248
1249/* Camera class:
1250 * Exposure, Flash and privacy (indicator) light controls, to be upstreamed */
1251#define V4L2_CID_CAMERA_LASTP1 (V4L2_CID_CAMERA_CLASS_BASE + 1024)
1252
1253#define V4L2_CID_FOCAL_ABSOLUTE (V4L2_CID_CAMERA_LASTP1 + 0)
1254#define V4L2_CID_FNUMBER_ABSOLUTE (V4L2_CID_CAMERA_LASTP1 + 1)
1255#define V4L2_CID_FNUMBER_RANGE (V4L2_CID_CAMERA_LASTP1 + 2)
1256
1257/* Flash related CIDs, see also:
1258 * http://linuxtv.org/downloads/v4l-dvb-apis/extended-controls.html\
1259 * #flash-controls */
1260
1261/* Request a number of flash-exposed frames. The frame status can be
1262 * found in the reserved field in the v4l2_buffer struct. */
1263#define V4L2_CID_REQUEST_FLASH (V4L2_CID_CAMERA_LASTP1 + 3)
1264/* Query flash driver status. See enum atomisp_flash_status above. */
1265#define V4L2_CID_FLASH_STATUS (V4L2_CID_CAMERA_LASTP1 + 5)
1266/* Set the flash mode (see enum atomisp_flash_mode) */
1267#define V4L2_CID_FLASH_MODE (V4L2_CID_CAMERA_LASTP1 + 10)
1268
1269/* VCM slew control */
1270#define V4L2_CID_VCM_SLEW (V4L2_CID_CAMERA_LASTP1 + 11)
1271/* VCM step time */
1272#define V4L2_CID_VCM_TIMEING (V4L2_CID_CAMERA_LASTP1 + 12)
1273
1274/* Query Focus Status */
1275#define V4L2_CID_FOCUS_STATUS (V4L2_CID_CAMERA_LASTP1 + 14)
1276
1277/* Query sensor's binning factor */
1278#define V4L2_CID_BIN_FACTOR_HORZ (V4L2_CID_CAMERA_LASTP1 + 15)
1279#define V4L2_CID_BIN_FACTOR_VERT (V4L2_CID_CAMERA_LASTP1 + 16)
1280
1281/* number of frames to skip at stream start */
1282#define V4L2_CID_G_SKIP_FRAMES (V4L2_CID_CAMERA_LASTP1 + 17)
1283
1284/* Query sensor's 2A status */
1285#define V4L2_CID_2A_STATUS (V4L2_CID_CAMERA_LASTP1 + 18)
1286#define V4L2_2A_STATUS_AE_READY (1 << 0)
1287#define V4L2_2A_STATUS_AWB_READY (1 << 1)
1288
1289#define V4L2_CID_FMT_AUTO (V4L2_CID_CAMERA_LASTP1 + 19)
1290
1291#define V4L2_CID_RUN_MODE (V4L2_CID_CAMERA_LASTP1 + 20)
1292#define ATOMISP_RUN_MODE_VIDEO 1
1293#define ATOMISP_RUN_MODE_STILL_CAPTURE 2
1294#define ATOMISP_RUN_MODE_CONTINUOUS_CAPTURE 3
1295#define ATOMISP_RUN_MODE_PREVIEW 4
1296#define ATOMISP_RUN_MODE_SDV 5
1297
1298#define V4L2_CID_ENABLE_VFPP (V4L2_CID_CAMERA_LASTP1 + 21)
1299#define V4L2_CID_ATOMISP_CONTINUOUS_MODE (V4L2_CID_CAMERA_LASTP1 + 22)
1300#define V4L2_CID_ATOMISP_CONTINUOUS_RAW_BUFFER_SIZE \
1301 (V4L2_CID_CAMERA_LASTP1 + 23)
1302#define V4L2_CID_ATOMISP_CONTINUOUS_VIEWFINDER \
1303 (V4L2_CID_CAMERA_LASTP1 + 24)
1304
1305#define V4L2_CID_VFPP (V4L2_CID_CAMERA_LASTP1 + 25)
1306#define ATOMISP_VFPP_ENABLE 0
1307#define ATOMISP_VFPP_DISABLE_SCALER 1
1308#define ATOMISP_VFPP_DISABLE_LOWLAT 2
1309
1310/* Query real flash status register value */
1311#define V4L2_CID_FLASH_STATUS_REGISTER (V4L2_CID_CAMERA_LASTP1 + 26)
1312
1313#define V4L2_CID_START_ZSL_CAPTURE (V4L2_CID_CAMERA_LASTP1 + 28)
1314/* Lock and unlock raw buffer */
1315#define V4L2_CID_ENABLE_RAW_BUFFER_LOCK (V4L2_CID_CAMERA_LASTP1 + 29)
1316
1317#define V4L2_CID_DEPTH_MODE (V4L2_CID_CAMERA_LASTP1 + 30)
1318
1319#define V4L2_CID_EXPOSURE_ZONE_NUM (V4L2_CID_CAMERA_LASTP1 + 31)
1320/* Disable digital zoom */
1321#define V4L2_CID_DISABLE_DZ (V4L2_CID_CAMERA_LASTP1 + 32)
1322
1323#define V4L2_CID_TEST_PATTERN_COLOR_R (V4L2_CID_CAMERA_LASTP1 + 33)
1324#define V4L2_CID_TEST_PATTERN_COLOR_GR (V4L2_CID_CAMERA_LASTP1 + 34)
1325#define V4L2_CID_TEST_PATTERN_COLOR_GB (V4L2_CID_CAMERA_LASTP1 + 35)
1326#define V4L2_CID_TEST_PATTERN_COLOR_B (V4L2_CID_CAMERA_LASTP1 + 36)
1327
1328#define V4L2_CID_ATOMISP_SELECT_ISP_VERSION (V4L2_CID_CAMERA_LASTP1 + 38)
1329
1330#define V4L2_BUF_FLAG_BUFFER_INVALID 0x0400
1331#define V4L2_BUF_FLAG_BUFFER_VALID 0x0800
1332
1333#define V4L2_BUF_TYPE_VIDEO_CAPTURE_ION (V4L2_BUF_TYPE_PRIVATE + 1024)
1334
1335#define V4L2_EVENT_ATOMISP_3A_STATS_READY (V4L2_EVENT_PRIVATE_START + 1)
1336#define V4L2_EVENT_ATOMISP_METADATA_READY (V4L2_EVENT_PRIVATE_START + 2)
1337#define V4L2_EVENT_ATOMISP_RAW_BUFFERS_ALLOC_DONE (V4L2_EVENT_PRIVATE_START + 3)
1338#define V4L2_EVENT_ATOMISP_ACC_COMPLETE (V4L2_EVENT_PRIVATE_START + 4)
1339#define V4L2_EVENT_ATOMISP_PAUSE_BUFFER (V4L2_EVENT_PRIVATE_START + 5)
1340#define V4L2_EVENT_ATOMISP_CSS_RESET (V4L2_EVENT_PRIVATE_START + 6)
1341/* Nonstandard color effects for V4L2_CID_COLORFX */
1342enum {
1343 V4L2_COLORFX_SKIN_WHITEN_LOW = 1001,
1344 V4L2_COLORFX_SKIN_WHITEN_HIGH = 1002,
1345 V4L2_COLORFX_WARM = 1003,
1346 V4L2_COLORFX_COLD = 1004,
1347 V4L2_COLORFX_WASHED = 1005,
1348 V4L2_COLORFX_RED = 1006,
1349 V4L2_COLORFX_GREEN = 1007,
1350 V4L2_COLORFX_BLUE = 1008,
1351 V4L2_COLORFX_PINK = 1009,
1352 V4L2_COLORFX_YELLOW = 1010,
1353 V4L2_COLORFX_PURPLE = 1011,
1354};
1355
1356#endif /* _ATOM_ISP_H */
1357#endif /* CSS15*/