Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/include/media/davinci/isif.h
10818 views
1
/*
2
* Copyright (C) 2008-2009 Texas Instruments Inc
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* isif header file
19
*/
20
#ifndef _ISIF_H
21
#define _ISIF_H
22
23
#include <media/davinci/ccdc_types.h>
24
#include <media/davinci/vpfe_types.h>
25
26
/* isif float type S8Q8/U8Q8 */
27
struct isif_float_8 {
28
/* 8 bit integer part */
29
__u8 integer;
30
/* 8 bit decimal part */
31
__u8 decimal;
32
};
33
34
/* isif float type U16Q16/S16Q16 */
35
struct isif_float_16 {
36
/* 16 bit integer part */
37
__u16 integer;
38
/* 16 bit decimal part */
39
__u16 decimal;
40
};
41
42
/************************************************************************
43
* Vertical Defect Correction parameters
44
***********************************************************************/
45
/* Defect Correction (DFC) table entry */
46
struct isif_vdfc_entry {
47
/* vertical position of defect */
48
__u16 pos_vert;
49
/* horizontal position of defect */
50
__u16 pos_horz;
51
/*
52
* Defect level of Vertical line defect position. This is subtracted
53
* from the data at the defect position
54
*/
55
__u8 level_at_pos;
56
/*
57
* Defect level of the pixels upper than the vertical line defect.
58
* This is subtracted from the data
59
*/
60
__u8 level_up_pixels;
61
/*
62
* Defect level of the pixels lower than the vertical line defect.
63
* This is subtracted from the data
64
*/
65
__u8 level_low_pixels;
66
};
67
68
#define ISIF_VDFC_TABLE_SIZE 8
69
struct isif_dfc {
70
/* enable vertical defect correction */
71
__u8 en;
72
/* Defect level subtraction. Just fed through if saturating */
73
#define ISIF_VDFC_NORMAL 0
74
/*
75
* Defect level subtraction. Horizontal interpolation ((i-2)+(i+2))/2
76
* if data saturating
77
*/
78
#define ISIF_VDFC_HORZ_INTERPOL_IF_SAT 1
79
/* Horizontal interpolation (((i-2)+(i+2))/2) */
80
#define ISIF_VDFC_HORZ_INTERPOL 2
81
/* one of the vertical defect correction modes above */
82
__u8 corr_mode;
83
/* 0 - whole line corrected, 1 - not pixels upper than the defect */
84
__u8 corr_whole_line;
85
#define ISIF_VDFC_NO_SHIFT 0
86
#define ISIF_VDFC_SHIFT_1 1
87
#define ISIF_VDFC_SHIFT_2 2
88
#define ISIF_VDFC_SHIFT_3 3
89
#define ISIF_VDFC_SHIFT_4 4
90
/*
91
* defect level shift value. level_at_pos, level_upper_pos,
92
* and level_lower_pos can be shifted up by this value. Choose
93
* one of the values above
94
*/
95
__u8 def_level_shift;
96
/* defect saturation level */
97
__u16 def_sat_level;
98
/* number of vertical defects. Max is ISIF_VDFC_TABLE_SIZE */
99
__u16 num_vdefects;
100
/* VDFC table ptr */
101
struct isif_vdfc_entry table[ISIF_VDFC_TABLE_SIZE];
102
};
103
104
struct isif_horz_bclamp {
105
106
/* Horizontal clamp disabled. Only vertical clamp value is subtracted */
107
#define ISIF_HORZ_BC_DISABLE 0
108
/*
109
* Horizontal clamp value is calculated and subtracted from image data
110
* along with vertical clamp value
111
*/
112
#define ISIF_HORZ_BC_CLAMP_CALC_ENABLED 1
113
/*
114
* Horizontal clamp value calculated from previous image is subtracted
115
* from image data along with vertical clamp value.
116
*/
117
#define ISIF_HORZ_BC_CLAMP_NOT_UPDATED 2
118
/* horizontal clamp mode. One of the values above */
119
__u8 mode;
120
/*
121
* pixel value limit enable.
122
* 0 - limit disabled
123
* 1 - pixel value limited to 1023
124
*/
125
__u8 clamp_pix_limit;
126
/* Select Most left window for bc calculation */
127
#define ISIF_SEL_MOST_LEFT_WIN 0
128
/* Select Most right window for bc calculation */
129
#define ISIF_SEL_MOST_RIGHT_WIN 1
130
/* Select most left or right window for clamp val calculation */
131
__u8 base_win_sel_calc;
132
/* Window count per color for calculation. range 1-32 */
133
__u8 win_count_calc;
134
/* Window start position - horizontal for calculation. 0 - 8191 */
135
__u16 win_start_h_calc;
136
/* Window start position - vertical for calculation 0 - 8191 */
137
__u16 win_start_v_calc;
138
#define ISIF_HORZ_BC_SZ_H_2PIXELS 0
139
#define ISIF_HORZ_BC_SZ_H_4PIXELS 1
140
#define ISIF_HORZ_BC_SZ_H_8PIXELS 2
141
#define ISIF_HORZ_BC_SZ_H_16PIXELS 3
142
/* Width of the sample window in pixels for calculation */
143
__u8 win_h_sz_calc;
144
#define ISIF_HORZ_BC_SZ_V_32PIXELS 0
145
#define ISIF_HORZ_BC_SZ_V_64PIXELS 1
146
#define ISIF_HORZ_BC_SZ_V_128PIXELS 2
147
#define ISIF_HORZ_BC_SZ_V_256PIXELS 3
148
/* Height of the sample window in pixels for calculation */
149
__u8 win_v_sz_calc;
150
};
151
152
/************************************************************************
153
* Black Clamp parameters
154
***********************************************************************/
155
struct isif_vert_bclamp {
156
/* Reset value used is the clamp value calculated */
157
#define ISIF_VERT_BC_USE_HORZ_CLAMP_VAL 0
158
/* Reset value used is reset_clamp_val configured */
159
#define ISIF_VERT_BC_USE_CONFIG_CLAMP_VAL 1
160
/* No update, previous image value is used */
161
#define ISIF_VERT_BC_NO_UPDATE 2
162
/*
163
* Reset value selector for vertical clamp calculation. Use one of
164
* the above values
165
*/
166
__u8 reset_val_sel;
167
/* U8Q8. Line average coefficient used in vertical clamp calculation */
168
__u8 line_ave_coef;
169
/* Height of the optical black region for calculation */
170
__u16 ob_v_sz_calc;
171
/* Optical black region start position - horizontal. 0 - 8191 */
172
__u16 ob_start_h;
173
/* Optical black region start position - vertical 0 - 8191 */
174
__u16 ob_start_v;
175
};
176
177
struct isif_black_clamp {
178
/*
179
* This offset value is added irrespective of the clamp enable status.
180
* S13
181
*/
182
__u16 dc_offset;
183
/*
184
* Enable black/digital clamp value to be subtracted from the image data
185
*/
186
__u8 en;
187
/*
188
* black clamp mode. same/separate clamp for 4 colors
189
* 0 - disable - same clamp value for all colors
190
* 1 - clamp value calculated separately for all colors
191
*/
192
__u8 bc_mode_color;
193
/* Vrtical start position for bc subtraction */
194
__u16 vert_start_sub;
195
/* Black clamp for horizontal direction */
196
struct isif_horz_bclamp horz;
197
/* Black clamp for vertical direction */
198
struct isif_vert_bclamp vert;
199
};
200
201
/*************************************************************************
202
** Color Space Conversion (CSC)
203
*************************************************************************/
204
#define ISIF_CSC_NUM_COEFF 16
205
struct isif_color_space_conv {
206
/* Enable color space conversion */
207
__u8 en;
208
/*
209
* csc coeffient table. S8Q5, M00 at index 0, M01 at index 1, and
210
* so forth
211
*/
212
struct isif_float_8 coeff[ISIF_CSC_NUM_COEFF];
213
};
214
215
216
/*************************************************************************
217
** Black Compensation parameters
218
*************************************************************************/
219
struct isif_black_comp {
220
/* Comp for Red */
221
__s8 r_comp;
222
/* Comp for Gr */
223
__s8 gr_comp;
224
/* Comp for Blue */
225
__s8 b_comp;
226
/* Comp for Gb */
227
__s8 gb_comp;
228
};
229
230
/*************************************************************************
231
** Gain parameters
232
*************************************************************************/
233
struct isif_gain {
234
/* Gain for Red or ye */
235
struct isif_float_16 r_ye;
236
/* Gain for Gr or cy */
237
struct isif_float_16 gr_cy;
238
/* Gain for Gb or g */
239
struct isif_float_16 gb_g;
240
/* Gain for Blue or mg */
241
struct isif_float_16 b_mg;
242
};
243
244
#define ISIF_LINEAR_TAB_SIZE 192
245
/*************************************************************************
246
** Linearization parameters
247
*************************************************************************/
248
struct isif_linearize {
249
/* Enable or Disable linearization of data */
250
__u8 en;
251
/* Shift value applied */
252
__u8 corr_shft;
253
/* scale factor applied U11Q10 */
254
struct isif_float_16 scale_fact;
255
/* Size of the linear table */
256
__u16 table[ISIF_LINEAR_TAB_SIZE];
257
};
258
259
/* Color patterns */
260
#define ISIF_RED 0
261
#define ISIF_GREEN_RED 1
262
#define ISIF_GREEN_BLUE 2
263
#define ISIF_BLUE 3
264
struct isif_col_pat {
265
__u8 olop;
266
__u8 olep;
267
__u8 elop;
268
__u8 elep;
269
};
270
271
/*************************************************************************
272
** Data formatter parameters
273
*************************************************************************/
274
struct isif_fmtplen {
275
/*
276
* number of program entries for SET0, range 1 - 16
277
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
278
* ISIF_COMBINE
279
*/
280
__u16 plen0;
281
/*
282
* number of program entries for SET1, range 1 - 16
283
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
284
* ISIF_COMBINE
285
*/
286
__u16 plen1;
287
/**
288
* number of program entries for SET2, range 1 - 16
289
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
290
* ISIF_COMBINE
291
*/
292
__u16 plen2;
293
/**
294
* number of program entries for SET3, range 1 - 16
295
* when fmtmode is ISIF_SPLIT, 1 - 8 when fmtmode is
296
* ISIF_COMBINE
297
*/
298
__u16 plen3;
299
};
300
301
struct isif_fmt_cfg {
302
#define ISIF_SPLIT 0
303
#define ISIF_COMBINE 1
304
/* Split or combine or line alternate */
305
__u8 fmtmode;
306
/* enable or disable line alternating mode */
307
__u8 ln_alter_en;
308
#define ISIF_1LINE 0
309
#define ISIF_2LINES 1
310
#define ISIF_3LINES 2
311
#define ISIF_4LINES 3
312
/* Split/combine line number */
313
__u8 lnum;
314
/* Address increment Range 1 - 16 */
315
__u8 addrinc;
316
};
317
318
struct isif_fmt_addr_ptr {
319
/* Initial address */
320
__u32 init_addr;
321
/* output line number */
322
#define ISIF_1STLINE 0
323
#define ISIF_2NDLINE 1
324
#define ISIF_3RDLINE 2
325
#define ISIF_4THLINE 3
326
__u8 out_line;
327
};
328
329
struct isif_fmtpgm_ap {
330
/* program address pointer */
331
__u8 pgm_aptr;
332
/* program address increment or decrement */
333
__u8 pgmupdt;
334
};
335
336
struct isif_data_formatter {
337
/* Enable/Disable data formatter */
338
__u8 en;
339
/* data formatter configuration */
340
struct isif_fmt_cfg cfg;
341
/* Formatter program entries length */
342
struct isif_fmtplen plen;
343
/* first pixel in a line fed to formatter */
344
__u16 fmtrlen;
345
/* HD interval for output line. Only valid when split line */
346
__u16 fmthcnt;
347
/* formatter address pointers */
348
struct isif_fmt_addr_ptr fmtaddr_ptr[16];
349
/* program enable/disable */
350
__u8 pgm_en[32];
351
/* program address pointers */
352
struct isif_fmtpgm_ap fmtpgm_ap[32];
353
};
354
355
struct isif_df_csc {
356
/* Color Space Conversion confguration, 0 - csc, 1 - df */
357
__u8 df_or_csc;
358
/* csc configuration valid if df_or_csc is 0 */
359
struct isif_color_space_conv csc;
360
/* data formatter configuration valid if df_or_csc is 1 */
361
struct isif_data_formatter df;
362
/* start pixel in a line at the input */
363
__u32 start_pix;
364
/* number of pixels in input line */
365
__u32 num_pixels;
366
/* start line at the input */
367
__u32 start_line;
368
/* number of lines at the input */
369
__u32 num_lines;
370
};
371
372
struct isif_gain_offsets_adj {
373
/* Gain adjustment per color */
374
struct isif_gain gain;
375
/* Offset adjustment */
376
__u16 offset;
377
/* Enable or Disable Gain adjustment for SDRAM data */
378
__u8 gain_sdram_en;
379
/* Enable or Disable Gain adjustment for IPIPE data */
380
__u8 gain_ipipe_en;
381
/* Enable or Disable Gain adjustment for H3A data */
382
__u8 gain_h3a_en;
383
/* Enable or Disable Gain adjustment for SDRAM data */
384
__u8 offset_sdram_en;
385
/* Enable or Disable Gain adjustment for IPIPE data */
386
__u8 offset_ipipe_en;
387
/* Enable or Disable Gain adjustment for H3A data */
388
__u8 offset_h3a_en;
389
};
390
391
struct isif_cul {
392
/* Horizontal Cull pattern for odd lines */
393
__u8 hcpat_odd;
394
/* Horizontal Cull pattern for even lines */
395
__u8 hcpat_even;
396
/* Vertical Cull pattern */
397
__u8 vcpat;
398
/* Enable or disable lpf. Apply when cull is enabled */
399
__u8 en_lpf;
400
};
401
402
struct isif_compress {
403
#define ISIF_ALAW 0
404
#define ISIF_DPCM 1
405
#define ISIF_NO_COMPRESSION 2
406
/* Compression Algorithm used */
407
__u8 alg;
408
/* Choose Predictor1 for DPCM compression */
409
#define ISIF_DPCM_PRED1 0
410
/* Choose Predictor2 for DPCM compression */
411
#define ISIF_DPCM_PRED2 1
412
/* Predictor for DPCM compression */
413
__u8 pred;
414
};
415
416
/* all the stuff in this struct will be provided by userland */
417
struct isif_config_params_raw {
418
/* Linearization parameters for image sensor data input */
419
struct isif_linearize linearize;
420
/* Data formatter or CSC */
421
struct isif_df_csc df_csc;
422
/* Defect Pixel Correction (DFC) confguration */
423
struct isif_dfc dfc;
424
/* Black/Digital Clamp configuration */
425
struct isif_black_clamp bclamp;
426
/* Gain, offset adjustments */
427
struct isif_gain_offsets_adj gain_offset;
428
/* Culling */
429
struct isif_cul culling;
430
/* A-Law and DPCM compression options */
431
struct isif_compress compress;
432
/* horizontal offset for Gain/LSC/DFC */
433
__u16 horz_offset;
434
/* vertical offset for Gain/LSC/DFC */
435
__u16 vert_offset;
436
/* color pattern for field 0 */
437
struct isif_col_pat col_pat_field0;
438
/* color pattern for field 1 */
439
struct isif_col_pat col_pat_field1;
440
#define ISIF_NO_SHIFT 0
441
#define ISIF_1BIT_SHIFT 1
442
#define ISIF_2BIT_SHIFT 2
443
#define ISIF_3BIT_SHIFT 3
444
#define ISIF_4BIT_SHIFT 4
445
#define ISIF_5BIT_SHIFT 5
446
#define ISIF_6BIT_SHIFT 6
447
/* Data shift applied before storing to SDRAM */
448
__u8 data_shift;
449
/* enable input test pattern generation */
450
__u8 test_pat_gen;
451
};
452
453
#ifdef __KERNEL__
454
struct isif_ycbcr_config {
455
/* isif pixel format */
456
enum ccdc_pixfmt pix_fmt;
457
/* isif frame format */
458
enum ccdc_frmfmt frm_fmt;
459
/* ISIF crop window */
460
struct v4l2_rect win;
461
/* field polarity */
462
enum vpfe_pin_pol fid_pol;
463
/* interface VD polarity */
464
enum vpfe_pin_pol vd_pol;
465
/* interface HD polarity */
466
enum vpfe_pin_pol hd_pol;
467
/* isif pix order. Only used for ycbcr capture */
468
enum ccdc_pixorder pix_order;
469
/* isif buffer type. Only used for ycbcr capture */
470
enum ccdc_buftype buf_type;
471
};
472
473
/* MSB of image data connected to sensor port */
474
enum isif_data_msb {
475
ISIF_BIT_MSB_15,
476
ISIF_BIT_MSB_14,
477
ISIF_BIT_MSB_13,
478
ISIF_BIT_MSB_12,
479
ISIF_BIT_MSB_11,
480
ISIF_BIT_MSB_10,
481
ISIF_BIT_MSB_9,
482
ISIF_BIT_MSB_8,
483
ISIF_BIT_MSB_7
484
};
485
486
enum isif_cfa_pattern {
487
ISIF_CFA_PAT_MOSAIC,
488
ISIF_CFA_PAT_STRIPE
489
};
490
491
struct isif_params_raw {
492
/* isif pixel format */
493
enum ccdc_pixfmt pix_fmt;
494
/* isif frame format */
495
enum ccdc_frmfmt frm_fmt;
496
/* video window */
497
struct v4l2_rect win;
498
/* field polarity */
499
enum vpfe_pin_pol fid_pol;
500
/* interface VD polarity */
501
enum vpfe_pin_pol vd_pol;
502
/* interface HD polarity */
503
enum vpfe_pin_pol hd_pol;
504
/* buffer type. Applicable for interlaced mode */
505
enum ccdc_buftype buf_type;
506
/* Gain values */
507
struct isif_gain gain;
508
/* cfa pattern */
509
enum isif_cfa_pattern cfa_pat;
510
/* Data MSB position */
511
enum isif_data_msb data_msb;
512
/* Enable horizontal flip */
513
unsigned char horz_flip_en;
514
/* Enable image invert vertically */
515
unsigned char image_invert_en;
516
517
/* all the userland defined stuff*/
518
struct isif_config_params_raw config_params;
519
};
520
521
enum isif_data_pack {
522
ISIF_PACK_16BIT,
523
ISIF_PACK_12BIT,
524
ISIF_PACK_8BIT
525
};
526
527
#define ISIF_WIN_NTSC {0, 0, 720, 480}
528
#define ISIF_WIN_VGA {0, 0, 640, 480}
529
530
#endif
531
#endif
532
533