xref: /OK3568_Linux_fs/kernel/drivers/media/i2c/nvp6158_drv/nvp6158_video_eq.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 /********************************************************************************
3 *
4 *  Copyright (C) 2017 	NEXTCHIP Inc. All rights reserved.
5 *  Module		: video_eq.h
6 *  Description	:
7 *  Author		:
8 *  Date         :
9 *  Version		: Version 1.0
10 *
11 ********************************************************************************
12 *  History      :
13 *
14 *
15 ********************************************************************************/
16 #ifndef _RAPTOR3_VIDEO_EQ_H_
17 #define _RAPTOR3_VIDEO_EQ_H_
18 
19 #include "nvp6158_common.h"
20 #include "nvp6158_video_auto_detect.h"
21 ///////////////////////////////
22 typedef enum ACC_DEBUG
23 {
24 	ACC_GAIN_NORMAL,
25 	ACC_GAIN_DEBUG,
26 
27 }ACC_DEBUG;
28 
29 typedef enum DISTANCE
30 {
31 	SHORT_2M,
32 	LONG_100M,
33 	LONG_200M,
34 	LONG_300M,
35 	LONG_400M,
36 	LONG_500M,
37 }CABLE_DISTANCE;
38 
39 typedef struct _NC_VD_AUTO_HSYNC_STR{ // 170207 Hsync Accumulation
40  unsigned char Ch;
41  unsigned char dev_addr;
42  unsigned char h_lock;				// Bank 0 0xE2 [3:0] [Ch3:Ch0]
43  unsigned int Hsync_Accum_Val1;		// Value 1  			// 170210 Add
44  unsigned int Hsync_Accum_Val2;		// Value 2				// 170210 Add
45  unsigned int Hsync_Accum_Result;	// Value 1 - Value 2	// 170210 Fix
46 }NC_VD_AUTO_HSYNC_STR;
47 
48 typedef struct _NC_VD_AUTO_SAM_STR{ // 170207 SAM Value 항목 추가
49  unsigned char Ch;
50  unsigned char dev_addr;
51  /*
52  unsigned char SAMval_CD;			// B13 0xCD [7:0]
53  unsigned char SAMval_CC;			// B13 0xCC [9:8]
54  */
55  unsigned int SAMval;
56 }NC_VD_AUTO_SAM_STR;
57 
58 typedef struct _NC_VD_AUTO_AGC_STR{ // 170207 AGC Value 항목 추가
59  unsigned char Ch;
60  unsigned char devnum;
61  unsigned char agc_lock;			// Bank 0 0xE0 [3:0] [Ch3:Ch0]
62  unsigned char AGCval;				// B13 0xB8
63 }NC_VD_AUTO_AGC_STR;
64 
65 typedef struct _NC_VD_AUTO_DIST_STR{ // 170207 Cable Distance 항목 추가
66  unsigned char Ch;
67  unsigned char devnum;
68  unsigned char Dist;					// B13 0xA0
69 }NC_VD_AUTO_CABLE_DIST_STR;
70 
71 typedef struct _NC_VD_MANUAL_DIST_STR{
72  unsigned char Ch;
73  unsigned char dev_addr;
74  unsigned char Dist;
75  unsigned char FmtDef;
76  unsigned char cabletype;				// 0:coax, 1:utp, 2:reserved1, 3:reserved2
77 }NC_VD_MANUAL_CABLE_DIST_STR;
78 
79 ///////////////////////////////////
80 typedef struct _video_equalizer_hsync_stage_s{
81 	unsigned int hsync_stage[9];
82 }video_equalizer_hsync_stage_s;
83 
84 typedef struct _video_equalizer_agc_stage_s{
85 	unsigned int agc_stage[9];
86 }video_equalizer_agc_stage_s;
87 
88 typedef struct _video_equalizer_distance_table_s{
89 	video_equalizer_hsync_stage_s hsync_stage;
90 	video_equalizer_agc_stage_s   agc_stage;
91 } nvp6158_video_equalizer_distance_table_s;
92 
93 
94 typedef struct _video_equalizer_base_s{
95 	unsigned char eq_bypass[11];			// B5x01
96 	unsigned char eq_band_sel[11];		// B5x58
97 	unsigned char eq_gain_sel[11];		// B5x5C
98 
99 	unsigned char deq_a_on[11];			// BAx3d
100 	unsigned char deq_a_sel[11];			// BAx3C
101 	unsigned char deq_b_sel[11];			// B9x80
102 
103 } video_equalizer_base_s;
104 
105 typedef struct _video_equalizer_coeff_s{
106 
107 	unsigned char deqA_01[11];	// BankA 0x30
108 	unsigned char deqA_02[11];	// BankA 0x31
109 	unsigned char deqA_03[11];   // BankA 0x32
110 	unsigned char deqA_04[11];   // BankA 0x33
111 	unsigned char deqA_05[11];   // BankA 0x34
112 	unsigned char deqA_06[11];   // BankA 0x35
113 	unsigned char deqA_07[11];   // BankA 0x36
114 	unsigned char deqA_08[11];   // BankA 0x37
115 	unsigned char deqA_09[11];   // BankA 0x38
116 	unsigned char deqA_10[11];   // BankA 0x39
117 	unsigned char deqA_11[11];   // BankA 0x3A
118 	unsigned char deqA_12[11];   // BankA 0x3B
119 
120 } video_equalizer_coeff_s;
121 
122 typedef struct _video_equalizer_color_s{
123 	unsigned char contrast[11];			// Bank0 0x10
124 	unsigned char h_peaking[11];			// Bank0 0x18
125 	unsigned char c_filter[11];			// Bank0 0x21
126 	unsigned char hue[11];				// Bank0 0x40
127 	unsigned char u_gain[11];			// Bank0 0x44
128 	unsigned char v_gain[11];			// Bank0 0x48
129 	unsigned char u_offset[11];			// Bank0 0x4c
130 	unsigned char v_offset[11];			// Bank0 0x50
131 
132 	unsigned char black_level[11];		// Bank5 0x20
133 	unsigned char acc_ref[11];			// Bank5 0x27
134 
135 	unsigned char cti_delay[11];			// Bank5 0x28
136 	unsigned char sub_saturation[11];    // Bank5 0x2B
137 	unsigned char burst_dec_a[11];       // Bank5 0x24
138 	unsigned char burst_dec_b[11];       // Bank5 0x5F
139 	unsigned char burst_dec_c[11];       // Bank5 0xD1
140 	unsigned char c_option[11];          // Bank5 0xD5
141 
142 	unsigned char y_filter_b[11];		// BankA 0x25
143 	unsigned char y_filter_b_sel[11];	// BankA 0x27
144 
145 } video_equalizer_color_s;
146 
147 typedef struct _video_equalizer_timing_a_s{
148 	unsigned char h_delay_a[11];			// Bank0 0x58
149 	unsigned char h_delay_b[11];			// Bank0 0x89
150 	unsigned char h_delay_c[11];			// Bank0 0x8E
151 	unsigned char y_delay[11];			// Bank0 0xA0
152 
153 } video_equalizer_timing_a_s;
154 
155 typedef struct _video_equalizer_clk_s{
156 	unsigned char clk_adc[11];			// Bank1 0x84
157 	unsigned char clk_dec[11];			// Bank1 0x8C
158 
159 } video_equalizer_clk_s;
160 
161 typedef struct _video_equalizer_timing_b_s{
162 	unsigned char h_scaler1[11];		// B9x96 + ch*0x20
163 	unsigned char h_scaler2[11];		// B9x97 + ch*0x20
164 	unsigned char h_scaler3[11];		// B9x98 + ch*0x20
165 	unsigned char h_scaler4[11];		// B9x99 + ch*0x20
166 	unsigned char h_scaler5[11];		// B9x9a + ch*0x20
167 	unsigned char h_scaler6[11];		// B9x9b + ch*0x20
168 	unsigned char h_scaler7[11];		// B9x9c + ch*0x20
169 	unsigned char h_scaler8[11];		// B9x9d + ch*0x20
170 	unsigned char h_scaler9[11];		// B9x9e + ch*0x20
171 
172 	unsigned char pn_auto[11];		// B9x40 + ch
173 
174 	unsigned char comb_mode[11];		// B5x90
175 	unsigned char h_pll_op_a[11];	// B5xB9
176 	unsigned char mem_path[11];		// B5x57
177 	unsigned char fsc_lock_speed[11]; //B5x25
178 
179 	unsigned char format_set1[11];	// B0x81
180 	unsigned char format_set2[11];	// B0x85
181 
182 	unsigned char v_delay[11];		// B0x64
183 } video_equalizer_timing_b_s;
184 
185 
186 typedef struct _video_equalizer_value_table_s{
187 	video_equalizer_base_s		eq_base;
188 	video_equalizer_coeff_s 	eq_coeff;
189 	video_equalizer_color_s 	eq_color;
190 
191 	video_equalizer_timing_a_s 	eq_timing_a;
192 	video_equalizer_clk_s		eq_clk;
193 	video_equalizer_timing_b_s	eq_timing_b;
194 
195 } video_equalizer_value_table_s;
196 
197 typedef struct _video_equalizer_info{
198 	unsigned char Ch;
199 	unsigned char devnum;
200 	unsigned char distance;
201 	unsigned char FmtDef;
202 } video_equalizer_info_s;
203 
204 CABLE_DISTANCE NVP6158_NC_VD_MANUAL_CABLE_DISTANCE_Get (unsigned char Ch, video_input_cable_dist *pDistance);
205 CABLE_DISTANCE nvp6158_get_eq_dist(video_equalizer_info_s *ps_eq_info);
206 unsigned char __nvp6158_video_cable_manualdistance( unsigned char cabletype, video_input_hsync_accum *pvin_hsync_accum,
207 				video_input_acc_gain_val *pvin_acc_val, nvp6158_video_equalizer_distance_table_s *pdistance_value );
208 void __nvp6158_eq_base_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_base_s *pbase );
209 void __nvp6158_eq_coeff_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_coeff_s *pcoeff );
210 void __nvp6158_eq_color_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_color_s *pcolor );
211 void __nvp6158_eq_timing_a_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_timing_a_s *ptiming_a );
212 void __nvp6158_eq_clk_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_clk_s *pclk );
213 void __nvp6158_eq_timing_b_set_value( video_equalizer_info_s *pvin_eq_set, video_equalizer_timing_b_s *ptiming_b );
214 unsigned int __nvp6158_get_acc_gain(unsigned char ch, unsigned char devnum);
215 unsigned int __nvp6158_get_yplus_slope(unsigned char ch, unsigned char devnum);
216 unsigned int __nvp6158_get_yminus_slope(unsigned char ch, unsigned char devnum);
217 unsigned int __nvp6158_get_sync_width( unsigned char ch, unsigned char devnum );
218 void __nvp6168_set_eq_ext_val(video_equalizer_info_s *pvin_eq_set);
219 
220 void nvp6158_video_input_cable_manualdist_read(video_input_cable_dist *vin_cable_dist );
221 void nvp6168_video_input_cable_manualdist_read(video_input_cable_dist *vin_cable_dist );
222 
223 int nvp6158_set_equalizer(video_equalizer_info_s *pvin_eq_set);
224 int nvp6168_set_equalizer(video_equalizer_info_s *pvin_eq_set);
225 int  nvp6158_video_input_cable_measure_way( unsigned char ch, unsigned char devnum );
226 CABLE_DISTANCE nvp6158_get_eq_dist(video_equalizer_info_s *ps_eq_info);
227 
228 #endif /* _RAPTOR3_VIDEO_EQ_H_ */
229