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