blob: d8885484cfbd91270baa9f0200b6f6f6f0133f6e [file] [log] [blame]
Steven Toth52c99bd2008-05-01 04:57:01 -03001/*
2 * For the Realtek RTL chip RTL2831U
3 * Realtek Release Date: 2008-03-14, ver 080314
4 * Realtek version RTL2831 Linux driver version 080314
5 * ver 080314
6 *
7 * for linux kernel version 2.6.21.4 - 2.6.22-14
8 * support MXL5005s and MT2060 tuners (support tuner auto-detecting)
9 * support two IR types -- RC5 and NEC
10 *
11 * Known boards with Realtek RTL chip RTL2821U
12 * Freecom USB stick 14aa:0160 (version 4)
13 * Conceptronic CTVDIGRCU
14 *
15 * Copyright (c) 2008 Realtek
16 * Copyright (c) 2008 Jan Hoogenraad, Barnaby Shearer, Andy Hasper
17 * This code is placed under the terms of the GNU General Public License
18 *
19 * Released by Realtek under GPLv2.
20 * Thanks to Realtek for a lot of support we received !
21 *
22 * Revision: 080314 - original version
23 */
24
Steven Toth2637d5b2008-05-01 05:01:31 -030025#include "mxl5005s.h"
Steven Toth52c99bd2008-05-01 04:57:01 -030026
Steven Toth3935c252008-05-01 05:45:44 -030027/* MXL5005 Tuner Control Struct */
28typedef struct _TunerControl_struct {
29 u16 Ctrl_Num; /* Control Number */
30 u16 size; /* Number of bits to represent Value */
31 u16 addr[25]; /* Array of Tuner Register Address for each bit position */
32 u16 bit[25]; /* Array of bit position in Register Address for each bit position */
33 u16 val[25]; /* Binary representation of Value */
34} TunerControl_struct;
Steven Toth52c99bd2008-05-01 04:57:01 -030035
Steven Toth3935c252008-05-01 05:45:44 -030036/* MXL5005 Tuner Struct */
37struct mxl5005s_state
Steven Toth52c99bd2008-05-01 04:57:01 -030038{
Steven Toth3935c252008-05-01 05:45:44 -030039 u8 Mode; /* 0: Analog Mode ; 1: Digital Mode */
40 u8 IF_Mode; /* for Analog Mode, 0: zero IF; 1: low IF */
41 u32 Chan_Bandwidth; /* filter channel bandwidth (6, 7, 8) */
42 u32 IF_OUT; /* Desired IF Out Frequency */
43 u16 IF_OUT_LOAD; /* IF Out Load Resistor (200/300 Ohms) */
44 u32 RF_IN; /* RF Input Frequency */
45 u32 Fxtal; /* XTAL Frequency */
46 u8 AGC_Mode; /* AGC Mode 0: Dual AGC; 1: Single AGC */
47 u16 TOP; /* Value: take over point */
48 u8 CLOCK_OUT; /* 0: turn off clock out; 1: turn on clock out */
49 u8 DIV_OUT; /* 4MHz or 16MHz */
50 u8 CAPSELECT; /* 0: disable On-Chip pulling cap; 1: enable */
51 u8 EN_RSSI; /* 0: disable RSSI; 1: enable RSSI */
52 u8 Mod_Type; /* Modulation Type; */
53 /* 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */
54 u8 TF_Type; /* Tracking Filter Type */
55 /* 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */
Steven Toth52c99bd2008-05-01 04:57:01 -030056
Steven Toth3935c252008-05-01 05:45:44 -030057 /* Calculated Settings */
58 u32 RF_LO; /* Synth RF LO Frequency */
59 u32 IF_LO; /* Synth IF LO Frequency */
60 u32 TG_LO; /* Synth TG_LO Frequency */
Steven Toth52c99bd2008-05-01 04:57:01 -030061
Steven Toth3935c252008-05-01 05:45:44 -030062 /* Pointers to ControlName Arrays */
63 u16 Init_Ctrl_Num; /* Number of INIT Control Names */
64 TunerControl_struct
65 Init_Ctrl[INITCTRL_NUM]; /* INIT Control Names Array Pointer */
Steven Toth52c99bd2008-05-01 04:57:01 -030066
Steven Toth3935c252008-05-01 05:45:44 -030067 u16 CH_Ctrl_Num; /* Number of CH Control Names */
68 TunerControl_struct
69 CH_Ctrl[CHCTRL_NUM]; /* CH Control Name Array Pointer */
Steven Toth52c99bd2008-05-01 04:57:01 -030070
Steven Toth3935c252008-05-01 05:45:44 -030071 u16 MXL_Ctrl_Num; /* Number of MXL Control Names */
72 TunerControl_struct
73 MXL_Ctrl[MXLCTRL_NUM]; /* MXL Control Name Array Pointer */
Steven Toth52c99bd2008-05-01 04:57:01 -030074
Steven Toth3935c252008-05-01 05:45:44 -030075 /* Pointer to Tuner Register Array */
76 u16 TunerRegs_Num; /* Number of Tuner Registers */
77 TunerReg_struct
78 TunerRegs[TUNER_REGS_NUM]; /* Tuner Register Array Pointer */
Steven Toth52c99bd2008-05-01 04:57:01 -030079
Steven Toth3935c252008-05-01 05:45:44 -030080};
Steven Toth52c99bd2008-05-01 04:57:01 -030081
Steven Toth52c99bd2008-05-01 04:57:01 -030082
Steven Totha8214d42008-05-01 05:02:58 -030083int mxl5005s_Initialize(
Steven Toth52c99bd2008-05-01 04:57:01 -030084 struct dvb_usb_device* dib,
85 TUNER_MODULE *pTuner
86 )
87{
88 MXL5005S_EXTRA_MODULE *pExtra;
89
90 unsigned char AgcMasterByte;
91 unsigned char AddrTable[MXL5005S_REG_WRITING_TABLE_LEN_MAX];
92 unsigned char ByteTable[MXL5005S_REG_WRITING_TABLE_LEN_MAX];
93 int TableLen;
94
Steven Toth52c99bd2008-05-01 04:57:01 -030095 // Get tuner extra module.
96 pExtra = (MXL5005S_EXTRA_MODULE *)pTuner->pExtra;
97
Steven Toth52c99bd2008-05-01 04:57:01 -030098 // Get AGC master byte
99 AgcMasterByte = pExtra->AgcMasterByte;
100
Steven Toth52c99bd2008-05-01 04:57:01 -0300101 // Initialize MxL5005S tuner according to MxL5005S tuner example code.
102
103 // Tuner initialization stage 0
104 MXL_GetMasterControl(ByteTable, MC_SYNTH_RESET);
105 AddrTable[0] = MASTER_CONTROL_ADDR;
106 ByteTable[0] |= AgcMasterByte;
107
108 if(pExtra->SetRegsWithTable( dib,pTuner, AddrTable, ByteTable, LEN_1_BYTE) != FUNCTION_SUCCESS)
109 goto error_status_set_tuner_registers;
110
Steven Toth52c99bd2008-05-01 04:57:01 -0300111 // Tuner initialization stage 1
112 MXL_GetInitRegister(&pExtra->MxlDefinedTunerStructure, AddrTable, ByteTable, &TableLen);
113
114 if(pExtra->SetRegsWithTable( dib,pTuner, AddrTable, ByteTable, TableLen) != FUNCTION_SUCCESS)
115 goto error_status_set_tuner_registers;
116
Steven Toth52c99bd2008-05-01 04:57:01 -0300117 return FUNCTION_SUCCESS;
118
Steven Toth52c99bd2008-05-01 04:57:01 -0300119error_status_set_tuner_registers:
120 return FUNCTION_ERROR;
121}
122
Steven Totha8214d42008-05-01 05:02:58 -0300123int mxl5005s_SetRfFreqHz(
Steven Toth52c99bd2008-05-01 04:57:01 -0300124 struct dvb_usb_device* dib,
125 TUNER_MODULE *pTuner,
126 unsigned long RfFreqHz
127 )
128{
129 MXL5005S_EXTRA_MODULE *pExtra;
130 BASE_INTERFACE_MODULE *pBaseInterface;
131
132 unsigned char AgcMasterByte;
133 unsigned char AddrTable[MXL5005S_REG_WRITING_TABLE_LEN_MAX];
134 unsigned char ByteTable[MXL5005S_REG_WRITING_TABLE_LEN_MAX];
135 int TableLen;
136
137 unsigned long IfDivval;
138 unsigned char MasterControlByte;
139
Steven Toth52c99bd2008-05-01 04:57:01 -0300140 // Get tuner extra module and base interface module.
141 pExtra = (MXL5005S_EXTRA_MODULE *)pTuner->pExtra;
142 pBaseInterface = pTuner->pBaseInterface;
143
144
145 // Get AGC master byte
146 AgcMasterByte = pExtra->AgcMasterByte;
147
148
149 // Set MxL5005S tuner RF frequency according to MxL5005S tuner example code.
150
151 // Tuner RF frequency setting stage 0
152 MXL_GetMasterControl(ByteTable, MC_SYNTH_RESET) ;
153 AddrTable[0] = MASTER_CONTROL_ADDR;
154 ByteTable[0] |= AgcMasterByte;
155
156 if(pExtra->SetRegsWithTable( dib,pTuner, AddrTable, ByteTable, LEN_1_BYTE) != FUNCTION_SUCCESS)
157 goto error_status_set_tuner_registers;
158
159
160 // Tuner RF frequency setting stage 1
161 MXL_TuneRF(&pExtra->MxlDefinedTunerStructure, RfFreqHz);
162
163 MXL_ControlRead(&pExtra->MxlDefinedTunerStructure, IF_DIVVAL, &IfDivval);
164
165 MXL_ControlWrite(&pExtra->MxlDefinedTunerStructure, SEQ_FSM_PULSE, 0);
166 MXL_ControlWrite(&pExtra->MxlDefinedTunerStructure, SEQ_EXTPOWERUP, 1);
167 MXL_ControlWrite(&pExtra->MxlDefinedTunerStructure, IF_DIVVAL, 8);
168
169 MXL_GetCHRegister(&pExtra->MxlDefinedTunerStructure, AddrTable, ByteTable, &TableLen) ;
170
171 MXL_GetMasterControl(&MasterControlByte, MC_LOAD_START) ;
172 AddrTable[TableLen] = MASTER_CONTROL_ADDR ;
173 ByteTable[TableLen] = MasterControlByte | AgcMasterByte;
174 TableLen += 1;
175
176 if(pExtra->SetRegsWithTable( dib,pTuner, AddrTable, ByteTable, TableLen) != FUNCTION_SUCCESS)
177 goto error_status_set_tuner_registers;
178
179
180 // Wait 30 ms.
181 pBaseInterface->WaitMs(pBaseInterface, 30);
182
183
184 // Tuner RF frequency setting stage 2
185 MXL_ControlWrite(&pExtra->MxlDefinedTunerStructure, SEQ_FSM_PULSE, 1) ;
186 MXL_ControlWrite(&pExtra->MxlDefinedTunerStructure, IF_DIVVAL, IfDivval) ;
187 MXL_GetCHRegister_ZeroIF(&pExtra->MxlDefinedTunerStructure, AddrTable, ByteTable, &TableLen) ;
188
189 MXL_GetMasterControl(&MasterControlByte, MC_LOAD_START) ;
190 AddrTable[TableLen] = MASTER_CONTROL_ADDR ;
191 ByteTable[TableLen] = MasterControlByte | AgcMasterByte ;
192 TableLen += 1;
193
194 if(pExtra->SetRegsWithTable( dib,pTuner, AddrTable, ByteTable, TableLen) != FUNCTION_SUCCESS)
195 goto error_status_set_tuner_registers;
196
197
198 // Set tuner RF frequency parameter.
199 pTuner->RfFreqHz = RfFreqHz;
200 pTuner->IsRfFreqHzSet = YES;
201
202
203 return FUNCTION_SUCCESS;
204
205
206error_status_set_tuner_registers:
207 return FUNCTION_ERROR;
208}
209
Steven Toth3935c252008-05-01 05:45:44 -0300210// DONE
211int mxl5005s_GetRfFreqHz(struct dvb_frontend *fe, unsigned long *pRfFreqHz)
Steven Toth52c99bd2008-05-01 04:57:01 -0300212{
Steven Toth3935c252008-05-01 05:45:44 -0300213 struct mxl5005s_state *state = fe->demodulator_priv;
214 int ret = -1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300215
Steven Toth3935c252008-05-01 05:45:44 -0300216 /* Get tuner RF frequency in Hz from tuner module. */
217 if(state->IsRfFreqHzSet == YES) {
218 *pRfFreqHz = state->RfFreqHz;
219 ret = 0;
220 }
Steven Toth52c99bd2008-05-01 04:57:01 -0300221
Steven Toth3935c252008-05-01 05:45:44 -0300222 return -1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300223}
224
Steven Totha8214d42008-05-01 05:02:58 -0300225int mxl5005s_SetRegsWithTable(
Steven Toth52c99bd2008-05-01 04:57:01 -0300226 struct dvb_usb_device* dib,
227 TUNER_MODULE *pTuner,
228 unsigned char *pAddrTable,
229 unsigned char *pByteTable,
230 int TableLen
231 )
232{
233 BASE_INTERFACE_MODULE *pBaseInterface;
234 I2C_BRIDGE_MODULE *pI2cBridge;
235 unsigned char WritingByteNumMax;
236
237 int i;
238 unsigned char WritingBuffer[I2C_BUFFER_LEN];
239 unsigned char WritingIndex;
240
241
242
243 // Get base interface, I2C bridge, and maximum writing byte number.
244 pBaseInterface = pTuner->pBaseInterface;
245 pI2cBridge = pTuner->pI2cBridge;
246 WritingByteNumMax = pBaseInterface->I2cWritingByteNumMax;
247
248
249 // Set registers with table.
250 // Note: 1. The I2C format of MxL5005S is described as follows:
251 // start_bit + (device_addr | writing_bit) + (register_addr + writing_byte) * n + stop_bit
252 // ...
253 // start_bit + (device_addr | writing_bit) + (register_addr + writing_byte) * m + latch_byte + stop_bit
254 // 2. The latch_byte is 0xfe.
255 // 3. The following writing byte separating scheme takes latch_byte as two byte data.
256 for(i = 0, WritingIndex = 0; i < TableLen; i++)
257 {
258 // Put register address and register byte value into writing buffer.
259 WritingBuffer[WritingIndex] = pAddrTable[i];
260 WritingBuffer[WritingIndex + 1] = pByteTable[i];
261 WritingIndex += 2;
262
263 // If writing buffer is full, send the I2C writing command with writing buffer.
264 if(WritingIndex > (WritingByteNumMax - 2))
265 {
266 if(pI2cBridge->ForwardI2cWritingCmd(pI2cBridge, WritingBuffer, WritingIndex) != FUNCTION_SUCCESS)
267 goto error_status_set_tuner_registers;
268
269 WritingIndex = 0;
270 }
271 }
272
273
274 // Send the last I2C writing command with writing buffer and latch byte.
275 WritingBuffer[WritingIndex] = MXL5005S_LATCH_BYTE;
276 WritingIndex += 1;
277
278 if(pI2cBridge->ForwardI2cWritingCmd(pI2cBridge, WritingBuffer, WritingIndex) != FUNCTION_SUCCESS)
279 goto error_status_set_tuner_registers;
280
281
282 return FUNCTION_SUCCESS;
283
284
285error_status_set_tuner_registers:
286 return FUNCTION_ERROR;
287}
Steven Toth52c99bd2008-05-01 04:57:01 -0300288
Steven Toth3935c252008-05-01 05:45:44 -0300289int mxl5005s_SetRegsWithTable(struct dvb_frontend *fe,
Steven Toth52c99bd2008-05-01 04:57:01 -0300290 unsigned char *pAddrTable,
291 unsigned char *pByteTable,
292 int TableLen
293 )
294{
Steven Toth3935c252008-05-01 05:45:44 -0300295 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -0300296 int i;
297 u8 end_two_bytes_buf[]={ 0 , 0 };
298 u8 tuner_addr=0x00;
299
300 pTuner->GetDeviceAddr(pTuner , &tuner_addr);
301
302 for( i = 0 ; i < TableLen - 1 ; i++)
303 {
304 if ( TUNER_WI2C(dib , tuner_addr , pAddrTable[i] , &pByteTable[i] , 1 ) )
305 return FUNCTION_ERROR;
306 }
307
308 end_two_bytes_buf[0] = pByteTable[i];
309 end_two_bytes_buf[1] = MXL5005S_LATCH_BYTE;
310
311 if ( TUNER_WI2C(dib , tuner_addr , pAddrTable[i] , end_two_bytes_buf , 2 ) )
312 return FUNCTION_ERROR;
313
314 return FUNCTION_SUCCESS;
315}
316
Steven Toth3935c252008-05-01 05:45:44 -0300317int mxl5005s_SetRegMaskBits(struct dvb_frontend *fe,
Steven Toth52c99bd2008-05-01 04:57:01 -0300318 unsigned char RegAddr,
319 unsigned char Msb,
320 unsigned char Lsb,
321 const unsigned char WritingValue
322 )
323{
Steven Toth3935c252008-05-01 05:45:44 -0300324 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -0300325 int i;
326
327 unsigned char Mask;
328 unsigned char Shift;
Steven Toth52c99bd2008-05-01 04:57:01 -0300329 unsigned char RegByte;
330
Steven Toth3935c252008-05-01 05:45:44 -0300331 /* Generate mask and shift according to MSB and LSB. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300332 Mask = 0;
333 for(i = Lsb; i < (unsigned char)(Msb + 1); i++)
334 Mask |= 0x1 << i;
335
336 Shift = Lsb;
337
338
Steven Toth3935c252008-05-01 05:45:44 -0300339 /* Get tuner register byte according to register adddress. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300340 MXL_RegRead(&pExtra->MxlDefinedTunerStructure, RegAddr, &RegByte);
341
Steven Toth3935c252008-05-01 05:45:44 -0300342 /* Reserve register byte unmask bit with mask and inlay writing value into it. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300343 RegByte &= ~Mask;
344 RegByte |= (WritingValue << Shift) & Mask;
345
Steven Toth3935c252008-05-01 05:45:44 -0300346 /* Update tuner register byte table. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300347 MXL_RegWrite(&pExtra->MxlDefinedTunerStructure, RegAddr, RegByte);
348
Steven Toth3935c252008-05-01 05:45:44 -0300349 /* Write tuner register byte with writing byte. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300350 if(pExtra->SetRegsWithTable( dib, pTuner, &RegAddr, &RegByte, LEN_1_BYTE) != FUNCTION_SUCCESS)
351 goto error_status_set_tuner_registers;
352
353
354 return FUNCTION_SUCCESS;
355
356
357error_status_set_tuner_registers:
358 return FUNCTION_ERROR;
359}
360
Steven Toth3935c252008-05-01 05:45:44 -0300361// DONE
362int mxl5005s_SetSpectrumMode(struct dvb_frontend *fe, int SpectrumMode)
Steven Toth52c99bd2008-05-01 04:57:01 -0300363{
Steven Toth3935c252008-05-01 05:45:44 -0300364 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -0300365 static const unsigned char BbIqswapTable[SPECTRUM_MODE_NUM] =
366 {
Steven Toth3935c252008-05-01 05:45:44 -0300367 /* BB_IQSWAP */
368 0, /* Normal spectrum */
369 1, /* Inverse spectrum */
Steven Toth52c99bd2008-05-01 04:57:01 -0300370 };
371
Steven Toth3935c252008-05-01 05:45:44 -0300372 /* Set BB_IQSWAP according to BB_IQSWAP table and spectrum mode. */
373 mxl5005s_SetRegMaskBits(fe,
374 MXL5005S_BB_IQSWAP_ADDR,
375 MXL5005S_BB_IQSWAP_MSB,
376 MXL5005S_BB_IQSWAP_LSB,
377 BbIqswapTable[SpectrumMode]);
Steven Toth52c99bd2008-05-01 04:57:01 -0300378
379 return FUNCTION_SUCCESS;
Steven Toth52c99bd2008-05-01 04:57:01 -0300380}
381
Steven Toth3935c252008-05-01 05:45:44 -0300382// DONE
383int mxl5005s_SetBandwidthHz(struct dvb_frontend *fe, unsigned long BandwidthHz)
Steven Toth52c99bd2008-05-01 04:57:01 -0300384{
Steven Toth3935c252008-05-01 05:45:44 -0300385 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -0300386
387 unsigned char BbDlpfBandsel;
388
Steven Toth3935c252008-05-01 05:45:44 -0300389 /* Set BB_DLPF_BANDSEL according to bandwidth. */
Steven Toth52c99bd2008-05-01 04:57:01 -0300390 switch(BandwidthHz)
391 {
392 default:
Steven Toth3935c252008-05-01 05:45:44 -0300393 case MXL5005S_BANDWIDTH_6MHZ:
394 BbDlpfBandsel = 3;
395 break;
396 case MXL5005S_BANDWIDTH_7MHZ:
397 BbDlpfBandsel = 2;
398 break;
399 case MXL5005S_BANDWIDTH_8MHZ:
400 BbDlpfBandsel = 0;
401 break;
Steven Toth52c99bd2008-05-01 04:57:01 -0300402 }
403
404 if(pExtra->SetRegMaskBits(dib,pTuner, MXL5005S_BB_DLPF_BANDSEL_ADDR, MXL5005S_BB_DLPF_BANDSEL_MSB,
Steven Toth3935c252008-05-01 05:45:44 -0300405 MXL5005S_BB_DLPF_BANDSEL_LSB, BbDlpfBandsel) != 0)
Steven Toth52c99bd2008-05-01 04:57:01 -0300406 goto error_status_set_tuner_registers;
407
408
Steven Toth3935c252008-05-01 05:45:44 -0300409 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300410
411
412error_status_set_tuner_registers:
Steven Toth3935c252008-05-01 05:45:44 -0300413 return -1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300414}
415
Steven Toth52c99bd2008-05-01 04:57:01 -0300416// The following context is source code provided by MaxLinear.
Steven Toth52c99bd2008-05-01 04:57:01 -0300417// MaxLinear source code - MXL5005_Initialize.cpp
Steven Toth3935c252008-05-01 05:45:44 -0300418// DONE
419u16 MXL5005_RegisterInit(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -0300420{
Steven Toth3935c252008-05-01 05:45:44 -0300421 struct mxl5005s_state *state = fe->demodulator_priv;
422 state->TunerRegs_Num = TUNER_REGS_NUM ;
423// state->TunerRegs = (TunerReg_struct *) calloc( TUNER_REGS_NUM, sizeof(TunerReg_struct) ) ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300424
Steven Toth3935c252008-05-01 05:45:44 -0300425 state->TunerRegs[0].Reg_Num = 9 ;
426 state->TunerRegs[0].Reg_Val = 0x40 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300427
Steven Toth3935c252008-05-01 05:45:44 -0300428 state->TunerRegs[1].Reg_Num = 11 ;
429 state->TunerRegs[1].Reg_Val = 0x19 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300430
Steven Toth3935c252008-05-01 05:45:44 -0300431 state->TunerRegs[2].Reg_Num = 12 ;
432 state->TunerRegs[2].Reg_Val = 0x60 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300433
Steven Toth3935c252008-05-01 05:45:44 -0300434 state->TunerRegs[3].Reg_Num = 13 ;
435 state->TunerRegs[3].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300436
Steven Toth3935c252008-05-01 05:45:44 -0300437 state->TunerRegs[4].Reg_Num = 14 ;
438 state->TunerRegs[4].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300439
Steven Toth3935c252008-05-01 05:45:44 -0300440 state->TunerRegs[5].Reg_Num = 15 ;
441 state->TunerRegs[5].Reg_Val = 0xC0 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300442
Steven Toth3935c252008-05-01 05:45:44 -0300443 state->TunerRegs[6].Reg_Num = 16 ;
444 state->TunerRegs[6].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300445
Steven Toth3935c252008-05-01 05:45:44 -0300446 state->TunerRegs[7].Reg_Num = 17 ;
447 state->TunerRegs[7].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300448
Steven Toth3935c252008-05-01 05:45:44 -0300449 state->TunerRegs[8].Reg_Num = 18 ;
450 state->TunerRegs[8].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300451
Steven Toth3935c252008-05-01 05:45:44 -0300452 state->TunerRegs[9].Reg_Num = 19 ;
453 state->TunerRegs[9].Reg_Val = 0x34 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300454
Steven Toth3935c252008-05-01 05:45:44 -0300455 state->TunerRegs[10].Reg_Num = 21 ;
456 state->TunerRegs[10].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300457
Steven Toth3935c252008-05-01 05:45:44 -0300458 state->TunerRegs[11].Reg_Num = 22 ;
459 state->TunerRegs[11].Reg_Val = 0x6B ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300460
Steven Toth3935c252008-05-01 05:45:44 -0300461 state->TunerRegs[12].Reg_Num = 23 ;
462 state->TunerRegs[12].Reg_Val = 0x35 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300463
Steven Toth3935c252008-05-01 05:45:44 -0300464 state->TunerRegs[13].Reg_Num = 24 ;
465 state->TunerRegs[13].Reg_Val = 0x70 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300466
Steven Toth3935c252008-05-01 05:45:44 -0300467 state->TunerRegs[14].Reg_Num = 25 ;
468 state->TunerRegs[14].Reg_Val = 0x3E ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300469
Steven Toth3935c252008-05-01 05:45:44 -0300470 state->TunerRegs[15].Reg_Num = 26 ;
471 state->TunerRegs[15].Reg_Val = 0x82 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300472
Steven Toth3935c252008-05-01 05:45:44 -0300473 state->TunerRegs[16].Reg_Num = 31 ;
474 state->TunerRegs[16].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300475
Steven Toth3935c252008-05-01 05:45:44 -0300476 state->TunerRegs[17].Reg_Num = 32 ;
477 state->TunerRegs[17].Reg_Val = 0x40 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300478
Steven Toth3935c252008-05-01 05:45:44 -0300479 state->TunerRegs[18].Reg_Num = 33 ;
480 state->TunerRegs[18].Reg_Val = 0x53 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300481
Steven Toth3935c252008-05-01 05:45:44 -0300482 state->TunerRegs[19].Reg_Num = 34 ;
483 state->TunerRegs[19].Reg_Val = 0x81 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300484
Steven Toth3935c252008-05-01 05:45:44 -0300485 state->TunerRegs[20].Reg_Num = 35 ;
486 state->TunerRegs[20].Reg_Val = 0xC9 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300487
Steven Toth3935c252008-05-01 05:45:44 -0300488 state->TunerRegs[21].Reg_Num = 36 ;
489 state->TunerRegs[21].Reg_Val = 0x01 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300490
Steven Toth3935c252008-05-01 05:45:44 -0300491 state->TunerRegs[22].Reg_Num = 37 ;
492 state->TunerRegs[22].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300493
Steven Toth3935c252008-05-01 05:45:44 -0300494 state->TunerRegs[23].Reg_Num = 41 ;
495 state->TunerRegs[23].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300496
Steven Toth3935c252008-05-01 05:45:44 -0300497 state->TunerRegs[24].Reg_Num = 42 ;
498 state->TunerRegs[24].Reg_Val = 0xF8 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300499
Steven Toth3935c252008-05-01 05:45:44 -0300500 state->TunerRegs[25].Reg_Num = 43 ;
501 state->TunerRegs[25].Reg_Val = 0x43 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300502
Steven Toth3935c252008-05-01 05:45:44 -0300503 state->TunerRegs[26].Reg_Num = 44 ;
504 state->TunerRegs[26].Reg_Val = 0x20 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300505
Steven Toth3935c252008-05-01 05:45:44 -0300506 state->TunerRegs[27].Reg_Num = 45 ;
507 state->TunerRegs[27].Reg_Val = 0x80 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300508
Steven Toth3935c252008-05-01 05:45:44 -0300509 state->TunerRegs[28].Reg_Num = 46 ;
510 state->TunerRegs[28].Reg_Val = 0x88 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300511
Steven Toth3935c252008-05-01 05:45:44 -0300512 state->TunerRegs[29].Reg_Num = 47 ;
513 state->TunerRegs[29].Reg_Val = 0x86 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300514
Steven Toth3935c252008-05-01 05:45:44 -0300515 state->TunerRegs[30].Reg_Num = 48 ;
516 state->TunerRegs[30].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300517
Steven Toth3935c252008-05-01 05:45:44 -0300518 state->TunerRegs[31].Reg_Num = 49 ;
519 state->TunerRegs[31].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300520
Steven Toth3935c252008-05-01 05:45:44 -0300521 state->TunerRegs[32].Reg_Num = 53 ;
522 state->TunerRegs[32].Reg_Val = 0x94 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300523
Steven Toth3935c252008-05-01 05:45:44 -0300524 state->TunerRegs[33].Reg_Num = 54 ;
525 state->TunerRegs[33].Reg_Val = 0xFA ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300526
Steven Toth3935c252008-05-01 05:45:44 -0300527 state->TunerRegs[34].Reg_Num = 55 ;
528 state->TunerRegs[34].Reg_Val = 0x92 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300529
Steven Toth3935c252008-05-01 05:45:44 -0300530 state->TunerRegs[35].Reg_Num = 56 ;
531 state->TunerRegs[35].Reg_Val = 0x80 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300532
Steven Toth3935c252008-05-01 05:45:44 -0300533 state->TunerRegs[36].Reg_Num = 57 ;
534 state->TunerRegs[36].Reg_Val = 0x41 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300535
Steven Toth3935c252008-05-01 05:45:44 -0300536 state->TunerRegs[37].Reg_Num = 58 ;
537 state->TunerRegs[37].Reg_Val = 0xDB ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300538
Steven Toth3935c252008-05-01 05:45:44 -0300539 state->TunerRegs[38].Reg_Num = 59 ;
540 state->TunerRegs[38].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300541
Steven Toth3935c252008-05-01 05:45:44 -0300542 state->TunerRegs[39].Reg_Num = 60 ;
543 state->TunerRegs[39].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300544
Steven Toth3935c252008-05-01 05:45:44 -0300545 state->TunerRegs[40].Reg_Num = 61 ;
546 state->TunerRegs[40].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300547
Steven Toth3935c252008-05-01 05:45:44 -0300548 state->TunerRegs[41].Reg_Num = 62 ;
549 state->TunerRegs[41].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300550
Steven Toth3935c252008-05-01 05:45:44 -0300551 state->TunerRegs[42].Reg_Num = 65 ;
552 state->TunerRegs[42].Reg_Val = 0xF8 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300553
Steven Toth3935c252008-05-01 05:45:44 -0300554 state->TunerRegs[43].Reg_Num = 66 ;
555 state->TunerRegs[43].Reg_Val = 0xE4 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300556
Steven Toth3935c252008-05-01 05:45:44 -0300557 state->TunerRegs[44].Reg_Num = 67 ;
558 state->TunerRegs[44].Reg_Val = 0x90 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300559
Steven Toth3935c252008-05-01 05:45:44 -0300560 state->TunerRegs[45].Reg_Num = 68 ;
561 state->TunerRegs[45].Reg_Val = 0xC0 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300562
Steven Toth3935c252008-05-01 05:45:44 -0300563 state->TunerRegs[46].Reg_Num = 69 ;
564 state->TunerRegs[46].Reg_Val = 0x01 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300565
Steven Toth3935c252008-05-01 05:45:44 -0300566 state->TunerRegs[47].Reg_Num = 70 ;
567 state->TunerRegs[47].Reg_Val = 0x50 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300568
Steven Toth3935c252008-05-01 05:45:44 -0300569 state->TunerRegs[48].Reg_Num = 71 ;
570 state->TunerRegs[48].Reg_Val = 0x06 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300571
Steven Toth3935c252008-05-01 05:45:44 -0300572 state->TunerRegs[49].Reg_Num = 72 ;
573 state->TunerRegs[49].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300574
Steven Toth3935c252008-05-01 05:45:44 -0300575 state->TunerRegs[50].Reg_Num = 73 ;
576 state->TunerRegs[50].Reg_Val = 0x20 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300577
Steven Toth3935c252008-05-01 05:45:44 -0300578 state->TunerRegs[51].Reg_Num = 76 ;
579 state->TunerRegs[51].Reg_Val = 0xBB ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300580
Steven Toth3935c252008-05-01 05:45:44 -0300581 state->TunerRegs[52].Reg_Num = 77 ;
582 state->TunerRegs[52].Reg_Val = 0x13 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300583
Steven Toth3935c252008-05-01 05:45:44 -0300584 state->TunerRegs[53].Reg_Num = 81 ;
585 state->TunerRegs[53].Reg_Val = 0x04 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300586
Steven Toth3935c252008-05-01 05:45:44 -0300587 state->TunerRegs[54].Reg_Num = 82 ;
588 state->TunerRegs[54].Reg_Val = 0x75 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300589
Steven Toth3935c252008-05-01 05:45:44 -0300590 state->TunerRegs[55].Reg_Num = 83 ;
591 state->TunerRegs[55].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300592
Steven Toth3935c252008-05-01 05:45:44 -0300593 state->TunerRegs[56].Reg_Num = 84 ;
594 state->TunerRegs[56].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300595
Steven Toth3935c252008-05-01 05:45:44 -0300596 state->TunerRegs[57].Reg_Num = 85 ;
597 state->TunerRegs[57].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300598
Steven Toth3935c252008-05-01 05:45:44 -0300599 state->TunerRegs[58].Reg_Num = 91 ;
600 state->TunerRegs[58].Reg_Val = 0x70 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300601
Steven Toth3935c252008-05-01 05:45:44 -0300602 state->TunerRegs[59].Reg_Num = 92 ;
603 state->TunerRegs[59].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300604
Steven Toth3935c252008-05-01 05:45:44 -0300605 state->TunerRegs[60].Reg_Num = 93 ;
606 state->TunerRegs[60].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300607
Steven Toth3935c252008-05-01 05:45:44 -0300608 state->TunerRegs[61].Reg_Num = 94 ;
609 state->TunerRegs[61].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300610
Steven Toth3935c252008-05-01 05:45:44 -0300611 state->TunerRegs[62].Reg_Num = 95 ;
612 state->TunerRegs[62].Reg_Val = 0x0C ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300613
Steven Toth3935c252008-05-01 05:45:44 -0300614 state->TunerRegs[63].Reg_Num = 96 ;
615 state->TunerRegs[63].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300616
Steven Toth3935c252008-05-01 05:45:44 -0300617 state->TunerRegs[64].Reg_Num = 97 ;
618 state->TunerRegs[64].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300619
Steven Toth3935c252008-05-01 05:45:44 -0300620 state->TunerRegs[65].Reg_Num = 98 ;
621 state->TunerRegs[65].Reg_Val = 0xE2 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300622
Steven Toth3935c252008-05-01 05:45:44 -0300623 state->TunerRegs[66].Reg_Num = 99 ;
624 state->TunerRegs[66].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300625
Steven Toth3935c252008-05-01 05:45:44 -0300626 state->TunerRegs[67].Reg_Num = 100 ;
627 state->TunerRegs[67].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300628
Steven Toth3935c252008-05-01 05:45:44 -0300629 state->TunerRegs[68].Reg_Num = 101 ;
630 state->TunerRegs[68].Reg_Val = 0x12 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300631
Steven Toth3935c252008-05-01 05:45:44 -0300632 state->TunerRegs[69].Reg_Num = 102 ;
633 state->TunerRegs[69].Reg_Val = 0x80 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300634
Steven Toth3935c252008-05-01 05:45:44 -0300635 state->TunerRegs[70].Reg_Num = 103 ;
636 state->TunerRegs[70].Reg_Val = 0x32 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300637
Steven Toth3935c252008-05-01 05:45:44 -0300638 state->TunerRegs[71].Reg_Num = 104 ;
639 state->TunerRegs[71].Reg_Val = 0xB4 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300640
Steven Toth3935c252008-05-01 05:45:44 -0300641 state->TunerRegs[72].Reg_Num = 105 ;
642 state->TunerRegs[72].Reg_Val = 0x60 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300643
Steven Toth3935c252008-05-01 05:45:44 -0300644 state->TunerRegs[73].Reg_Num = 106 ;
645 state->TunerRegs[73].Reg_Val = 0x83 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300646
Steven Toth3935c252008-05-01 05:45:44 -0300647 state->TunerRegs[74].Reg_Num = 107 ;
648 state->TunerRegs[74].Reg_Val = 0x84 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300649
Steven Toth3935c252008-05-01 05:45:44 -0300650 state->TunerRegs[75].Reg_Num = 108 ;
651 state->TunerRegs[75].Reg_Val = 0x9C ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300652
Steven Toth3935c252008-05-01 05:45:44 -0300653 state->TunerRegs[76].Reg_Num = 109 ;
654 state->TunerRegs[76].Reg_Val = 0x02 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300655
Steven Toth3935c252008-05-01 05:45:44 -0300656 state->TunerRegs[77].Reg_Num = 110 ;
657 state->TunerRegs[77].Reg_Val = 0x81 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300658
Steven Toth3935c252008-05-01 05:45:44 -0300659 state->TunerRegs[78].Reg_Num = 111 ;
660 state->TunerRegs[78].Reg_Val = 0xC0 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300661
Steven Toth3935c252008-05-01 05:45:44 -0300662 state->TunerRegs[79].Reg_Num = 112 ;
663 state->TunerRegs[79].Reg_Val = 0x10 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300664
Steven Toth3935c252008-05-01 05:45:44 -0300665 state->TunerRegs[80].Reg_Num = 131 ;
666 state->TunerRegs[80].Reg_Val = 0x8A ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300667
Steven Toth3935c252008-05-01 05:45:44 -0300668 state->TunerRegs[81].Reg_Num = 132 ;
669 state->TunerRegs[81].Reg_Val = 0x10 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300670
Steven Toth3935c252008-05-01 05:45:44 -0300671 state->TunerRegs[82].Reg_Num = 133 ;
672 state->TunerRegs[82].Reg_Val = 0x24 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300673
Steven Toth3935c252008-05-01 05:45:44 -0300674 state->TunerRegs[83].Reg_Num = 134 ;
675 state->TunerRegs[83].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300676
Steven Toth3935c252008-05-01 05:45:44 -0300677 state->TunerRegs[84].Reg_Num = 135 ;
678 state->TunerRegs[84].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300679
Steven Toth3935c252008-05-01 05:45:44 -0300680 state->TunerRegs[85].Reg_Num = 136 ;
681 state->TunerRegs[85].Reg_Val = 0x7E ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300682
Steven Toth3935c252008-05-01 05:45:44 -0300683 state->TunerRegs[86].Reg_Num = 137 ;
684 state->TunerRegs[86].Reg_Val = 0x40 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300685
Steven Toth3935c252008-05-01 05:45:44 -0300686 state->TunerRegs[87].Reg_Num = 138 ;
687 state->TunerRegs[87].Reg_Val = 0x38 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300688
Steven Toth3935c252008-05-01 05:45:44 -0300689 state->TunerRegs[88].Reg_Num = 146 ;
690 state->TunerRegs[88].Reg_Val = 0xF6 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300691
Steven Toth3935c252008-05-01 05:45:44 -0300692 state->TunerRegs[89].Reg_Num = 147 ;
693 state->TunerRegs[89].Reg_Val = 0x1A ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300694
Steven Toth3935c252008-05-01 05:45:44 -0300695 state->TunerRegs[90].Reg_Num = 148 ;
696 state->TunerRegs[90].Reg_Val = 0x62 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300697
Steven Toth3935c252008-05-01 05:45:44 -0300698 state->TunerRegs[91].Reg_Num = 149 ;
699 state->TunerRegs[91].Reg_Val = 0x33 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300700
Steven Toth3935c252008-05-01 05:45:44 -0300701 state->TunerRegs[92].Reg_Num = 150 ;
702 state->TunerRegs[92].Reg_Val = 0x80 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300703
Steven Toth3935c252008-05-01 05:45:44 -0300704 state->TunerRegs[93].Reg_Num = 156 ;
705 state->TunerRegs[93].Reg_Val = 0x56 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300706
Steven Toth3935c252008-05-01 05:45:44 -0300707 state->TunerRegs[94].Reg_Num = 157 ;
708 state->TunerRegs[94].Reg_Val = 0x17 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300709
Steven Toth3935c252008-05-01 05:45:44 -0300710 state->TunerRegs[95].Reg_Num = 158 ;
711 state->TunerRegs[95].Reg_Val = 0xA9 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300712
Steven Toth3935c252008-05-01 05:45:44 -0300713 state->TunerRegs[96].Reg_Num = 159 ;
714 state->TunerRegs[96].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300715
Steven Toth3935c252008-05-01 05:45:44 -0300716 state->TunerRegs[97].Reg_Num = 160 ;
717 state->TunerRegs[97].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300718
Steven Toth3935c252008-05-01 05:45:44 -0300719 state->TunerRegs[98].Reg_Num = 161 ;
720 state->TunerRegs[98].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300721
Steven Toth3935c252008-05-01 05:45:44 -0300722 state->TunerRegs[99].Reg_Num = 162 ;
723 state->TunerRegs[99].Reg_Val = 0x40 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300724
Steven Toth3935c252008-05-01 05:45:44 -0300725 state->TunerRegs[100].Reg_Num = 166 ;
726 state->TunerRegs[100].Reg_Val = 0xAE ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300727
Steven Toth3935c252008-05-01 05:45:44 -0300728 state->TunerRegs[101].Reg_Num = 167 ;
729 state->TunerRegs[101].Reg_Val = 0x1B ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300730
Steven Toth3935c252008-05-01 05:45:44 -0300731 state->TunerRegs[102].Reg_Num = 168 ;
732 state->TunerRegs[102].Reg_Val = 0xF2 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300733
Steven Toth3935c252008-05-01 05:45:44 -0300734 state->TunerRegs[103].Reg_Num = 195 ;
735 state->TunerRegs[103].Reg_Val = 0x00 ;
Steven Toth52c99bd2008-05-01 04:57:01 -0300736
737 return 0 ;
738}
739
Steven Toth3935c252008-05-01 05:45:44 -0300740// DONE
741u16 MXL5005_ControlInit(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -0300742{
Steven Toth3935c252008-05-01 05:45:44 -0300743 struct mxl5005s_state *state = fe->demodulator_priv;
744 state->Init_Ctrl_Num = INITCTRL_NUM;
Steven Toth52c99bd2008-05-01 04:57:01 -0300745
Steven Toth3935c252008-05-01 05:45:44 -0300746 state->Init_Ctrl[0].Ctrl_Num = DN_IQTN_AMP_CUT ;
747 state->Init_Ctrl[0].size = 1 ;
748 state->Init_Ctrl[0].addr[0] = 73;
749 state->Init_Ctrl[0].bit[0] = 7;
750 state->Init_Ctrl[0].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300751
Steven Toth3935c252008-05-01 05:45:44 -0300752 state->Init_Ctrl[1].Ctrl_Num = BB_MODE ;
753 state->Init_Ctrl[1].size = 1 ;
754 state->Init_Ctrl[1].addr[0] = 53;
755 state->Init_Ctrl[1].bit[0] = 2;
756 state->Init_Ctrl[1].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300757
Steven Toth3935c252008-05-01 05:45:44 -0300758 state->Init_Ctrl[2].Ctrl_Num = BB_BUF ;
759 state->Init_Ctrl[2].size = 2 ;
760 state->Init_Ctrl[2].addr[0] = 53;
761 state->Init_Ctrl[2].bit[0] = 1;
762 state->Init_Ctrl[2].val[0] = 0;
763 state->Init_Ctrl[2].addr[1] = 57;
764 state->Init_Ctrl[2].bit[1] = 0;
765 state->Init_Ctrl[2].val[1] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300766
Steven Toth3935c252008-05-01 05:45:44 -0300767 state->Init_Ctrl[3].Ctrl_Num = BB_BUF_OA ;
768 state->Init_Ctrl[3].size = 1 ;
769 state->Init_Ctrl[3].addr[0] = 53;
770 state->Init_Ctrl[3].bit[0] = 0;
771 state->Init_Ctrl[3].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300772
Steven Toth3935c252008-05-01 05:45:44 -0300773 state->Init_Ctrl[4].Ctrl_Num = BB_ALPF_BANDSELECT ;
774 state->Init_Ctrl[4].size = 3 ;
775 state->Init_Ctrl[4].addr[0] = 53;
776 state->Init_Ctrl[4].bit[0] = 5;
777 state->Init_Ctrl[4].val[0] = 0;
778 state->Init_Ctrl[4].addr[1] = 53;
779 state->Init_Ctrl[4].bit[1] = 6;
780 state->Init_Ctrl[4].val[1] = 0;
781 state->Init_Ctrl[4].addr[2] = 53;
782 state->Init_Ctrl[4].bit[2] = 7;
783 state->Init_Ctrl[4].val[2] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300784
Steven Toth3935c252008-05-01 05:45:44 -0300785 state->Init_Ctrl[5].Ctrl_Num = BB_IQSWAP ;
786 state->Init_Ctrl[5].size = 1 ;
787 state->Init_Ctrl[5].addr[0] = 59;
788 state->Init_Ctrl[5].bit[0] = 0;
789 state->Init_Ctrl[5].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300790
Steven Toth3935c252008-05-01 05:45:44 -0300791 state->Init_Ctrl[6].Ctrl_Num = BB_DLPF_BANDSEL ;
792 state->Init_Ctrl[6].size = 2 ;
793 state->Init_Ctrl[6].addr[0] = 53;
794 state->Init_Ctrl[6].bit[0] = 3;
795 state->Init_Ctrl[6].val[0] = 0;
796 state->Init_Ctrl[6].addr[1] = 53;
797 state->Init_Ctrl[6].bit[1] = 4;
798 state->Init_Ctrl[6].val[1] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300799
Steven Toth3935c252008-05-01 05:45:44 -0300800 state->Init_Ctrl[7].Ctrl_Num = RFSYN_CHP_GAIN ;
801 state->Init_Ctrl[7].size = 4 ;
802 state->Init_Ctrl[7].addr[0] = 22;
803 state->Init_Ctrl[7].bit[0] = 4;
804 state->Init_Ctrl[7].val[0] = 0;
805 state->Init_Ctrl[7].addr[1] = 22;
806 state->Init_Ctrl[7].bit[1] = 5;
807 state->Init_Ctrl[7].val[1] = 1;
808 state->Init_Ctrl[7].addr[2] = 22;
809 state->Init_Ctrl[7].bit[2] = 6;
810 state->Init_Ctrl[7].val[2] = 1;
811 state->Init_Ctrl[7].addr[3] = 22;
812 state->Init_Ctrl[7].bit[3] = 7;
813 state->Init_Ctrl[7].val[3] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300814
Steven Toth3935c252008-05-01 05:45:44 -0300815 state->Init_Ctrl[8].Ctrl_Num = RFSYN_EN_CHP_HIGAIN ;
816 state->Init_Ctrl[8].size = 1 ;
817 state->Init_Ctrl[8].addr[0] = 22;
818 state->Init_Ctrl[8].bit[0] = 2;
819 state->Init_Ctrl[8].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300820
Steven Toth3935c252008-05-01 05:45:44 -0300821 state->Init_Ctrl[9].Ctrl_Num = AGC_IF ;
822 state->Init_Ctrl[9].size = 4 ;
823 state->Init_Ctrl[9].addr[0] = 76;
824 state->Init_Ctrl[9].bit[0] = 0;
825 state->Init_Ctrl[9].val[0] = 1;
826 state->Init_Ctrl[9].addr[1] = 76;
827 state->Init_Ctrl[9].bit[1] = 1;
828 state->Init_Ctrl[9].val[1] = 1;
829 state->Init_Ctrl[9].addr[2] = 76;
830 state->Init_Ctrl[9].bit[2] = 2;
831 state->Init_Ctrl[9].val[2] = 0;
832 state->Init_Ctrl[9].addr[3] = 76;
833 state->Init_Ctrl[9].bit[3] = 3;
834 state->Init_Ctrl[9].val[3] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300835
Steven Toth3935c252008-05-01 05:45:44 -0300836 state->Init_Ctrl[10].Ctrl_Num = AGC_RF ;
837 state->Init_Ctrl[10].size = 4 ;
838 state->Init_Ctrl[10].addr[0] = 76;
839 state->Init_Ctrl[10].bit[0] = 4;
840 state->Init_Ctrl[10].val[0] = 1;
841 state->Init_Ctrl[10].addr[1] = 76;
842 state->Init_Ctrl[10].bit[1] = 5;
843 state->Init_Ctrl[10].val[1] = 1;
844 state->Init_Ctrl[10].addr[2] = 76;
845 state->Init_Ctrl[10].bit[2] = 6;
846 state->Init_Ctrl[10].val[2] = 0;
847 state->Init_Ctrl[10].addr[3] = 76;
848 state->Init_Ctrl[10].bit[3] = 7;
849 state->Init_Ctrl[10].val[3] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300850
Steven Toth3935c252008-05-01 05:45:44 -0300851 state->Init_Ctrl[11].Ctrl_Num = IF_DIVVAL ;
852 state->Init_Ctrl[11].size = 5 ;
853 state->Init_Ctrl[11].addr[0] = 43;
854 state->Init_Ctrl[11].bit[0] = 3;
855 state->Init_Ctrl[11].val[0] = 0;
856 state->Init_Ctrl[11].addr[1] = 43;
857 state->Init_Ctrl[11].bit[1] = 4;
858 state->Init_Ctrl[11].val[1] = 0;
859 state->Init_Ctrl[11].addr[2] = 43;
860 state->Init_Ctrl[11].bit[2] = 5;
861 state->Init_Ctrl[11].val[2] = 0;
862 state->Init_Ctrl[11].addr[3] = 43;
863 state->Init_Ctrl[11].bit[3] = 6;
864 state->Init_Ctrl[11].val[3] = 1;
865 state->Init_Ctrl[11].addr[4] = 43;
866 state->Init_Ctrl[11].bit[4] = 7;
867 state->Init_Ctrl[11].val[4] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300868
Steven Toth3935c252008-05-01 05:45:44 -0300869 state->Init_Ctrl[12].Ctrl_Num = IF_VCO_BIAS ;
870 state->Init_Ctrl[12].size = 6 ;
871 state->Init_Ctrl[12].addr[0] = 44;
872 state->Init_Ctrl[12].bit[0] = 2;
873 state->Init_Ctrl[12].val[0] = 0;
874 state->Init_Ctrl[12].addr[1] = 44;
875 state->Init_Ctrl[12].bit[1] = 3;
876 state->Init_Ctrl[12].val[1] = 0;
877 state->Init_Ctrl[12].addr[2] = 44;
878 state->Init_Ctrl[12].bit[2] = 4;
879 state->Init_Ctrl[12].val[2] = 0;
880 state->Init_Ctrl[12].addr[3] = 44;
881 state->Init_Ctrl[12].bit[3] = 5;
882 state->Init_Ctrl[12].val[3] = 1;
883 state->Init_Ctrl[12].addr[4] = 44;
884 state->Init_Ctrl[12].bit[4] = 6;
885 state->Init_Ctrl[12].val[4] = 0;
886 state->Init_Ctrl[12].addr[5] = 44;
887 state->Init_Ctrl[12].bit[5] = 7;
888 state->Init_Ctrl[12].val[5] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300889
Steven Toth3935c252008-05-01 05:45:44 -0300890 state->Init_Ctrl[13].Ctrl_Num = CHCAL_INT_MOD_IF ;
891 state->Init_Ctrl[13].size = 7 ;
892 state->Init_Ctrl[13].addr[0] = 11;
893 state->Init_Ctrl[13].bit[0] = 0;
894 state->Init_Ctrl[13].val[0] = 1;
895 state->Init_Ctrl[13].addr[1] = 11;
896 state->Init_Ctrl[13].bit[1] = 1;
897 state->Init_Ctrl[13].val[1] = 0;
898 state->Init_Ctrl[13].addr[2] = 11;
899 state->Init_Ctrl[13].bit[2] = 2;
900 state->Init_Ctrl[13].val[2] = 0;
901 state->Init_Ctrl[13].addr[3] = 11;
902 state->Init_Ctrl[13].bit[3] = 3;
903 state->Init_Ctrl[13].val[3] = 1;
904 state->Init_Ctrl[13].addr[4] = 11;
905 state->Init_Ctrl[13].bit[4] = 4;
906 state->Init_Ctrl[13].val[4] = 1;
907 state->Init_Ctrl[13].addr[5] = 11;
908 state->Init_Ctrl[13].bit[5] = 5;
909 state->Init_Ctrl[13].val[5] = 0;
910 state->Init_Ctrl[13].addr[6] = 11;
911 state->Init_Ctrl[13].bit[6] = 6;
912 state->Init_Ctrl[13].val[6] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300913
Steven Toth3935c252008-05-01 05:45:44 -0300914 state->Init_Ctrl[14].Ctrl_Num = CHCAL_FRAC_MOD_IF ;
915 state->Init_Ctrl[14].size = 16 ;
916 state->Init_Ctrl[14].addr[0] = 13;
917 state->Init_Ctrl[14].bit[0] = 0;
918 state->Init_Ctrl[14].val[0] = 0;
919 state->Init_Ctrl[14].addr[1] = 13;
920 state->Init_Ctrl[14].bit[1] = 1;
921 state->Init_Ctrl[14].val[1] = 0;
922 state->Init_Ctrl[14].addr[2] = 13;
923 state->Init_Ctrl[14].bit[2] = 2;
924 state->Init_Ctrl[14].val[2] = 0;
925 state->Init_Ctrl[14].addr[3] = 13;
926 state->Init_Ctrl[14].bit[3] = 3;
927 state->Init_Ctrl[14].val[3] = 0;
928 state->Init_Ctrl[14].addr[4] = 13;
929 state->Init_Ctrl[14].bit[4] = 4;
930 state->Init_Ctrl[14].val[4] = 0;
931 state->Init_Ctrl[14].addr[5] = 13;
932 state->Init_Ctrl[14].bit[5] = 5;
933 state->Init_Ctrl[14].val[5] = 0;
934 state->Init_Ctrl[14].addr[6] = 13;
935 state->Init_Ctrl[14].bit[6] = 6;
936 state->Init_Ctrl[14].val[6] = 0;
937 state->Init_Ctrl[14].addr[7] = 13;
938 state->Init_Ctrl[14].bit[7] = 7;
939 state->Init_Ctrl[14].val[7] = 0;
940 state->Init_Ctrl[14].addr[8] = 12;
941 state->Init_Ctrl[14].bit[8] = 0;
942 state->Init_Ctrl[14].val[8] = 0;
943 state->Init_Ctrl[14].addr[9] = 12;
944 state->Init_Ctrl[14].bit[9] = 1;
945 state->Init_Ctrl[14].val[9] = 0;
946 state->Init_Ctrl[14].addr[10] = 12;
947 state->Init_Ctrl[14].bit[10] = 2;
948 state->Init_Ctrl[14].val[10] = 0;
949 state->Init_Ctrl[14].addr[11] = 12;
950 state->Init_Ctrl[14].bit[11] = 3;
951 state->Init_Ctrl[14].val[11] = 0;
952 state->Init_Ctrl[14].addr[12] = 12;
953 state->Init_Ctrl[14].bit[12] = 4;
954 state->Init_Ctrl[14].val[12] = 0;
955 state->Init_Ctrl[14].addr[13] = 12;
956 state->Init_Ctrl[14].bit[13] = 5;
957 state->Init_Ctrl[14].val[13] = 1;
958 state->Init_Ctrl[14].addr[14] = 12;
959 state->Init_Ctrl[14].bit[14] = 6;
960 state->Init_Ctrl[14].val[14] = 1;
961 state->Init_Ctrl[14].addr[15] = 12;
962 state->Init_Ctrl[14].bit[15] = 7;
963 state->Init_Ctrl[14].val[15] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300964
Steven Toth3935c252008-05-01 05:45:44 -0300965 state->Init_Ctrl[15].Ctrl_Num = DRV_RES_SEL ;
966 state->Init_Ctrl[15].size = 3 ;
967 state->Init_Ctrl[15].addr[0] = 147;
968 state->Init_Ctrl[15].bit[0] = 2;
969 state->Init_Ctrl[15].val[0] = 0;
970 state->Init_Ctrl[15].addr[1] = 147;
971 state->Init_Ctrl[15].bit[1] = 3;
972 state->Init_Ctrl[15].val[1] = 1;
973 state->Init_Ctrl[15].addr[2] = 147;
974 state->Init_Ctrl[15].bit[2] = 4;
975 state->Init_Ctrl[15].val[2] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300976
Steven Toth3935c252008-05-01 05:45:44 -0300977 state->Init_Ctrl[16].Ctrl_Num = I_DRIVER ;
978 state->Init_Ctrl[16].size = 2 ;
979 state->Init_Ctrl[16].addr[0] = 147;
980 state->Init_Ctrl[16].bit[0] = 0;
981 state->Init_Ctrl[16].val[0] = 0;
982 state->Init_Ctrl[16].addr[1] = 147;
983 state->Init_Ctrl[16].bit[1] = 1;
984 state->Init_Ctrl[16].val[1] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -0300985
Steven Toth3935c252008-05-01 05:45:44 -0300986 state->Init_Ctrl[17].Ctrl_Num = EN_AAF ;
987 state->Init_Ctrl[17].size = 1 ;
988 state->Init_Ctrl[17].addr[0] = 147;
989 state->Init_Ctrl[17].bit[0] = 7;
990 state->Init_Ctrl[17].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300991
Steven Toth3935c252008-05-01 05:45:44 -0300992 state->Init_Ctrl[18].Ctrl_Num = EN_3P ;
993 state->Init_Ctrl[18].size = 1 ;
994 state->Init_Ctrl[18].addr[0] = 147;
995 state->Init_Ctrl[18].bit[0] = 6;
996 state->Init_Ctrl[18].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -0300997
Steven Toth3935c252008-05-01 05:45:44 -0300998 state->Init_Ctrl[19].Ctrl_Num = EN_AUX_3P ;
999 state->Init_Ctrl[19].size = 1 ;
1000 state->Init_Ctrl[19].addr[0] = 156;
1001 state->Init_Ctrl[19].bit[0] = 0;
1002 state->Init_Ctrl[19].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001003
Steven Toth3935c252008-05-01 05:45:44 -03001004 state->Init_Ctrl[20].Ctrl_Num = SEL_AAF_BAND ;
1005 state->Init_Ctrl[20].size = 1 ;
1006 state->Init_Ctrl[20].addr[0] = 147;
1007 state->Init_Ctrl[20].bit[0] = 5;
1008 state->Init_Ctrl[20].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001009
Steven Toth3935c252008-05-01 05:45:44 -03001010 state->Init_Ctrl[21].Ctrl_Num = SEQ_ENCLK16_CLK_OUT ;
1011 state->Init_Ctrl[21].size = 1 ;
1012 state->Init_Ctrl[21].addr[0] = 137;
1013 state->Init_Ctrl[21].bit[0] = 4;
1014 state->Init_Ctrl[21].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001015
Steven Toth3935c252008-05-01 05:45:44 -03001016 state->Init_Ctrl[22].Ctrl_Num = SEQ_SEL4_16B ;
1017 state->Init_Ctrl[22].size = 1 ;
1018 state->Init_Ctrl[22].addr[0] = 137;
1019 state->Init_Ctrl[22].bit[0] = 7;
1020 state->Init_Ctrl[22].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001021
Steven Toth3935c252008-05-01 05:45:44 -03001022 state->Init_Ctrl[23].Ctrl_Num = XTAL_CAPSELECT ;
1023 state->Init_Ctrl[23].size = 1 ;
1024 state->Init_Ctrl[23].addr[0] = 91;
1025 state->Init_Ctrl[23].bit[0] = 5;
1026 state->Init_Ctrl[23].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001027
Steven Toth3935c252008-05-01 05:45:44 -03001028 state->Init_Ctrl[24].Ctrl_Num = IF_SEL_DBL ;
1029 state->Init_Ctrl[24].size = 1 ;
1030 state->Init_Ctrl[24].addr[0] = 43;
1031 state->Init_Ctrl[24].bit[0] = 0;
1032 state->Init_Ctrl[24].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001033
Steven Toth3935c252008-05-01 05:45:44 -03001034 state->Init_Ctrl[25].Ctrl_Num = RFSYN_R_DIV ;
1035 state->Init_Ctrl[25].size = 2 ;
1036 state->Init_Ctrl[25].addr[0] = 22;
1037 state->Init_Ctrl[25].bit[0] = 0;
1038 state->Init_Ctrl[25].val[0] = 1;
1039 state->Init_Ctrl[25].addr[1] = 22;
1040 state->Init_Ctrl[25].bit[1] = 1;
1041 state->Init_Ctrl[25].val[1] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001042
Steven Toth3935c252008-05-01 05:45:44 -03001043 state->Init_Ctrl[26].Ctrl_Num = SEQ_EXTSYNTHCALIF ;
1044 state->Init_Ctrl[26].size = 1 ;
1045 state->Init_Ctrl[26].addr[0] = 134;
1046 state->Init_Ctrl[26].bit[0] = 2;
1047 state->Init_Ctrl[26].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001048
Steven Toth3935c252008-05-01 05:45:44 -03001049 state->Init_Ctrl[27].Ctrl_Num = SEQ_EXTDCCAL ;
1050 state->Init_Ctrl[27].size = 1 ;
1051 state->Init_Ctrl[27].addr[0] = 137;
1052 state->Init_Ctrl[27].bit[0] = 3;
1053 state->Init_Ctrl[27].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001054
Steven Toth3935c252008-05-01 05:45:44 -03001055 state->Init_Ctrl[28].Ctrl_Num = AGC_EN_RSSI ;
1056 state->Init_Ctrl[28].size = 1 ;
1057 state->Init_Ctrl[28].addr[0] = 77;
1058 state->Init_Ctrl[28].bit[0] = 7;
1059 state->Init_Ctrl[28].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001060
Steven Toth3935c252008-05-01 05:45:44 -03001061 state->Init_Ctrl[29].Ctrl_Num = RFA_ENCLKRFAGC ;
1062 state->Init_Ctrl[29].size = 1 ;
1063 state->Init_Ctrl[29].addr[0] = 166;
1064 state->Init_Ctrl[29].bit[0] = 7;
1065 state->Init_Ctrl[29].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001066
Steven Toth3935c252008-05-01 05:45:44 -03001067 state->Init_Ctrl[30].Ctrl_Num = RFA_RSSI_REFH ;
1068 state->Init_Ctrl[30].size = 3 ;
1069 state->Init_Ctrl[30].addr[0] = 166;
1070 state->Init_Ctrl[30].bit[0] = 0;
1071 state->Init_Ctrl[30].val[0] = 0;
1072 state->Init_Ctrl[30].addr[1] = 166;
1073 state->Init_Ctrl[30].bit[1] = 1;
1074 state->Init_Ctrl[30].val[1] = 1;
1075 state->Init_Ctrl[30].addr[2] = 166;
1076 state->Init_Ctrl[30].bit[2] = 2;
1077 state->Init_Ctrl[30].val[2] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001078
Steven Toth3935c252008-05-01 05:45:44 -03001079 state->Init_Ctrl[31].Ctrl_Num = RFA_RSSI_REF ;
1080 state->Init_Ctrl[31].size = 3 ;
1081 state->Init_Ctrl[31].addr[0] = 166;
1082 state->Init_Ctrl[31].bit[0] = 3;
1083 state->Init_Ctrl[31].val[0] = 1;
1084 state->Init_Ctrl[31].addr[1] = 166;
1085 state->Init_Ctrl[31].bit[1] = 4;
1086 state->Init_Ctrl[31].val[1] = 0;
1087 state->Init_Ctrl[31].addr[2] = 166;
1088 state->Init_Ctrl[31].bit[2] = 5;
1089 state->Init_Ctrl[31].val[2] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001090
Steven Toth3935c252008-05-01 05:45:44 -03001091 state->Init_Ctrl[32].Ctrl_Num = RFA_RSSI_REFL ;
1092 state->Init_Ctrl[32].size = 3 ;
1093 state->Init_Ctrl[32].addr[0] = 167;
1094 state->Init_Ctrl[32].bit[0] = 0;
1095 state->Init_Ctrl[32].val[0] = 1;
1096 state->Init_Ctrl[32].addr[1] = 167;
1097 state->Init_Ctrl[32].bit[1] = 1;
1098 state->Init_Ctrl[32].val[1] = 1;
1099 state->Init_Ctrl[32].addr[2] = 167;
1100 state->Init_Ctrl[32].bit[2] = 2;
1101 state->Init_Ctrl[32].val[2] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001102
Steven Toth3935c252008-05-01 05:45:44 -03001103 state->Init_Ctrl[33].Ctrl_Num = RFA_FLR ;
1104 state->Init_Ctrl[33].size = 4 ;
1105 state->Init_Ctrl[33].addr[0] = 168;
1106 state->Init_Ctrl[33].bit[0] = 0;
1107 state->Init_Ctrl[33].val[0] = 0;
1108 state->Init_Ctrl[33].addr[1] = 168;
1109 state->Init_Ctrl[33].bit[1] = 1;
1110 state->Init_Ctrl[33].val[1] = 1;
1111 state->Init_Ctrl[33].addr[2] = 168;
1112 state->Init_Ctrl[33].bit[2] = 2;
1113 state->Init_Ctrl[33].val[2] = 0;
1114 state->Init_Ctrl[33].addr[3] = 168;
1115 state->Init_Ctrl[33].bit[3] = 3;
1116 state->Init_Ctrl[33].val[3] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001117
Steven Toth3935c252008-05-01 05:45:44 -03001118 state->Init_Ctrl[34].Ctrl_Num = RFA_CEIL ;
1119 state->Init_Ctrl[34].size = 4 ;
1120 state->Init_Ctrl[34].addr[0] = 168;
1121 state->Init_Ctrl[34].bit[0] = 4;
1122 state->Init_Ctrl[34].val[0] = 1;
1123 state->Init_Ctrl[34].addr[1] = 168;
1124 state->Init_Ctrl[34].bit[1] = 5;
1125 state->Init_Ctrl[34].val[1] = 1;
1126 state->Init_Ctrl[34].addr[2] = 168;
1127 state->Init_Ctrl[34].bit[2] = 6;
1128 state->Init_Ctrl[34].val[2] = 1;
1129 state->Init_Ctrl[34].addr[3] = 168;
1130 state->Init_Ctrl[34].bit[3] = 7;
1131 state->Init_Ctrl[34].val[3] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001132
Steven Toth3935c252008-05-01 05:45:44 -03001133 state->Init_Ctrl[35].Ctrl_Num = SEQ_EXTIQFSMPULSE ;
1134 state->Init_Ctrl[35].size = 1 ;
1135 state->Init_Ctrl[35].addr[0] = 135;
1136 state->Init_Ctrl[35].bit[0] = 0;
1137 state->Init_Ctrl[35].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001138
Steven Toth3935c252008-05-01 05:45:44 -03001139 state->Init_Ctrl[36].Ctrl_Num = OVERRIDE_1 ;
1140 state->Init_Ctrl[36].size = 1 ;
1141 state->Init_Ctrl[36].addr[0] = 56;
1142 state->Init_Ctrl[36].bit[0] = 3;
1143 state->Init_Ctrl[36].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001144
Steven Toth3935c252008-05-01 05:45:44 -03001145 state->Init_Ctrl[37].Ctrl_Num = BB_INITSTATE_DLPF_TUNE ;
1146 state->Init_Ctrl[37].size = 7 ;
1147 state->Init_Ctrl[37].addr[0] = 59;
1148 state->Init_Ctrl[37].bit[0] = 1;
1149 state->Init_Ctrl[37].val[0] = 0;
1150 state->Init_Ctrl[37].addr[1] = 59;
1151 state->Init_Ctrl[37].bit[1] = 2;
1152 state->Init_Ctrl[37].val[1] = 0;
1153 state->Init_Ctrl[37].addr[2] = 59;
1154 state->Init_Ctrl[37].bit[2] = 3;
1155 state->Init_Ctrl[37].val[2] = 0;
1156 state->Init_Ctrl[37].addr[3] = 59;
1157 state->Init_Ctrl[37].bit[3] = 4;
1158 state->Init_Ctrl[37].val[3] = 0;
1159 state->Init_Ctrl[37].addr[4] = 59;
1160 state->Init_Ctrl[37].bit[4] = 5;
1161 state->Init_Ctrl[37].val[4] = 0;
1162 state->Init_Ctrl[37].addr[5] = 59;
1163 state->Init_Ctrl[37].bit[5] = 6;
1164 state->Init_Ctrl[37].val[5] = 0;
1165 state->Init_Ctrl[37].addr[6] = 59;
1166 state->Init_Ctrl[37].bit[6] = 7;
1167 state->Init_Ctrl[37].val[6] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001168
Steven Toth3935c252008-05-01 05:45:44 -03001169 state->Init_Ctrl[38].Ctrl_Num = TG_R_DIV ;
1170 state->Init_Ctrl[38].size = 6 ;
1171 state->Init_Ctrl[38].addr[0] = 32;
1172 state->Init_Ctrl[38].bit[0] = 2;
1173 state->Init_Ctrl[38].val[0] = 0;
1174 state->Init_Ctrl[38].addr[1] = 32;
1175 state->Init_Ctrl[38].bit[1] = 3;
1176 state->Init_Ctrl[38].val[1] = 0;
1177 state->Init_Ctrl[38].addr[2] = 32;
1178 state->Init_Ctrl[38].bit[2] = 4;
1179 state->Init_Ctrl[38].val[2] = 0;
1180 state->Init_Ctrl[38].addr[3] = 32;
1181 state->Init_Ctrl[38].bit[3] = 5;
1182 state->Init_Ctrl[38].val[3] = 0;
1183 state->Init_Ctrl[38].addr[4] = 32;
1184 state->Init_Ctrl[38].bit[4] = 6;
1185 state->Init_Ctrl[38].val[4] = 1;
1186 state->Init_Ctrl[38].addr[5] = 32;
1187 state->Init_Ctrl[38].bit[5] = 7;
1188 state->Init_Ctrl[38].val[5] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001189
Steven Toth3935c252008-05-01 05:45:44 -03001190 state->Init_Ctrl[39].Ctrl_Num = EN_CHP_LIN_B ;
1191 state->Init_Ctrl[39].size = 1 ;
1192 state->Init_Ctrl[39].addr[0] = 25;
1193 state->Init_Ctrl[39].bit[0] = 3;
1194 state->Init_Ctrl[39].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001195
1196
Steven Toth3935c252008-05-01 05:45:44 -03001197 state->CH_Ctrl_Num = CHCTRL_NUM ;
Steven Toth52c99bd2008-05-01 04:57:01 -03001198
Steven Toth3935c252008-05-01 05:45:44 -03001199 state->CH_Ctrl[0].Ctrl_Num = DN_POLY ;
1200 state->CH_Ctrl[0].size = 2 ;
1201 state->CH_Ctrl[0].addr[0] = 68;
1202 state->CH_Ctrl[0].bit[0] = 6;
1203 state->CH_Ctrl[0].val[0] = 1;
1204 state->CH_Ctrl[0].addr[1] = 68;
1205 state->CH_Ctrl[0].bit[1] = 7;
1206 state->CH_Ctrl[0].val[1] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001207
Steven Toth3935c252008-05-01 05:45:44 -03001208 state->CH_Ctrl[1].Ctrl_Num = DN_RFGAIN ;
1209 state->CH_Ctrl[1].size = 2 ;
1210 state->CH_Ctrl[1].addr[0] = 70;
1211 state->CH_Ctrl[1].bit[0] = 6;
1212 state->CH_Ctrl[1].val[0] = 1;
1213 state->CH_Ctrl[1].addr[1] = 70;
1214 state->CH_Ctrl[1].bit[1] = 7;
1215 state->CH_Ctrl[1].val[1] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001216
Steven Toth3935c252008-05-01 05:45:44 -03001217 state->CH_Ctrl[2].Ctrl_Num = DN_CAP_RFLPF ;
1218 state->CH_Ctrl[2].size = 9 ;
1219 state->CH_Ctrl[2].addr[0] = 69;
1220 state->CH_Ctrl[2].bit[0] = 5;
1221 state->CH_Ctrl[2].val[0] = 0;
1222 state->CH_Ctrl[2].addr[1] = 69;
1223 state->CH_Ctrl[2].bit[1] = 6;
1224 state->CH_Ctrl[2].val[1] = 0;
1225 state->CH_Ctrl[2].addr[2] = 69;
1226 state->CH_Ctrl[2].bit[2] = 7;
1227 state->CH_Ctrl[2].val[2] = 0;
1228 state->CH_Ctrl[2].addr[3] = 68;
1229 state->CH_Ctrl[2].bit[3] = 0;
1230 state->CH_Ctrl[2].val[3] = 0;
1231 state->CH_Ctrl[2].addr[4] = 68;
1232 state->CH_Ctrl[2].bit[4] = 1;
1233 state->CH_Ctrl[2].val[4] = 0;
1234 state->CH_Ctrl[2].addr[5] = 68;
1235 state->CH_Ctrl[2].bit[5] = 2;
1236 state->CH_Ctrl[2].val[5] = 0;
1237 state->CH_Ctrl[2].addr[6] = 68;
1238 state->CH_Ctrl[2].bit[6] = 3;
1239 state->CH_Ctrl[2].val[6] = 0;
1240 state->CH_Ctrl[2].addr[7] = 68;
1241 state->CH_Ctrl[2].bit[7] = 4;
1242 state->CH_Ctrl[2].val[7] = 0;
1243 state->CH_Ctrl[2].addr[8] = 68;
1244 state->CH_Ctrl[2].bit[8] = 5;
1245 state->CH_Ctrl[2].val[8] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001246
Steven Toth3935c252008-05-01 05:45:44 -03001247 state->CH_Ctrl[3].Ctrl_Num = DN_EN_VHFUHFBAR ;
1248 state->CH_Ctrl[3].size = 1 ;
1249 state->CH_Ctrl[3].addr[0] = 70;
1250 state->CH_Ctrl[3].bit[0] = 5;
1251 state->CH_Ctrl[3].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001252
Steven Toth3935c252008-05-01 05:45:44 -03001253 state->CH_Ctrl[4].Ctrl_Num = DN_GAIN_ADJUST ;
1254 state->CH_Ctrl[4].size = 3 ;
1255 state->CH_Ctrl[4].addr[0] = 73;
1256 state->CH_Ctrl[4].bit[0] = 4;
1257 state->CH_Ctrl[4].val[0] = 0;
1258 state->CH_Ctrl[4].addr[1] = 73;
1259 state->CH_Ctrl[4].bit[1] = 5;
1260 state->CH_Ctrl[4].val[1] = 1;
1261 state->CH_Ctrl[4].addr[2] = 73;
1262 state->CH_Ctrl[4].bit[2] = 6;
1263 state->CH_Ctrl[4].val[2] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001264
Steven Toth3935c252008-05-01 05:45:44 -03001265 state->CH_Ctrl[5].Ctrl_Num = DN_IQTNBUF_AMP ;
1266 state->CH_Ctrl[5].size = 4 ;
1267 state->CH_Ctrl[5].addr[0] = 70;
1268 state->CH_Ctrl[5].bit[0] = 0;
1269 state->CH_Ctrl[5].val[0] = 0;
1270 state->CH_Ctrl[5].addr[1] = 70;
1271 state->CH_Ctrl[5].bit[1] = 1;
1272 state->CH_Ctrl[5].val[1] = 0;
1273 state->CH_Ctrl[5].addr[2] = 70;
1274 state->CH_Ctrl[5].bit[2] = 2;
1275 state->CH_Ctrl[5].val[2] = 0;
1276 state->CH_Ctrl[5].addr[3] = 70;
1277 state->CH_Ctrl[5].bit[3] = 3;
1278 state->CH_Ctrl[5].val[3] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001279
Steven Toth3935c252008-05-01 05:45:44 -03001280 state->CH_Ctrl[6].Ctrl_Num = DN_IQTNGNBFBIAS_BST ;
1281 state->CH_Ctrl[6].size = 1 ;
1282 state->CH_Ctrl[6].addr[0] = 70;
1283 state->CH_Ctrl[6].bit[0] = 4;
1284 state->CH_Ctrl[6].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001285
Steven Toth3935c252008-05-01 05:45:44 -03001286 state->CH_Ctrl[7].Ctrl_Num = RFSYN_EN_OUTMUX ;
1287 state->CH_Ctrl[7].size = 1 ;
1288 state->CH_Ctrl[7].addr[0] = 111;
1289 state->CH_Ctrl[7].bit[0] = 4;
1290 state->CH_Ctrl[7].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001291
Steven Toth3935c252008-05-01 05:45:44 -03001292 state->CH_Ctrl[8].Ctrl_Num = RFSYN_SEL_VCO_OUT ;
1293 state->CH_Ctrl[8].size = 1 ;
1294 state->CH_Ctrl[8].addr[0] = 111;
1295 state->CH_Ctrl[8].bit[0] = 7;
1296 state->CH_Ctrl[8].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001297
Steven Toth3935c252008-05-01 05:45:44 -03001298 state->CH_Ctrl[9].Ctrl_Num = RFSYN_SEL_VCO_HI ;
1299 state->CH_Ctrl[9].size = 1 ;
1300 state->CH_Ctrl[9].addr[0] = 111;
1301 state->CH_Ctrl[9].bit[0] = 6;
1302 state->CH_Ctrl[9].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001303
Steven Toth3935c252008-05-01 05:45:44 -03001304 state->CH_Ctrl[10].Ctrl_Num = RFSYN_SEL_DIVM ;
1305 state->CH_Ctrl[10].size = 1 ;
1306 state->CH_Ctrl[10].addr[0] = 111;
1307 state->CH_Ctrl[10].bit[0] = 5;
1308 state->CH_Ctrl[10].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001309
Steven Toth3935c252008-05-01 05:45:44 -03001310 state->CH_Ctrl[11].Ctrl_Num = RFSYN_RF_DIV_BIAS ;
1311 state->CH_Ctrl[11].size = 2 ;
1312 state->CH_Ctrl[11].addr[0] = 110;
1313 state->CH_Ctrl[11].bit[0] = 0;
1314 state->CH_Ctrl[11].val[0] = 1;
1315 state->CH_Ctrl[11].addr[1] = 110;
1316 state->CH_Ctrl[11].bit[1] = 1;
1317 state->CH_Ctrl[11].val[1] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001318
Steven Toth3935c252008-05-01 05:45:44 -03001319 state->CH_Ctrl[12].Ctrl_Num = DN_SEL_FREQ ;
1320 state->CH_Ctrl[12].size = 3 ;
1321 state->CH_Ctrl[12].addr[0] = 69;
1322 state->CH_Ctrl[12].bit[0] = 2;
1323 state->CH_Ctrl[12].val[0] = 0;
1324 state->CH_Ctrl[12].addr[1] = 69;
1325 state->CH_Ctrl[12].bit[1] = 3;
1326 state->CH_Ctrl[12].val[1] = 0;
1327 state->CH_Ctrl[12].addr[2] = 69;
1328 state->CH_Ctrl[12].bit[2] = 4;
1329 state->CH_Ctrl[12].val[2] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001330
Steven Toth3935c252008-05-01 05:45:44 -03001331 state->CH_Ctrl[13].Ctrl_Num = RFSYN_VCO_BIAS ;
1332 state->CH_Ctrl[13].size = 6 ;
1333 state->CH_Ctrl[13].addr[0] = 110;
1334 state->CH_Ctrl[13].bit[0] = 2;
1335 state->CH_Ctrl[13].val[0] = 0;
1336 state->CH_Ctrl[13].addr[1] = 110;
1337 state->CH_Ctrl[13].bit[1] = 3;
1338 state->CH_Ctrl[13].val[1] = 0;
1339 state->CH_Ctrl[13].addr[2] = 110;
1340 state->CH_Ctrl[13].bit[2] = 4;
1341 state->CH_Ctrl[13].val[2] = 0;
1342 state->CH_Ctrl[13].addr[3] = 110;
1343 state->CH_Ctrl[13].bit[3] = 5;
1344 state->CH_Ctrl[13].val[3] = 0;
1345 state->CH_Ctrl[13].addr[4] = 110;
1346 state->CH_Ctrl[13].bit[4] = 6;
1347 state->CH_Ctrl[13].val[4] = 0;
1348 state->CH_Ctrl[13].addr[5] = 110;
1349 state->CH_Ctrl[13].bit[5] = 7;
1350 state->CH_Ctrl[13].val[5] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001351
Steven Toth3935c252008-05-01 05:45:44 -03001352 state->CH_Ctrl[14].Ctrl_Num = CHCAL_INT_MOD_RF ;
1353 state->CH_Ctrl[14].size = 7 ;
1354 state->CH_Ctrl[14].addr[0] = 14;
1355 state->CH_Ctrl[14].bit[0] = 0;
1356 state->CH_Ctrl[14].val[0] = 0;
1357 state->CH_Ctrl[14].addr[1] = 14;
1358 state->CH_Ctrl[14].bit[1] = 1;
1359 state->CH_Ctrl[14].val[1] = 0;
1360 state->CH_Ctrl[14].addr[2] = 14;
1361 state->CH_Ctrl[14].bit[2] = 2;
1362 state->CH_Ctrl[14].val[2] = 0;
1363 state->CH_Ctrl[14].addr[3] = 14;
1364 state->CH_Ctrl[14].bit[3] = 3;
1365 state->CH_Ctrl[14].val[3] = 0;
1366 state->CH_Ctrl[14].addr[4] = 14;
1367 state->CH_Ctrl[14].bit[4] = 4;
1368 state->CH_Ctrl[14].val[4] = 0;
1369 state->CH_Ctrl[14].addr[5] = 14;
1370 state->CH_Ctrl[14].bit[5] = 5;
1371 state->CH_Ctrl[14].val[5] = 0;
1372 state->CH_Ctrl[14].addr[6] = 14;
1373 state->CH_Ctrl[14].bit[6] = 6;
1374 state->CH_Ctrl[14].val[6] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001375
Steven Toth3935c252008-05-01 05:45:44 -03001376 state->CH_Ctrl[15].Ctrl_Num = CHCAL_FRAC_MOD_RF ;
1377 state->CH_Ctrl[15].size = 18 ;
1378 state->CH_Ctrl[15].addr[0] = 17;
1379 state->CH_Ctrl[15].bit[0] = 6;
1380 state->CH_Ctrl[15].val[0] = 0;
1381 state->CH_Ctrl[15].addr[1] = 17;
1382 state->CH_Ctrl[15].bit[1] = 7;
1383 state->CH_Ctrl[15].val[1] = 0;
1384 state->CH_Ctrl[15].addr[2] = 16;
1385 state->CH_Ctrl[15].bit[2] = 0;
1386 state->CH_Ctrl[15].val[2] = 0;
1387 state->CH_Ctrl[15].addr[3] = 16;
1388 state->CH_Ctrl[15].bit[3] = 1;
1389 state->CH_Ctrl[15].val[3] = 0;
1390 state->CH_Ctrl[15].addr[4] = 16;
1391 state->CH_Ctrl[15].bit[4] = 2;
1392 state->CH_Ctrl[15].val[4] = 0;
1393 state->CH_Ctrl[15].addr[5] = 16;
1394 state->CH_Ctrl[15].bit[5] = 3;
1395 state->CH_Ctrl[15].val[5] = 0;
1396 state->CH_Ctrl[15].addr[6] = 16;
1397 state->CH_Ctrl[15].bit[6] = 4;
1398 state->CH_Ctrl[15].val[6] = 0;
1399 state->CH_Ctrl[15].addr[7] = 16;
1400 state->CH_Ctrl[15].bit[7] = 5;
1401 state->CH_Ctrl[15].val[7] = 0;
1402 state->CH_Ctrl[15].addr[8] = 16;
1403 state->CH_Ctrl[15].bit[8] = 6;
1404 state->CH_Ctrl[15].val[8] = 0;
1405 state->CH_Ctrl[15].addr[9] = 16;
1406 state->CH_Ctrl[15].bit[9] = 7;
1407 state->CH_Ctrl[15].val[9] = 0;
1408 state->CH_Ctrl[15].addr[10] = 15;
1409 state->CH_Ctrl[15].bit[10] = 0;
1410 state->CH_Ctrl[15].val[10] = 0;
1411 state->CH_Ctrl[15].addr[11] = 15;
1412 state->CH_Ctrl[15].bit[11] = 1;
1413 state->CH_Ctrl[15].val[11] = 0;
1414 state->CH_Ctrl[15].addr[12] = 15;
1415 state->CH_Ctrl[15].bit[12] = 2;
1416 state->CH_Ctrl[15].val[12] = 0;
1417 state->CH_Ctrl[15].addr[13] = 15;
1418 state->CH_Ctrl[15].bit[13] = 3;
1419 state->CH_Ctrl[15].val[13] = 0;
1420 state->CH_Ctrl[15].addr[14] = 15;
1421 state->CH_Ctrl[15].bit[14] = 4;
1422 state->CH_Ctrl[15].val[14] = 0;
1423 state->CH_Ctrl[15].addr[15] = 15;
1424 state->CH_Ctrl[15].bit[15] = 5;
1425 state->CH_Ctrl[15].val[15] = 0;
1426 state->CH_Ctrl[15].addr[16] = 15;
1427 state->CH_Ctrl[15].bit[16] = 6;
1428 state->CH_Ctrl[15].val[16] = 1;
1429 state->CH_Ctrl[15].addr[17] = 15;
1430 state->CH_Ctrl[15].bit[17] = 7;
1431 state->CH_Ctrl[15].val[17] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001432
Steven Toth3935c252008-05-01 05:45:44 -03001433 state->CH_Ctrl[16].Ctrl_Num = RFSYN_LPF_R ;
1434 state->CH_Ctrl[16].size = 5 ;
1435 state->CH_Ctrl[16].addr[0] = 112;
1436 state->CH_Ctrl[16].bit[0] = 0;
1437 state->CH_Ctrl[16].val[0] = 0;
1438 state->CH_Ctrl[16].addr[1] = 112;
1439 state->CH_Ctrl[16].bit[1] = 1;
1440 state->CH_Ctrl[16].val[1] = 0;
1441 state->CH_Ctrl[16].addr[2] = 112;
1442 state->CH_Ctrl[16].bit[2] = 2;
1443 state->CH_Ctrl[16].val[2] = 0;
1444 state->CH_Ctrl[16].addr[3] = 112;
1445 state->CH_Ctrl[16].bit[3] = 3;
1446 state->CH_Ctrl[16].val[3] = 0;
1447 state->CH_Ctrl[16].addr[4] = 112;
1448 state->CH_Ctrl[16].bit[4] = 4;
1449 state->CH_Ctrl[16].val[4] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001450
Steven Toth3935c252008-05-01 05:45:44 -03001451 state->CH_Ctrl[17].Ctrl_Num = CHCAL_EN_INT_RF ;
1452 state->CH_Ctrl[17].size = 1 ;
1453 state->CH_Ctrl[17].addr[0] = 14;
1454 state->CH_Ctrl[17].bit[0] = 7;
1455 state->CH_Ctrl[17].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001456
Steven Toth3935c252008-05-01 05:45:44 -03001457 state->CH_Ctrl[18].Ctrl_Num = TG_LO_DIVVAL ;
1458 state->CH_Ctrl[18].size = 4 ;
1459 state->CH_Ctrl[18].addr[0] = 107;
1460 state->CH_Ctrl[18].bit[0] = 3;
1461 state->CH_Ctrl[18].val[0] = 0;
1462 state->CH_Ctrl[18].addr[1] = 107;
1463 state->CH_Ctrl[18].bit[1] = 4;
1464 state->CH_Ctrl[18].val[1] = 0;
1465 state->CH_Ctrl[18].addr[2] = 107;
1466 state->CH_Ctrl[18].bit[2] = 5;
1467 state->CH_Ctrl[18].val[2] = 0;
1468 state->CH_Ctrl[18].addr[3] = 107;
1469 state->CH_Ctrl[18].bit[3] = 6;
1470 state->CH_Ctrl[18].val[3] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001471
Steven Toth3935c252008-05-01 05:45:44 -03001472 state->CH_Ctrl[19].Ctrl_Num = TG_LO_SELVAL ;
1473 state->CH_Ctrl[19].size = 3 ;
1474 state->CH_Ctrl[19].addr[0] = 107;
1475 state->CH_Ctrl[19].bit[0] = 7;
1476 state->CH_Ctrl[19].val[0] = 1;
1477 state->CH_Ctrl[19].addr[1] = 106;
1478 state->CH_Ctrl[19].bit[1] = 0;
1479 state->CH_Ctrl[19].val[1] = 1;
1480 state->CH_Ctrl[19].addr[2] = 106;
1481 state->CH_Ctrl[19].bit[2] = 1;
1482 state->CH_Ctrl[19].val[2] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001483
Steven Toth3935c252008-05-01 05:45:44 -03001484 state->CH_Ctrl[20].Ctrl_Num = TG_DIV_VAL ;
1485 state->CH_Ctrl[20].size = 11 ;
1486 state->CH_Ctrl[20].addr[0] = 109;
1487 state->CH_Ctrl[20].bit[0] = 2;
1488 state->CH_Ctrl[20].val[0] = 0;
1489 state->CH_Ctrl[20].addr[1] = 109;
1490 state->CH_Ctrl[20].bit[1] = 3;
1491 state->CH_Ctrl[20].val[1] = 0;
1492 state->CH_Ctrl[20].addr[2] = 109;
1493 state->CH_Ctrl[20].bit[2] = 4;
1494 state->CH_Ctrl[20].val[2] = 0;
1495 state->CH_Ctrl[20].addr[3] = 109;
1496 state->CH_Ctrl[20].bit[3] = 5;
1497 state->CH_Ctrl[20].val[3] = 0;
1498 state->CH_Ctrl[20].addr[4] = 109;
1499 state->CH_Ctrl[20].bit[4] = 6;
1500 state->CH_Ctrl[20].val[4] = 0;
1501 state->CH_Ctrl[20].addr[5] = 109;
1502 state->CH_Ctrl[20].bit[5] = 7;
1503 state->CH_Ctrl[20].val[5] = 0;
1504 state->CH_Ctrl[20].addr[6] = 108;
1505 state->CH_Ctrl[20].bit[6] = 0;
1506 state->CH_Ctrl[20].val[6] = 0;
1507 state->CH_Ctrl[20].addr[7] = 108;
1508 state->CH_Ctrl[20].bit[7] = 1;
1509 state->CH_Ctrl[20].val[7] = 0;
1510 state->CH_Ctrl[20].addr[8] = 108;
1511 state->CH_Ctrl[20].bit[8] = 2;
1512 state->CH_Ctrl[20].val[8] = 1;
1513 state->CH_Ctrl[20].addr[9] = 108;
1514 state->CH_Ctrl[20].bit[9] = 3;
1515 state->CH_Ctrl[20].val[9] = 1;
1516 state->CH_Ctrl[20].addr[10] = 108;
1517 state->CH_Ctrl[20].bit[10] = 4;
1518 state->CH_Ctrl[20].val[10] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001519
Steven Toth3935c252008-05-01 05:45:44 -03001520 state->CH_Ctrl[21].Ctrl_Num = TG_VCO_BIAS ;
1521 state->CH_Ctrl[21].size = 6 ;
1522 state->CH_Ctrl[21].addr[0] = 106;
1523 state->CH_Ctrl[21].bit[0] = 2;
1524 state->CH_Ctrl[21].val[0] = 0;
1525 state->CH_Ctrl[21].addr[1] = 106;
1526 state->CH_Ctrl[21].bit[1] = 3;
1527 state->CH_Ctrl[21].val[1] = 0;
1528 state->CH_Ctrl[21].addr[2] = 106;
1529 state->CH_Ctrl[21].bit[2] = 4;
1530 state->CH_Ctrl[21].val[2] = 0;
1531 state->CH_Ctrl[21].addr[3] = 106;
1532 state->CH_Ctrl[21].bit[3] = 5;
1533 state->CH_Ctrl[21].val[3] = 0;
1534 state->CH_Ctrl[21].addr[4] = 106;
1535 state->CH_Ctrl[21].bit[4] = 6;
1536 state->CH_Ctrl[21].val[4] = 0;
1537 state->CH_Ctrl[21].addr[5] = 106;
1538 state->CH_Ctrl[21].bit[5] = 7;
1539 state->CH_Ctrl[21].val[5] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001540
Steven Toth3935c252008-05-01 05:45:44 -03001541 state->CH_Ctrl[22].Ctrl_Num = SEQ_EXTPOWERUP ;
1542 state->CH_Ctrl[22].size = 1 ;
1543 state->CH_Ctrl[22].addr[0] = 138;
1544 state->CH_Ctrl[22].bit[0] = 4;
1545 state->CH_Ctrl[22].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001546
Steven Toth3935c252008-05-01 05:45:44 -03001547 state->CH_Ctrl[23].Ctrl_Num = OVERRIDE_2 ;
1548 state->CH_Ctrl[23].size = 1 ;
1549 state->CH_Ctrl[23].addr[0] = 17;
1550 state->CH_Ctrl[23].bit[0] = 5;
1551 state->CH_Ctrl[23].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001552
Steven Toth3935c252008-05-01 05:45:44 -03001553 state->CH_Ctrl[24].Ctrl_Num = OVERRIDE_3 ;
1554 state->CH_Ctrl[24].size = 1 ;
1555 state->CH_Ctrl[24].addr[0] = 111;
1556 state->CH_Ctrl[24].bit[0] = 3;
1557 state->CH_Ctrl[24].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001558
Steven Toth3935c252008-05-01 05:45:44 -03001559 state->CH_Ctrl[25].Ctrl_Num = OVERRIDE_4 ;
1560 state->CH_Ctrl[25].size = 1 ;
1561 state->CH_Ctrl[25].addr[0] = 112;
1562 state->CH_Ctrl[25].bit[0] = 7;
1563 state->CH_Ctrl[25].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001564
Steven Toth3935c252008-05-01 05:45:44 -03001565 state->CH_Ctrl[26].Ctrl_Num = SEQ_FSM_PULSE ;
1566 state->CH_Ctrl[26].size = 1 ;
1567 state->CH_Ctrl[26].addr[0] = 136;
1568 state->CH_Ctrl[26].bit[0] = 7;
1569 state->CH_Ctrl[26].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001570
Steven Toth3935c252008-05-01 05:45:44 -03001571 state->CH_Ctrl[27].Ctrl_Num = GPIO_4B ;
1572 state->CH_Ctrl[27].size = 1 ;
1573 state->CH_Ctrl[27].addr[0] = 149;
1574 state->CH_Ctrl[27].bit[0] = 7;
1575 state->CH_Ctrl[27].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001576
Steven Toth3935c252008-05-01 05:45:44 -03001577 state->CH_Ctrl[28].Ctrl_Num = GPIO_3B ;
1578 state->CH_Ctrl[28].size = 1 ;
1579 state->CH_Ctrl[28].addr[0] = 149;
1580 state->CH_Ctrl[28].bit[0] = 6;
1581 state->CH_Ctrl[28].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001582
Steven Toth3935c252008-05-01 05:45:44 -03001583 state->CH_Ctrl[29].Ctrl_Num = GPIO_4 ;
1584 state->CH_Ctrl[29].size = 1 ;
1585 state->CH_Ctrl[29].addr[0] = 149;
1586 state->CH_Ctrl[29].bit[0] = 5;
1587 state->CH_Ctrl[29].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001588
Steven Toth3935c252008-05-01 05:45:44 -03001589 state->CH_Ctrl[30].Ctrl_Num = GPIO_3 ;
1590 state->CH_Ctrl[30].size = 1 ;
1591 state->CH_Ctrl[30].addr[0] = 149;
1592 state->CH_Ctrl[30].bit[0] = 4;
1593 state->CH_Ctrl[30].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001594
Steven Toth3935c252008-05-01 05:45:44 -03001595 state->CH_Ctrl[31].Ctrl_Num = GPIO_1B ;
1596 state->CH_Ctrl[31].size = 1 ;
1597 state->CH_Ctrl[31].addr[0] = 149;
1598 state->CH_Ctrl[31].bit[0] = 3;
1599 state->CH_Ctrl[31].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001600
Steven Toth3935c252008-05-01 05:45:44 -03001601 state->CH_Ctrl[32].Ctrl_Num = DAC_A_ENABLE ;
1602 state->CH_Ctrl[32].size = 1 ;
1603 state->CH_Ctrl[32].addr[0] = 93;
1604 state->CH_Ctrl[32].bit[0] = 1;
1605 state->CH_Ctrl[32].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001606
Steven Toth3935c252008-05-01 05:45:44 -03001607 state->CH_Ctrl[33].Ctrl_Num = DAC_B_ENABLE ;
1608 state->CH_Ctrl[33].size = 1 ;
1609 state->CH_Ctrl[33].addr[0] = 93;
1610 state->CH_Ctrl[33].bit[0] = 0;
1611 state->CH_Ctrl[33].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001612
Steven Toth3935c252008-05-01 05:45:44 -03001613 state->CH_Ctrl[34].Ctrl_Num = DAC_DIN_A ;
1614 state->CH_Ctrl[34].size = 6 ;
1615 state->CH_Ctrl[34].addr[0] = 92;
1616 state->CH_Ctrl[34].bit[0] = 2;
1617 state->CH_Ctrl[34].val[0] = 0;
1618 state->CH_Ctrl[34].addr[1] = 92;
1619 state->CH_Ctrl[34].bit[1] = 3;
1620 state->CH_Ctrl[34].val[1] = 0;
1621 state->CH_Ctrl[34].addr[2] = 92;
1622 state->CH_Ctrl[34].bit[2] = 4;
1623 state->CH_Ctrl[34].val[2] = 0;
1624 state->CH_Ctrl[34].addr[3] = 92;
1625 state->CH_Ctrl[34].bit[3] = 5;
1626 state->CH_Ctrl[34].val[3] = 0;
1627 state->CH_Ctrl[34].addr[4] = 92;
1628 state->CH_Ctrl[34].bit[4] = 6;
1629 state->CH_Ctrl[34].val[4] = 0;
1630 state->CH_Ctrl[34].addr[5] = 92;
1631 state->CH_Ctrl[34].bit[5] = 7;
1632 state->CH_Ctrl[34].val[5] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001633
Steven Toth3935c252008-05-01 05:45:44 -03001634 state->CH_Ctrl[35].Ctrl_Num = DAC_DIN_B ;
1635 state->CH_Ctrl[35].size = 6 ;
1636 state->CH_Ctrl[35].addr[0] = 93;
1637 state->CH_Ctrl[35].bit[0] = 2;
1638 state->CH_Ctrl[35].val[0] = 0;
1639 state->CH_Ctrl[35].addr[1] = 93;
1640 state->CH_Ctrl[35].bit[1] = 3;
1641 state->CH_Ctrl[35].val[1] = 0;
1642 state->CH_Ctrl[35].addr[2] = 93;
1643 state->CH_Ctrl[35].bit[2] = 4;
1644 state->CH_Ctrl[35].val[2] = 0;
1645 state->CH_Ctrl[35].addr[3] = 93;
1646 state->CH_Ctrl[35].bit[3] = 5;
1647 state->CH_Ctrl[35].val[3] = 0;
1648 state->CH_Ctrl[35].addr[4] = 93;
1649 state->CH_Ctrl[35].bit[4] = 6;
1650 state->CH_Ctrl[35].val[4] = 0;
1651 state->CH_Ctrl[35].addr[5] = 93;
1652 state->CH_Ctrl[35].bit[5] = 7;
1653 state->CH_Ctrl[35].val[5] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001654
1655#ifdef _MXL_PRODUCTION
Steven Toth3935c252008-05-01 05:45:44 -03001656 state->CH_Ctrl[36].Ctrl_Num = RFSYN_EN_DIV ;
1657 state->CH_Ctrl[36].size = 1 ;
1658 state->CH_Ctrl[36].addr[0] = 109;
1659 state->CH_Ctrl[36].bit[0] = 1;
1660 state->CH_Ctrl[36].val[0] = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03001661
Steven Toth3935c252008-05-01 05:45:44 -03001662 state->CH_Ctrl[37].Ctrl_Num = RFSYN_DIVM ;
1663 state->CH_Ctrl[37].size = 2 ;
1664 state->CH_Ctrl[37].addr[0] = 112;
1665 state->CH_Ctrl[37].bit[0] = 5;
1666 state->CH_Ctrl[37].val[0] = 0;
1667 state->CH_Ctrl[37].addr[1] = 112;
1668 state->CH_Ctrl[37].bit[1] = 6;
1669 state->CH_Ctrl[37].val[1] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001670
Steven Toth3935c252008-05-01 05:45:44 -03001671 state->CH_Ctrl[38].Ctrl_Num = DN_BYPASS_AGC_I2C ;
1672 state->CH_Ctrl[38].size = 1 ;
1673 state->CH_Ctrl[38].addr[0] = 65;
1674 state->CH_Ctrl[38].bit[0] = 1;
1675 state->CH_Ctrl[38].val[0] = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001676#endif
1677
1678 return 0 ;
1679}
1680
Steven Toth52c99bd2008-05-01 04:57:01 -03001681// MaxLinear source code - MXL5005_c.cpp
Steven Toth52c99bd2008-05-01 04:57:01 -03001682// MXL5005.cpp : Defines the initialization routines for the DLL.
1683// 2.6.12
Steven Toth3935c252008-05-01 05:45:44 -03001684// DONE
1685void InitTunerControls(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -03001686{
Steven Toth3935c252008-05-01 05:45:44 -03001687 struct mxl5005s_state *state = fe->demodulator_priv;
1688 MXL5005_RegisterInit(fe);
1689 MXL5005_ControlInit(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03001690#ifdef _MXL_INTERNAL
Steven Toth3935c252008-05-01 05:45:44 -03001691 MXL5005_MXLControlInit(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03001692#endif
1693}
1694
Steven Toth52c99bd2008-05-01 04:57:01 -03001695///////////////////////////////////////////////////////////////////////////////
1696// //
1697// Function: MXL_ConfigTuner //
1698// //
1699// Description: Configure MXL5005Tuner structure for desired //
1700// Channel Bandwidth/Channel Frequency //
1701// //
1702// //
1703// Functions used: //
Steven Totha8214d42008-05-01 05:02:58 -03001704// MXL_SynthIFLO_Calc //
Steven Toth52c99bd2008-05-01 04:57:01 -03001705// //
1706// Inputs: //
1707// Tuner_struct: structure defined at higher level //
1708// Mode: Tuner Mode (Analog/Digital) //
1709// IF_Mode: IF Mode ( Zero/Low ) //
Steven Toth3935c252008-05-01 05:45:44 -03001710// Bandwidth: Filter Channel Bandwidth (in Hz) //
Steven Toth52c99bd2008-05-01 04:57:01 -03001711// IF_out: Desired IF out Frequency (in Hz) //
1712// Fxtal: Crystal Frerquency (in Hz) //
Steven Toth3935c252008-05-01 05:45:44 -03001713// TOP: 0: Dual AGC; Value: take over point //
1714// IF_OUT_LOAD: IF out load resistor (200/300 Ohms) //
1715// CLOCK_OUT: 0: Turn off clock out; 1: turn on clock out //
1716// DIV_OUT: 0: Div-1; 1: Div-4 //
1717// CAPSELECT: 0: Disable On-chip pulling cap; 1: Enable //
1718// EN_RSSI: 0: Disable RSSI; 1: Enable RSSI //
Steven Toth52c99bd2008-05-01 04:57:01 -03001719// //
1720// Outputs: //
1721// Tuner //
1722// //
1723// Return: //
1724// 0 : Successful //
1725// > 0 : Failed //
1726// //
1727///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03001728// DONE
1729u16 MXL5005_TunerConfig(struct dvb_frontend *fe,
1730 u8 Mode, /* 0: Analog Mode ; 1: Digital Mode */
1731 u8 IF_mode, /* for Analog Mode, 0: zero IF; 1: low IF */
1732 u32 Bandwidth, /* filter channel bandwidth (6, 7, 8) */
1733 u32 IF_out, /* Desired IF Out Frequency */
1734 u32 Fxtal, /* XTAL Frequency */
1735 u8 AGC_Mode, /* AGC Mode - Dual AGC: 0, Single AGC: 1 */
1736 u16 TOP, /* 0: Dual AGC; Value: take over point */
1737 u16 IF_OUT_LOAD, /* IF Out Load Resistor (200 / 300 Ohms) */
1738 u8 CLOCK_OUT, /* 0: turn off clock out; 1: turn on clock out */
1739 u8 DIV_OUT, /* 0: Div-1; 1: Div-4 */
1740 u8 CAPSELECT, /* 0: disable On-Chip pulling cap; 1: enable */
1741 u8 EN_RSSI, /* 0: disable RSSI; 1: enable RSSI */
1742 u8 Mod_Type, /* Modulation Type; */
1743 /* 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */
1744 u8 TF_Type /* Tracking Filter */
1745 /* 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */
Steven Toth52c99bd2008-05-01 04:57:01 -03001746 )
1747{
Steven Toth3935c252008-05-01 05:45:44 -03001748 struct mxl5005s_state *state = fe->demodulator_priv;
1749 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001750
Steven Toth3935c252008-05-01 05:45:44 -03001751 state->Mode = Mode;
1752 state->IF_Mode = IF_mode;
1753 state->Chan_Bandwidth = Bandwidth;
1754 state->IF_OUT = IF_out;
1755 state->Fxtal = Fxtal;
1756 state->AGC_Mode = AGC_Mode;
1757 state->TOP = TOP;
1758 state->IF_OUT_LOAD = IF_OUT_LOAD;
1759 state->CLOCK_OUT = CLOCK_OUT;
1760 state->DIV_OUT = DIV_OUT;
1761 state->CAPSELECT = CAPSELECT;
1762 state->EN_RSSI = EN_RSSI;
1763 state->Mod_Type = Mod_Type;
1764 state->TF_Type = TF_Type;
Steven Toth52c99bd2008-05-01 04:57:01 -03001765
Steven Totha8214d42008-05-01 05:02:58 -03001766 /* Initialize all the controls and registers */
Steven Toth3935c252008-05-01 05:45:44 -03001767 InitTunerControls(fe);
Steven Totha8214d42008-05-01 05:02:58 -03001768
1769 /* Synthesizer LO frequency calculation */
Steven Toth3935c252008-05-01 05:45:44 -03001770 MXL_SynthIFLO_Calc(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03001771
Steven Toth3935c252008-05-01 05:45:44 -03001772 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03001773}
1774
1775///////////////////////////////////////////////////////////////////////////////
1776// //
1777// Function: MXL_SynthIFLO_Calc //
1778// //
1779// Description: Calculate Internal IF-LO Frequency //
1780// //
1781// Globals: //
1782// NONE //
1783// //
1784// Functions used: //
1785// NONE //
1786// //
1787// Inputs: //
1788// Tuner_struct: structure defined at higher level //
1789// //
1790// Outputs: //
1791// Tuner //
1792// //
1793// Return: //
1794// 0 : Successful //
1795// > 0 : Failed //
1796// //
1797///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03001798// DONE
1799void MXL_SynthIFLO_Calc(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -03001800{
Steven Toth3935c252008-05-01 05:45:44 -03001801 struct mxl5005s_state *state = fe->demodulator_priv;
1802 if (Tuner->Mode == 1) /* Digital Mode */
1803 state->IF_LO = state->IF_OUT;
1804 else /* Analog Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03001805 {
Steven Toth3935c252008-05-01 05:45:44 -03001806 if(state->IF_Mode == 0) /* Analog Zero IF mode */
1807 state->IF_LO = state->IF_OUT + 400000;
1808 else /* Analog Low IF mode */
1809 state->IF_LO = state->IF_OUT + state->Chan_Bandwidth/2;
Steven Toth52c99bd2008-05-01 04:57:01 -03001810 }
1811}
1812
1813///////////////////////////////////////////////////////////////////////////////
1814// //
1815// Function: MXL_SynthRFTGLO_Calc //
1816// //
1817// Description: Calculate Internal RF-LO frequency and //
1818// internal Tone-Gen(TG)-LO frequency //
1819// //
1820// Globals: //
1821// NONE //
1822// //
1823// Functions used: //
1824// NONE //
1825// //
1826// Inputs: //
1827// Tuner_struct: structure defined at higher level //
1828// //
1829// Outputs: //
1830// Tuner //
1831// //
1832// Return: //
1833// 0 : Successful //
1834// > 0 : Failed //
1835// //
1836///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03001837// DONE
1838void MXL_SynthRFTGLO_Calc(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -03001839{
Steven Toth3935c252008-05-01 05:45:44 -03001840 struct mxl5005s_state *state = fe->demodulator_priv;
1841
1842 if (state->Mode == 1) /* Digital Mode */ {
Steven Toth52c99bd2008-05-01 04:57:01 -03001843 //remove 20.48MHz setting for 2.6.10
Steven Toth3935c252008-05-01 05:45:44 -03001844 state->RF_LO = state->RF_IN;
1845 state->TG_LO = state->RF_IN - 750000; //change for 2.6.6
1846 } else /* Analog Mode */ {
1847 if(state->IF_Mode == 0) /* Analog Zero IF mode */ {
1848 state->RF_LO = state->RF_IN - 400000;
1849 state->TG_LO = state->RF_IN - 1750000;
1850 } else /* Analog Low IF mode */ {
1851 state->RF_LO = state->RF_IN - state->Chan_Bandwidth/2;
1852 state->TG_LO = state->RF_IN - state->Chan_Bandwidth + 500000;
Steven Toth52c99bd2008-05-01 04:57:01 -03001853 }
1854 }
1855}
1856
1857///////////////////////////////////////////////////////////////////////////////
1858// //
1859// Function: MXL_OverwriteICDefault //
1860// //
1861// Description: Overwrite the Default Register Setting //
1862// //
1863// //
1864// Functions used: //
1865// //
1866// Inputs: //
1867// Tuner_struct: structure defined at higher level //
1868// Outputs: //
1869// Tuner //
1870// //
1871// Return: //
1872// 0 : Successful //
1873// > 0 : Failed //
1874// //
1875///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03001876// DONE
1877u16 MXL_OverwriteICDefault(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -03001878{
Steven Toth3935c252008-05-01 05:45:44 -03001879 struct mxl5005s_state *state = fe->demodulator_priv;
1880 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001881
Steven Toth3935c252008-05-01 05:45:44 -03001882 status += MXL_ControlWrite(fe, OVERRIDE_1, 1);
1883 status += MXL_ControlWrite(fe, OVERRIDE_2, 1);
1884 status += MXL_ControlWrite(fe, OVERRIDE_3, 1);
1885 status += MXL_ControlWrite(fe, OVERRIDE_4, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03001886
Steven Toth3935c252008-05-01 05:45:44 -03001887 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03001888}
1889
1890///////////////////////////////////////////////////////////////////////////////
1891// //
1892// Function: MXL_BlockInit //
1893// //
1894// Description: Tuner Initialization as a function of 'User Settings' //
1895// * User settings in Tuner strcuture must be assigned //
1896// first //
1897// //
1898// Globals: //
1899// NONE //
1900// //
1901// Functions used: //
1902// Tuner_struct: structure defined at higher level //
1903// //
1904// Inputs: //
1905// Tuner : Tuner structure defined at higher level //
1906// //
1907// Outputs: //
1908// Tuner //
1909// //
1910// Return: //
1911// 0 : Successful //
1912// > 0 : Failed //
1913// //
1914///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03001915// DONE
1916u16 MXL_BlockInit(struct dvb_frontend *fe)
Steven Toth52c99bd2008-05-01 04:57:01 -03001917{
Steven Toth3935c252008-05-01 05:45:44 -03001918 struct mxl5005s_state *state = fe->demodulator_priv;
1919 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03001920
Steven Toth3935c252008-05-01 05:45:44 -03001921 status += MXL_OverwriteICDefault(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03001922
Steven Toth3935c252008-05-01 05:45:44 -03001923 /* Downconverter Control Dig Ana */
1924 status += MXL_ControlWrite(fe, DN_IQTN_AMP_CUT, state->Mode ? 1 : 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03001925
Steven Toth3935c252008-05-01 05:45:44 -03001926 /* Filter Control Dig Ana */
1927 status += MXL_ControlWrite(fe, BB_MODE, state->Mode ? 0 : 1);
1928 status += MXL_ControlWrite(fe, BB_BUF, state->Mode ? 3 : 2);
1929 status += MXL_ControlWrite(fe, BB_BUF_OA, state->Mode ? 1 : 0);
1930 status += MXL_ControlWrite(fe, BB_IQSWAP, state->Mode ? 0 : 1);
1931 status += MXL_ControlWrite(fe, BB_INITSTATE_DLPF_TUNE, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03001932
Steven Toth3935c252008-05-01 05:45:44 -03001933 /* Initialize Low-Pass Filter */
1934 if (state->Mode) { /* Digital Mode */
1935 switch (state->Chan_Bandwidth) {
Steven Toth52c99bd2008-05-01 04:57:01 -03001936 case 8000000:
Steven Toth3935c252008-05-01 05:45:44 -03001937 status += MXL_ControlWrite(fe, BB_DLPF_BANDSEL, 0);
1938 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001939 case 7000000:
Steven Toth3935c252008-05-01 05:45:44 -03001940 status += MXL_ControlWrite(fe, BB_DLPF_BANDSEL, 2);
1941 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001942 case 6000000:
Steven Toth3935c252008-05-01 05:45:44 -03001943 status += MXL_ControlWrite(fe, BB_DLPF_BANDSEL, 3);
1944 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001945 }
Steven Toth3935c252008-05-01 05:45:44 -03001946 } else { /* Analog Mode */
1947 switch (state->Chan_Bandwidth) {
1948 case 8000000: /* Low Zero */
1949 status += MXL_ControlWrite(fe, BB_ALPF_BANDSELECT, (state->IF_Mode ? 0 : 3));
1950 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001951 case 7000000:
Steven Toth3935c252008-05-01 05:45:44 -03001952 status += MXL_ControlWrite(fe, BB_ALPF_BANDSELECT, (state->IF_Mode ? 1 : 4));
1953 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001954 case 6000000:
Steven Toth3935c252008-05-01 05:45:44 -03001955 status += MXL_ControlWrite(fe, BB_ALPF_BANDSELECT, (state->IF_Mode ? 2 : 5));
1956 break;
Steven Toth52c99bd2008-05-01 04:57:01 -03001957 }
1958 }
1959
Steven Toth3935c252008-05-01 05:45:44 -03001960 /* Charge Pump Control Dig Ana */
1961 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, state->Mode ? 5 : 8);
1962 status += MXL_ControlWrite(fe, RFSYN_EN_CHP_HIGAIN, state->Mode ? 1 : 1);
1963 status += MXL_ControlWrite(fe, EN_CHP_LIN_B, state->Mode ? 0 : 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03001964
Steven Toth3935c252008-05-01 05:45:44 -03001965 /* AGC TOP Control */
1966 if (state->AGC_Mode == 0) /* Dual AGC */ {
1967 status += MXL_ControlWrite(fe, AGC_IF, 15);
1968 status += MXL_ControlWrite(fe, AGC_RF, 15);
Steven Toth52c99bd2008-05-01 04:57:01 -03001969 }
Steven Toth3935c252008-05-01 05:45:44 -03001970 else /* Single AGC Mode Dig Ana */
1971 status += MXL_ControlWrite(fe, AGC_RF, state->Mode ? 15 : 12);
Steven Toth52c99bd2008-05-01 04:57:01 -03001972
1973
Steven Toth3935c252008-05-01 05:45:44 -03001974 if (state->TOP == 55) /* TOP == 5.5 */
1975 status += MXL_ControlWrite(fe, AGC_IF, 0x0);
Steven Toth52c99bd2008-05-01 04:57:01 -03001976
Steven Toth3935c252008-05-01 05:45:44 -03001977 if (state->TOP == 72) /* TOP == 7.2 */
1978 status += MXL_ControlWrite(fe, AGC_IF, 0x1);
Steven Toth52c99bd2008-05-01 04:57:01 -03001979
Steven Toth3935c252008-05-01 05:45:44 -03001980 if (state->TOP == 92) /* TOP == 9.2 */
1981 status += MXL_ControlWrite(fe, AGC_IF, 0x2);
Steven Toth52c99bd2008-05-01 04:57:01 -03001982
Steven Toth3935c252008-05-01 05:45:44 -03001983 if (state->TOP == 110) /* TOP == 11.0 */
1984 status += MXL_ControlWrite(fe, AGC_IF, 0x3);
Steven Toth52c99bd2008-05-01 04:57:01 -03001985
Steven Toth3935c252008-05-01 05:45:44 -03001986 if (state->TOP == 129) /* TOP == 12.9 */
1987 status += MXL_ControlWrite(fe, AGC_IF, 0x4);
Steven Toth52c99bd2008-05-01 04:57:01 -03001988
Steven Toth3935c252008-05-01 05:45:44 -03001989 if (state->TOP == 147) /* TOP == 14.7 */
1990 status += MXL_ControlWrite(fe, AGC_IF, 0x5);
Steven Toth52c99bd2008-05-01 04:57:01 -03001991
Steven Toth3935c252008-05-01 05:45:44 -03001992 if (state->TOP == 168) /* TOP == 16.8 */
1993 status += MXL_ControlWrite(fe, AGC_IF, 0x6);
Steven Toth52c99bd2008-05-01 04:57:01 -03001994
Steven Toth3935c252008-05-01 05:45:44 -03001995 if (state->TOP == 194) /* TOP == 19.4 */
1996 status += MXL_ControlWrite(fe, AGC_IF, 0x7);
Steven Toth52c99bd2008-05-01 04:57:01 -03001997
Steven Toth3935c252008-05-01 05:45:44 -03001998 if (state->TOP == 212) /* TOP == 21.2 */
1999 status += MXL_ControlWrite(fe, AGC_IF, 0x9);
Steven Toth52c99bd2008-05-01 04:57:01 -03002000
Steven Toth3935c252008-05-01 05:45:44 -03002001 if (state->TOP == 232) /* TOP == 23.2 */
2002 status += MXL_ControlWrite(fe, AGC_IF, 0xA);
Steven Toth52c99bd2008-05-01 04:57:01 -03002003
Steven Toth3935c252008-05-01 05:45:44 -03002004 if (state->TOP == 252) /* TOP == 25.2 */
2005 status += MXL_ControlWrite(fe, AGC_IF, 0xB);
Steven Toth52c99bd2008-05-01 04:57:01 -03002006
Steven Toth3935c252008-05-01 05:45:44 -03002007 if (state->TOP == 271) /* TOP == 27.1 */
2008 status += MXL_ControlWrite(fe, AGC_IF, 0xC);
Steven Toth52c99bd2008-05-01 04:57:01 -03002009
Steven Toth3935c252008-05-01 05:45:44 -03002010 if (state->TOP == 292) /* TOP == 29.2 */
2011 status += MXL_ControlWrite(fe, AGC_IF, 0xD);
Steven Toth52c99bd2008-05-01 04:57:01 -03002012
Steven Toth3935c252008-05-01 05:45:44 -03002013 if (state->TOP == 317) /* TOP == 31.7 */
2014 status += MXL_ControlWrite(fe, AGC_IF, 0xE);
Steven Toth52c99bd2008-05-01 04:57:01 -03002015
Steven Toth3935c252008-05-01 05:45:44 -03002016 if (state->TOP == 349) /* TOP == 34.9 */
2017 status += MXL_ControlWrite(fe, AGC_IF, 0xF);
Steven Toth52c99bd2008-05-01 04:57:01 -03002018
Steven Toth3935c252008-05-01 05:45:44 -03002019 /* IF Synthesizer Control */
2020 status += MXL_IFSynthInit(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03002021
Steven Toth3935c252008-05-01 05:45:44 -03002022 /* IF UpConverter Control */
2023 if (state->IF_OUT_LOAD == 200) {
2024 status += MXL_ControlWrite(fe, DRV_RES_SEL, 6);
2025 status += MXL_ControlWrite(fe, I_DRIVER, 2);
Steven Toth52c99bd2008-05-01 04:57:01 -03002026 }
Steven Toth3935c252008-05-01 05:45:44 -03002027 if (state->IF_OUT_LOAD == 300) {
2028 status += MXL_ControlWrite(fe, DRV_RES_SEL, 4);
2029 status += MXL_ControlWrite(fe, I_DRIVER, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002030 }
2031
Steven Toth3935c252008-05-01 05:45:44 -03002032 /* Anti-Alias Filtering Control
2033 * initialise Anti-Aliasing Filter
2034 */
2035 if (state->Mode) { /* Digital Mode */
2036 if (state->IF_OUT >= 4000000UL && state->IF_OUT <= 6280000UL) {
2037 status += MXL_ControlWrite(fe, EN_AAF, 1);
2038 status += MXL_ControlWrite(fe, EN_3P, 1);
2039 status += MXL_ControlWrite(fe, EN_AUX_3P, 1);
2040 status += MXL_ControlWrite(fe, SEL_AAF_BAND, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002041 }
Steven Toth3935c252008-05-01 05:45:44 -03002042 if ((state->IF_OUT == 36125000UL) || (state->IF_OUT == 36150000UL)) {
2043 status += MXL_ControlWrite(fe, EN_AAF, 1);
2044 status += MXL_ControlWrite(fe, EN_3P, 1);
2045 status += MXL_ControlWrite(fe, EN_AUX_3P, 1);
2046 status += MXL_ControlWrite(fe, SEL_AAF_BAND, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002047 }
Steven Toth3935c252008-05-01 05:45:44 -03002048 if (state->IF_OUT > 36150000UL) {
2049 status += MXL_ControlWrite(fe, EN_AAF, 0);
2050 status += MXL_ControlWrite(fe, EN_3P, 1);
2051 status += MXL_ControlWrite(fe, EN_AUX_3P, 1);
2052 status += MXL_ControlWrite(fe, SEL_AAF_BAND, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002053 }
Steven Toth3935c252008-05-01 05:45:44 -03002054 } else { /* Analog Mode */
2055 if (state->IF_OUT >= 4000000UL && state->IF_OUT <= 5000000UL)
Steven Toth52c99bd2008-05-01 04:57:01 -03002056 {
Steven Toth3935c252008-05-01 05:45:44 -03002057 status += MXL_ControlWrite(fe, EN_AAF, 1);
2058 status += MXL_ControlWrite(fe, EN_3P, 1);
2059 status += MXL_ControlWrite(fe, EN_AUX_3P, 1);
2060 status += MXL_ControlWrite(fe, SEL_AAF_BAND, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002061 }
Steven Toth3935c252008-05-01 05:45:44 -03002062 if (state->IF_OUT > 5000000UL)
Steven Toth52c99bd2008-05-01 04:57:01 -03002063 {
Steven Toth3935c252008-05-01 05:45:44 -03002064 status += MXL_ControlWrite(fe, EN_AAF, 0);
2065 status += MXL_ControlWrite(fe, EN_3P, 0);
2066 status += MXL_ControlWrite(fe, EN_AUX_3P, 0);
2067 status += MXL_ControlWrite(fe, SEL_AAF_BAND, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002068 }
2069 }
2070
Steven Toth3935c252008-05-01 05:45:44 -03002071 /* Demod Clock Out */
2072 if (state->CLOCK_OUT)
2073 status += MXL_ControlWrite(fe, SEQ_ENCLK16_CLK_OUT, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002074 else
Steven Toth3935c252008-05-01 05:45:44 -03002075 status += MXL_ControlWrite(fe, SEQ_ENCLK16_CLK_OUT, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002076
Steven Toth3935c252008-05-01 05:45:44 -03002077 if (state->DIV_OUT == 1)
2078 status += MXL_ControlWrite(fe, SEQ_SEL4_16B, 1);
2079 if (state->DIV_OUT == 0)
2080 status += MXL_ControlWrite(fe, SEQ_SEL4_16B, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002081
Steven Toth3935c252008-05-01 05:45:44 -03002082 /* Crystal Control */
2083 if (state->CAPSELECT)
2084 status += MXL_ControlWrite(fe, XTAL_CAPSELECT, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002085 else
Steven Toth3935c252008-05-01 05:45:44 -03002086 status += MXL_ControlWrite(fe, XTAL_CAPSELECT, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002087
Steven Toth3935c252008-05-01 05:45:44 -03002088 if (state->Fxtal >= 12000000UL && state->Fxtal <= 16000000UL)
2089 status += MXL_ControlWrite(fe, IF_SEL_DBL, 1);
2090 if (state->Fxtal > 16000000UL && state->Fxtal <= 32000000UL)
2091 status += MXL_ControlWrite(fe, IF_SEL_DBL, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002092
Steven Toth3935c252008-05-01 05:45:44 -03002093 if (state->Fxtal >= 12000000UL && state->Fxtal <= 22000000UL)
2094 status += MXL_ControlWrite(fe, RFSYN_R_DIV, 3);
2095 if (state->Fxtal > 22000000UL && state->Fxtal <= 32000000UL)
2096 status += MXL_ControlWrite(fe, RFSYN_R_DIV, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002097
Steven Toth3935c252008-05-01 05:45:44 -03002098 /* Misc Controls */
2099 if (state->Mode == 0 && Tuner->IF_Mode == 1) /* Analog LowIF mode */
2100 status += MXL_ControlWrite(fe, SEQ_EXTIQFSMPULSE, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002101 else
Steven Toth3935c252008-05-01 05:45:44 -03002102 status += MXL_ControlWrite(fe, SEQ_EXTIQFSMPULSE, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002103
Steven Toth3935c252008-05-01 05:45:44 -03002104 /* status += MXL_ControlRead(fe, IF_DIVVAL, &IF_DIVVAL_Val); */
Steven Toth52c99bd2008-05-01 04:57:01 -03002105
Steven Toth3935c252008-05-01 05:45:44 -03002106 /* Set TG_R_DIV */
2107 status += MXL_ControlWrite(fe, TG_R_DIV, MXL_Ceiling(state->Fxtal, 1000000));
Steven Toth52c99bd2008-05-01 04:57:01 -03002108
Steven Toth3935c252008-05-01 05:45:44 -03002109 /* Apply Default value to BB_INITSTATE_DLPF_TUNE */
Steven Toth52c99bd2008-05-01 04:57:01 -03002110
Steven Toth3935c252008-05-01 05:45:44 -03002111 /* RSSI Control */
2112 if (state->EN_RSSI)
Steven Toth52c99bd2008-05-01 04:57:01 -03002113 {
Steven Toth3935c252008-05-01 05:45:44 -03002114 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2115 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2116 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 1);
2117 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
2118
2119 /* RSSI reference point */
2120 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 2);
2121 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 3);
2122 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 1);
2123
2124 /* TOP point */
2125 status += MXL_ControlWrite(fe, RFA_FLR, 0);
2126 status += MXL_ControlWrite(fe, RFA_CEIL, 12);
Steven Toth52c99bd2008-05-01 04:57:01 -03002127 }
2128
Steven Toth3935c252008-05-01 05:45:44 -03002129 /* Modulation type bit settings
2130 * Override the control values preset
2131 */
2132 if (state->Mod_Type == MXL_DVBT) /* DVB-T Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002133 {
Steven Toth3935c252008-05-01 05:45:44 -03002134 state->AGC_Mode = 1; /* Single AGC Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002135
Steven Toth3935c252008-05-01 05:45:44 -03002136 /* Enable RSSI */
2137 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2138 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2139 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 1);
2140 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
2141
2142 /* RSSI reference point */
2143 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 3);
2144 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 5);
2145 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 1);
2146
2147 /* TOP point */
2148 status += MXL_ControlWrite(fe, RFA_FLR, 2);
2149 status += MXL_ControlWrite(fe, RFA_CEIL, 13);
2150 if (state->IF_OUT <= 6280000UL) /* Low IF */
2151 status += MXL_ControlWrite(fe, BB_IQSWAP, 0);
2152 else /* High IF */
2153 status += MXL_ControlWrite(fe, BB_IQSWAP, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002154
2155 }
Steven Toth3935c252008-05-01 05:45:44 -03002156 if (state->Mod_Type == MXL_ATSC) /* ATSC Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002157 {
Steven Toth3935c252008-05-01 05:45:44 -03002158 Tuner->AGC_Mode = 1; /* Single AGC Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002159
Steven Toth3935c252008-05-01 05:45:44 -03002160 /* Enable RSSI */
2161 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2162 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2163 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 1);
2164 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002165
Steven Toth3935c252008-05-01 05:45:44 -03002166 /* RSSI reference point */
2167 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 2);
2168 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 4);
2169 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 1);
2170
2171 /* TOP point */
2172 status += MXL_ControlWrite(fe, RFA_FLR, 2);
2173 status += MXL_ControlWrite(fe, RFA_CEIL, 13);
2174 status += MXL_ControlWrite(fe, BB_INITSTATE_DLPF_TUNE, 1);
2175 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 5); /* Low Zero */
2176 if (state->IF_OUT <= 6280000UL) /* Low IF */
2177 status += MXL_ControlWrite(fe, BB_IQSWAP, 0);
2178 else /* High IF */
2179 status += MXL_ControlWrite(fe, BB_IQSWAP, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002180 }
Steven Toth3935c252008-05-01 05:45:44 -03002181 if (state->Mod_Type == MXL_QAM) /* QAM Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002182 {
Steven Toth3935c252008-05-01 05:45:44 -03002183 state->Mode = MXL_DIGITAL_MODE;
Steven Toth52c99bd2008-05-01 04:57:01 -03002184
Steven Toth3935c252008-05-01 05:45:44 -03002185 /* state->AGC_Mode = 1; */ /* Single AGC Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002186
Steven Toth3935c252008-05-01 05:45:44 -03002187 /* Disable RSSI */ /* change here for v2.6.5 */
2188 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2189 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2190 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 0);
2191 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002192
Steven Toth3935c252008-05-01 05:45:44 -03002193 /* RSSI reference point */
2194 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 5);
2195 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 3);
2196 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 2);
2197 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 3); /* change here for v2.6.5 */
Steven Toth52c99bd2008-05-01 04:57:01 -03002198
Steven Toth3935c252008-05-01 05:45:44 -03002199 if (state->IF_OUT <= 6280000UL) /* Low IF */
2200 status += MXL_ControlWrite(fe, BB_IQSWAP, 0);
2201 else /* High IF */
2202 status += MXL_ControlWrite(fe, BB_IQSWAP, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002203 }
Steven Toth3935c252008-05-01 05:45:44 -03002204 if (state->Mod_Type == MXL_ANALOG_CABLE) {
2205 /* Analog Cable Mode */
2206 /* Tuner->Mode = MXL_DIGITAL_MODE; */
Steven Toth52c99bd2008-05-01 04:57:01 -03002207
Steven Toth3935c252008-05-01 05:45:44 -03002208 state->AGC_Mode = 1; /* Single AGC Mode */
Steven Toth52c99bd2008-05-01 04:57:01 -03002209
Steven Toth3935c252008-05-01 05:45:44 -03002210 /* Disable RSSI */
2211 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2212 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2213 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 0);
2214 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
2215 status += MXL_ControlWrite(fe, AGC_IF, 1); /* change for 2.6.3 */
2216 status += MXL_ControlWrite(fe, AGC_RF, 15);
2217 status += MXL_ControlWrite(fe, BB_IQSWAP, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002218 }
2219
Steven Toth3935c252008-05-01 05:45:44 -03002220 if (state->Mod_Type == MXL_ANALOG_OTA) {
2221 /* Analog OTA Terrestrial mode add for 2.6.7 */
2222 /* state->Mode = MXL_ANALOG_MODE; */
Steven Toth52c99bd2008-05-01 04:57:01 -03002223
Steven Toth3935c252008-05-01 05:45:44 -03002224 /* Enable RSSI */
2225 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2226 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2227 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 1);
2228 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002229
Steven Toth3935c252008-05-01 05:45:44 -03002230 /* RSSI reference point */
2231 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 5);
2232 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 3);
2233 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 2);
2234 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 3);
2235 status += MXL_ControlWrite(fe, BB_IQSWAP, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002236 }
2237
Steven Toth3935c252008-05-01 05:45:44 -03002238 /* RSSI disable */
2239 if(state->EN_RSSI==0) {
2240 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1);
2241 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1);
2242 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 0);
2243 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002244 }
2245
Steven Toth3935c252008-05-01 05:45:44 -03002246 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03002247}
2248
2249///////////////////////////////////////////////////////////////////////////////
2250// //
2251// Function: MXL_IFSynthInit //
2252// //
2253// Description: Tuner IF Synthesizer related register initialization //
2254// //
2255// Globals: //
2256// NONE //
2257// //
2258// Functions used: //
2259// Tuner_struct: structure defined at higher level //
2260// //
2261// Inputs: //
2262// Tuner : Tuner structure defined at higher level //
2263// //
2264// Outputs: //
2265// Tuner //
2266// //
2267// Return: //
2268// 0 : Successful //
2269// > 0 : Failed //
2270// //
2271///////////////////////////////////////////////////////////////////////////////
Steven Totha8214d42008-05-01 05:02:58 -03002272u16 MXL_IFSynthInit(Tuner_struct * Tuner)
Steven Toth52c99bd2008-05-01 04:57:01 -03002273{
Steven Totha8214d42008-05-01 05:02:58 -03002274 u16 status = 0 ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002275 // Declare Local Variables
Steven Totha8214d42008-05-01 05:02:58 -03002276 u32 Fref = 0 ;
2277 u32 Kdbl, intModVal ;
2278 u32 fracModVal ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002279 Kdbl = 2 ;
2280
Steven Toth3935c252008-05-01 05:45:44 -03002281 if (state->Fxtal >= 12000000UL && state->Fxtal <= 16000000UL)
Steven Toth52c99bd2008-05-01 04:57:01 -03002282 Kdbl = 2 ;
Steven Toth3935c252008-05-01 05:45:44 -03002283 if (state->Fxtal > 16000000UL && state->Fxtal <= 32000000UL)
Steven Toth52c99bd2008-05-01 04:57:01 -03002284 Kdbl = 1 ;
2285
2286 //
2287 // IF Synthesizer Control
2288 //
2289 if (Tuner->Mode == 0 && Tuner->IF_Mode == 1) // Analog Low IF mode
2290 {
2291 if (Tuner->IF_LO == 41000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002292 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2293 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002294 Fref = 328000000UL ;
2295 }
2296 if (Tuner->IF_LO == 47000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002297 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2298 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002299 Fref = 376000000UL ;
2300 }
2301 if (Tuner->IF_LO == 54000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002302 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x10) ;
2303 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002304 Fref = 324000000UL ;
2305 }
2306 if (Tuner->IF_LO == 60000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002307 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x10) ;
2308 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002309 Fref = 360000000UL ;
2310 }
2311 if (Tuner->IF_LO == 39250000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002312 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2313 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002314 Fref = 314000000UL ;
2315 }
2316 if (Tuner->IF_LO == 39650000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002317 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2318 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002319 Fref = 317200000UL ;
2320 }
2321 if (Tuner->IF_LO == 40150000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002322 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2323 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002324 Fref = 321200000UL ;
2325 }
2326 if (Tuner->IF_LO == 40650000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002327 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2328 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002329 Fref = 325200000UL ;
2330 }
2331 }
2332
2333 if (Tuner->Mode || (Tuner->Mode == 0 && Tuner->IF_Mode == 0))
2334 {
2335 if (Tuner->IF_LO == 57000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002336 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x10) ;
2337 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002338 Fref = 342000000UL ;
2339 }
2340 if (Tuner->IF_LO == 44000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002341 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2342 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002343 Fref = 352000000UL ;
2344 }
2345 if (Tuner->IF_LO == 43750000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002346 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2347 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002348 Fref = 350000000UL ;
2349 }
2350 if (Tuner->IF_LO == 36650000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002351 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2352 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002353 Fref = 366500000UL ;
2354 }
2355 if (Tuner->IF_LO == 36150000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002356 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2357 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002358 Fref = 361500000UL ;
2359 }
2360 if (Tuner->IF_LO == 36000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002361 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2362 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002363 Fref = 360000000UL ;
2364 }
2365 if (Tuner->IF_LO == 35250000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002366 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2367 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002368 Fref = 352500000UL ;
2369 }
2370 if (Tuner->IF_LO == 34750000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002371 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2372 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002373 Fref = 347500000UL ;
2374 }
2375 if (Tuner->IF_LO == 6280000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002376 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x07) ;
2377 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002378 Fref = 376800000UL ;
2379 }
2380 if (Tuner->IF_LO == 5000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002381 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x09) ;
2382 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002383 Fref = 360000000UL ;
2384 }
2385 if (Tuner->IF_LO == 4500000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002386 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x06) ;
2387 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002388 Fref = 360000000UL ;
2389 }
2390 if (Tuner->IF_LO == 4570000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002391 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x06) ;
2392 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002393 Fref = 365600000UL ;
2394 }
2395 if (Tuner->IF_LO == 4000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002396 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x05) ;
2397 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002398 Fref = 360000000UL ;
2399 }
2400 if (Tuner->IF_LO == 57400000UL)
2401 {
Steven Toth3935c252008-05-01 05:45:44 -03002402 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x10) ;
2403 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002404 Fref = 344400000UL ;
2405 }
2406 if (Tuner->IF_LO == 44400000UL)
2407 {
Steven Toth3935c252008-05-01 05:45:44 -03002408 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2409 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002410 Fref = 355200000UL ;
2411 }
2412 if (Tuner->IF_LO == 44150000UL)
2413 {
Steven Toth3935c252008-05-01 05:45:44 -03002414 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x08) ;
2415 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002416 Fref = 353200000UL ;
2417 }
2418 if (Tuner->IF_LO == 37050000UL)
2419 {
Steven Toth3935c252008-05-01 05:45:44 -03002420 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2421 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002422 Fref = 370500000UL ;
2423 }
2424 if (Tuner->IF_LO == 36550000UL)
2425 {
Steven Toth3935c252008-05-01 05:45:44 -03002426 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2427 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002428 Fref = 365500000UL ;
2429 }
2430 if (Tuner->IF_LO == 36125000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002431 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x04) ;
2432 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002433 Fref = 361250000UL ;
2434 }
2435 if (Tuner->IF_LO == 6000000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002436 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x07) ;
2437 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002438 Fref = 360000000UL ;
2439 }
2440 if (Tuner->IF_LO == 5400000UL)
2441 {
Steven Toth3935c252008-05-01 05:45:44 -03002442 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x07) ;
2443 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002444 Fref = 324000000UL ;
2445 }
2446 if (Tuner->IF_LO == 5380000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002447 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x07) ;
2448 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x0C) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002449 Fref = 322800000UL ;
2450 }
2451 if (Tuner->IF_LO == 5200000UL) {
Steven Toth3935c252008-05-01 05:45:44 -03002452 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x09) ;
2453 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002454 Fref = 374400000UL ;
2455 }
2456 if (Tuner->IF_LO == 4900000UL)
2457 {
Steven Toth3935c252008-05-01 05:45:44 -03002458 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x09) ;
2459 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002460 Fref = 352800000UL ;
2461 }
2462 if (Tuner->IF_LO == 4400000UL)
2463 {
Steven Toth3935c252008-05-01 05:45:44 -03002464 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x06) ;
2465 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002466 Fref = 352000000UL ;
2467 }
2468 if (Tuner->IF_LO == 4063000UL) //add for 2.6.8
2469 {
Steven Toth3935c252008-05-01 05:45:44 -03002470 status += MXL_ControlWrite(fe, IF_DIVVAL, 0x05) ;
2471 status += MXL_ControlWrite(fe, IF_VCO_BIAS, 0x08) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002472 Fref = 365670000UL ;
2473 }
2474 }
2475 // CHCAL_INT_MOD_IF
2476 // CHCAL_FRAC_MOD_IF
Steven Toth3935c252008-05-01 05:45:44 -03002477 intModVal = Fref / (state->Fxtal * Kdbl/2) ;
2478 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_IF, intModVal ) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002479
Steven Toth3935c252008-05-01 05:45:44 -03002480 fracModVal = (2<<15)*(Fref/1000 - (state->Fxtal/1000 * Kdbl/2) * intModVal);
2481 fracModVal = fracModVal / ((state->Fxtal * Kdbl/2)/1000) ;
2482 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_IF, fracModVal) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002483
Steven Toth52c99bd2008-05-01 04:57:01 -03002484 return status ;
2485}
2486
2487///////////////////////////////////////////////////////////////////////////////
2488// //
2489// Function: MXL_GetXtalInt //
2490// //
Steven Totha8214d42008-05-01 05:02:58 -03002491// Description: return the Crystal Integration Value for //
2492// TG_VCO_BIAS calculation //
Steven Toth52c99bd2008-05-01 04:57:01 -03002493// //
2494// Globals: //
2495// NONE //
2496// //
2497// Functions used: //
Steven Totha8214d42008-05-01 05:02:58 -03002498// NONE //
Steven Toth52c99bd2008-05-01 04:57:01 -03002499// //
2500// Inputs: //
2501// Crystal Frequency Value in Hz //
2502// //
2503// Outputs: //
2504// Calculated Crystal Frequency Integration Value //
2505// //
2506// Return: //
2507// 0 : Successful //
2508// > 0 : Failed //
2509// //
2510///////////////////////////////////////////////////////////////////////////////
Steven Totha8214d42008-05-01 05:02:58 -03002511u32 MXL_GetXtalInt(u32 Xtal_Freq)
Steven Toth52c99bd2008-05-01 04:57:01 -03002512{
2513 if ((Xtal_Freq % 1000000) == 0)
2514 return (Xtal_Freq / 10000) ;
2515 else
2516 return (((Xtal_Freq / 1000000) + 1)*100) ;
2517}
2518
2519///////////////////////////////////////////////////////////////////////////////
2520// //
2521// Function: MXL5005_TuneRF //
2522// //
2523// Description: Set control names to tune to requested RF_IN frequency //
2524// //
2525// Globals: //
2526// None //
2527// //
2528// Functions used: //
2529// MXL_SynthRFTGLO_Calc //
2530// MXL5005_ControlWrite //
Steven Toth3935c252008-05-01 05:45:44 -03002531// MXL_GetXtalInt //
Steven Toth52c99bd2008-05-01 04:57:01 -03002532// //
2533// Inputs: //
2534// Tuner : Tuner structure defined at higher level //
2535// //
2536// Outputs: //
2537// Tuner //
2538// //
2539// Return: //
2540// 0 : Successful //
2541// 1 : Unsuccessful //
2542///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03002543u16 MXL_TuneRF(struct dvb_frontend *fe, u32 RF_Freq)
Steven Toth52c99bd2008-05-01 04:57:01 -03002544{
Steven Toth3935c252008-05-01 05:45:44 -03002545 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -03002546 // Declare Local Variables
Steven Toth3935c252008-05-01 05:45:44 -03002547 u16 status = 0;
2548 u32 divider_val, E3, E4, E5, E5A;
2549 u32 Fmax, Fmin, FmaxBin, FminBin;
Steven Totha8214d42008-05-01 05:02:58 -03002550 u32 Kdbl_RF = 2;
Steven Toth3935c252008-05-01 05:45:44 -03002551 u32 tg_divval;
2552 u32 tg_lo;
2553 u32 Xtal_Int;
Steven Toth52c99bd2008-05-01 04:57:01 -03002554
Steven Totha8214d42008-05-01 05:02:58 -03002555 u32 Fref_TG;
2556 u32 Fvco;
2557// u32 temp;
Steven Toth52c99bd2008-05-01 04:57:01 -03002558
2559
Steven Toth3935c252008-05-01 05:45:44 -03002560 Xtal_Int = MXL_GetXtalInt(state->Fxtal);
Steven Toth52c99bd2008-05-01 04:57:01 -03002561
Steven Toth3935c252008-05-01 05:45:44 -03002562 state->RF_IN = RF_Freq;
Steven Toth52c99bd2008-05-01 04:57:01 -03002563
Steven Toth3935c252008-05-01 05:45:44 -03002564 MXL_SynthRFTGLO_Calc(fe);
Steven Toth52c99bd2008-05-01 04:57:01 -03002565
Steven Toth3935c252008-05-01 05:45:44 -03002566 if (state->Fxtal >= 12000000UL && state->Fxtal <= 22000000UL)
2567 Kdbl_RF = 2;
2568 if (state->Fxtal > 22000000 && state->Fxtal <= 32000000)
2569 Kdbl_RF = 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03002570
2571 //
2572 // Downconverter Controls
2573 //
2574 // Look-Up Table Implementation for:
2575 // DN_POLY
2576 // DN_RFGAIN
2577 // DN_CAP_RFLPF
2578 // DN_EN_VHFUHFBAR
2579 // DN_GAIN_ADJUST
2580 // Change the boundary reference from RF_IN to RF_LO
Steven Toth3935c252008-05-01 05:45:44 -03002581 if (state->RF_LO < 40000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002582 return -1;
2583 }
Steven Toth3935c252008-05-01 05:45:44 -03002584 if (state->RF_LO >= 40000000UL && state->RF_LO <= 75000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002585 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002586 status += MXL_ControlWrite(fe, DN_POLY, 2);
2587 status += MXL_ControlWrite(fe, DN_RFGAIN, 3);
2588 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 423);
2589 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 1);
2590 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002591 }
Steven Toth3935c252008-05-01 05:45:44 -03002592 if (state->RF_LO > 75000000UL && state->RF_LO <= 100000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002593 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002594 status += MXL_ControlWrite(fe, DN_POLY, 3);
2595 status += MXL_ControlWrite(fe, DN_RFGAIN, 3);
2596 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 222);
2597 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 1);
2598 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002599 }
Steven Toth3935c252008-05-01 05:45:44 -03002600 if (state->RF_LO > 100000000UL && state->RF_LO <= 150000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002601 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002602 status += MXL_ControlWrite(fe, DN_POLY, 3);
2603 status += MXL_ControlWrite(fe, DN_RFGAIN, 3);
2604 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 147);
2605 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 1);
2606 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 2);
Steven Toth52c99bd2008-05-01 04:57:01 -03002607 }
Steven Toth3935c252008-05-01 05:45:44 -03002608 if (state->RF_LO > 150000000UL && state->RF_LO <= 200000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002609 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002610 status += MXL_ControlWrite(fe, DN_POLY, 3);
2611 status += MXL_ControlWrite(fe, DN_RFGAIN, 3);
2612 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 9);
2613 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 1);
2614 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 2);
Steven Toth52c99bd2008-05-01 04:57:01 -03002615 }
Steven Toth3935c252008-05-01 05:45:44 -03002616 if (state->RF_LO > 200000000UL && state->RF_LO <= 300000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002617 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002618 status += MXL_ControlWrite(fe, DN_POLY, 3) ;
2619 status += MXL_ControlWrite(fe, DN_RFGAIN, 3) ;
2620 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 0) ;
2621 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 1) ;
2622 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002623 }
Steven Toth3935c252008-05-01 05:45:44 -03002624 if (state->RF_LO > 300000000UL && state->RF_LO <= 650000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002625 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002626 status += MXL_ControlWrite(fe, DN_POLY, 3) ;
2627 status += MXL_ControlWrite(fe, DN_RFGAIN, 1) ;
2628 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 0) ;
2629 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 0) ;
2630 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002631 }
Steven Toth3935c252008-05-01 05:45:44 -03002632 if (state->RF_LO > 650000000UL && state->RF_LO <= 900000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002633 // Look-Up Table implementation
Steven Toth3935c252008-05-01 05:45:44 -03002634 status += MXL_ControlWrite(fe, DN_POLY, 3) ;
2635 status += MXL_ControlWrite(fe, DN_RFGAIN, 2) ;
2636 status += MXL_ControlWrite(fe, DN_CAP_RFLPF, 0) ;
2637 status += MXL_ControlWrite(fe, DN_EN_VHFUHFBAR, 0) ;
2638 status += MXL_ControlWrite(fe, DN_GAIN_ADJUST, 3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002639 }
Steven Toth3935c252008-05-01 05:45:44 -03002640 if (state->RF_LO > 900000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002641 return -1;
2642 }
2643 // DN_IQTNBUF_AMP
2644 // DN_IQTNGNBFBIAS_BST
Steven Toth3935c252008-05-01 05:45:44 -03002645 if (state->RF_LO >= 40000000UL && state->RF_LO <= 75000000UL) {
2646 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2647 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002648 }
Steven Toth3935c252008-05-01 05:45:44 -03002649 if (state->RF_LO > 75000000UL && state->RF_LO <= 100000000UL) {
2650 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2651 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002652 }
Steven Toth3935c252008-05-01 05:45:44 -03002653 if (state->RF_LO > 100000000UL && state->RF_LO <= 150000000UL) {
2654 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2655 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002656 }
Steven Toth3935c252008-05-01 05:45:44 -03002657 if (state->RF_LO > 150000000UL && state->RF_LO <= 200000000UL) {
2658 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2659 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002660 }
Steven Toth3935c252008-05-01 05:45:44 -03002661 if (state->RF_LO > 200000000UL && state->RF_LO <= 300000000UL) {
2662 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2663 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002664 }
Steven Toth3935c252008-05-01 05:45:44 -03002665 if (state->RF_LO > 300000000UL && state->RF_LO <= 400000000UL) {
2666 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2667 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002668 }
Steven Toth3935c252008-05-01 05:45:44 -03002669 if (state->RF_LO > 400000000UL && state->RF_LO <= 450000000UL) {
2670 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2671 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002672 }
Steven Toth3935c252008-05-01 05:45:44 -03002673 if (state->RF_LO > 450000000UL && state->RF_LO <= 500000000UL) {
2674 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2675 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002676 }
Steven Toth3935c252008-05-01 05:45:44 -03002677 if (state->RF_LO > 500000000UL && state->RF_LO <= 550000000UL) {
2678 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2679 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002680 }
Steven Toth3935c252008-05-01 05:45:44 -03002681 if (state->RF_LO > 550000000UL && state->RF_LO <= 600000000UL) {
2682 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2683 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002684 }
Steven Toth3935c252008-05-01 05:45:44 -03002685 if (state->RF_LO > 600000000UL && state->RF_LO <= 650000000UL) {
2686 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2687 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002688 }
Steven Toth3935c252008-05-01 05:45:44 -03002689 if (state->RF_LO > 650000000UL && state->RF_LO <= 700000000UL) {
2690 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2691 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002692 }
Steven Toth3935c252008-05-01 05:45:44 -03002693 if (state->RF_LO > 700000000UL && state->RF_LO <= 750000000UL) {
2694 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2695 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002696 }
Steven Toth3935c252008-05-01 05:45:44 -03002697 if (state->RF_LO > 750000000UL && state->RF_LO <= 800000000UL) {
2698 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 1);
2699 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03002700 }
Steven Toth3935c252008-05-01 05:45:44 -03002701 if (state->RF_LO > 800000000UL && state->RF_LO <= 850000000UL) {
2702 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 10);
2703 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002704 }
Steven Toth3935c252008-05-01 05:45:44 -03002705 if (state->RF_LO > 850000000UL && state->RF_LO <= 900000000UL) {
2706 status += MXL_ControlWrite(fe, DN_IQTNBUF_AMP, 10);
2707 status += MXL_ControlWrite(fe, DN_IQTNGNBFBIAS_BST, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002708 }
2709
2710 //
2711 // Set RF Synth and LO Path Control
2712 //
2713 // Look-Up table implementation for:
2714 // RFSYN_EN_OUTMUX
2715 // RFSYN_SEL_VCO_OUT
2716 // RFSYN_SEL_VCO_HI
2717 // RFSYN_SEL_DIVM
2718 // RFSYN_RF_DIV_BIAS
2719 // DN_SEL_FREQ
2720 //
2721 // Set divider_val, Fmax, Fmix to use in Equations
2722 FminBin = 28000000UL ;
2723 FmaxBin = 42500000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002724 if (state->RF_LO >= 40000000UL && state->RF_LO <= FmaxBin) {
2725 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 1);
2726 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 0);
2727 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
2728 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
2729 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
2730 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002731 divider_val = 64 ;
2732 Fmax = FmaxBin ;
2733 Fmin = FminBin ;
2734 }
2735 FminBin = 42500000UL ;
2736 FmaxBin = 56000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002737 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2738 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 1);
2739 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 0);
2740 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
2741 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
2742 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
2743 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002744 divider_val = 64 ;
2745 Fmax = FmaxBin ;
2746 Fmin = FminBin ;
2747 }
2748 FminBin = 56000000UL ;
2749 FmaxBin = 85000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002750 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2751 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2752 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2753 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0) ;
2754 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2755 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2756 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 1) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002757 divider_val = 32 ;
2758 Fmax = FmaxBin ;
2759 Fmin = FminBin ;
2760 }
2761 FminBin = 85000000UL ;
2762 FmaxBin = 112000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002763 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2764 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2765 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2766 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1) ;
2767 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2768 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2769 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 1) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002770 divider_val = 32 ;
2771 Fmax = FmaxBin ;
2772 Fmin = FminBin ;
2773 }
2774 FminBin = 112000000UL ;
2775 FmaxBin = 170000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002776 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2777 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2778 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2779 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0) ;
2780 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2781 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2782 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002783 divider_val = 16 ;
2784 Fmax = FmaxBin ;
2785 Fmin = FminBin ;
2786 }
2787 FminBin = 170000000UL ;
2788 FmaxBin = 225000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002789 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2790 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2791 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2792 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1) ;
2793 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2794 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2795 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002796 divider_val = 16 ;
2797 Fmax = FmaxBin ;
2798 Fmin = FminBin ;
2799 }
2800 FminBin = 225000000UL ;
2801 FmaxBin = 300000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002802 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2803 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2804 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2805 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0) ;
2806 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2807 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2808 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 4) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002809 divider_val = 8 ;
2810 Fmax = 340000000UL ;
2811 Fmin = FminBin ;
2812 }
2813 FminBin = 300000000UL ;
2814 FmaxBin = 340000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002815 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2816 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 1) ;
2817 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 0) ;
2818 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0) ;
2819 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2820 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2821 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002822 divider_val = 8 ;
2823 Fmax = FmaxBin ;
2824 Fmin = 225000000UL ;
2825 }
2826 FminBin = 340000000UL ;
2827 FmaxBin = 450000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002828 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2829 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 1) ;
2830 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 0) ;
2831 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1) ;
2832 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0) ;
2833 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 2) ;
2834 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002835 divider_val = 8 ;
2836 Fmax = FmaxBin ;
2837 Fmin = FminBin ;
2838 }
2839 FminBin = 450000000UL ;
2840 FmaxBin = 680000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002841 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2842 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2843 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2844 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0) ;
2845 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 1) ;
2846 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2847 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002848 divider_val = 4 ;
2849 Fmax = FmaxBin ;
2850 Fmin = FminBin ;
2851 }
2852 FminBin = 680000000UL ;
2853 FmaxBin = 900000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002854 if (state->RF_LO > FminBin && state->RF_LO <= FmaxBin) {
2855 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0) ;
2856 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1) ;
2857 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1) ;
2858 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 1) ;
2859 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1) ;
2860 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002861 divider_val = 4 ;
2862 Fmax = FmaxBin ;
2863 Fmin = FminBin ;
2864 }
2865
2866 // CHCAL_INT_MOD_RF
2867 // CHCAL_FRAC_MOD_RF
2868 // RFSYN_LPF_R
2869 // CHCAL_EN_INT_RF
2870
2871 // Equation E3
2872 // RFSYN_VCO_BIAS
Steven Toth3935c252008-05-01 05:45:44 -03002873 E3 = (((Fmax-state->RF_LO)/1000)*32)/((Fmax-Fmin)/1000) + 8 ;
2874 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, E3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002875
2876 // Equation E4
2877 // CHCAL_INT_MOD_RF
Steven Toth3935c252008-05-01 05:45:44 -03002878 E4 = (state->RF_LO*divider_val/1000)/(2*state->Fxtal*Kdbl_RF/1000) ;
2879 MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, E4) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002880
2881 // Equation E5
2882 // CHCAL_FRAC_MOD_RF
2883 // CHCAL_EN_INT_RF
Steven Toth3935c252008-05-01 05:45:44 -03002884 E5 = ((2<<17)*(state->RF_LO/10000*divider_val - (E4*(2*state->Fxtal*Kdbl_RF)/10000)))/(2*state->Fxtal*Kdbl_RF/10000) ;
2885 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, E5) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002886
2887 // Equation E5A
2888 // RFSYN_LPF_R
Steven Toth3935c252008-05-01 05:45:44 -03002889 E5A = (((Fmax - state->RF_LO)/1000)*4/((Fmax-Fmin)/1000)) + 1 ;
2890 status += MXL_ControlWrite(fe, RFSYN_LPF_R, E5A) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002891
2892 // Euqation E5B
2893 // CHCAL_EN_INIT_RF
Steven Toth3935c252008-05-01 05:45:44 -03002894 status += MXL_ControlWrite(fe, CHCAL_EN_INT_RF, ((E5 == 0) ? 1 : 0));
Steven Toth52c99bd2008-05-01 04:57:01 -03002895 //if (E5 == 0)
Steven Toth3935c252008-05-01 05:45:44 -03002896 // status += MXL_ControlWrite(fe, CHCAL_EN_INT_RF, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03002897 //else
Steven Toth3935c252008-05-01 05:45:44 -03002898 // status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, E5) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002899
2900 //
2901 // Set TG Synth
2902 //
2903 // Look-Up table implementation for:
2904 // TG_LO_DIVVAL
2905 // TG_LO_SELVAL
2906 //
2907 // Set divider_val, Fmax, Fmix to use in Equations
Steven Toth3935c252008-05-01 05:45:44 -03002908 if (state->TG_LO < 33000000UL) {
Steven Toth52c99bd2008-05-01 04:57:01 -03002909 return -1;
2910 }
2911 FminBin = 33000000UL ;
2912 FmaxBin = 50000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002913 if (state->TG_LO >= FminBin && state->TG_LO <= FmaxBin) {
2914 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x6) ;
2915 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002916 divider_val = 36 ;
2917 Fmax = FmaxBin ;
2918 Fmin = FminBin ;
2919 }
2920 FminBin = 50000000UL ;
2921 FmaxBin = 67000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002922 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2923 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x1) ;
2924 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002925 divider_val = 24 ;
2926 Fmax = FmaxBin ;
2927 Fmin = FminBin ;
2928 }
2929 FminBin = 67000000UL ;
2930 FmaxBin = 100000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002931 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2932 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0xC) ;
2933 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002934 divider_val = 18 ;
2935 Fmax = FmaxBin ;
2936 Fmin = FminBin ;
2937 }
2938 FminBin = 100000000UL ;
2939 FmaxBin = 150000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002940 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2941 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x8) ;
2942 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002943 divider_val = 12 ;
2944 Fmax = FmaxBin ;
2945 Fmin = FminBin ;
2946 }
2947 FminBin = 150000000UL ;
2948 FmaxBin = 200000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002949 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2950 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x0) ;
2951 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002952 divider_val = 8 ;
2953 Fmax = FmaxBin ;
2954 Fmin = FminBin ;
2955 }
2956 FminBin = 200000000UL ;
2957 FmaxBin = 300000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002958 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2959 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x8) ;
2960 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002961 divider_val = 6 ;
2962 Fmax = FmaxBin ;
2963 Fmin = FminBin ;
2964 }
2965 FminBin = 300000000UL ;
2966 FmaxBin = 400000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002967 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2968 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x0) ;
2969 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002970 divider_val = 4 ;
2971 Fmax = FmaxBin ;
2972 Fmin = FminBin ;
2973 }
2974 FminBin = 400000000UL ;
2975 FmaxBin = 600000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002976 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2977 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x8) ;
2978 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x7) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002979 divider_val = 3 ;
2980 Fmax = FmaxBin ;
2981 Fmin = FminBin ;
2982 }
2983 FminBin = 600000000UL ;
2984 FmaxBin = 900000000UL ;
Steven Toth3935c252008-05-01 05:45:44 -03002985 if (state->TG_LO > FminBin && state->TG_LO <= FmaxBin) {
2986 status += MXL_ControlWrite(fe, TG_LO_DIVVAL, 0x0) ;
2987 status += MXL_ControlWrite(fe, TG_LO_SELVAL, 0x7) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002988 divider_val = 2 ;
2989 Fmax = FmaxBin ;
2990 Fmin = FminBin ;
2991 }
2992
2993 // TG_DIV_VAL
Steven Toth3935c252008-05-01 05:45:44 -03002994 tg_divval = (state->TG_LO*divider_val/100000)
2995 *(MXL_Ceiling(state->Fxtal,1000000) * 100) / (state->Fxtal/1000) ;
2996 status += MXL_ControlWrite(fe, TG_DIV_VAL, tg_divval) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03002997
Steven Toth3935c252008-05-01 05:45:44 -03002998 if (state->TG_LO > 600000000UL)
2999 status += MXL_ControlWrite(fe, TG_DIV_VAL, tg_divval + 1 ) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003000
3001 Fmax = 1800000000UL ;
3002 Fmin = 1200000000UL ;
3003
3004
3005
3006 // to prevent overflow of 32 bit unsigned integer, use following equation. Edit for v2.6.4
Steven Toth3935c252008-05-01 05:45:44 -03003007 Fref_TG = (state->Fxtal/1000)/ MXL_Ceiling(state->Fxtal, 1000000) ; // Fref_TF = Fref_TG*1000
Steven Toth52c99bd2008-05-01 04:57:01 -03003008
Steven Toth3935c252008-05-01 05:45:44 -03003009 Fvco = (state->TG_LO/10000) * divider_val * Fref_TG; //Fvco = Fvco/10
Steven Toth52c99bd2008-05-01 04:57:01 -03003010
3011 tg_lo = (((Fmax/10 - Fvco)/100)*32) / ((Fmax-Fmin)/1000)+8;
3012
3013 //below equation is same as above but much harder to debug.
Steven Toth3935c252008-05-01 05:45:44 -03003014 //tg_lo = ( ((Fmax/10000 * Xtal_Int)/100) - ((state->TG_LO/10000)*divider_val*(state->Fxtal/10000)/100) )*32/((Fmax-Fmin)/10000 * Xtal_Int/100) + 8 ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003015
3016
Steven Toth3935c252008-05-01 05:45:44 -03003017 status += MXL_ControlWrite(fe, TG_VCO_BIAS , tg_lo) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003018
3019
3020
3021 //add for 2.6.5
3022 //Special setting for QAM
Steven Toth3935c252008-05-01 05:45:44 -03003023 if(state->Mod_Type == MXL_QAM)
Steven Toth52c99bd2008-05-01 04:57:01 -03003024 {
Steven Toth3935c252008-05-01 05:45:44 -03003025 if(state->RF_IN < 680000000)
3026 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003027 else
Steven Toth3935c252008-05-01 05:45:44 -03003028 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003029 }
3030
3031
3032 //remove 20.48MHz setting for 2.6.10
3033
3034 //
3035 // Off Chip Tracking Filter Control
3036 //
3037 if (Tuner->TF_Type == MXL_TF_OFF) // Tracking Filter Off State; turn off all the banks
3038 {
Steven Toth3935c252008-05-01 05:45:44 -03003039 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ;
3040 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003041
Steven Toth3935c252008-05-01 05:45:44 -03003042 status += MXL_SetGPIO(fe, 3, 1) ; // turn off Bank 1
3043 status += MXL_SetGPIO(fe, 1, 1) ; // turn off Bank 2
3044 status += MXL_SetGPIO(fe, 4, 1) ; // turn off Bank 3
Steven Toth52c99bd2008-05-01 04:57:01 -03003045 }
3046
3047 if (Tuner->TF_Type == MXL_TF_C) // Tracking Filter type C
3048 {
Steven Toth3935c252008-05-01 05:45:44 -03003049 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ;
3050 status += MXL_ControlWrite(fe, DAC_DIN_A, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003051
Steven Toth3935c252008-05-01 05:45:44 -03003052 if (state->RF_IN >= 43000000 && state->RF_IN < 150000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003053 {
3054
Steven Toth3935c252008-05-01 05:45:44 -03003055 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3056 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3057 status += MXL_SetGPIO(fe, 3, 0) ; // Bank1 On
3058 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3059 status += MXL_SetGPIO(fe, 4, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003060 }
Steven Toth3935c252008-05-01 05:45:44 -03003061 if (state->RF_IN >= 150000000 && state->RF_IN < 280000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003062 {
Steven Toth3935c252008-05-01 05:45:44 -03003063 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3064 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3065 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3066 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3067 status += MXL_SetGPIO(fe, 4, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003068 }
Steven Toth3935c252008-05-01 05:45:44 -03003069 if (state->RF_IN >= 280000000 && state->RF_IN < 360000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003070 {
Steven Toth3935c252008-05-01 05:45:44 -03003071 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3072 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3073 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3074 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3075 status += MXL_SetGPIO(fe, 4, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003076 }
Steven Toth3935c252008-05-01 05:45:44 -03003077 if (state->RF_IN >= 360000000 && state->RF_IN < 560000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003078 {
Steven Toth3935c252008-05-01 05:45:44 -03003079 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3080 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3081 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3082 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3083 status += MXL_SetGPIO(fe, 4, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003084 }
Steven Toth3935c252008-05-01 05:45:44 -03003085 if (state->RF_IN >= 560000000 && state->RF_IN < 580000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003086 {
Steven Toth3935c252008-05-01 05:45:44 -03003087 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3088 status += MXL_ControlWrite(fe, DAC_DIN_B, 29) ;
3089 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3090 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3091 status += MXL_SetGPIO(fe, 4, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003092 }
Steven Toth3935c252008-05-01 05:45:44 -03003093 if (state->RF_IN >= 580000000 && state->RF_IN < 630000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003094 {
Steven Toth3935c252008-05-01 05:45:44 -03003095 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3096 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3097 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3098 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3099 status += MXL_SetGPIO(fe, 4, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003100 }
Steven Toth3935c252008-05-01 05:45:44 -03003101 if (state->RF_IN >= 630000000 && state->RF_IN < 700000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003102 {
Steven Toth3935c252008-05-01 05:45:44 -03003103 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3104 status += MXL_ControlWrite(fe, DAC_DIN_B, 16) ;
3105 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3106 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3107 status += MXL_SetGPIO(fe, 4, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003108 }
Steven Toth3935c252008-05-01 05:45:44 -03003109 if (state->RF_IN >= 700000000 && state->RF_IN < 760000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003110 {
Steven Toth3935c252008-05-01 05:45:44 -03003111 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3112 status += MXL_ControlWrite(fe, DAC_DIN_B, 7) ;
3113 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3114 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3115 status += MXL_SetGPIO(fe, 4, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003116 }
Steven Toth3935c252008-05-01 05:45:44 -03003117 if (state->RF_IN >= 760000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003118 {
Steven Toth3935c252008-05-01 05:45:44 -03003119 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3120 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
3121 status += MXL_SetGPIO(fe, 3, 1) ; // Bank1 Off
3122 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3123 status += MXL_SetGPIO(fe, 4, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003124 }
3125 }
3126
3127 if (Tuner->TF_Type == MXL_TF_C_H) // Tracking Filter type C-H for Hauppauge only
3128 {
Steven Toth3935c252008-05-01 05:45:44 -03003129 status += MXL_ControlWrite(fe, DAC_DIN_A, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003130
Steven Toth3935c252008-05-01 05:45:44 -03003131 if (state->RF_IN >= 43000000 && state->RF_IN < 150000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003132 {
3133
Steven Toth3935c252008-05-01 05:45:44 -03003134 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3135 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3136 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3137 status += MXL_SetGPIO(fe, 1, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003138 }
Steven Toth3935c252008-05-01 05:45:44 -03003139 if (state->RF_IN >= 150000000 && state->RF_IN < 280000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003140 {
Steven Toth3935c252008-05-01 05:45:44 -03003141 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3142 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3143 status += MXL_SetGPIO(fe, 3, 0) ; // Bank2 On
3144 status += MXL_SetGPIO(fe, 1, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003145 }
Steven Toth3935c252008-05-01 05:45:44 -03003146 if (state->RF_IN >= 280000000 && state->RF_IN < 360000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003147 {
Steven Toth3935c252008-05-01 05:45:44 -03003148 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3149 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3150 status += MXL_SetGPIO(fe, 3, 0) ; // Bank2 On
3151 status += MXL_SetGPIO(fe, 1, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003152 }
Steven Toth3935c252008-05-01 05:45:44 -03003153 if (state->RF_IN >= 360000000 && state->RF_IN < 560000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003154 {
Steven Toth3935c252008-05-01 05:45:44 -03003155 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3156 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3157 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3158 status += MXL_SetGPIO(fe, 1, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003159 }
Steven Toth3935c252008-05-01 05:45:44 -03003160 if (state->RF_IN >= 560000000 && state->RF_IN < 580000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003161 {
Steven Toth3935c252008-05-01 05:45:44 -03003162 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3163 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3164 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3165 status += MXL_SetGPIO(fe, 1, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003166 }
Steven Toth3935c252008-05-01 05:45:44 -03003167 if (state->RF_IN >= 580000000 && state->RF_IN < 630000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003168 {
Steven Toth3935c252008-05-01 05:45:44 -03003169 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3170 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3171 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3172 status += MXL_SetGPIO(fe, 1, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003173 }
Steven Toth3935c252008-05-01 05:45:44 -03003174 if (state->RF_IN >= 630000000 && state->RF_IN < 700000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003175 {
Steven Toth3935c252008-05-01 05:45:44 -03003176 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3177 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3178 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3179 status += MXL_SetGPIO(fe, 1, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003180 }
Steven Toth3935c252008-05-01 05:45:44 -03003181 if (state->RF_IN >= 700000000 && state->RF_IN < 760000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003182 {
Steven Toth3935c252008-05-01 05:45:44 -03003183 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3184 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3185 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3186 status += MXL_SetGPIO(fe, 1, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003187 }
Steven Toth3935c252008-05-01 05:45:44 -03003188 if (state->RF_IN >= 760000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003189 {
Steven Toth3935c252008-05-01 05:45:44 -03003190 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3191 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3192 status += MXL_SetGPIO(fe, 3, 1) ; // Bank2 Off
3193 status += MXL_SetGPIO(fe, 1, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003194 }
3195 }
3196
3197 if (Tuner->TF_Type == MXL_TF_D) // Tracking Filter type D
3198 {
Steven Toth3935c252008-05-01 05:45:44 -03003199 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003200
Steven Toth3935c252008-05-01 05:45:44 -03003201 if (state->RF_IN >= 43000000 && state->RF_IN < 174000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003202 {
3203
Steven Toth3935c252008-05-01 05:45:44 -03003204 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3205 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3206 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3207 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003208 }
Steven Toth3935c252008-05-01 05:45:44 -03003209 if (state->RF_IN >= 174000000 && state->RF_IN < 250000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003210 {
Steven Toth3935c252008-05-01 05:45:44 -03003211 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3212 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3213 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3214 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003215 }
Steven Toth3935c252008-05-01 05:45:44 -03003216 if (state->RF_IN >= 250000000 && state->RF_IN < 310000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003217 {
Steven Toth3935c252008-05-01 05:45:44 -03003218 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3219 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3220 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3221 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003222 }
Steven Toth3935c252008-05-01 05:45:44 -03003223 if (state->RF_IN >= 310000000 && state->RF_IN < 360000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003224 {
Steven Toth3935c252008-05-01 05:45:44 -03003225 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3226 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3227 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3228 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003229 }
Steven Toth3935c252008-05-01 05:45:44 -03003230 if (state->RF_IN >= 360000000 && state->RF_IN < 470000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003231 {
Steven Toth3935c252008-05-01 05:45:44 -03003232 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3233 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3234 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3235 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003236 }
Steven Toth3935c252008-05-01 05:45:44 -03003237 if (state->RF_IN >= 470000000 && state->RF_IN < 640000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003238 {
Steven Toth3935c252008-05-01 05:45:44 -03003239 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3240 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3241 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3242 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003243 }
Steven Toth3935c252008-05-01 05:45:44 -03003244 if (state->RF_IN >= 640000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003245 {
Steven Toth3935c252008-05-01 05:45:44 -03003246 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3247 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3248 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3249 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003250 }
3251 }
3252
3253
3254 if (Tuner->TF_Type == MXL_TF_D_L) // Tracking Filter type D-L for Lumanate ONLY change for 2.6.3
3255 {
Steven Toth3935c252008-05-01 05:45:44 -03003256 status += MXL_ControlWrite(fe, DAC_DIN_A, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003257
Steven Totha8214d42008-05-01 05:02:58 -03003258 // if UHF and terrestrial => Turn off Tracking Filter
Steven Toth3935c252008-05-01 05:45:44 -03003259 if (state->RF_IN >= 471000000 && (state->RF_IN - 471000000)%6000000 != 0)
Steven Toth52c99bd2008-05-01 04:57:01 -03003260 {
3261 // Turn off all the banks
Steven Toth3935c252008-05-01 05:45:44 -03003262 status += MXL_SetGPIO(fe, 3, 1) ;
3263 status += MXL_SetGPIO(fe, 1, 1) ;
3264 status += MXL_SetGPIO(fe, 4, 1) ;
3265 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003266
Steven Toth3935c252008-05-01 05:45:44 -03003267 status += MXL_ControlWrite(fe, AGC_IF, 10) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003268 }
3269
3270 else // if VHF or cable => Turn on Tracking Filter
3271 {
Steven Toth3935c252008-05-01 05:45:44 -03003272 if (state->RF_IN >= 43000000 && state->RF_IN < 140000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003273 {
3274
Steven Toth3935c252008-05-01 05:45:44 -03003275 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3276 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 On
3277 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3278 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003279 }
Steven Toth3935c252008-05-01 05:45:44 -03003280 if (state->RF_IN >= 140000000 && state->RF_IN < 240000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003281 {
Steven Toth3935c252008-05-01 05:45:44 -03003282 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3283 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 On
3284 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3285 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003286 }
Steven Toth3935c252008-05-01 05:45:44 -03003287 if (state->RF_IN >= 240000000 && state->RF_IN < 340000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003288 {
Steven Toth3935c252008-05-01 05:45:44 -03003289 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3290 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 Off
3291 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 On
3292 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003293 }
Steven Toth3935c252008-05-01 05:45:44 -03003294 if (state->RF_IN >= 340000000 && state->RF_IN < 430000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003295 {
Steven Toth3935c252008-05-01 05:45:44 -03003296 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 Off
3297 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 Off
3298 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3299 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003300 }
Steven Toth3935c252008-05-01 05:45:44 -03003301 if (state->RF_IN >= 430000000 && state->RF_IN < 470000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003302 {
Steven Toth3935c252008-05-01 05:45:44 -03003303 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 Off
3304 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3305 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 Off
3306 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003307 }
Steven Toth3935c252008-05-01 05:45:44 -03003308 if (state->RF_IN >= 470000000 && state->RF_IN < 570000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003309 {
Steven Toth3935c252008-05-01 05:45:44 -03003310 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3311 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 Off
3312 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 Off
3313 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003314 }
Steven Toth3935c252008-05-01 05:45:44 -03003315 if (state->RF_IN >= 570000000 && state->RF_IN < 620000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003316 {
Steven Toth3935c252008-05-01 05:45:44 -03003317 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 0) ; // Bank4 On
3318 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 Off
3319 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3320 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Offq
Steven Toth52c99bd2008-05-01 04:57:01 -03003321 }
Steven Toth3935c252008-05-01 05:45:44 -03003322 if (state->RF_IN >= 620000000 && state->RF_IN < 760000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003323 {
Steven Toth3935c252008-05-01 05:45:44 -03003324 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3325 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 Off
3326 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3327 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003328 }
Steven Toth3935c252008-05-01 05:45:44 -03003329 if (state->RF_IN >= 760000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003330 {
Steven Toth3935c252008-05-01 05:45:44 -03003331 status += MXL_ControlWrite(fe, DAC_A_ENABLE, 1) ; // Bank4 On
3332 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3333 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3334 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003335 }
3336 }
3337 }
3338
3339 if (Tuner->TF_Type == MXL_TF_E) // Tracking Filter type E
3340 {
Steven Toth3935c252008-05-01 05:45:44 -03003341 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003342
Steven Toth3935c252008-05-01 05:45:44 -03003343 if (state->RF_IN >= 43000000 && state->RF_IN < 174000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003344 {
3345
Steven Toth3935c252008-05-01 05:45:44 -03003346 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3347 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3348 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3349 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003350 }
Steven Toth3935c252008-05-01 05:45:44 -03003351 if (state->RF_IN >= 174000000 && state->RF_IN < 250000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003352 {
Steven Toth3935c252008-05-01 05:45:44 -03003353 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3354 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3355 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3356 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003357 }
Steven Toth3935c252008-05-01 05:45:44 -03003358 if (state->RF_IN >= 250000000 && state->RF_IN < 310000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003359 {
Steven Toth3935c252008-05-01 05:45:44 -03003360 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3361 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3362 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3363 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003364 }
Steven Toth3935c252008-05-01 05:45:44 -03003365 if (state->RF_IN >= 310000000 && state->RF_IN < 360000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003366 {
Steven Toth3935c252008-05-01 05:45:44 -03003367 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3368 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3369 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3370 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003371 }
Steven Toth3935c252008-05-01 05:45:44 -03003372 if (state->RF_IN >= 360000000 && state->RF_IN < 470000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003373 {
Steven Toth3935c252008-05-01 05:45:44 -03003374 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3375 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3376 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3377 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003378 }
Steven Toth3935c252008-05-01 05:45:44 -03003379 if (state->RF_IN >= 470000000 && state->RF_IN < 640000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003380 {
Steven Toth3935c252008-05-01 05:45:44 -03003381 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3382 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3383 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3384 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003385 }
Steven Toth3935c252008-05-01 05:45:44 -03003386 if (state->RF_IN >= 640000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003387 {
Steven Toth3935c252008-05-01 05:45:44 -03003388 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3389 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3390 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3391 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003392 }
3393 }
3394
3395 if (Tuner->TF_Type == MXL_TF_F) // Tracking Filter type F
3396 {
Steven Toth3935c252008-05-01 05:45:44 -03003397 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003398
Steven Toth3935c252008-05-01 05:45:44 -03003399 if (state->RF_IN >= 43000000 && state->RF_IN < 160000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003400 {
3401
Steven Toth3935c252008-05-01 05:45:44 -03003402 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3403 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3404 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3405 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003406 }
Steven Toth3935c252008-05-01 05:45:44 -03003407 if (state->RF_IN >= 160000000 && state->RF_IN < 210000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003408 {
Steven Toth3935c252008-05-01 05:45:44 -03003409 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3410 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3411 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3412 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003413 }
Steven Toth3935c252008-05-01 05:45:44 -03003414 if (state->RF_IN >= 210000000 && state->RF_IN < 300000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003415 {
Steven Toth3935c252008-05-01 05:45:44 -03003416 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3417 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3418 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3419 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003420 }
Steven Toth3935c252008-05-01 05:45:44 -03003421 if (state->RF_IN >= 300000000 && state->RF_IN < 390000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003422 {
Steven Toth3935c252008-05-01 05:45:44 -03003423 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3424 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3425 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3426 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003427 }
Steven Toth3935c252008-05-01 05:45:44 -03003428 if (state->RF_IN >= 390000000 && state->RF_IN < 515000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003429 {
Steven Toth3935c252008-05-01 05:45:44 -03003430 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3431 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3432 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3433 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003434 }
Steven Toth3935c252008-05-01 05:45:44 -03003435 if (state->RF_IN >= 515000000 && state->RF_IN < 650000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003436 {
Steven Toth3935c252008-05-01 05:45:44 -03003437 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3438 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3439 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3440 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003441 }
Steven Toth3935c252008-05-01 05:45:44 -03003442 if (state->RF_IN >= 650000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003443 {
Steven Toth3935c252008-05-01 05:45:44 -03003444 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3445 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3446 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3447 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003448 }
3449 }
3450
3451 if (Tuner->TF_Type == MXL_TF_E_2) // Tracking Filter type E_2
3452 {
Steven Toth3935c252008-05-01 05:45:44 -03003453 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003454
Steven Toth3935c252008-05-01 05:45:44 -03003455 if (state->RF_IN >= 43000000 && state->RF_IN < 174000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003456 {
3457
Steven Toth3935c252008-05-01 05:45:44 -03003458 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3459 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3460 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3461 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003462 }
Steven Toth3935c252008-05-01 05:45:44 -03003463 if (state->RF_IN >= 174000000 && state->RF_IN < 250000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003464 {
Steven Toth3935c252008-05-01 05:45:44 -03003465 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3466 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3467 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3468 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003469 }
Steven Toth3935c252008-05-01 05:45:44 -03003470 if (state->RF_IN >= 250000000 && state->RF_IN < 350000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003471 {
Steven Toth3935c252008-05-01 05:45:44 -03003472 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3473 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3474 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3475 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003476 }
Steven Toth3935c252008-05-01 05:45:44 -03003477 if (state->RF_IN >= 350000000 && state->RF_IN < 400000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003478 {
Steven Toth3935c252008-05-01 05:45:44 -03003479 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3480 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3481 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3482 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003483 }
Steven Toth3935c252008-05-01 05:45:44 -03003484 if (state->RF_IN >= 400000000 && state->RF_IN < 570000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003485 {
Steven Toth3935c252008-05-01 05:45:44 -03003486 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3487 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3488 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3489 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003490 }
Steven Toth3935c252008-05-01 05:45:44 -03003491 if (state->RF_IN >= 570000000 && state->RF_IN < 770000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003492 {
Steven Toth3935c252008-05-01 05:45:44 -03003493 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3494 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3495 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3496 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003497 }
Steven Toth3935c252008-05-01 05:45:44 -03003498 if (state->RF_IN >= 770000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003499 {
Steven Toth3935c252008-05-01 05:45:44 -03003500 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3501 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3502 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3503 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003504 }
3505 }
3506
3507 if (Tuner->TF_Type == MXL_TF_G) // Tracking Filter type G add for v2.6.8
3508 {
Steven Toth3935c252008-05-01 05:45:44 -03003509 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003510
Steven Toth3935c252008-05-01 05:45:44 -03003511 if (state->RF_IN >= 50000000 && state->RF_IN < 190000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003512 {
3513
Steven Toth3935c252008-05-01 05:45:44 -03003514 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3515 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3516 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3517 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003518 }
Steven Toth3935c252008-05-01 05:45:44 -03003519 if (state->RF_IN >= 190000000 && state->RF_IN < 280000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003520 {
Steven Toth3935c252008-05-01 05:45:44 -03003521 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3522 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3523 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3524 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003525 }
Steven Toth3935c252008-05-01 05:45:44 -03003526 if (state->RF_IN >= 280000000 && state->RF_IN < 350000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003527 {
Steven Toth3935c252008-05-01 05:45:44 -03003528 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3529 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3530 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3531 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003532 }
Steven Toth3935c252008-05-01 05:45:44 -03003533 if (state->RF_IN >= 350000000 && state->RF_IN < 400000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003534 {
Steven Toth3935c252008-05-01 05:45:44 -03003535 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3536 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3537 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3538 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003539 }
Steven Toth3935c252008-05-01 05:45:44 -03003540 if (state->RF_IN >= 400000000 && state->RF_IN < 470000000) //modified for 2.6.11
Steven Toth52c99bd2008-05-01 04:57:01 -03003541 {
Steven Toth3935c252008-05-01 05:45:44 -03003542 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3543 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 On
3544 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 Off
3545 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003546 }
Steven Toth3935c252008-05-01 05:45:44 -03003547 if (state->RF_IN >= 470000000 && state->RF_IN < 640000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003548 {
Steven Toth3935c252008-05-01 05:45:44 -03003549 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3550 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3551 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3552 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003553 }
Steven Toth3935c252008-05-01 05:45:44 -03003554 if (state->RF_IN >= 640000000 && state->RF_IN < 820000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003555 {
Steven Toth3935c252008-05-01 05:45:44 -03003556 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3557 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3558 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3559 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003560 }
Steven Toth3935c252008-05-01 05:45:44 -03003561 if (state->RF_IN >= 820000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003562 {
Steven Toth3935c252008-05-01 05:45:44 -03003563 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3564 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3565 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3566 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003567 }
3568 }
3569
3570 if (Tuner->TF_Type == MXL_TF_E_NA) // Tracking Filter type E-NA for Empia ONLY change for 2.6.8
3571 {
Steven Toth3935c252008-05-01 05:45:44 -03003572 status += MXL_ControlWrite(fe, DAC_DIN_B, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003573
Steven Totha8214d42008-05-01 05:02:58 -03003574 // if UHF and terrestrial=> Turn off Tracking Filter
Steven Toth3935c252008-05-01 05:45:44 -03003575 if (state->RF_IN >= 471000000 && (state->RF_IN - 471000000)%6000000 != 0)
Steven Toth52c99bd2008-05-01 04:57:01 -03003576 {
3577 // Turn off all the banks
Steven Toth3935c252008-05-01 05:45:44 -03003578 status += MXL_SetGPIO(fe, 3, 1) ;
3579 status += MXL_SetGPIO(fe, 1, 1) ;
3580 status += MXL_SetGPIO(fe, 4, 1) ;
3581 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003582
3583 //2.6.12
3584 //Turn on RSSI
Steven Toth3935c252008-05-01 05:45:44 -03003585 status += MXL_ControlWrite(fe, SEQ_EXTSYNTHCALIF, 1) ;
3586 status += MXL_ControlWrite(fe, SEQ_EXTDCCAL, 1) ;
3587 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 1) ;
3588 status += MXL_ControlWrite(fe, RFA_ENCLKRFAGC, 1) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003589
3590 // RSSI reference point
Steven Toth3935c252008-05-01 05:45:44 -03003591 status += MXL_ControlWrite(fe, RFA_RSSI_REFH, 5) ;
3592 status += MXL_ControlWrite(fe, RFA_RSSI_REF, 3) ;
3593 status += MXL_ControlWrite(fe, RFA_RSSI_REFL, 2) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003594
3595
Steven Toth3935c252008-05-01 05:45:44 -03003596 //status += MXL_ControlWrite(fe, AGC_IF, 10) ; //doesn't matter since RSSI is turn on
Steven Toth52c99bd2008-05-01 04:57:01 -03003597
3598 //following parameter is from analog OTA mode, can be change to seek better performance
Steven Toth3935c252008-05-01 05:45:44 -03003599 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 3) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003600 }
3601
3602 else //if VHF or Cable => Turn on Tracking Filter
3603 {
3604 //2.6.12
3605 //Turn off RSSI
Steven Toth3935c252008-05-01 05:45:44 -03003606 status += MXL_ControlWrite(fe, AGC_EN_RSSI, 0) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003607
3608 //change back from above condition
Steven Toth3935c252008-05-01 05:45:44 -03003609 status += MXL_ControlWrite(fe, RFSYN_CHP_GAIN, 5) ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003610
3611
Steven Toth3935c252008-05-01 05:45:44 -03003612 if (state->RF_IN >= 43000000 && state->RF_IN < 174000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003613 {
3614
Steven Toth3935c252008-05-01 05:45:44 -03003615 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3616 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3617 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3618 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003619 }
Steven Toth3935c252008-05-01 05:45:44 -03003620 if (state->RF_IN >= 174000000 && state->RF_IN < 250000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003621 {
Steven Toth3935c252008-05-01 05:45:44 -03003622 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3623 status += MXL_SetGPIO(fe, 4, 0) ; // Bank1 On
3624 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3625 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003626 }
Steven Toth3935c252008-05-01 05:45:44 -03003627 if (state->RF_IN >= 250000000 && state->RF_IN < 350000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003628 {
Steven Toth3935c252008-05-01 05:45:44 -03003629 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3630 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3631 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3632 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003633 }
Steven Toth3935c252008-05-01 05:45:44 -03003634 if (state->RF_IN >= 350000000 && state->RF_IN < 400000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003635 {
Steven Toth3935c252008-05-01 05:45:44 -03003636 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3637 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3638 status += MXL_SetGPIO(fe, 1, 0) ; // Bank2 On
3639 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003640 }
Steven Toth3935c252008-05-01 05:45:44 -03003641 if (state->RF_IN >= 400000000 && state->RF_IN < 570000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003642 {
Steven Toth3935c252008-05-01 05:45:44 -03003643 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 0) ; // Bank4 Off
3644 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3645 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3646 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003647 }
Steven Toth3935c252008-05-01 05:45:44 -03003648 if (state->RF_IN >= 570000000 && state->RF_IN < 770000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003649 {
Steven Toth3935c252008-05-01 05:45:44 -03003650 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3651 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3652 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3653 status += MXL_SetGPIO(fe, 3, 0) ; // Bank3 On
Steven Toth52c99bd2008-05-01 04:57:01 -03003654 }
Steven Toth3935c252008-05-01 05:45:44 -03003655 if (state->RF_IN >= 770000000 && state->RF_IN <= 900000000)
Steven Toth52c99bd2008-05-01 04:57:01 -03003656 {
Steven Toth3935c252008-05-01 05:45:44 -03003657 status += MXL_ControlWrite(fe, DAC_B_ENABLE, 1) ; // Bank4 On
3658 status += MXL_SetGPIO(fe, 4, 1) ; // Bank1 Off
3659 status += MXL_SetGPIO(fe, 1, 1) ; // Bank2 Off
3660 status += MXL_SetGPIO(fe, 3, 1) ; // Bank3 Off
Steven Toth52c99bd2008-05-01 04:57:01 -03003661 }
3662 }
3663 }
3664 return status ;
3665}
3666
Steven Toth3935c252008-05-01 05:45:44 -03003667// DONE
3668u16 MXL_SetGPIO(struct dvb_frontend *fe, u8 GPIO_Num, u8 GPIO_Val)
Steven Toth52c99bd2008-05-01 04:57:01 -03003669{
Steven Toth3935c252008-05-01 05:45:44 -03003670 struct mxl5005s_state *state = fe->demodulator_priv;
3671 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03003672
3673 if (GPIO_Num == 1)
Steven Toth3935c252008-05-01 05:45:44 -03003674 status += MXL_ControlWrite(fe, GPIO_1B, GPIO_Val ? 0 : 1);
3675
3676 /* GPIO2 is not available */
3677
3678 if (GPIO_Num == 3) {
Steven Toth52c99bd2008-05-01 04:57:01 -03003679 if (GPIO_Val == 1) {
Steven Toth3935c252008-05-01 05:45:44 -03003680 status += MXL_ControlWrite(fe, GPIO_3, 0);
3681 status += MXL_ControlWrite(fe, GPIO_3B, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03003682 }
3683 if (GPIO_Val == 0) {
Steven Toth3935c252008-05-01 05:45:44 -03003684 status += MXL_ControlWrite(fe, GPIO_3, 1);
3685 status += MXL_ControlWrite(fe, GPIO_3B, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03003686 }
Steven Toth3935c252008-05-01 05:45:44 -03003687 if (GPIO_Val == 3) { /* tri-state */
3688 status += MXL_ControlWrite(fe, GPIO_3, 0);
3689 status += MXL_ControlWrite(fe, GPIO_3B, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03003690 }
3691 }
Steven Toth3935c252008-05-01 05:45:44 -03003692 if (GPIO_Num == 4) {
Steven Toth52c99bd2008-05-01 04:57:01 -03003693 if (GPIO_Val == 1) {
Steven Toth3935c252008-05-01 05:45:44 -03003694 status += MXL_ControlWrite(fe, GPIO_4, 0);
3695 status += MXL_ControlWrite(fe, GPIO_4B, 0);
Steven Toth52c99bd2008-05-01 04:57:01 -03003696 }
3697 if (GPIO_Val == 0) {
Steven Toth3935c252008-05-01 05:45:44 -03003698 status += MXL_ControlWrite(fe, GPIO_4, 1);
3699 status += MXL_ControlWrite(fe, GPIO_4B, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03003700 }
Steven Toth3935c252008-05-01 05:45:44 -03003701 if (GPIO_Val == 3) { /* tri-state */
3702 status += MXL_ControlWrite(fe, GPIO_4, 0);
3703 status += MXL_ControlWrite(fe, GPIO_4B, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03003704 }
3705 }
3706
Steven Toth3935c252008-05-01 05:45:44 -03003707 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03003708}
3709
3710///////////////////////////////////////////////////////////////////////////////
3711// //
3712// Function: MXL_ControlWrite //
3713// //
3714// Description: Update control name value //
3715// //
3716// Globals: //
3717// NONE //
3718// //
3719// Functions used: //
3720// MXL_ControlWrite( Tuner, controlName, value, Group ) //
3721// //
3722// Inputs: //
3723// Tuner : Tuner structure //
3724// ControlName : Control name to be updated //
3725// value : Value to be written //
3726// //
3727// Outputs: //
3728// Tuner : Tuner structure defined at higher level //
3729// //
3730// Return: //
3731// 0 : Successful write //
3732// >0 : Value exceed maximum allowed for control number //
3733// //
3734///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03003735// DONE
3736u16 MXL_ControlWrite(struct dvb_frontend *fe, u16 ControlNum, u32 value)
Steven Toth52c99bd2008-05-01 04:57:01 -03003737{
Steven Toth3935c252008-05-01 05:45:44 -03003738 struct mxl5005s_state *state = fe->demodulator_priv;
3739 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03003740
Steven Toth3935c252008-05-01 05:45:44 -03003741 /* Will write ALL Matching Control Name */
3742 status += MXL_ControlWrite_Group(fe, ControlNum, value, 1); /* Write Matching INIT Control *
3743 status += MXL_ControlWrite_Group(fe, ControlNum, value, 2); /* Write Matching CH Control *
3744#ifdef _MXL_INTERNAL
3745 status += MXL_ControlWrite_Group(fe, ControlNum, value, 3); /* Write Matching MXL Control *
3746#endif
3747 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03003748}
3749
3750///////////////////////////////////////////////////////////////////////////////
3751// //
3752// Function: MXL_ControlWrite //
3753// //
3754// Description: Update control name value //
3755// //
3756// Globals: //
3757// NONE //
3758// //
3759// Functions used: //
3760// strcmp //
3761// //
3762// Inputs: //
3763// Tuner_struct: structure defined at higher level //
3764// ControlName : Control Name //
3765// value : Value Assigned to Control Name //
3766// controlGroup : Control Register Group //
3767// //
3768// Outputs: //
3769// NONE //
3770// //
3771// Return: //
3772// 0 : Successful write //
3773// 1 : Value exceed maximum allowed for control name //
3774// 2 : Control name not found //
3775// //
3776///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03003777// DONE
3778u16 MXL_ControlWrite_Group(struct dvb_frontend *fe, u16 controlNum, u32 value, u16 controlGroup)
Steven Toth52c99bd2008-05-01 04:57:01 -03003779{
Steven Toth3935c252008-05-01 05:45:44 -03003780 struct mxl5005s_state *state = fe->demodulator_priv;
3781 u16 i, j, k;
3782 u32 highLimit;
3783 u32 ctrlVal;
Steven Toth52c99bd2008-05-01 04:57:01 -03003784
Steven Toth3935c252008-05-01 05:45:44 -03003785 if (controlGroup == 1) /* Initial Control */ {
3786
3787 for (i = 0; i < state->Init_Ctrl_Num; i++) {
3788
3789 if (controlNum == state->Init_Ctrl[i].Ctrl_Num) {
3790
3791 highLimit = 1 << state->Init_Ctrl[i].size;
3792 if (value < highLimit) {
3793 for (j = 0; j < state->Init_Ctrl[i].size; j++) {
3794 state->Init_Ctrl[i].val[j] = (u8)((value >> j) & 0x01);
3795 MXL_RegWriteBit(fe, (u8)(state->Init_Ctrl[i].addr[j]),
3796 (u8)(state->Init_Ctrl[i].bit[j]),
3797 (u8)((value>>j) & 0x01) );
Steven Toth52c99bd2008-05-01 04:57:01 -03003798 }
Steven Toth3935c252008-05-01 05:45:44 -03003799 ctrlVal = 0;
3800 for (k = 0; k < state->Init_Ctrl[i].size; k++)
3801 ctrlVal += state->Init_Ctrl[i].val[k] * (1 << k);
Steven Toth52c99bd2008-05-01 04:57:01 -03003802 }
3803 else
Steven Toth3935c252008-05-01 05:45:44 -03003804 return -1;
Steven Toth52c99bd2008-05-01 04:57:01 -03003805 }
3806 }
3807 }
Steven Toth3935c252008-05-01 05:45:44 -03003808 if (controlGroup == 2) /* Chan change Control */ {
3809
3810 for (i = 0; i < state->CH_Ctrl_Num; i++) {
3811
3812 if (controlNum == state->CH_Ctrl[i].Ctrl_Num ) {
3813
3814 highLimit = 1 << state->CH_Ctrl[i].size;
3815 if (value < highLimit) {
3816 for (j = 0; j < state->CH_Ctrl[i].size; j++) {
3817 state->CH_Ctrl[i].val[j] = (u8)((value >> j) & 0x01);
3818 MXL_RegWriteBit(fe, (u8)(state->CH_Ctrl[i].addr[j]),
3819 (u8)(state->CH_Ctrl[i].bit[j]),
3820 (u8)((value>>j) & 0x01) );
Steven Toth52c99bd2008-05-01 04:57:01 -03003821 }
Steven Toth3935c252008-05-01 05:45:44 -03003822 ctrlVal = 0;
3823 for (k = 0; k < state->CH_Ctrl[i].size; k++)
3824 ctrlVal += state->CH_Ctrl[i].val[k] * (1 << k);
Steven Toth52c99bd2008-05-01 04:57:01 -03003825 }
3826 else
Steven Toth3935c252008-05-01 05:45:44 -03003827 return -1;
Steven Toth52c99bd2008-05-01 04:57:01 -03003828 }
3829 }
3830 }
3831#ifdef _MXL_INTERNAL
Steven Toth3935c252008-05-01 05:45:44 -03003832 if (controlGroup == 3) /* Maxlinear Control */ {
3833
3834 for (i = 0; i < state->MXL_Ctrl_Num; i++) {
3835
3836 if (controlNum == state->MXL_Ctrl[i].Ctrl_Num ) {
3837
3838 highLimit = (1 << state->MXL_Ctrl[i].size) ;
3839 if (value < highLimit) {
3840 for (j = 0; j < state->MXL_Ctrl[i].size; j++) {
3841 state->MXL_Ctrl[i].val[j] = (u8)((value >> j) & 0x01);
3842 MXL_RegWriteBit(fe, (u8)(state->MXL_Ctrl[i].addr[j]),
3843 (u8)(state->MXL_Ctrl[i].bit[j]),
3844 (u8)((value>>j) & 0x01) );
Steven Toth52c99bd2008-05-01 04:57:01 -03003845 }
Steven Toth3935c252008-05-01 05:45:44 -03003846 ctrlVal = 0;
3847 for(k = 0; k < state->MXL_Ctrl[i].size; k++)
3848 ctrlVal += state->MXL_Ctrl[i].val[k] * (1 << k);
Steven Toth52c99bd2008-05-01 04:57:01 -03003849 }
3850 else
Steven Toth3935c252008-05-01 05:45:44 -03003851 return -1;
Steven Toth52c99bd2008-05-01 04:57:01 -03003852 }
3853 }
3854 }
3855#endif
Steven Toth3935c252008-05-01 05:45:44 -03003856 return 0 ; /* successful return */
Steven Toth52c99bd2008-05-01 04:57:01 -03003857}
3858
3859///////////////////////////////////////////////////////////////////////////////
3860// //
3861// Function: MXL_RegWrite //
3862// //
3863// Description: Update tuner register value //
3864// //
3865// Globals: //
3866// NONE //
3867// //
3868// Functions used: //
3869// NONE //
3870// //
3871// Inputs: //
3872// Tuner_struct: structure defined at higher level //
3873// RegNum : Register address to be assigned a value //
3874// RegVal : Register value to write //
3875// //
3876// Outputs: //
3877// NONE //
3878// //
3879// Return: //
3880// 0 : Successful write //
3881// -1 : Invalid Register Address //
3882// //
3883///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03003884// DONE
3885u16 MXL_RegWrite(struct dvb_frontend *fe, u8 RegNum, u8 RegVal)
Steven Toth52c99bd2008-05-01 04:57:01 -03003886{
Steven Toth3935c252008-05-01 05:45:44 -03003887 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -03003888 int i ;
3889
Steven Toth3935c252008-05-01 05:45:44 -03003890 for (i = 0; i < 104; i++) {
3891 if (RegNum == state->TunerRegs[i].Reg_Num) {
3892 state->TunerRegs[i].Reg_Val = RegVal;
3893 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03003894 }
3895 }
3896
Steven Toth3935c252008-05-01 05:45:44 -03003897 return 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03003898}
3899
3900///////////////////////////////////////////////////////////////////////////////
3901// //
3902// Function: MXL_RegRead //
3903// //
3904// Description: Retrieve tuner register value //
3905// //
3906// Globals: //
3907// NONE //
3908// //
3909// Functions used: //
3910// NONE //
3911// //
3912// Inputs: //
3913// Tuner_struct: structure defined at higher level //
3914// RegNum : Register address to be assigned a value //
3915// //
3916// Outputs: //
3917// RegVal : Retrieved register value //
3918// //
3919// Return: //
3920// 0 : Successful read //
3921// -1 : Invalid Register Address //
3922// //
3923///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03003924// DONE
3925u16 MXL_RegRead(struct dvb_frontend *fe, u8 RegNum, u8 *RegVal)
Steven Toth52c99bd2008-05-01 04:57:01 -03003926{
Steven Toth3935c252008-05-01 05:45:44 -03003927 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -03003928 int i ;
3929
Steven Toth3935c252008-05-01 05:45:44 -03003930 for (i = 0; i < 104; i++) {
3931 if (RegNum == state->TunerRegs[i].Reg_Num ) {
3932 *RegVal = (u8)(state->TunerRegs[i].Reg_Val);
3933 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03003934 }
3935 }
3936
Steven Toth3935c252008-05-01 05:45:44 -03003937 return 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03003938}
3939
3940///////////////////////////////////////////////////////////////////////////////
3941// //
3942// Function: MXL_ControlRead //
3943// //
3944// Description: Retrieve the control value based on the control name //
3945// //
3946// Globals: //
3947// NONE //
3948// //
3949// Inputs: //
3950// Tuner_struct : structure defined at higher level //
3951// ControlName : Control Name //
3952// //
3953// Outputs: //
3954// value : returned control value //
3955// //
3956// Return: //
3957// 0 : Successful read //
3958// -1 : Invalid control name //
3959// //
3960///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03003961// DONE
3962u16 MXL_ControlRead(struct dvb_frontend *fe, u16 controlNum, u32 * value)
Steven Toth52c99bd2008-05-01 04:57:01 -03003963{
Steven Toth3935c252008-05-01 05:45:44 -03003964 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03003965 u32 ctrlVal ;
3966 u16 i, k ;
Steven Toth52c99bd2008-05-01 04:57:01 -03003967
Steven Toth3935c252008-05-01 05:45:44 -03003968 for (i = 0; i < state->Init_Ctrl_Num ; i++) {
3969
3970 if (controlNum == state->Init_Ctrl[i].Ctrl_Num) {
3971
3972 ctrlVal = 0;
3973 for (k = 0; k < state->Init_Ctrl[i].size; k++)
3974 ctrlVal += state->Init_Ctrl[i].val[k] * (1 << k);
3975 *value = ctrlVal;
3976 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03003977 }
3978 }
Steven Toth3935c252008-05-01 05:45:44 -03003979
3980 for (i = 0; i < state->CH_Ctrl_Num ; i++) {
3981
3982 if (controlNum == state->CH_Ctrl[i].Ctrl_Num) {
3983
3984 ctrlVal = 0;
3985 for (k = 0; k < state->CH_Ctrl[i].size; k++)
3986 ctrlVal += state->CH_Ctrl[i].val[k] * (1 << k);
3987 *value = ctrlVal;
3988 return 0;
3989
Steven Toth52c99bd2008-05-01 04:57:01 -03003990 }
3991 }
3992
3993#ifdef _MXL_INTERNAL
Steven Toth3935c252008-05-01 05:45:44 -03003994 for (i = 0; i < state->MXL_Ctrl_Num ; i++) {
3995
3996 if (controlNum == state->MXL_Ctrl[i].Ctrl_Num) {
3997
3998 ctrlVal = 0;
3999 for (k = 0; k < state->MXL_Ctrl[i].size; k++)
4000 ctrlVal += state->MXL_Ctrl[i].val[k] * (1<<k);
4001 *value = ctrlVal;
4002 return 0;
4003
Steven Toth52c99bd2008-05-01 04:57:01 -03004004 }
4005 }
4006#endif
Steven Toth3935c252008-05-01 05:45:44 -03004007 return 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03004008}
4009
4010///////////////////////////////////////////////////////////////////////////////
4011// //
4012// Function: MXL_ControlRegRead //
4013// //
4014// Description: Retrieve the register addresses and count related to a //
Steven Totha8214d42008-05-01 05:02:58 -03004015// a specific control name //
Steven Toth52c99bd2008-05-01 04:57:01 -03004016// //
4017// Globals: //
4018// NONE //
4019// //
4020// Inputs: //
4021// Tuner_struct : structure defined at higher level //
4022// ControlName : Control Name //
4023// //
4024// Outputs: //
4025// RegNum : returned register address array //
Steven Totha8214d42008-05-01 05:02:58 -03004026// count : returned register count related to a control //
Steven Toth52c99bd2008-05-01 04:57:01 -03004027// //
4028// Return: //
4029// 0 : Successful read //
4030// -1 : Invalid control name //
4031// //
4032///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03004033// DONE
4034u16 MXL_ControlRegRead(struct dvb_frontend *fe, u16 controlNum, u8 *RegNum, int * count)
Steven Toth52c99bd2008-05-01 04:57:01 -03004035{
Steven Toth3935c252008-05-01 05:45:44 -03004036 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03004037 u16 i, j, k ;
4038 u16 Count ;
Steven Toth52c99bd2008-05-01 04:57:01 -03004039
Steven Toth3935c252008-05-01 05:45:44 -03004040 for (i = 0; i < state->Init_Ctrl_Num ; i++) {
Steven Toth52c99bd2008-05-01 04:57:01 -03004041
Steven Toth3935c252008-05-01 05:45:44 -03004042 if ( controlNum == state->Init_Ctrl[i].Ctrl_Num ) {
4043
4044 Count = 1;
4045 RegNum[0] = (u8)(state->Init_Ctrl[i].addr[0]);
4046
4047 for (k = 1; k < state->Init_Ctrl[i].size; k++) {
4048
4049 for (j = 0; j < Count; j++) {
4050
4051 if (state->Init_Ctrl[i].addr[k] != RegNum[j]) {
4052
4053 Count ++;
4054 RegNum[Count-1] = (u8)(state->Init_Ctrl[i].addr[k]);
4055
Steven Toth52c99bd2008-05-01 04:57:01 -03004056 }
4057 }
4058
4059 }
Steven Toth3935c252008-05-01 05:45:44 -03004060 *count = Count;
4061 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004062 }
4063 }
Steven Toth3935c252008-05-01 05:45:44 -03004064 for (i = 0; i < state->CH_Ctrl_Num ; i++) {
Steven Toth52c99bd2008-05-01 04:57:01 -03004065
Steven Toth3935c252008-05-01 05:45:44 -03004066 if ( controlNum == state->CH_Ctrl[i].Ctrl_Num ) {
4067
4068 Count = 1;
4069 RegNum[0] = (u8)(state->CH_Ctrl[i].addr[0]);
4070
4071 for (k = 1; k < state->CH_Ctrl[i].size; k++) {
4072
4073 for (j= 0; j<Count; j++) {
4074
4075 if (state->CH_Ctrl[i].addr[k] != RegNum[j]) {
4076
4077 Count ++;
4078 RegNum[Count-1] = (u8)(state->CH_Ctrl[i].addr[k]);
4079
Steven Toth52c99bd2008-05-01 04:57:01 -03004080 }
4081 }
4082 }
Steven Toth3935c252008-05-01 05:45:44 -03004083 *count = Count;
4084 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004085 }
4086 }
4087#ifdef _MXL_INTERNAL
Steven Toth3935c252008-05-01 05:45:44 -03004088 for (i = 0; i < state->MXL_Ctrl_Num ; i++) {
Steven Toth52c99bd2008-05-01 04:57:01 -03004089
Steven Toth3935c252008-05-01 05:45:44 -03004090 if ( controlNum == state->MXL_Ctrl[i].Ctrl_Num ) {
4091
4092 Count = 1;
4093 RegNum[0] = (u8)(state->MXL_Ctrl[i].addr[0]);
4094
4095 for (k = 1; k < state->MXL_Ctrl[i].size; k++) {
4096
4097 for (j = 0; j<Count; j++) {
4098
4099 if (state->MXL_Ctrl[i].addr[k] != RegNum[j]) {
4100
4101 Count ++;
4102 RegNum[Count-1] = (u8)state->MXL_Ctrl[i].addr[k];
4103
Steven Toth52c99bd2008-05-01 04:57:01 -03004104 }
4105 }
4106 }
Steven Toth3935c252008-05-01 05:45:44 -03004107 *count = Count;
4108 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004109 }
4110 }
4111#endif
Steven Toth3935c252008-05-01 05:45:44 -03004112 *count = 0;
4113 return 1;
Steven Toth52c99bd2008-05-01 04:57:01 -03004114}
4115
4116///////////////////////////////////////////////////////////////////////////////
4117// //
4118// Function: MXL_RegWriteBit //
4119// //
4120// Description: Write a register for specified register address, //
4121// register bit and register bit value //
4122// //
4123// Globals: //
4124// NONE //
4125// //
4126// Inputs: //
4127// Tuner_struct : structure defined at higher level //
4128// address : register address //
Steven Toth3935c252008-05-01 05:45:44 -03004129// bit : register bit number //
Steven Totha8214d42008-05-01 05:02:58 -03004130// bitVal : register bit value //
Steven Toth52c99bd2008-05-01 04:57:01 -03004131// //
4132// Outputs: //
4133// NONE //
4134// //
4135// Return: //
4136// NONE //
4137// //
4138///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03004139// DONE
4140void MXL_RegWriteBit(struct dvb_frontend *fe, u8 address, u8 bit, u8 bitVal)
Steven Toth52c99bd2008-05-01 04:57:01 -03004141{
Steven Toth3935c252008-05-01 05:45:44 -03004142 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Toth52c99bd2008-05-01 04:57:01 -03004143 int i ;
4144
Steven Totha8214d42008-05-01 05:02:58 -03004145 const u8 AND_MAP[8] = {
Steven Toth52c99bd2008-05-01 04:57:01 -03004146 0xFE, 0xFD, 0xFB, 0xF7,
4147 0xEF, 0xDF, 0xBF, 0x7F } ;
4148
Steven Totha8214d42008-05-01 05:02:58 -03004149 const u8 OR_MAP[8] = {
Steven Toth52c99bd2008-05-01 04:57:01 -03004150 0x01, 0x02, 0x04, 0x08,
4151 0x10, 0x20, 0x40, 0x80 } ;
4152
Steven Toth3935c252008-05-01 05:45:44 -03004153 for (i = 0; i < state->TunerRegs_Num; i++) {
4154 if (state->TunerRegs[i].Reg_Num == address) {
Steven Toth52c99bd2008-05-01 04:57:01 -03004155 if (bitVal)
Steven Toth3935c252008-05-01 05:45:44 -03004156 state->TunerRegs[i].Reg_Val |= OR_MAP[bit];
Steven Toth52c99bd2008-05-01 04:57:01 -03004157 else
Steven Toth3935c252008-05-01 05:45:44 -03004158 state->TunerRegs[i].Reg_Val &= AND_MAP[bit];
Steven Toth52c99bd2008-05-01 04:57:01 -03004159 break ;
4160 }
4161 }
Steven Toth3935c252008-05-01 05:45:44 -03004162}
Steven Toth52c99bd2008-05-01 04:57:01 -03004163
4164///////////////////////////////////////////////////////////////////////////////
4165// //
4166// Function: MXL_Ceiling //
4167// //
4168// Description: Complete to closest increment of resolution //
4169// //
4170// Globals: //
4171// NONE //
4172// //
4173// Functions used: //
4174// NONE //
4175// //
4176// Inputs: //
4177// value : Input number to compute //
4178// resolution : Increment step //
4179// //
4180// Outputs: //
4181// NONE //
4182// //
4183// Return: //
4184// Computed value //
4185// //
4186///////////////////////////////////////////////////////////////////////////////
Steven Toth3935c252008-05-01 05:45:44 -03004187// DONE
4188u32 MXL_Ceiling(u32 value, u32 resolution)
Steven Toth52c99bd2008-05-01 04:57:01 -03004189{
Steven Toth3935c252008-05-01 05:45:44 -03004190 return (value/resolution + (value % resolution > 0 ? 1 : 0));
4191}
Steven Toth52c99bd2008-05-01 04:57:01 -03004192
4193//
4194// Retrieve the Initialzation Registers
4195//
Steven Toth3935c252008-05-01 05:45:44 -03004196// DONE
4197u16 MXL_GetInitRegister(struct dvb_frontend *fe, u8 * RegNum, u8 *RegVal, int *count)
Steven Toth52c99bd2008-05-01 04:57:01 -03004198{
Steven Toth3935c252008-05-01 05:45:44 -03004199 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03004200 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004201 int i ;
4202
Steven Toth3935c252008-05-01 05:45:44 -03004203 u8 RegAddr[] = {
4204 11, 12, 13, 22, 32, 43, 44, 53, 56, 59, 73,
4205 76, 77, 91, 134, 135, 137, 147,
4206 156, 166, 167, 168, 25 };
Steven Toth52c99bd2008-05-01 04:57:01 -03004207
Steven Toth3935c252008-05-01 05:45:44 -03004208 *count = sizeof(RegAddr) / sizeof(u8);
Steven Toth52c99bd2008-05-01 04:57:01 -03004209
Steven Toth3935c252008-05-01 05:45:44 -03004210 status += MXL_BlockInit(fe);
4211
4212 for (i = 0 ; i < *count; i++) {
4213 RegNum[i] = RegAddr[i];
4214 status += MXL_RegRead(fe, RegNum[i], &RegVal[i]);
Steven Toth52c99bd2008-05-01 04:57:01 -03004215 }
4216
Steven Toth3935c252008-05-01 05:45:44 -03004217 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004218}
4219
Steven Toth3935c252008-05-01 05:45:44 -03004220// DONE
4221u16 MXL_GetCHRegister(struct dvb_frontend *fe, u8 * RegNum, u8 *RegVal, int *count)
Steven Toth52c99bd2008-05-01 04:57:01 -03004222{
Steven Toth3935c252008-05-01 05:45:44 -03004223 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03004224 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004225 int i ;
4226
4227//add 77, 166, 167, 168 register for 2.6.12
4228#ifdef _MXL_PRODUCTION
Steven Totha8214d42008-05-01 05:02:58 -03004229 u8 RegAddr[] = {14, 15, 16, 17, 22, 43, 65, 68, 69, 70, 73, 92, 93, 106,
4230 107, 108, 109, 110, 111, 112, 136, 138, 149, 77, 166, 167, 168 } ;
Steven Toth52c99bd2008-05-01 04:57:01 -03004231#else
Steven Totha8214d42008-05-01 05:02:58 -03004232 u8 RegAddr[] = {14, 15, 16, 17, 22, 43, 68, 69, 70, 73, 92, 93, 106,
4233 107, 108, 109, 110, 111, 112, 136, 138, 149, 77, 166, 167, 168 } ;
4234 //u8 RegAddr[171];
Steven Toth52c99bd2008-05-01 04:57:01 -03004235 //for (i=0; i<=170; i++)
4236 // RegAddr[i] = i;
4237#endif
4238
Steven Toth3935c252008-05-01 05:45:44 -03004239 *count = sizeof(RegAddr) / sizeof(u8);
Steven Toth52c99bd2008-05-01 04:57:01 -03004240
Steven Toth3935c252008-05-01 05:45:44 -03004241 for (i = 0 ; i < *count; i++) {
4242 RegNum[i] = RegAddr[i];
4243 status += MXL_RegRead(fe, RegNum[i], &RegVal[i]);
Steven Toth52c99bd2008-05-01 04:57:01 -03004244 }
4245
Steven Toth3935c252008-05-01 05:45:44 -03004246 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004247}
4248
Steven Toth3935c252008-05-01 05:45:44 -03004249// DONE
4250u16 MXL_GetCHRegister_ZeroIF(struct dvb_frontend *fe, u8 * RegNum, u8 *RegVal, int *count)
Steven Toth52c99bd2008-05-01 04:57:01 -03004251{
Steven Toth3935c252008-05-01 05:45:44 -03004252 struct mxl5005s_state *state = fe->demodulator_priv;
4253 u16 status = 0;
4254 int i;
Steven Toth52c99bd2008-05-01 04:57:01 -03004255
Steven Toth3935c252008-05-01 05:45:44 -03004256 u8 RegAddr[] = {43, 136};
Steven Toth52c99bd2008-05-01 04:57:01 -03004257
Steven Toth3935c252008-05-01 05:45:44 -03004258 *count = sizeof(RegAddr) / sizeof(u8);
Steven Toth52c99bd2008-05-01 04:57:01 -03004259
Steven Toth3935c252008-05-01 05:45:44 -03004260 for (i = 0; i < *count; i++) {
4261 RegNum[i] = RegAddr[i];
4262 status += MXL_RegRead(fe, RegNum[i], &RegVal[i]);
Steven Toth52c99bd2008-05-01 04:57:01 -03004263 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004264
Steven Toth3935c252008-05-01 05:45:44 -03004265 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004266}
4267
Steven Toth3935c252008-05-01 05:45:44 -03004268// DONE
4269u16 MXL_GetCHRegister_LowIF(struct dvb_frontend *fe, u8 * RegNum, u8 *RegVal, int *count)
Steven Toth52c99bd2008-05-01 04:57:01 -03004270{
Steven Toth3935c252008-05-01 05:45:44 -03004271 struct mxl5005s_state *state = fe->demodulator_priv;
4272 u16 status = 0;
4273 int i;
Steven Toth52c99bd2008-05-01 04:57:01 -03004274
Steven Toth3935c252008-05-01 05:45:44 -03004275 u8 RegAddr[] = { 138 };
Steven Toth52c99bd2008-05-01 04:57:01 -03004276
Steven Toth3935c252008-05-01 05:45:44 -03004277 *count = sizeof(RegAddr) / sizeof(u8);
Steven Toth52c99bd2008-05-01 04:57:01 -03004278
Steven Toth3935c252008-05-01 05:45:44 -03004279 for (i = 0; i < *count; i++) {
4280 RegNum[i] = RegAddr[i];
4281 status += MXL_RegRead(fe, RegNum[i], &RegVal[i]);
Steven Toth52c99bd2008-05-01 04:57:01 -03004282 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004283
Steven Toth3935c252008-05-01 05:45:44 -03004284 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004285}
4286
Steven Toth3935c252008-05-01 05:45:44 -03004287// DONE
Steven Totha8214d42008-05-01 05:02:58 -03004288u16 MXL_GetMasterControl(u8 *MasterReg, int state)
Steven Toth52c99bd2008-05-01 04:57:01 -03004289{
Steven Toth3935c252008-05-01 05:45:44 -03004290 if (state == 1) /* Load_Start */
4291 *MasterReg = 0xF3;
4292 if (state == 2) /* Power_Down */
4293 *MasterReg = 0x41;
4294 if (state == 3) /* Synth_Reset */
4295 *MasterReg = 0xB1;
4296 if (state == 4) /* Seq_Off */
4297 *MasterReg = 0xF1;
Steven Toth52c99bd2008-05-01 04:57:01 -03004298
Steven Toth3935c252008-05-01 05:45:44 -03004299 return 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004300}
4301
4302#ifdef _MXL_PRODUCTION
Steven Toth3935c252008-05-01 05:45:44 -03004303u16 MXL_VCORange_Test(struct dvb_frontend *fe, int VCO_Range)
Steven Toth52c99bd2008-05-01 04:57:01 -03004304{
Steven Toth3935c252008-05-01 05:45:44 -03004305 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03004306 u16 status = 0 ;
Steven Toth52c99bd2008-05-01 04:57:01 -03004307
Steven Totha8214d42008-05-01 05:02:58 -03004308 if (VCO_Range == 1) {
Steven Toth3935c252008-05-01 05:45:44 -03004309 status += MXL_ControlWrite(fe, RFSYN_EN_DIV, 1);
4310 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0);
4311 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
4312 status += MXL_ControlWrite(fe, RFSYN_DIVM, 1);
4313 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1);
4314 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
4315 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0);
4316 if (state->Mode == 0 && state->IF_Mode == 1) /* Analog Low IF Mode */ {
4317 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4318 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4319 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 56);
4320 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 180224);
Steven Totha8214d42008-05-01 05:02:58 -03004321 }
Steven Toth3935c252008-05-01 05:45:44 -03004322 if (state->Mode == 0 && state->IF_Mode == 0) /* Analog Zero IF Mode */ {
4323 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4324 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4325 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 56);
4326 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 222822);
Steven Totha8214d42008-05-01 05:02:58 -03004327 }
Steven Toth3935c252008-05-01 05:45:44 -03004328 if (state->Mode == 1) /* Digital Mode */ {
4329 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4330 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4331 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 56);
4332 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 229376);
Steven Totha8214d42008-05-01 05:02:58 -03004333 }
4334 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004335
Steven Totha8214d42008-05-01 05:02:58 -03004336 if (VCO_Range == 2) {
Steven Toth3935c252008-05-01 05:45:44 -03004337 status += MXL_ControlWrite(fe, RFSYN_EN_DIV, 1);
4338 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0);
4339 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
4340 status += MXL_ControlWrite(fe, RFSYN_DIVM, 1);
4341 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1);
4342 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
4343 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0);
4344 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4345 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4346 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 41);
4347 if (state->Mode == 0 && state->IF_Mode == 1) /* Analog Low IF Mode */ {
4348 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4349 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4350 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 42);
4351 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 206438);
Steven Totha8214d42008-05-01 05:02:58 -03004352 }
Steven Toth3935c252008-05-01 05:45:44 -03004353 if (state->Mode == 0 && state->IF_Mode == 0) /* Analog Zero IF Mode */ {
4354 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4355 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4356 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 42);
4357 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 206438);
Steven Totha8214d42008-05-01 05:02:58 -03004358 }
Steven Toth3935c252008-05-01 05:45:44 -03004359 if (state->Mode == 1) /* Digital Mode */ {
4360 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 1);
4361 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4362 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 41);
4363 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 16384);
Steven Totha8214d42008-05-01 05:02:58 -03004364 }
4365 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004366
Steven Totha8214d42008-05-01 05:02:58 -03004367 if (VCO_Range == 3) {
Steven Toth3935c252008-05-01 05:45:44 -03004368 status += MXL_ControlWrite(fe, RFSYN_EN_DIV, 1);
4369 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0);
4370 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
4371 status += MXL_ControlWrite(fe, RFSYN_DIVM, 1);
4372 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1);
4373 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
4374 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0);
4375 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4376 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4377 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 42);
4378 if (state->Mode == 0 && state->IF_Mode == 1) /* Analog Low IF Mode */ {
4379 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4380 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4381 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 44);
4382 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 173670);
Steven Totha8214d42008-05-01 05:02:58 -03004383 }
Steven Toth3935c252008-05-01 05:45:44 -03004384 if (state->Mode == 0 && state->IF_Mode == 0) /* Analog Zero IF Mode */ {
4385 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4386 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4387 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 44);
4388 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 173670);
Steven Totha8214d42008-05-01 05:02:58 -03004389 }
Steven Toth3935c252008-05-01 05:45:44 -03004390 if (state->Mode == 1) /* Digital Mode */ {
4391 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4392 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 8);
4393 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 42);
4394 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 245760);
Steven Totha8214d42008-05-01 05:02:58 -03004395 }
4396 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004397
Steven Totha8214d42008-05-01 05:02:58 -03004398 if (VCO_Range == 4) {
Steven Toth3935c252008-05-01 05:45:44 -03004399 status += MXL_ControlWrite(fe, RFSYN_EN_DIV, 1);
4400 status += MXL_ControlWrite(fe, RFSYN_EN_OUTMUX, 0);
4401 status += MXL_ControlWrite(fe, RFSYN_SEL_DIVM, 0);
4402 status += MXL_ControlWrite(fe, RFSYN_DIVM, 1);
4403 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_OUT, 1);
4404 status += MXL_ControlWrite(fe, RFSYN_RF_DIV_BIAS, 1);
4405 status += MXL_ControlWrite(fe, DN_SEL_FREQ, 0);
4406 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4407 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4408 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 27);
4409 if (state->Mode == 0 && state->IF_Mode == 1) /* Analog Low IF Mode */ {
4410 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4411 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4412 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 27);
4413 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 206438);
Steven Totha8214d42008-05-01 05:02:58 -03004414 }
Steven Toth3935c252008-05-01 05:45:44 -03004415 if (state->Mode == 0 && state->IF_Mode == 0) /* Analog Zero IF Mode */ {
4416 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4417 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4418 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 27);
4419 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 206438);
Steven Totha8214d42008-05-01 05:02:58 -03004420 }
Steven Toth3935c252008-05-01 05:45:44 -03004421 if (state->Mode == 1) /* Digital Mode */ {
4422 status += MXL_ControlWrite(fe, RFSYN_SEL_VCO_HI, 0);
4423 status += MXL_ControlWrite(fe, RFSYN_VCO_BIAS, 40);
4424 status += MXL_ControlWrite(fe, CHCAL_INT_MOD_RF, 27);
4425 status += MXL_ControlWrite(fe, CHCAL_FRAC_MOD_RF, 212992);
Steven Totha8214d42008-05-01 05:02:58 -03004426 }
4427 }
Steven Toth52c99bd2008-05-01 04:57:01 -03004428
Steven Totha8214d42008-05-01 05:02:58 -03004429 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004430}
4431
Steven Toth3935c252008-05-01 05:45:44 -03004432// DONE
4433u16 MXL_Hystersis_Test(struct dvb_frontend *fe, int Hystersis)
Steven Toth52c99bd2008-05-01 04:57:01 -03004434{
Steven Toth3935c252008-05-01 05:45:44 -03004435 struct mxl5005s_state *state = fe->demodulator_priv;
Steven Totha8214d42008-05-01 05:02:58 -03004436 u16 status = 0;
Steven Toth52c99bd2008-05-01 04:57:01 -03004437
4438 if (Hystersis == 1)
Steven Toth3935c252008-05-01 05:45:44 -03004439 status += MXL_ControlWrite(fe, DN_BYPASS_AGC_I2C, 1);
Steven Toth52c99bd2008-05-01 04:57:01 -03004440
Steven Totha8214d42008-05-01 05:02:58 -03004441 return status;
Steven Toth52c99bd2008-05-01 04:57:01 -03004442}
Steven Totha8214d42008-05-01 05:02:58 -03004443
Steven Toth52c99bd2008-05-01 04:57:01 -03004444#endif
4445