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