1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#ifndef _DAVINCI_VPFE_USER_H
23#define _DAVINCI_VPFE_USER_H
24
25#include <linux/types.h>
26#include <linux/videodev2.h>
27
28
29
30
31
32
33
34
35
36
37
38
39#define VIDIOC_VPFE_ISIF_S_RAW_PARAMS \
40 _IOW('V', BASE_VIDIOC_PRIVATE + 1, struct vpfe_isif_raw_config)
41#define VIDIOC_VPFE_ISIF_G_RAW_PARAMS \
42 _IOR('V', BASE_VIDIOC_PRIVATE + 2, struct vpfe_isif_raw_config)
43#define VIDIOC_VPFE_IPIPE_S_CONFIG \
44 _IOWR('P', BASE_VIDIOC_PRIVATE + 3, struct vpfe_ipipe_config)
45#define VIDIOC_VPFE_IPIPE_G_CONFIG \
46 _IOWR('P', BASE_VIDIOC_PRIVATE + 4, struct vpfe_ipipe_config)
47#define VIDIOC_VPFE_RSZ_S_CONFIG \
48 _IOWR('R', BASE_VIDIOC_PRIVATE + 5, struct vpfe_rsz_config)
49#define VIDIOC_VPFE_RSZ_G_CONFIG \
50 _IOWR('R', BASE_VIDIOC_PRIVATE + 6, struct vpfe_rsz_config)
51
52
53
54
55#define VPFE_ISIF_CID_CRGAIN (V4L2_CID_USER_BASE | 0xa001)
56#define VPFE_ISIF_CID_CGRGAIN (V4L2_CID_USER_BASE | 0xa002)
57#define VPFE_ISIF_CID_CGBGAIN (V4L2_CID_USER_BASE | 0xa003)
58#define VPFE_ISIF_CID_CBGAIN (V4L2_CID_USER_BASE | 0xa004)
59#define VPFE_ISIF_CID_GAIN_OFFSET (V4L2_CID_USER_BASE | 0xa005)
60
61
62
63
64#define VPFE_CID_DPCM_PREDICTOR (V4L2_CID_USER_BASE | 0xa006)
65
66
67
68
69
70
71
72
73enum vpfe_isif_vdfc_corr_mode {
74
75 VPFE_ISIF_VDFC_NORMAL,
76
77
78
79
80 VPFE_ISIF_VDFC_HORZ_INTERPOL_IF_SAT,
81
82 VPFE_ISIF_VDFC_HORZ_INTERPOL
83};
84
85
86
87
88#define VPFE_ISIF_VDFC_TABLE_SIZE 8
89
90
91
92
93enum vpfe_isif_vdfc_shift {
94
95 VPFE_ISIF_VDFC_NO_SHIFT,
96
97 VPFE_ISIF_VDFC_SHIFT_1,
98
99 VPFE_ISIF_VDFC_SHIFT_2,
100
101 VPFE_ISIF_VDFC_SHIFT_3,
102
103 VPFE_ISIF_VDFC_SHIFT_4
104};
105
106
107
108
109struct vpfe_isif_vdfc_entry {
110
111 unsigned short pos_vert;
112
113 unsigned short pos_horz;
114
115
116
117
118 unsigned char level_at_pos;
119
120
121
122
123 unsigned char level_up_pixels;
124
125
126
127
128 unsigned char level_low_pixels;
129};
130
131
132
133
134struct vpfe_isif_dfc {
135
136 unsigned char en;
137
138 enum vpfe_isif_vdfc_corr_mode corr_mode;
139
140
141
142
143 unsigned char corr_whole_line;
144
145
146
147
148 enum vpfe_isif_vdfc_shift def_level_shift;
149
150 unsigned short def_sat_level;
151
152 short num_vdefects;
153
154 struct vpfe_isif_vdfc_entry table[VPFE_ISIF_VDFC_TABLE_SIZE];
155};
156
157
158
159
160
161
162
163enum vpfe_isif_horz_bc_mode {
164
165
166
167
168 VPFE_ISIF_HORZ_BC_DISABLE,
169
170
171
172
173 VPFE_ISIF_HORZ_BC_CLAMP_CALC_ENABLED,
174
175
176
177
178
179
180 VPFE_ISIF_HORZ_BC_CLAMP_NOT_UPDATED
181};
182
183
184
185
186enum vpfe_isif_horz_bc_base_win_sel {
187
188 VPFE_ISIF_SEL_MOST_LEFT_WIN,
189
190
191 VPFE_ISIF_SEL_MOST_RIGHT_WIN,
192};
193
194
195enum vpfe_isif_horz_bc_sz_h {
196 VPFE_ISIF_HORZ_BC_SZ_H_2PIXELS,
197 VPFE_ISIF_HORZ_BC_SZ_H_4PIXELS,
198 VPFE_ISIF_HORZ_BC_SZ_H_8PIXELS,
199 VPFE_ISIF_HORZ_BC_SZ_H_16PIXELS
200};
201
202
203enum vpfe_isif_horz_bc_sz_v {
204 VPFE_ISIF_HORZ_BC_SZ_H_32PIXELS,
205 VPFE_ISIF_HORZ_BC_SZ_H_64PIXELS,
206 VPFE_ISIF_HORZ_BC_SZ_H_128PIXELS,
207 VPFE_ISIF_HORZ_BC_SZ_H_256PIXELS
208};
209
210
211
212
213struct vpfe_isif_horz_bclamp {
214
215 enum vpfe_isif_horz_bc_mode mode;
216
217
218
219
220
221 unsigned char clamp_pix_limit;
222
223
224
225
226 enum vpfe_isif_horz_bc_base_win_sel base_win_sel_calc;
227
228 unsigned char win_count_calc;
229
230 unsigned short win_start_h_calc;
231
232 unsigned short win_start_v_calc;
233
234 enum vpfe_isif_horz_bc_sz_h win_h_sz_calc;
235
236 enum vpfe_isif_horz_bc_sz_v win_v_sz_calc;
237};
238
239
240
241
242enum vpfe_isif_vert_bc_reset_val_sel {
243
244 VPFE_ISIF_VERT_BC_USE_HORZ_CLAMP_VAL,
245
246 VPFE_ISIF_VERT_BC_USE_CONFIG_CLAMP_VAL,
247
248 VPFE_ISIF_VERT_BC_NO_UPDATE
249};
250
251enum vpfe_isif_vert_bc_sz_h {
252 VPFE_ISIF_VERT_BC_SZ_H_2PIXELS,
253 VPFE_ISIF_VERT_BC_SZ_H_4PIXELS,
254 VPFE_ISIF_VERT_BC_SZ_H_8PIXELS,
255 VPFE_ISIF_VERT_BC_SZ_H_16PIXELS,
256 VPFE_ISIF_VERT_BC_SZ_H_32PIXELS,
257 VPFE_ISIF_VERT_BC_SZ_H_64PIXELS
258};
259
260
261
262
263struct vpfe_isif_vert_bclamp {
264
265 enum vpfe_isif_vert_bc_reset_val_sel reset_val_sel;
266
267 unsigned short reset_clamp_val;
268
269
270
271
272 unsigned char line_ave_coef;
273
274 enum vpfe_isif_vert_bc_sz_h ob_h_sz_calc;
275
276 unsigned short ob_v_sz_calc;
277
278 unsigned short ob_start_h;
279
280 unsigned short ob_start_v;
281};
282
283
284
285
286struct vpfe_isif_black_clamp {
287
288
289
290
291 unsigned short dc_offset;
292
293
294
295
296 unsigned char en;
297
298
299
300
301
302 unsigned char bc_mode_color;
303
304 unsigned short vert_start_sub;
305
306 struct vpfe_isif_horz_bclamp horz;
307
308 struct vpfe_isif_vert_bclamp vert;
309};
310
311
312
313
314
315
316
317#define VPFE_ISIF_CSC_NUM_COEFF 16
318
319struct float_8_bit {
320
321 __u8 integer;
322
323 __u8 decimal;
324};
325
326struct float_16_bit {
327
328 __u16 integer;
329
330 __u16 decimal;
331};
332
333
334
335
336
337
338
339struct vpfe_isif_color_space_conv {
340
341 unsigned char en;
342
343
344
345
346 struct float_8_bit coeff[VPFE_ISIF_CSC_NUM_COEFF];
347};
348
349enum vpfe_isif_datasft {
350
351 VPFE_ISIF_NO_SHIFT,
352
353 VPFE_ISIF_1BIT_SHIFT,
354
355 VPFE_ISIF_2BIT_SHIFT,
356
357 VPFE_ISIF_3BIT_SHIFT,
358
359 VPFE_ISIF_4BIT_SHIFT,
360
361 VPFE_ISIF_5BIT_SHIFT,
362
363 VPFE_ISIF_6BIT_SHIFT
364};
365
366#define VPFE_ISIF_LINEAR_TAB_SIZE 192
367
368
369
370
371
372
373struct vpfe_isif_linearize {
374
375 unsigned char en;
376
377 enum vpfe_isif_datasft corr_shft;
378
379 struct float_16_bit scale_fact;
380
381 unsigned short table[VPFE_ISIF_LINEAR_TAB_SIZE];
382};
383
384
385
386
387enum vpfe_isif_fmt_mode {
388 VPFE_ISIF_SPLIT,
389 VPFE_ISIF_COMBINE
390};
391
392enum vpfe_isif_lnum {
393 VPFE_ISIF_1LINE,
394 VPFE_ISIF_2LINES,
395 VPFE_ISIF_3LINES,
396 VPFE_ISIF_4LINES
397};
398
399enum vpfe_isif_line {
400 VPFE_ISIF_1STLINE,
401 VPFE_ISIF_2NDLINE,
402 VPFE_ISIF_3RDLINE,
403 VPFE_ISIF_4THLINE
404};
405
406struct vpfe_isif_fmtplen {
407
408
409
410
411
412 unsigned short plen0;
413
414
415
416
417
418 unsigned short plen1;
419
420
421
422
423
424 unsigned short plen2;
425
426
427
428
429
430 unsigned short plen3;
431};
432
433struct vpfe_isif_fmt_cfg {
434
435 enum vpfe_isif_fmt_mode fmtmode;
436
437 unsigned char ln_alter_en;
438
439 enum vpfe_isif_lnum lnum;
440
441 unsigned int addrinc;
442};
443
444struct vpfe_isif_fmt_addr_ptr {
445
446 unsigned int init_addr;
447
448 enum vpfe_isif_line out_line;
449};
450
451struct vpfe_isif_fmtpgm_ap {
452
453 unsigned char pgm_aptr;
454
455 unsigned char pgmupdt;
456};
457
458struct vpfe_isif_data_formatter {
459
460 unsigned char en;
461
462 struct vpfe_isif_fmt_cfg cfg;
463
464 struct vpfe_isif_fmtplen plen;
465
466 unsigned short fmtrlen;
467
468 unsigned short fmthcnt;
469
470 struct vpfe_isif_fmt_addr_ptr fmtaddr_ptr[16];
471
472 unsigned char pgm_en[32];
473
474 struct vpfe_isif_fmtpgm_ap fmtpgm_ap[32];
475};
476
477struct vpfe_isif_df_csc {
478
479 unsigned int df_or_csc;
480
481 struct vpfe_isif_color_space_conv csc;
482
483 struct vpfe_isif_data_formatter df;
484
485 unsigned int start_pix;
486
487 unsigned int num_pixels;
488
489 unsigned int start_line;
490
491 unsigned int num_lines;
492};
493
494struct vpfe_isif_gain_offsets_adj {
495
496 unsigned char gain_sdram_en;
497
498 unsigned char gain_ipipe_en;
499
500 unsigned char gain_h3a_en;
501
502 unsigned char offset_sdram_en;
503
504 unsigned char offset_ipipe_en;
505
506 unsigned char offset_h3a_en;
507};
508
509struct vpfe_isif_cul {
510
511 unsigned char hcpat_odd;
512
513 unsigned char hcpat_even;
514
515 unsigned char vcpat;
516
517 unsigned char en_lpf;
518};
519
520
521struct vpfe_isif_raw_config {
522
523 struct vpfe_isif_linearize linearize;
524
525 struct vpfe_isif_df_csc df_csc;
526
527 struct vpfe_isif_dfc dfc;
528
529 struct vpfe_isif_black_clamp bclamp;
530
531 struct vpfe_isif_gain_offsets_adj gain_offset;
532
533 struct vpfe_isif_cul culling;
534
535 unsigned short horz_offset;
536
537 unsigned short vert_offset;
538};
539
540
541
542
543
544
545
546
547#define VPFE_IPIPE_INPUT_CONFIG BIT(0)
548
549#define VPFE_IPIPE_LUTDPC BIT(1)
550
551#define VPFE_IPIPE_OTFDPC BIT(2)
552
553#define VPFE_IPIPE_NF1 BIT(3)
554
555#define VPFE_IPIPE_NF2 BIT(4)
556
557#define VPFE_IPIPE_WB BIT(5)
558
559#define VPFE_IPIPE_RGB2RGB_1 BIT(6)
560
561#define VPFE_IPIPE_RGB2RGB_2 BIT(7)
562
563#define VPFE_IPIPE_GAMMA BIT(8)
564
565#define VPFE_IPIPE_3D_LUT BIT(9)
566
567#define VPFE_IPIPE_RGB2YUV BIT(10)
568
569#define VPFE_IPIPE_YUV422_CONV BIT(11)
570
571#define VPFE_IPIPE_YEE BIT(12)
572
573#define VPFE_IPIPE_GIC BIT(13)
574
575#define VPFE_IPIPE_CFA BIT(14)
576
577#define VPFE_IPIPE_CAR BIT(15)
578
579#define VPFE_IPIPE_CGS BIT(16)
580
581#define VPFE_IPIPE_GBCE BIT(17)
582
583#define VPFE_IPIPE_MAX_MODULES 18
584
585struct ipipe_float_u16 {
586 unsigned short integer;
587 unsigned short decimal;
588};
589
590struct ipipe_float_s16 {
591 short integer;
592 unsigned short decimal;
593};
594
595struct ipipe_float_u8 {
596 unsigned char integer;
597 unsigned char decimal;
598};
599
600
601
602
603enum vpfe_ipipe_dpc_corr_meth {
604
605 VPFE_IPIPE_DPC_REPL_BY_DOT = 0,
606
607 VPFE_IPIPE_DPC_CL = 1,
608
609 VPFE_IPIPE_DPC_CR = 2,
610
611 VPFE_IPIPE_DPC_H_INTP = 3,
612
613 VPFE_IPIPE_DPC_V_INTP = 4,
614
615 VPFE_IPIPE_DPC_CT = 5,
616
617 VPFE_IPIPE_DPC_CB = 6,
618
619 VPFE_IPIPE_DPC_2D_INTP = 7,
620};
621
622struct vpfe_ipipe_lutdpc_entry {
623
624 unsigned short horz_pos;
625
626 unsigned short vert_pos;
627 enum vpfe_ipipe_dpc_corr_meth method;
628};
629
630#define VPFE_IPIPE_MAX_SIZE_DPC 256
631
632
633struct vpfe_ipipe_lutdpc {
634
635 unsigned char en;
636
637
638
639 unsigned char repl_white;
640
641
642
643 unsigned short dpc_size;
644 struct vpfe_ipipe_lutdpc_entry table[VPFE_IPIPE_MAX_SIZE_DPC];
645};
646
647enum vpfe_ipipe_otfdpc_det_meth {
648 VPFE_IPIPE_DPC_OTF_MIN_MAX,
649 VPFE_IPIPE_DPC_OTF_MIN_MAX2
650};
651
652struct vpfe_ipipe_otfdpc_thr {
653 unsigned short r;
654 unsigned short gr;
655 unsigned short gb;
656 unsigned short b;
657};
658
659enum vpfe_ipipe_otfdpc_alg {
660 VPFE_IPIPE_OTFDPC_2_0,
661 VPFE_IPIPE_OTFDPC_3_0
662};
663
664struct vpfe_ipipe_otfdpc_2_0_cfg {
665
666 struct vpfe_ipipe_otfdpc_thr det_thr;
667
668
669
670 struct vpfe_ipipe_otfdpc_thr corr_thr;
671};
672
673struct vpfe_ipipe_otfdpc_3_0_cfg {
674
675
676 unsigned char act_adj_shf;
677
678 unsigned short det_thr;
679
680 unsigned short det_slp;
681
682 unsigned short det_thr_min;
683
684 unsigned short det_thr_max;
685
686 unsigned short corr_thr;
687
688 unsigned short corr_slp;
689
690 unsigned short corr_thr_min;
691
692 unsigned short corr_thr_max;
693};
694
695struct vpfe_ipipe_otfdpc {
696
697 unsigned char en;
698
699 enum vpfe_ipipe_otfdpc_det_meth det_method;
700
701
702
703 enum vpfe_ipipe_otfdpc_alg alg;
704 union {
705
706 struct vpfe_ipipe_otfdpc_2_0_cfg dpc_2_0;
707
708 struct vpfe_ipipe_otfdpc_3_0_cfg dpc_3_0;
709 } alg_cfg;
710};
711
712
713#define VPFE_IPIPE_NF_THR_TABLE_SIZE 8
714
715#define VPFE_IPIPE_NF_STR_TABLE_SIZE 8
716
717
718enum vpfe_ipipe_nf_sampl_meth {
719
720 VPFE_IPIPE_NF_BOX,
721
722 VPFE_IPIPE_NF_DIAMOND
723};
724
725
726struct vpfe_ipipe_nf {
727
728 unsigned char en;
729
730 enum vpfe_ipipe_nf_sampl_meth gr_sample_meth;
731
732
733 unsigned char shft_val;
734
735
736 unsigned char spread_val;
737
738
739
740 unsigned char apply_lsc_gain;
741
742 unsigned short thr[VPFE_IPIPE_NF_THR_TABLE_SIZE];
743
744 unsigned char str[VPFE_IPIPE_NF_STR_TABLE_SIZE];
745
746 unsigned short edge_det_min_thr;
747
748 unsigned short edge_det_max_thr;
749};
750
751enum vpfe_ipipe_gic_alg {
752 VPFE_IPIPE_GIC_ALG_CONST_GAIN,
753 VPFE_IPIPE_GIC_ALG_ADAPT_GAIN
754};
755
756enum vpfe_ipipe_gic_thr_sel {
757 VPFE_IPIPE_GIC_THR_REG,
758 VPFE_IPIPE_GIC_THR_NF
759};
760
761enum vpfe_ipipe_gic_wt_fn_type {
762
763 VPFE_IPIPE_GIC_WT_FN_TYP_DIF,
764
765 VPFE_IPIPE_GIC_WT_FN_TYP_HP_VAL
766};
767
768
769struct vpfe_ipipe_gic {
770
771 unsigned char en;
772
773 enum vpfe_ipipe_gic_alg gic_alg;
774
775
776 unsigned short gain;
777
778 enum vpfe_ipipe_gic_thr_sel thr_sel;
779
780 unsigned short thr;
781
782
783
784
785 unsigned short slope;
786
787
788
789 unsigned char apply_lsc_gain;
790
791
792
793 struct ipipe_float_u8 nf2_thr_gain;
794
795
796
797 enum vpfe_ipipe_gic_wt_fn_type wt_fn_type;
798};
799
800
801struct vpfe_ipipe_wb {
802
803 short ofst_r;
804
805 short ofst_gr;
806
807 short ofst_gb;
808
809 short ofst_b;
810
811 struct ipipe_float_u16 gain_r;
812
813 struct ipipe_float_u16 gain_gr;
814
815 struct ipipe_float_u16 gain_gb;
816
817 struct ipipe_float_u16 gain_b;
818};
819
820enum vpfe_ipipe_cfa_alg {
821
822 VPFE_IPIPE_CFA_ALG_2DIRAC,
823
824 VPFE_IPIPE_CFA_ALG_2DIRAC_DAA,
825
826 VPFE_IPIPE_CFA_ALG_DAA
827};
828
829
830struct vpfe_ipipe_cfa {
831
832 enum vpfe_ipipe_cfa_alg alg;
833
834 unsigned short hpf_thr_2dir;
835
836 unsigned short hpf_slp_2dir;
837
838 unsigned short hp_mix_thr_2dir;
839
840 unsigned short hp_mix_slope_2dir;
841
842 unsigned short dir_thr_2dir;
843
844 unsigned short dir_slope_2dir;
845
846 unsigned short nd_wt_2dir;
847
848 unsigned short hue_fract_daa;
849
850 unsigned short edge_thr_daa;
851
852 unsigned short thr_min_daa;
853
854 unsigned short thr_slope_daa;
855
856 unsigned short slope_min_daa;
857
858 unsigned short slope_slope_daa;
859
860 unsigned short lp_wt_daa;
861};
862
863
864struct vpfe_ipipe_rgb2rgb {
865
866 struct ipipe_float_s16 coef_rr;
867
868 struct ipipe_float_s16 coef_gr;
869
870 struct ipipe_float_s16 coef_br;
871
872 struct ipipe_float_s16 coef_rg;
873
874 struct ipipe_float_s16 coef_gg;
875
876 struct ipipe_float_s16 coef_bg;
877
878 struct ipipe_float_s16 coef_rb;
879
880 struct ipipe_float_s16 coef_gb;
881
882 struct ipipe_float_s16 coef_bb;
883
884 int out_ofst_r;
885
886 int out_ofst_g;
887
888 int out_ofst_b;
889};
890
891#define VPFE_IPIPE_MAX_SIZE_GAMMA 512
892
893enum vpfe_ipipe_gamma_tbl_size {
894 VPFE_IPIPE_GAMMA_TBL_SZ_64 = 64,
895 VPFE_IPIPE_GAMMA_TBL_SZ_128 = 128,
896 VPFE_IPIPE_GAMMA_TBL_SZ_256 = 256,
897 VPFE_IPIPE_GAMMA_TBL_SZ_512 = 512,
898};
899
900enum vpfe_ipipe_gamma_tbl_sel {
901 VPFE_IPIPE_GAMMA_TBL_RAM = 0,
902 VPFE_IPIPE_GAMMA_TBL_ROM = 1,
903};
904
905struct vpfe_ipipe_gamma_entry {
906
907 short slope;
908
909 unsigned short offset;
910};
911
912
913struct vpfe_ipipe_gamma {
914
915
916
917 unsigned char bypass_r;
918
919
920
921 unsigned char bypass_b;
922
923
924
925 unsigned char bypass_g;
926
927 enum vpfe_ipipe_gamma_tbl_sel tbl_sel;
928
929
930 enum vpfe_ipipe_gamma_tbl_size tbl_size;
931
932 struct vpfe_ipipe_gamma_entry table_r[VPFE_IPIPE_MAX_SIZE_GAMMA];
933
934 struct vpfe_ipipe_gamma_entry table_b[VPFE_IPIPE_MAX_SIZE_GAMMA];
935
936 struct vpfe_ipipe_gamma_entry table_g[VPFE_IPIPE_MAX_SIZE_GAMMA];
937};
938
939#define VPFE_IPIPE_MAX_SIZE_3D_LUT 729
940
941struct vpfe_ipipe_3d_lut_entry {
942
943 unsigned short r;
944
945 unsigned short g;
946
947 unsigned short b;
948};
949
950
951struct vpfe_ipipe_3d_lut {
952
953 unsigned char en;
954
955 struct vpfe_ipipe_3d_lut_entry table[VPFE_IPIPE_MAX_SIZE_3D_LUT];
956};
957
958
959struct vpfe_ipipe_rgb2yuv {
960
961 struct ipipe_float_s16 coef_ry;
962
963 struct ipipe_float_s16 coef_gy;
964
965 struct ipipe_float_s16 coef_by;
966
967 struct ipipe_float_s16 coef_rcb;
968
969 struct ipipe_float_s16 coef_gcb;
970
971 struct ipipe_float_s16 coef_bcb;
972
973 struct ipipe_float_s16 coef_rcr;
974
975 struct ipipe_float_s16 coef_gcr;
976
977 struct ipipe_float_s16 coef_bcr;
978
979 int out_ofst_y;
980
981 int out_ofst_cb;
982
983 int out_ofst_cr;
984};
985
986enum vpfe_ipipe_gbce_type {
987 VPFE_IPIPE_GBCE_Y_VAL_TBL = 0,
988 VPFE_IPIPE_GBCE_GAIN_TBL = 1,
989};
990
991#define VPFE_IPIPE_MAX_SIZE_GBCE_LUT 1024
992
993
994struct vpfe_ipipe_gbce {
995
996 unsigned char en;
997
998 enum vpfe_ipipe_gbce_type type;
999
1000 unsigned short table[VPFE_IPIPE_MAX_SIZE_GBCE_LUT];
1001};
1002
1003
1004
1005
1006enum vpfe_chr_pos {
1007
1008 VPFE_IPIPE_YUV422_CHR_POS_COSITE = 0,
1009
1010 VPFE_IPIPE_YUV422_CHR_POS_CENTRE = 1,
1011};
1012
1013
1014struct vpfe_ipipe_yuv422_conv {
1015
1016 unsigned char en_chrom_lpf;
1017
1018 enum vpfe_chr_pos chrom_pos;
1019};
1020
1021#define VPFE_IPIPE_MAX_SIZE_YEE_LUT 1024
1022
1023enum vpfe_ipipe_yee_merge_meth {
1024 VPFE_IPIPE_YEE_ABS_MAX = 0,
1025 VPFE_IPIPE_YEE_EE_ES = 1,
1026};
1027
1028
1029struct vpfe_ipipe_yee {
1030
1031 unsigned char en;
1032
1033 unsigned char en_halo_red;
1034
1035 enum vpfe_ipipe_yee_merge_meth merge_meth;
1036
1037 unsigned char hpf_shft;
1038
1039 short hpf_coef_00;
1040
1041 short hpf_coef_01;
1042
1043 short hpf_coef_02;
1044
1045 short hpf_coef_10;
1046
1047 short hpf_coef_11;
1048
1049 short hpf_coef_12;
1050
1051 short hpf_coef_20;
1052
1053 short hpf_coef_21;
1054
1055 short hpf_coef_22;
1056
1057 unsigned short yee_thr;
1058
1059 unsigned short es_gain;
1060
1061 unsigned short es_thr1;
1062
1063 unsigned short es_thr2;
1064
1065 unsigned short es_gain_grad;
1066
1067 unsigned short es_ofst_grad;
1068
1069 short table[VPFE_IPIPE_MAX_SIZE_YEE_LUT];
1070};
1071
1072enum vpfe_ipipe_car_meth {
1073
1074 VPFE_IPIPE_CAR_CHR_GAIN_CTRL = 0,
1075
1076
1077
1078 VPFE_IPIPE_CAR_DYN_SWITCH = 1,
1079
1080 VPFE_IPIPE_CAR_MED_FLTR = 2,
1081};
1082
1083enum vpfe_ipipe_car_hpf_type {
1084 VPFE_IPIPE_CAR_HPF_Y = 0,
1085 VPFE_IPIPE_CAR_HPF_H = 1,
1086 VPFE_IPIPE_CAR_HPF_V = 2,
1087 VPFE_IPIPE_CAR_HPF_2D = 3,
1088
1089 VPFE_IPIPE_CAR_HPF_2D_YEE = 4,
1090};
1091
1092struct vpfe_ipipe_car_gain {
1093
1094 unsigned char gain;
1095
1096 unsigned char shft;
1097
1098 unsigned short gain_min;
1099};
1100
1101
1102struct vpfe_ipipe_car {
1103
1104 unsigned char en;
1105
1106 enum vpfe_ipipe_car_meth meth;
1107
1108 struct vpfe_ipipe_car_gain gain1;
1109
1110 struct vpfe_ipipe_car_gain gain2;
1111
1112 enum vpfe_ipipe_car_hpf_type hpf;
1113
1114 unsigned char hpf_thr;
1115
1116 unsigned char hpf_shft;
1117
1118 unsigned char sw0;
1119
1120 unsigned char sw1;
1121};
1122
1123
1124struct vpfe_ipipe_cgs {
1125
1126 unsigned char en;
1127
1128 unsigned char h_thr;
1129
1130 unsigned char h_slope;
1131
1132 unsigned char h_shft;
1133
1134 unsigned char h_min;
1135};
1136
1137
1138
1139
1140#define VPFE_IPIPE_MAX_INPUT_WIDTH 2600
1141
1142struct vpfe_ipipe_input_config {
1143 unsigned int vst;
1144 unsigned int hst;
1145};
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169struct vpfe_ipipe_config {
1170 __u32 flag;
1171 struct vpfe_ipipe_input_config __user *input_config;
1172 struct vpfe_ipipe_lutdpc __user *lutdpc;
1173 struct vpfe_ipipe_otfdpc __user *otfdpc;
1174 struct vpfe_ipipe_nf __user *nf1;
1175 struct vpfe_ipipe_nf __user *nf2;
1176 struct vpfe_ipipe_gic __user *gic;
1177 struct vpfe_ipipe_wb __user *wbal;
1178 struct vpfe_ipipe_cfa __user *cfa;
1179 struct vpfe_ipipe_rgb2rgb __user *rgb2rgb1;
1180 struct vpfe_ipipe_rgb2rgb __user *rgb2rgb2;
1181 struct vpfe_ipipe_gamma __user *gamma;
1182 struct vpfe_ipipe_3d_lut __user *lut;
1183 struct vpfe_ipipe_rgb2yuv __user *rgb2yuv;
1184 struct vpfe_ipipe_gbce __user *gbce;
1185 struct vpfe_ipipe_yuv422_conv __user *yuv422_conv;
1186 struct vpfe_ipipe_yee __user *yee;
1187 struct vpfe_ipipe_car __user *car;
1188 struct vpfe_ipipe_cgs __user *cgs;
1189};
1190
1191
1192
1193
1194
1195enum vpfe_rsz_intp_t {
1196 VPFE_RSZ_INTP_CUBIC,
1197 VPFE_RSZ_INTP_LINEAR
1198};
1199
1200
1201enum vpfe_rsz_h_lpf_lse_t {
1202 VPFE_RSZ_H_LPF_LSE_INTERN,
1203 VPFE_RSZ_H_LPF_LSE_USER_VAL
1204};
1205
1206enum vpfe_rsz_down_scale_ave_sz {
1207 VPFE_IPIPE_DWN_SCALE_1_OVER_2,
1208 VPFE_IPIPE_DWN_SCALE_1_OVER_4,
1209 VPFE_IPIPE_DWN_SCALE_1_OVER_8,
1210 VPFE_IPIPE_DWN_SCALE_1_OVER_16,
1211 VPFE_IPIPE_DWN_SCALE_1_OVER_32,
1212 VPFE_IPIPE_DWN_SCALE_1_OVER_64,
1213 VPFE_IPIPE_DWN_SCALE_1_OVER_128,
1214 VPFE_IPIPE_DWN_SCALE_1_OVER_256
1215};
1216
1217struct vpfe_rsz_output_spec {
1218
1219 unsigned char h_flip;
1220
1221 unsigned char v_flip;
1222
1223 unsigned int vst_y;
1224
1225 unsigned int vst_c;
1226
1227 enum vpfe_rsz_intp_t v_typ_y;
1228
1229 enum vpfe_rsz_intp_t v_typ_c;
1230
1231 unsigned char v_lpf_int_y;
1232
1233 unsigned char v_lpf_int_c;
1234
1235 enum vpfe_rsz_intp_t h_typ_y;
1236
1237 enum vpfe_rsz_intp_t h_typ_c;
1238
1239 unsigned char h_lpf_int_y;
1240
1241 unsigned char h_lpf_int_c;
1242
1243 unsigned char en_down_scale;
1244
1245
1246
1247
1248 enum vpfe_rsz_down_scale_ave_sz h_dscale_ave_sz;
1249
1250
1251
1252
1253 enum vpfe_rsz_down_scale_ave_sz v_dscale_ave_sz;
1254
1255
1256 unsigned int user_y_ofst;
1257
1258
1259 unsigned int user_c_ofst;
1260};
1261
1262struct vpfe_rsz_config_params {
1263 unsigned int vst;
1264
1265
1266
1267 unsigned int hst;
1268
1269
1270 struct vpfe_rsz_output_spec output1;
1271
1272
1273 struct vpfe_rsz_output_spec output2;
1274
1275 unsigned char chroma_sample_even;
1276 unsigned char frame_div_mode_en;
1277 unsigned char yuv_y_min;
1278 unsigned char yuv_y_max;
1279 unsigned char yuv_c_min;
1280 unsigned char yuv_c_max;
1281 enum vpfe_chr_pos out_chr_pos;
1282 unsigned char bypass;
1283};
1284
1285
1286struct vpfe_rsz_config {
1287 struct vpfe_rsz_config_params *config;
1288};
1289
1290#endif
1291