1 /*
2  * stv0900_init.h
3  *
4  * Driver for ST STV0900 satellite demodulator IC.
5  *
6  * Copyright (C) ST Microelectronics.
7  * Copyright (C) 2009 NetUP Inc.
8  * Copyright (C) 2009 Igor M. Liplianin <liplianin@netup.ru>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *
19  * GNU General Public License for more details.
20  */
21 
22 #ifndef STV0900_INIT_H
23 #define STV0900_INIT_H
24 
25 #include "stv0900_priv.h"
26 
27 /* DVBS2 C/N Look-Up table */
28 static const struct stv0900_table stv0900_s2_cn = {
29 	55,
30 	{
31 		{ -30,	13348 }, /*C/N=-3dB*/
32 		{ -20,	12640 }, /*C/N=-2dB*/
33 		{ -10,	11883 }, /*C/N=-1dB*/
34 		{ 0,	11101 }, /*C/N=-0dB*/
35 		{ 5,	10718 }, /*C/N=0.5dB*/
36 		{ 10,	10339 }, /*C/N=1.0dB*/
37 		{ 15,	9947 }, /*C/N=1.5dB*/
38 		{ 20,	9552 }, /*C/N=2.0dB*/
39 		{ 25,	9183 }, /*C/N=2.5dB*/
40 		{ 30,	8799 }, /*C/N=3.0dB*/
41 		{ 35,	8422 }, /*C/N=3.5dB*/
42 		{ 40,	8062 }, /*C/N=4.0dB*/
43 		{ 45,	7707 }, /*C/N=4.5dB*/
44 		{ 50,	7353 }, /*C/N=5.0dB*/
45 		{ 55,	7025 }, /*C/N=5.5dB*/
46 		{ 60,	6684 }, /*C/N=6.0dB*/
47 		{ 65,	6331 }, /*C/N=6.5dB*/
48 		{ 70,	6036 }, /*C/N=7.0dB*/
49 		{ 75,	5727 }, /*C/N=7.5dB*/
50 		{ 80,	5437 }, /*C/N=8.0dB*/
51 		{ 85,	5164 }, /*C/N=8.5dB*/
52 		{ 90,	4902 }, /*C/N=9.0dB*/
53 		{ 95,	4653 }, /*C/N=9.5dB*/
54 		{ 100,	4408 }, /*C/N=10.0dB*/
55 		{ 105,	4187 }, /*C/N=10.5dB*/
56 		{ 110,	3961 }, /*C/N=11.0dB*/
57 		{ 115,	3751 }, /*C/N=11.5dB*/
58 		{ 120,	3558 }, /*C/N=12.0dB*/
59 		{ 125,	3368 }, /*C/N=12.5dB*/
60 		{ 130,	3191 }, /*C/N=13.0dB*/
61 		{ 135,	3017 }, /*C/N=13.5dB*/
62 		{ 140,	2862 }, /*C/N=14.0dB*/
63 		{ 145,	2710 }, /*C/N=14.5dB*/
64 		{ 150,	2565 }, /*C/N=15.0dB*/
65 		{ 160,	2300 }, /*C/N=16.0dB*/
66 		{ 170,	2058 }, /*C/N=17.0dB*/
67 		{ 180,	1849 }, /*C/N=18.0dB*/
68 		{ 190,	1663 }, /*C/N=19.0dB*/
69 		{ 200,	1495 }, /*C/N=20.0dB*/
70 		{ 210,	1349 }, /*C/N=21.0dB*/
71 		{ 220,	1222 }, /*C/N=22.0dB*/
72 		{ 230,	1110 }, /*C/N=23.0dB*/
73 		{ 240,	1011 }, /*C/N=24.0dB*/
74 		{ 250,	925 }, /*C/N=25.0dB*/
75 		{ 260,	853 }, /*C/N=26.0dB*/
76 		{ 270,	789 }, /*C/N=27.0dB*/
77 		{ 280,	734 }, /*C/N=28.0dB*/
78 		{ 290,	690 }, /*C/N=29.0dB*/
79 		{ 300,	650 }, /*C/N=30.0dB*/
80 		{ 310,	619 }, /*C/N=31.0dB*/
81 		{ 320,	593 }, /*C/N=32.0dB*/
82 		{ 330,	571 }, /*C/N=33.0dB*/
83 		{ 400,	498 }, /*C/N=40.0dB*/
84 		{ 450,	484 }, /*C/N=45.0dB*/
85 		{ 500,	481 }  /*C/N=50.0dB*/
86 	}
87 };
88 
89 /* RF level C/N Look-Up table */
90 static const struct stv0900_table stv0900_rf = {
91 	14,
92 	{
93 		{ -5, 0xCAA1 }, /*-5dBm*/
94 		{ -10, 0xC229 }, /*-10dBm*/
95 		{ -15, 0xBB08 }, /*-15dBm*/
96 		{ -20, 0xB4BC }, /*-20dBm*/
97 		{ -25, 0xAD5A }, /*-25dBm*/
98 		{ -30, 0xA298 }, /*-30dBm*/
99 		{ -35, 0x98A8 }, /*-35dBm*/
100 		{ -40, 0x8389 }, /*-40dBm*/
101 		{ -45, 0x59BE }, /*-45dBm*/
102 		{ -50, 0x3A14 }, /*-50dBm*/
103 		{ -55, 0x2D11 }, /*-55dBm*/
104 		{ -60, 0x210D }, /*-60dBm*/
105 		{ -65, 0xA14F }, /*-65dBm*/
106 		{ -70, 0x7AA }	/*-70dBm*/
107 	}
108 };
109 
110 struct stv0900_car_loop_optim {
111 	enum fe_stv0900_modcode modcode;
112 	u8 car_loop_pilots_on_2;
113 	u8 car_loop_pilots_off_2;
114 	u8 car_loop_pilots_on_5;
115 	u8 car_loop_pilots_off_5;
116 	u8 car_loop_pilots_on_10;
117 	u8 car_loop_pilots_off_10;
118 	u8 car_loop_pilots_on_20;
119 	u8 car_loop_pilots_off_20;
120 	u8 car_loop_pilots_on_30;
121 	u8 car_loop_pilots_off_30;
122 
123 };
124 
125 struct stv0900_short_frames_car_loop_optim {
126 	enum fe_stv0900_modulation modulation;
127 	u8 car_loop_cut12_2;    /* Cut 1.2,   SR<=3msps     */
128 	u8 car_loop_cut20_2;    /* Cut 2.0,   SR<3msps      */
129 	u8 car_loop_cut12_5;    /* Cut 1.2,   3<SR<=7msps   */
130 	u8 car_loop_cut20_5;    /* Cut 2.0,   3<SR<=7msps   */
131 	u8 car_loop_cut12_10;   /* Cut 1.2,   7<SR<=15msps  */
132 	u8 car_loop_cut20_10;   /* Cut 2.0,   7<SR<=15msps  */
133 	u8 car_loop_cut12_20;   /* Cut 1.2,   10<SR<=25msps */
134 	u8 car_loop_cut20_20;   /* Cut 2.0,   10<SR<=25msps */
135 	u8 car_loop_cut12_30;   /* Cut 1.2,   25<SR<=45msps */
136 	u8 car_loop_cut20_30;   /* Cut 2.0,   10<SR<=45msps */
137 
138 };
139 
140 struct stv0900_short_frames_car_loop_optim_vs_mod {
141 	enum fe_stv0900_modulation modulation;
142 	u8 car_loop_2;	  /* SR<3msps      */
143 	u8 car_loop_5;	  /* 3<SR<=7msps   */
144 	u8 car_loop_10;   /* 7<SR<=15msps  */
145 	u8 car_loop_20;   /* 10<SR<=25msps */
146 	u8 car_loop_30;   /* 10<SR<=45msps */
147 };
148 
149 /* Cut 1.x Tracking carrier loop carrier QPSK 1/2 to 8PSK 9/10 long Frame */
150 static const struct stv0900_car_loop_optim FE_STV0900_S2CarLoop[14] = {
151 	/*Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
152 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff */
153 	{ STV0900_QPSK_12,	0x1C,	0x0D,	0x1B,	0x2C,	0x3A,
154 				0x1C,	0x2A,	0x3B,	0x2A,	0x1B },
155 	{ STV0900_QPSK_35,	0x2C,	0x0D,	0x2B,	0x2C,	0x3A,
156 				0x0C,	0x3A,	0x2B,	0x2A,	0x0B },
157 	{ STV0900_QPSK_23,	0x2C,	0x0D,	0x2B,	0x2C,	0x0B,
158 				0x0C,	0x3A,	0x1B,	0x2A,	0x3A },
159 	{ STV0900_QPSK_34,	0x3C,	0x0D,	0x3B,	0x1C,	0x0B,
160 				0x3B,	0x3A,	0x0B,	0x2A,	0x3A },
161 	{ STV0900_QPSK_45,	0x3C,	0x0D,	0x3B,	0x1C,	0x0B,
162 				0x3B,	0x3A,	0x0B,	0x2A,	0x3A },
163 	{ STV0900_QPSK_56,	0x0D,	0x0D,	0x3B,	0x1C,	0x0B,
164 				0x3B,	0x3A,	0x0B,	0x2A,	0x3A },
165 	{ STV0900_QPSK_89,	0x0D,	0x0D,	0x3B,	0x1C,	0x1B,
166 				0x3B,	0x3A,	0x0B,	0x2A,	0x3A },
167 	{ STV0900_QPSK_910,	0x1D,	0x0D,	0x3B,	0x1C,	0x1B,
168 				0x3B,	0x3A,	0x0B,	0x2A,	0x3A },
169 	{ STV0900_8PSK_35,	0x29,	0x3B,	0x09,	0x2B,	0x38,
170 				0x0B,	0x18,	0x1A,	0x08,	0x0A },
171 	{ STV0900_8PSK_23,	0x0A,	0x3B,	0x29,	0x2B,	0x19,
172 				0x0B,	0x38,	0x1A,	0x18,	0x0A },
173 	{ STV0900_8PSK_34,	0x3A,	0x3B,	0x2A,	0x2B,	0x39,
174 				0x0B,	0x19,	0x1A,	0x38,	0x0A },
175 	{ STV0900_8PSK_56,	0x1B,	0x3B,	0x0B,	0x2B,	0x1A,
176 				0x0B,	0x39,	0x1A,	0x19,	0x0A },
177 	{ STV0900_8PSK_89,	0x3B,	0x3B,	0x0B,	0x2B,	0x2A,
178 				0x0B,	0x39,	0x1A,	0x29,	0x39 },
179 	{ STV0900_8PSK_910,	0x3B,	0x3B, 	0x0B,	0x2B, 	0x2A,
180 				0x0B,	0x39,	0x1A,	0x29,	0x39 }
181 };
182 
183 
184 /* Cut 2.0 Tracking carrier loop carrier QPSK 1/2 to 8PSK 9/10 long Frame */
185 static const struct stv0900_car_loop_optim FE_STV0900_S2CarLoopCut20[14] = {
186 	/* Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
187 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff */
188 	{ STV0900_QPSK_12,	0x1F,	0x3F,	0x1E,	0x3F,	0x3D,
189 				0x1F,	0x3D,	0x3E,	0x3D,	0x1E },
190 	{ STV0900_QPSK_35,	0x2F,	0x3F,	0x2E,	0x2F,	0x3D,
191 				0x0F,	0x0E,	0x2E,	0x3D,	0x0E },
192 	{ STV0900_QPSK_23,	0x2F,	0x3F,	0x2E,	0x2F,	0x0E,
193 				0x0F,	0x0E,	0x1E,	0x3D,	0x3D },
194 	{ STV0900_QPSK_34,	0x3F,	0x3F,	0x3E,	0x1F,	0x0E,
195 				0x3E,	0x0E,	0x1E,	0x3D,	0x3D },
196 	{ STV0900_QPSK_45,	0x3F,	0x3F,	0x3E,	0x1F,	0x0E,
197 				0x3E,	0x0E,	0x1E,	0x3D,	0x3D },
198 	{ STV0900_QPSK_56,	0x3F,	0x3F,	0x3E,	0x1F,	0x0E,
199 				0x3E,	0x0E,	0x1E,	0x3D,	0x3D },
200 	{ STV0900_QPSK_89,	0x3F,	0x3F,	0x3E,	0x1F,	0x1E,
201 				0x3E,	0x0E,	0x1E,	0x3D,	0x3D },
202 	{ STV0900_QPSK_910,	0x3F,	0x3F,	0x3E,	0x1F,	0x1E,
203 				0x3E,	0x0E,	0x1E,	0x3D,	0x3D },
204 	{ STV0900_8PSK_35,	0x3c,	0x0c,	0x1c,	0x3b,	0x0c,
205 				0x3b,	0x2b,	0x2b,	0x1b,	0x2b },
206 	{ STV0900_8PSK_23,	0x1d,	0x0c,	0x3c,	0x0c,	0x2c,
207 				0x3b,	0x0c,	0x2b,	0x2b,	0x2b },
208 	{ STV0900_8PSK_34,	0x0e,	0x1c,	0x3d,	0x0c,	0x0d,
209 				0x3b,	0x2c,	0x3b,	0x0c,	0x2b },
210 	{ STV0900_8PSK_56,	0x2e,	0x3e,	0x1e,	0x2e,	0x2d,
211 				0x1e,	0x3c,	0x2d,	0x2c,	0x1d },
212 	{ STV0900_8PSK_89,	0x3e,	0x3e,	0x1e,	0x2e,	0x3d,
213 				0x1e,	0x0d,	0x2d,	0x3c,	0x1d },
214 	{ STV0900_8PSK_910,	0x3e,	0x3e, 	0x1e,	0x2e, 	0x3d,
215 				0x1e,	0x1d,	0x2d,	0x0d,	0x1d },
216 };
217 
218 
219 
220 /* Cut 2.0 Tracking carrier loop carrier 16APSK 2/3 to 32APSK 9/10 long Frame */
221 static const struct stv0900_car_loop_optim FE_STV0900_S2APSKCarLoopCut20[11] = {
222 	/* Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
223 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff */
224 	{ STV0900_16APSK_23,	0x0C,	0x0C,	0x0C,	0x0C,	0x1D,
225 				0x0C,	0x3C,	0x0C,	0x2C,	0x0C },
226 	{ STV0900_16APSK_34,	0x0C,	0x0C,	0x0C,	0x0C,	0x0E,
227 				0x0C,	0x2D,	0x0C,	0x1D,	0x0C },
228 	{ STV0900_16APSK_45,	0x0C,	0x0C,	0x0C,	0x0C,	0x1E,
229 				0x0C,	0x3D,	0x0C,	0x2D,	0x0C },
230 	{ STV0900_16APSK_56,	0x0C,	0x0C,	0x0C,	0x0C,	0x1E,
231 				0x0C,	0x3D,	0x0C,	0x2D,	0x0C },
232 	{ STV0900_16APSK_89,	0x0C,	0x0C,	0x0C,	0x0C,	0x2E,
233 				0x0C,	0x0E,	0x0C,	0x3D,	0x0C },
234 	{ STV0900_16APSK_910,	0x0C,	0x0C,	0x0C,	0x0C,	0x2E,
235 				0x0C,	0x0E,	0x0C,	0x3D,	0x0C },
236 	{ STV0900_32APSK_34,	0x0C,	0x0C,	0x0C,	0x0C,	0x0C,
237 				0x0C,	0x0C,	0x0C,	0x0C,	0x0C },
238 	{ STV0900_32APSK_45,	0x0C,	0x0C,	0x0C,	0x0C,	0x0C,
239 				0x0C,	0x0C,	0x0C,	0x0C,	0x0C },
240 	{ STV0900_32APSK_56,	0x0C,	0x0C,	0x0C,	0x0C,	0x0C,
241 				0x0C,	0x0C,	0x0C,	0x0C,	0x0C },
242 	{ STV0900_32APSK_89,	0x0C,	0x0C,	0x0C,	0x0C,	0x0C,
243 				0x0C,	0x0C,	0x0C,	0x0C,	0x0C },
244 	{ STV0900_32APSK_910,	0x0C,	0x0C,	0x0C,	0x0C,	0x0C,
245 				0x0C,	0x0C,	0x0C,	0x0C,	0x0C },
246 };
247 
248 
249 /* Cut 2.0 Tracking carrier loop carrier QPSK 1/4 to QPSK 2/5 long Frame */
250 static const struct stv0900_car_loop_optim FE_STV0900_S2LowQPCarLoopCut20[3] = {
251 	/* Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
252 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff */
253 	{ STV0900_QPSK_14,	0x0F,	0x3F,	0x0E,	0x3F,	0x2D,
254 				0x2F,	0x2D,	0x1F,	0x3D,	0x3E },
255 	{ STV0900_QPSK_13,	0x0F,	0x3F,	0x0E,	0x3F,	0x2D,
256 				0x2F,	0x3D,	0x0F,	0x3D,	0x2E },
257 	{ STV0900_QPSK_25,	0x1F,	0x3F,	0x1E,	0x3F,	0x3D,
258 				0x1F,	0x3D,	0x3E,	0x3D,	0x2E }
259 };
260 
261 
262 /* Cut 2.0 Tracking carrier loop carrier  short Frame, cut 1.2 and 2.0 */
263 static const
264 struct stv0900_short_frames_car_loop_optim FE_STV0900_S2ShortCarLoop[4] = {
265 	/*Mod		2Mcut1.2 2Mcut2.0 5Mcut1.2 5Mcut2.0 10Mcut1.2
266 			10Mcut2.0 20Mcut1.2 20M_cut2.0 30Mcut1.2 30Mcut2.0*/
267 	{ STV0900_QPSK,		0x3C,	0x2F,	0x2B,	0x2E,	0x0B,
268 				0x0E,	0x3A,	0x0E,	0x2A,	0x3D },
269 	{ STV0900_8PSK,		0x0B,	0x3E,	0x2A,	0x0E,	0x0A,
270 				0x2D,	0x19,	0x0D,	0x09,	0x3C },
271 	{ STV0900_16APSK,	0x1B,	0x1E,	0x1B,	0x1E,	0x1B,
272 				0x1E,	0x3A,	0x3D,	0x2A,	0x2D },
273 	{ STV0900_32APSK,	0x1B,	0x1E,	0x1B,	0x1E,	0x1B,
274 				0x1E,	0x3A,	0x3D,	0x2A,	0x2D }
275 };
276 
277 static	const struct stv0900_car_loop_optim FE_STV0900_S2CarLoopCut30[14] = {
278 	/*Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
279 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff	*/
280 	{ STV0900_QPSK_12,	0x3C,	0x2C,	0x0C,	0x2C,	0x1B,
281 				0x2C,	0x1B,	0x1C,	0x0B, 	0x3B },
282 	{ STV0900_QPSK_35,	0x0D,	0x0D,	0x0C,	0x0D,	0x1B,
283 				0x3C,	0x1B,	0x1C,	0x0B,	0x3B },
284 	{ STV0900_QPSK_23,	0x1D,	0x0D,	0x0C,	0x1D,	0x2B,
285 				0x3C,	0x1B,	0x1C,	0x0B,	0x3B },
286 	{ STV0900_QPSK_34,	0x1D,	0x1D,	0x0C,	0x1D,	0x2B,
287 				0x3C,	0x1B,	0x1C,	0x0B,	0x3B },
288 	{ STV0900_QPSK_45,	0x2D,	0x1D,	0x1C,	0x1D,	0x2B,
289 				0x3C,	0x2B,	0x0C,	0x1B,	0x3B },
290 	{ STV0900_QPSK_56,	0x2D,	0x1D,	0x1C,	0x1D,	0x2B,
291 				0x3C,	0x2B,	0x0C,	0x1B,	0x3B },
292 	{ STV0900_QPSK_89,	0x3D,	0x2D,	0x1C,	0x1D,	0x3B,
293 				0x3C,	0x2B,	0x0C,	0x1B,	0x3B },
294 	{ STV0900_QPSK_910,	0x3D,	0x2D,	0x1C,	0x1D,	0x3B,
295 				0x3C,	0x2B,	0x0C,	0x1B,	0x3B },
296 	{ STV0900_8PSK_35,	0x39,	0x19,	0x39,	0x19,	0x19,
297 				0x19,	0x19,	0x19,	0x09,	0x19 },
298 	{ STV0900_8PSK_23,	0x2A,	0x39,	0x1A,	0x0A,	0x39,
299 				0x0A,	0x29,	0x39,	0x29,	0x0A },
300 	{ STV0900_8PSK_34,	0x0B,	0x3A,	0x0B,	0x0B,	0x3A,
301 				0x1B,	0x1A,	0x0B,	0x1A,	0x3A },
302 	{ STV0900_8PSK_56,	0x0C,	0x1B,	0x3B,	0x2B,	0x1B,
303 				0x3B,	0x3A,	0x3B,	0x3A,	0x1B },
304 	{ STV0900_8PSK_89,	0x2C,	0x2C,	0x2C,	0x1C,	0x2B,
305 				0x0C,	0x0B,	0x3B,	0x0B,	0x1B },
306 	{ STV0900_8PSK_910,	0x2C,	0x3C,	0x2C,	0x1C,	0x3B,
307 				0x1C,	0x0B,	0x3B,	0x0B,	0x1B }
308 };
309 
310 static	const
311 struct stv0900_car_loop_optim FE_STV0900_S2APSKCarLoopCut30[11] = {
312 	/*Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
313 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff	*/
314 	{ STV0900_16APSK_23,	0x0A,	0x0A,	0x0A,	0x0A,	0x1A,
315 				0x0A,	0x3A,	0x0A,	0x2A,	0x0A },
316 	{ STV0900_16APSK_34,	0x0A,	0x0A,	0x0A,	0x0A,	0x0B,
317 				0x0A,	0x3B,	0x0A,	0x1B,	0x0A },
318 	{ STV0900_16APSK_45,	0x0A,	0x0A,	0x0A,	0x0A,	0x1B,
319 				0x0A,	0x3B,	0x0A,	0x2B,	0x0A },
320 	{ STV0900_16APSK_56,	0x0A,	0x0A,	0x0A,	0x0A,	0x1B,
321 				0x0A,	0x3B,	0x0A,	0x2B,	0x0A },
322 	{ STV0900_16APSK_89,	0x0A,	0x0A,	0x0A,	0x0A,	0x2B,
323 				0x0A,	0x0C,	0x0A,	0x3B,	0x0A },
324 	{ STV0900_16APSK_910,	0x0A,	0x0A,	0x0A,	0x0A,	0x2B,
325 				0x0A,	0x0C,	0x0A,	0x3B,	0x0A },
326 	{ STV0900_32APSK_34,	0x0A,	0x0A,	0x0A,	0x0A,	0x0A,
327 				0x0A,	0x0A,	0x0A,	0x0A,	0x0A },
328 	{ STV0900_32APSK_45,	0x0A,	0x0A,	0x0A,	0x0A,	0x0A,
329 				0x0A,	0x0A,	0x0A,	0x0A,	0x0A },
330 	{ STV0900_32APSK_56,	0x0A,	0x0A,	0x0A,	0x0A,	0x0A,
331 				0x0A,	0x0A,	0x0A,	0x0A,	0x0A },
332 	{ STV0900_32APSK_89,	0x0A,	0x0A,	0x0A,	0x0A,	0x0A,
333 				0x0A,	0x0A,	0x0A,	0x0A,	0x0A },
334 	{ STV0900_32APSK_910,	0x0A,	0x0A,	0x0A,	0x0A,	0x0A,
335 				0x0A,	0x0A,	0x0A,	0x0A,	0x0A }
336 };
337 
338 static	const
339 struct stv0900_car_loop_optim FE_STV0900_S2LowQPCarLoopCut30[3] = {
340 	/*Modcod		2MPon 	2MPoff	5MPon 	5MPoff	10MPon
341 				10MPoff	20MPon 	20MPoff	30MPon 	30MPoff*/
342 	{ STV0900_QPSK_14,	0x0C,	0x3C,	0x0B,	0x3C,	0x2A,
343 				0x2C,	0x2A,	0x1C,	0x3A,	0x3B },
344 	{ STV0900_QPSK_13,	0x0C,	0x3C,	0x0B,	0x3C,	0x2A,
345 				0x2C,	0x3A,	0x0C,	0x3A,	0x2B },
346 	{ STV0900_QPSK_25,	0x1C,	0x3C,	0x1B,	0x3C,	0x3A,
347 				0x1C,	0x3A,	0x3B,	0x3A,	0x2B }
348 };
349 
350 static	const struct stv0900_short_frames_car_loop_optim_vs_mod
351 FE_STV0900_S2ShortCarLoopCut30[4] = {
352 	/*Mod		2Mcut3.0 5Mcut3.0 10Mcut3.0 20Mcut3.0 30Mcut3.0*/
353 	{ STV0900_QPSK,		0x2C,	0x2B,	0x0B,	0x0B,	0x3A },
354 	{ STV0900_8PSK,		0x3B,	0x0B,	0x2A,	0x0A,	0x39 },
355 	{ STV0900_16APSK,	0x1B,	0x1B,	0x1B,	0x3A,	0x2A },
356 	{ STV0900_32APSK,	0x1B,	0x1B,	0x1B,	0x3A,	0x2A },
357 
358 };
359 
360 static const u16 STV0900_InitVal[181][2] = {
361 	{ R0900_OUTCFG		, 0x00	},
362 	{ R0900_AGCRF1CFG	, 0x11	},
363 	{ R0900_AGCRF2CFG	, 0x13	},
364 	{ R0900_TSGENERAL1X	, 0x14	},
365 	{ R0900_TSTTNR2		, 0x21	},
366 	{ R0900_TSTTNR4		, 0x21	},
367 	{ R0900_P2_DISTXCTL	, 0x22	},
368 	{ R0900_P2_F22TX	, 0xc0	},
369 	{ R0900_P2_F22RX	, 0xc0	},
370 	{ R0900_P2_DISRXCTL	, 0x00	},
371 	{ R0900_P2_TNRSTEPS	, 0x87	},
372 	{ R0900_P2_TNRGAIN	, 0x09	},
373 	{ R0900_P2_DMDCFGMD	, 0xF9	},
374 	{ R0900_P2_DEMOD	, 0x08	},
375 	{ R0900_P2_DMDCFG3	, 0xc4	},
376 	{ R0900_P2_CARFREQ	, 0xed	},
377 	{ R0900_P2_TNRCFG2	, 0x02	},
378 	{ R0900_P2_TNRCFG3	, 0x02	},
379 	{ R0900_P2_LDT		, 0xd0	},
380 	{ R0900_P2_LDT2		, 0xb8	},
381 	{ R0900_P2_TMGCFG	, 0xd2	},
382 	{ R0900_P2_TMGTHRISE	, 0x20	},
383 	{ R0900_P2_TMGTHFALL	, 0x00	},
384 	{ R0900_P2_FECSPY	, 0x88	},
385 	{ R0900_P2_FSPYDATA	, 0x3a	},
386 	{ R0900_P2_FBERCPT4	, 0x00	},
387 	{ R0900_P2_FSPYBER	, 0x10	},
388 	{ R0900_P2_ERRCTRL1	, 0x35	},
389 	{ R0900_P2_ERRCTRL2	, 0xc1	},
390 	{ R0900_P2_CFRICFG	, 0xf8	},
391 	{ R0900_P2_NOSCFG	, 0x1c	},
392 	{ R0900_P2_DMDT0M	, 0x20	},
393 	{ R0900_P2_CORRELMANT	, 0x70	},
394 	{ R0900_P2_CORRELABS	, 0x88	},
395 	{ R0900_P2_AGC2O	, 0x5b	},
396 	{ R0900_P2_AGC2REF	, 0x38	},
397 	{ R0900_P2_CARCFG	, 0xe4	},
398 	{ R0900_P2_ACLC		, 0x1A	},
399 	{ R0900_P2_BCLC		, 0x09	},
400 	{ R0900_P2_CARHDR	, 0x08	},
401 	{ R0900_P2_KREFTMG	, 0xc1	},
402 	{ R0900_P2_SFRUPRATIO	, 0xf0	},
403 	{ R0900_P2_SFRLOWRATIO	, 0x70	},
404 	{ R0900_P2_SFRSTEP	, 0x58	},
405 	{ R0900_P2_TMGCFG2	, 0x01	},
406 	{ R0900_P2_CAR2CFG	, 0x26	},
407 	{ R0900_P2_BCLC2S2Q	, 0x86	},
408 	{ R0900_P2_BCLC2S28	, 0x86	},
409 	{ R0900_P2_SMAPCOEF7	, 0x77	},
410 	{ R0900_P2_SMAPCOEF6	, 0x85	},
411 	{ R0900_P2_SMAPCOEF5	, 0x77	},
412 	{ R0900_P2_TSCFGL	, 0x20	},
413 	{ R0900_P2_DMDCFG2	, 0x3b	},
414 	{ R0900_P2_MODCODLST0	, 0xff	},
415 	{ R0900_P2_MODCODLST1	, 0xff	},
416 	{ R0900_P2_MODCODLST2	, 0xff	},
417 	{ R0900_P2_MODCODLST3	, 0xff	},
418 	{ R0900_P2_MODCODLST4	, 0xff	},
419 	{ R0900_P2_MODCODLST5	, 0xff	},
420 	{ R0900_P2_MODCODLST6	, 0xff	},
421 	{ R0900_P2_MODCODLST7	, 0xcc	},
422 	{ R0900_P2_MODCODLST8	, 0xcc	},
423 	{ R0900_P2_MODCODLST9	, 0xcc	},
424 	{ R0900_P2_MODCODLSTA	, 0xcc	},
425 	{ R0900_P2_MODCODLSTB	, 0xcc	},
426 	{ R0900_P2_MODCODLSTC	, 0xcc	},
427 	{ R0900_P2_MODCODLSTD	, 0xcc	},
428 	{ R0900_P2_MODCODLSTE	, 0xcc	},
429 	{ R0900_P2_MODCODLSTF	, 0xcf	},
430 	{ R0900_P1_DISTXCTL	, 0x22	},
431 	{ R0900_P1_F22TX	, 0xc0	},
432 	{ R0900_P1_F22RX	, 0xc0	},
433 	{ R0900_P1_DISRXCTL	, 0x00	},
434 	{ R0900_P1_TNRSTEPS	, 0x87	},
435 	{ R0900_P1_TNRGAIN	, 0x09	},
436 	{ R0900_P1_DMDCFGMD	, 0xf9	},
437 	{ R0900_P1_DEMOD	, 0x08	},
438 	{ R0900_P1_DMDCFG3	, 0xc4	},
439 	{ R0900_P1_DMDT0M	, 0x20	},
440 	{ R0900_P1_CARFREQ	, 0xed	},
441 	{ R0900_P1_TNRCFG2	, 0x82	},
442 	{ R0900_P1_TNRCFG3	, 0x02	},
443 	{ R0900_P1_LDT		, 0xd0	},
444 	{ R0900_P1_LDT2		, 0xb8	},
445 	{ R0900_P1_TMGCFG	, 0xd2	},
446 	{ R0900_P1_TMGTHRISE	, 0x20	},
447 	{ R0900_P1_TMGTHFALL	, 0x00	},
448 	{ R0900_P1_SFRUPRATIO	, 0xf0	},
449 	{ R0900_P1_SFRLOWRATIO	, 0x70	},
450 	{ R0900_P1_TSCFGL	, 0x20	},
451 	{ R0900_P1_FECSPY	, 0x88	},
452 	{ R0900_P1_FSPYDATA	, 0x3a	},
453 	{ R0900_P1_FBERCPT4	, 0x00	},
454 	{ R0900_P1_FSPYBER	, 0x10	},
455 	{ R0900_P1_ERRCTRL1	, 0x35	},
456 	{ R0900_P1_ERRCTRL2	, 0xc1	},
457 	{ R0900_P1_CFRICFG	, 0xf8	},
458 	{ R0900_P1_NOSCFG	, 0x1c	},
459 	{ R0900_P1_CORRELMANT	, 0x70	},
460 	{ R0900_P1_CORRELABS	, 0x88	},
461 	{ R0900_P1_AGC2O	, 0x5b	},
462 	{ R0900_P1_AGC2REF	, 0x38	},
463 	{ R0900_P1_CARCFG	, 0xe4	},
464 	{ R0900_P1_ACLC		, 0x1A	},
465 	{ R0900_P1_BCLC		, 0x09	},
466 	{ R0900_P1_CARHDR	, 0x08	},
467 	{ R0900_P1_KREFTMG	, 0xc1	},
468 	{ R0900_P1_SFRSTEP	, 0x58	},
469 	{ R0900_P1_TMGCFG2	, 0x01	},
470 	{ R0900_P1_CAR2CFG	, 0x26	},
471 	{ R0900_P1_BCLC2S2Q	, 0x86	},
472 	{ R0900_P1_BCLC2S28	, 0x86	},
473 	{ R0900_P1_SMAPCOEF7	, 0x77	},
474 	{ R0900_P1_SMAPCOEF6	, 0x85	},
475 	{ R0900_P1_SMAPCOEF5	, 0x77	},
476 	{ R0900_P1_DMDCFG2	, 0x3b	},
477 	{ R0900_P1_MODCODLST0	, 0xff	},
478 	{ R0900_P1_MODCODLST1	, 0xff	},
479 	{ R0900_P1_MODCODLST2	, 0xff	},
480 	{ R0900_P1_MODCODLST3	, 0xff	},
481 	{ R0900_P1_MODCODLST4	, 0xff	},
482 	{ R0900_P1_MODCODLST5	, 0xff	},
483 	{ R0900_P1_MODCODLST6	, 0xff	},
484 	{ R0900_P1_MODCODLST7	, 0xcc	},
485 	{ R0900_P1_MODCODLST8	, 0xcc	},
486 	{ R0900_P1_MODCODLST9	, 0xcc	},
487 	{ R0900_P1_MODCODLSTA	, 0xcc	},
488 	{ R0900_P1_MODCODLSTB	, 0xcc	},
489 	{ R0900_P1_MODCODLSTC	, 0xcc	},
490 	{ R0900_P1_MODCODLSTD	, 0xcc	},
491 	{ R0900_P1_MODCODLSTE	, 0xcc	},
492 	{ R0900_P1_MODCODLSTF	, 0xcf	},
493 	{ R0900_GENCFG		, 0x1d	},
494 	{ R0900_NBITER_NF4	, 0x37	},
495 	{ R0900_NBITER_NF5	, 0x29	},
496 	{ R0900_NBITER_NF6	, 0x37	},
497 	{ R0900_NBITER_NF7	, 0x33	},
498 	{ R0900_NBITER_NF8	, 0x31	},
499 	{ R0900_NBITER_NF9	, 0x2f	},
500 	{ R0900_NBITER_NF10	, 0x39	},
501 	{ R0900_NBITER_NF11	, 0x3a	},
502 	{ R0900_NBITER_NF12	, 0x29	},
503 	{ R0900_NBITER_NF13	, 0x37	},
504 	{ R0900_NBITER_NF14	, 0x33	},
505 	{ R0900_NBITER_NF15	, 0x2f	},
506 	{ R0900_NBITER_NF16	, 0x39	},
507 	{ R0900_NBITER_NF17	, 0x3a	},
508 	{ R0900_NBITERNOERR	, 0x04	},
509 	{ R0900_GAINLLR_NF4	, 0x0C	},
510 	{ R0900_GAINLLR_NF5	, 0x0F	},
511 	{ R0900_GAINLLR_NF6	, 0x11	},
512 	{ R0900_GAINLLR_NF7	, 0x14	},
513 	{ R0900_GAINLLR_NF8	, 0x17	},
514 	{ R0900_GAINLLR_NF9	, 0x19	},
515 	{ R0900_GAINLLR_NF10	, 0x20	},
516 	{ R0900_GAINLLR_NF11	, 0x21	},
517 	{ R0900_GAINLLR_NF12	, 0x0D	},
518 	{ R0900_GAINLLR_NF13	, 0x0F	},
519 	{ R0900_GAINLLR_NF14	, 0x13	},
520 	{ R0900_GAINLLR_NF15	, 0x1A	},
521 	{ R0900_GAINLLR_NF16	, 0x1F	},
522 	{ R0900_GAINLLR_NF17	, 0x21	},
523 	{ R0900_RCCFG2		, 0x20	},
524 	{ R0900_P1_FECM		, 0x01	}, /*disable DSS modes*/
525 	{ R0900_P2_FECM		, 0x01	}, /*disable DSS modes*/
526 	{ R0900_P1_PRVIT	, 0x2F	}, /*disable puncture rate 6/7*/
527 	{ R0900_P2_PRVIT	, 0x2F	}, /*disable puncture rate 6/7*/
528 	{ R0900_STROUT1CFG	, 0x4c	},
529 	{ R0900_STROUT2CFG	, 0x4c	},
530 	{ R0900_CLKOUT1CFG	, 0x50	},
531 	{ R0900_CLKOUT2CFG	, 0x50	},
532 	{ R0900_DPN1CFG		, 0x4a	},
533 	{ R0900_DPN2CFG		, 0x4a	},
534 	{ R0900_DATA71CFG	, 0x52	},
535 	{ R0900_DATA72CFG	, 0x52	},
536 	{ R0900_P1_TSCFGM	, 0xc0	},
537 	{ R0900_P2_TSCFGM	, 0xc0	},
538 	{ R0900_P1_TSCFGH	, 0xe0	}, /* DVB-CI timings */
539 	{ R0900_P2_TSCFGH	, 0xe0	}, /* DVB-CI timings */
540 	{ R0900_P1_TSSPEED	, 0x40	},
541 	{ R0900_P2_TSSPEED	, 0x40	},
542 };
543 
544 static const u16 STV0900_Cut20_AddOnVal[32][2] = {
545 	{ R0900_P2_DMDCFG3	, 0xe8	},
546 	{ R0900_P2_DMDCFG4	, 0x10	},
547 	{ R0900_P2_CARFREQ	, 0x38	},
548 	{ R0900_P2_CARHDR	, 0x20	},
549 	{ R0900_P2_KREFTMG	, 0x5a	},
550 	{ R0900_P2_SMAPCOEF7	, 0x06	},
551 	{ R0900_P2_SMAPCOEF6	, 0x00	},
552 	{ R0900_P2_SMAPCOEF5	, 0x04	},
553 	{ R0900_P2_NOSCFG	, 0x0c	},
554 	{ R0900_P1_DMDCFG3	, 0xe8	},
555 	{ R0900_P1_DMDCFG4	, 0x10	},
556 	{ R0900_P1_CARFREQ	, 0x38	},
557 	{ R0900_P1_CARHDR	, 0x20	},
558 	{ R0900_P1_KREFTMG	, 0x5a	},
559 	{ R0900_P1_SMAPCOEF7	, 0x06	},
560 	{ R0900_P1_SMAPCOEF6	, 0x00	},
561 	{ R0900_P1_SMAPCOEF5	, 0x04	},
562 	{ R0900_P1_NOSCFG	, 0x0c	},
563 	{ R0900_GAINLLR_NF4	, 0x21	},
564 	{ R0900_GAINLLR_NF5	, 0x21	},
565 	{ R0900_GAINLLR_NF6	, 0x20	},
566 	{ R0900_GAINLLR_NF7	, 0x1F	},
567 	{ R0900_GAINLLR_NF8	, 0x1E	},
568 	{ R0900_GAINLLR_NF9	, 0x1E	},
569 	{ R0900_GAINLLR_NF10	, 0x1D	},
570 	{ R0900_GAINLLR_NF11	, 0x1B	},
571 	{ R0900_GAINLLR_NF12	, 0x20	},
572 	{ R0900_GAINLLR_NF13	, 0x20	},
573 	{ R0900_GAINLLR_NF14	, 0x20	},
574 	{ R0900_GAINLLR_NF15	, 0x20	},
575 	{ R0900_GAINLLR_NF16	, 0x20	},
576 	{ R0900_GAINLLR_NF17	, 0x21	}
577 
578 };
579 
580 #endif
581