xref: /utopia/UTPA2-700.0.x/modules/vif/hal/M7821/vif/halVIF.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi #ifndef _HALVIF_C_
95*53ee8cc1Swenshuai.xi #define _HALVIF_C_
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
98*53ee8cc1Swenshuai.xi //  Include Files
99*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
100*53ee8cc1Swenshuai.xi // Common Definition
101*53ee8cc1Swenshuai.xi #include "MsCommon.h"
102*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
103*53ee8cc1Swenshuai.xi #include "MsOS.h"
104*53ee8cc1Swenshuai.xi #include "MsTypes.h"
105*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi // Internal Definition
108*53ee8cc1Swenshuai.xi #include "regVIF.h"
109*53ee8cc1Swenshuai.xi #include "VIF.h"
110*53ee8cc1Swenshuai.xi #include "halVIF.h"
111*53ee8cc1Swenshuai.xi #include "halVIF_Customer.h"
112*53ee8cc1Swenshuai.xi #include "asmCPU.h"
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi //  Driver Compiler Options
115*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
116*53ee8cc1Swenshuai.xi #define HALVIFDBG(x)          //x
117*53ee8cc1Swenshuai.xi #define HALVIFDBG_BIT       (DBB1_REG_BASE+0x06)  // Bit 4~7
118*53ee8cc1Swenshuai.xi #define HALVIFDBG1_BIT       (DBB1_REG_BASE+0x04)  // Bit 1
119*53ee8cc1Swenshuai.xi #define HALVIFDBG2_BIT     (DBB1_REG_BASE+0xF6)  // Bit 0~1
120*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi //  extern function
122*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
123*53ee8cc1Swenshuai.xi #define HAL_VIF_Delay1ms(x)                MAsm_CPU_DelayMs(x)
124*53ee8cc1Swenshuai.xi #define HAL_VIF_Delay1us(x)                  MAsm_CPU_DelayUs(x)
125*53ee8cc1Swenshuai.xi #define HAL_VIF_GetSystemTime()                     MsOS_GetSystemTime()
126*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
127*53ee8cc1Swenshuai.xi //  Local Defines
128*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
129*53ee8cc1Swenshuai.xi #define __CHIP_VERSION 0x1ECF
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi #ifndef _END_OF_TBL_
132*53ee8cc1Swenshuai.xi #define _END_OF_TBL_        0xFFFF
133*53ee8cc1Swenshuai.xi #endif
134*53ee8cc1Swenshuai.xi 
135*53ee8cc1Swenshuai.xi #define msRead2Bytes(x)                 RIU_Read2Byte(x)
136*53ee8cc1Swenshuai.xi #define msReadByte(x)                   RIU_ReadByte(x)
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi // Base address should be initial.
139*53ee8cc1Swenshuai.xi #if defined (__aeon__)            // Non-OS
140*53ee8cc1Swenshuai.xi #define BASEADDR_RIU 0xA0000000UL
141*53ee8cc1Swenshuai.xi #else                                       // ecos
142*53ee8cc1Swenshuai.xi     #define BASEADDR_RIU 0xBF800000UL
143*53ee8cc1Swenshuai.xi #endif
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi #define RIU_MACRO_START     do {
146*53ee8cc1Swenshuai.xi #define RIU_MACRO_END       } while (0)
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi // Address bus of RIU is 16 bits.
149*53ee8cc1Swenshuai.xi #define RIU_READ_BYTE(addr)         ( READ_BYTE( _hal_VIF.virtVIFBaseAddr + (addr) ) )
150*53ee8cc1Swenshuai.xi #define RIU_READ_2BYTE(addr)        ( READ_WORD( _hal_VIF.virtVIFBaseAddr + (addr) ) )
151*53ee8cc1Swenshuai.xi #define RIU_WRITE_BYTE(addr, val)   { WRITE_BYTE( _hal_VIF.virtVIFBaseAddr + (addr), val) }
152*53ee8cc1Swenshuai.xi #define RIU_WRITE_2BYTE(addr, val)  { WRITE_WORD( _hal_VIF.virtVIFBaseAddr + (addr), val) }
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi // Standard Form
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi #define RIU_ReadByte( u32Reg )   RIU_READ_BYTE(((u32Reg) << 1) - ((u32Reg) & 1))
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi #define RIU_Read2Byte( u32Reg )    (RIU_READ_2BYTE((u32Reg)<<1))
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #define RIU_ReadRegBit( u32Reg, u8Mask )   (RIU_READ_BYTE(((u32Reg)<<1) - ((u32Reg) & 1)) & (u8Mask))
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi #define RIU_WriteRegBit( u32Reg, bEnable, u8Mask )                                     \
163*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                     \
164*53ee8cc1Swenshuai.xi     RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) , (bEnable) ? (RIU_READ_BYTE(  (((u32Reg) <<1) - ((u32Reg) & 1))  ) |  (u8Mask)) :                           \
165*53ee8cc1Swenshuai.xi                                 (RIU_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) & ~(u8Mask)));                            \
166*53ee8cc1Swenshuai.xi     RIU_MACRO_END
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi #define RIU_WriteByte( u32Reg, u8Val )                                                  \
169*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                                     \
170*53ee8cc1Swenshuai.xi     RIU_WRITE_BYTE(((u32Reg) << 1) - ((u32Reg) & 1), u8Val);            \
171*53ee8cc1Swenshuai.xi     RIU_MACRO_END
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi #define RIU_Write2Byte( u32Reg, u16Val )                                               \
174*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                                     \
175*53ee8cc1Swenshuai.xi     if ( ((u32Reg) & 0x01) )                                                                            \
176*53ee8cc1Swenshuai.xi     {                                                                                                                \
177*53ee8cc1Swenshuai.xi         RIU_WRITE_BYTE(((u32Reg) << 1) - 1, (MS_U8)((u16Val)));                                     \
178*53ee8cc1Swenshuai.xi         RIU_WRITE_BYTE(((u32Reg) + 1) << 1, (MS_U8)((u16Val) >> 8));                             \
179*53ee8cc1Swenshuai.xi     }                                                                               \
180*53ee8cc1Swenshuai.xi     else                                                                            \
181*53ee8cc1Swenshuai.xi     {                                                                               \
182*53ee8cc1Swenshuai.xi         RIU_WRITE_2BYTE( ((u32Reg)<<1) ,  u16Val);                                                       \
183*53ee8cc1Swenshuai.xi     }                                                                               \
184*53ee8cc1Swenshuai.xi     RIU_MACRO_END
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi #define RIU_WriteByteMask( u32Reg, u8Val, u8Msk )                                      \
187*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                     \
188*53ee8cc1Swenshuai.xi     RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)), (RIU_READ_BYTE((((u32Reg) <<1) - ((u32Reg) & 1))) & ~(u8Msk)) | ((u8Val) & (u8Msk)));                   \
189*53ee8cc1Swenshuai.xi     RIU_MACRO_END
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi // Address bus of RIU is 16 bits for PM bank.
192*53ee8cc1Swenshuai.xi #define PM_RIU_READ_BYTE(addr)         ( READ_BYTE(virtPMBank + (addr) ) )
193*53ee8cc1Swenshuai.xi #define PM_RIU_READ_2BYTE(addr)        ( READ_WORD(virtPMBank+ (addr) ) )
194*53ee8cc1Swenshuai.xi #define PM_RIU_WRITE_BYTE(addr, val)   { WRITE_BYTE(virtPMBank + (addr), val) }
195*53ee8cc1Swenshuai.xi #define PM_RIU_WRITE_2BYTE(addr, val)  { WRITE_WORD(virtPMBank + (addr), val) }
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi // Standard Form for PM bank
198*53ee8cc1Swenshuai.xi #define PM_RIU_ReadByte( u32Reg )   PM_RIU_READ_BYTE(((u32Reg) << 1) - ((u32Reg) & 1))
199*53ee8cc1Swenshuai.xi 
200*53ee8cc1Swenshuai.xi #define PM_RIU_Read2Byte( u32Reg )    (PM_RIU_READ_2BYTE((u32Reg)<<1))
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi #define PM_RIU_ReadRegBit( u32Reg, u8Mask )   (PM_RIU_READ_BYTE(((u32Reg)<<1) - ((u32Reg) & 1)) & (u8Mask))
203*53ee8cc1Swenshuai.xi 
204*53ee8cc1Swenshuai.xi #define PM_RIU_WriteRegBit( u32Reg, bEnable, u8Mask )                                     \
205*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                     \
206*53ee8cc1Swenshuai.xi     PM_RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) , (bEnable) ? (PM_RIU_READ_BYTE(  (((u32Reg) <<1) - ((u32Reg) & 1))  ) |  (u8Mask)) :                           \
207*53ee8cc1Swenshuai.xi                                 (PM_RIU_READ_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)) ) & ~(u8Mask)));                            \
208*53ee8cc1Swenshuai.xi     RIU_MACRO_END
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi #define PM_RIU_WriteByte( u32Reg, u8Val )                                                  \
211*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                                     \
212*53ee8cc1Swenshuai.xi     PM_RIU_WRITE_BYTE(((u32Reg) << 1) - ((u32Reg) & 1), u8Val);            \
213*53ee8cc1Swenshuai.xi     RIU_MACRO_END
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi #define PM_RIU_Write2Byte( u32Reg, u16Val )                                               \
216*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                                     \
217*53ee8cc1Swenshuai.xi     if ( ((u32Reg) & 0x01) )                                                                            \
218*53ee8cc1Swenshuai.xi     {                                                                                                                \
219*53ee8cc1Swenshuai.xi         PM_RIU_WRITE_BYTE(((u32Reg) << 1) - 1, (MS_U8)((u16Val)));                                     \
220*53ee8cc1Swenshuai.xi         PM_RIU_WRITE_BYTE(((u32Reg) + 1) << 1, (MS_U8)((u16Val) >> 8));                             \
221*53ee8cc1Swenshuai.xi     }                                                                               \
222*53ee8cc1Swenshuai.xi     else                                                                            \
223*53ee8cc1Swenshuai.xi     {                                                                               \
224*53ee8cc1Swenshuai.xi         PM_RIU_WRITE_2BYTE( ((u32Reg)<<1) ,  u16Val);                                                       \
225*53ee8cc1Swenshuai.xi     }                                                                               \
226*53ee8cc1Swenshuai.xi     RIU_MACRO_END
227*53ee8cc1Swenshuai.xi 
228*53ee8cc1Swenshuai.xi #define PM_RIU_WriteByteMask( u32Reg, u8Val, u8Msk )                                      \
229*53ee8cc1Swenshuai.xi     RIU_MACRO_START                                                                     \
230*53ee8cc1Swenshuai.xi     PM_RIU_WRITE_BYTE( (((u32Reg) <<1) - ((u32Reg) & 1)), (PM_RIU_READ_BYTE((((u32Reg) <<1) - ((u32Reg) & 1))) & ~(u8Msk)) | ((u8Val) & (u8Msk)));                   \
231*53ee8cc1Swenshuai.xi     RIU_MACRO_END
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
234*53ee8cc1Swenshuai.xi //  Local Structures
235*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
236*53ee8cc1Swenshuai.xi typedef struct
237*53ee8cc1Swenshuai.xi {
238*53ee8cc1Swenshuai.xi     MS_VIRT virtVIFBaseAddr;
239*53ee8cc1Swenshuai.xi     BOOL bBaseAddrInitialized;
240*53ee8cc1Swenshuai.xi } hal_VIF_t;
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
243*53ee8cc1Swenshuai.xi //  Local Variables
244*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
245*53ee8cc1Swenshuai.xi static hal_VIF_t _hal_VIF ={BASEADDR_RIU, 0};
246*53ee8cc1Swenshuai.xi extern VIFInitialIn VIFInitialIn_inst;
247*53ee8cc1Swenshuai.xi //extern VIFSOS33 sVIFSOS33;
248*53ee8cc1Swenshuai.xi extern BOOL bEnableUsrSteadyAgcK;
249*53ee8cc1Swenshuai.xi extern U8 u8UsrSteadyAgcK;
250*53ee8cc1Swenshuai.xi extern BOOL bEnableUsrNonSteadyAgcK;
251*53ee8cc1Swenshuai.xi extern U8 u8UsrNonSteadyAgcK;
252*53ee8cc1Swenshuai.xi /////////////////////////////////////////////////////
253*53ee8cc1Swenshuai.xi BOOL AGC_Change_Index; //for Serious ACI Parameter
254*53ee8cc1Swenshuai.xi U16 SeriousACI_Index = 0;
255*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////
256*53ee8cc1Swenshuai.xi BYTE g_ucVifStatusStep;
257*53ee8cc1Swenshuai.xi BOOL g_bCheckIFFreq;          // 0: 38.9 MHz (PAL/SECAM L); 1: 33.9 MHz (SECAM L')
258*53ee8cc1Swenshuai.xi BOOL g_VifHWKpKiFlag;
259*53ee8cc1Swenshuai.xi BYTE g_VifCrKp;
260*53ee8cc1Swenshuai.xi BYTE g_VifCrKi;
261*53ee8cc1Swenshuai.xi BYTE g_VifCrKpKiAdjLoopCnt;
262*53ee8cc1Swenshuai.xi BOOL g_bCheckModulationType;  // 0: negative; 1: positive
263*53ee8cc1Swenshuai.xi BYTE g_ucVifSoundSystemType;
264*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////
265*53ee8cc1Swenshuai.xi 
266*53ee8cc1Swenshuai.xi #define VIF_IS_ADC_48MHz   1    // 0:144MHz ; 1:48MHz
267*53ee8cc1Swenshuai.xi #define VIF_IS_EQ_IIR           0   // 0:FIR ; 1:IIR
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
270*53ee8cc1Swenshuai.xi //  Local code data
271*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
272*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_1dB[]=
273*53ee8cc1Swenshuai.xi {
274*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xc1},  // SOS21 peaking
275*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
276*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x87},
277*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
278*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x08},
279*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
280*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x3f},
281*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
282*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0x70},
283*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
284*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
285*53ee8cc1Swenshuai.xi };
286*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_2dB[]=
287*53ee8cc1Swenshuai.xi {
288*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xa4},  // SOS21 peaking
289*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
290*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x8e},
291*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
292*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x12},
293*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
294*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x5c},
295*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
296*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0x60},
297*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
298*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
299*53ee8cc1Swenshuai.xi };
300*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_3dB[]=
301*53ee8cc1Swenshuai.xi {
302*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xc1},  // SOS21 peaking
303*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
304*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x87},
305*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
306*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x1c},
307*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
308*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x3f},
309*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
310*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0x5d},
311*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
312*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
313*53ee8cc1Swenshuai.xi };
314*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_4dB[]=
315*53ee8cc1Swenshuai.xi {
316*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xc1},  // SOS21 peaking
317*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
318*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x87},
319*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
320*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x28},
321*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
322*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x3f},
323*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
324*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0x51},
325*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
326*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
327*53ee8cc1Swenshuai.xi };
328*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_3dB_VSB[]=
329*53ee8cc1Swenshuai.xi {
330*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xf5},  // SOS21 peaking
331*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
332*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x23},
333*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
334*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x07},
335*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
336*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x0b},
337*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
338*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0xd5},
339*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
340*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
341*53ee8cc1Swenshuai.xi };
342*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_4dB_VSB[]=
343*53ee8cc1Swenshuai.xi {
344*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xf5},  // SOS21 peaking
345*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
346*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x23},
347*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
348*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x0a},
349*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
350*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x0b},
351*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
352*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0xd2},
353*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
354*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
355*53ee8cc1Swenshuai.xi };
356*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_5dB_VSB[]=
357*53ee8cc1Swenshuai.xi {
358*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0xf5},  // SOS21 peaking
359*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x02},
360*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x23},
361*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x06},
362*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x0e},
363*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x02},
364*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x0b},
365*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x05},
366*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0xcf},
367*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x01},
368*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
369*53ee8cc1Swenshuai.xi };
370*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_PEAKING_NULL[]=
371*53ee8cc1Swenshuai.xi {
372*53ee8cc1Swenshuai.xi     {SOS21_C0_L,0x00},  // SOS21
373*53ee8cc1Swenshuai.xi     {SOS21_C0_H,0x00},
374*53ee8cc1Swenshuai.xi     {SOS21_C1_L,0x00},
375*53ee8cc1Swenshuai.xi     {SOS21_C1_H,0x00},
376*53ee8cc1Swenshuai.xi     {SOS21_C2_L,0x00},
377*53ee8cc1Swenshuai.xi     {SOS21_C2_H,0x00},
378*53ee8cc1Swenshuai.xi     {SOS21_C3_L,0x00},
379*53ee8cc1Swenshuai.xi     {SOS21_C3_H,0x00},
380*53ee8cc1Swenshuai.xi     {SOS21_C4_L,0x00},
381*53ee8cc1Swenshuai.xi     {SOS21_C4_H,0x02},
382*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
383*53ee8cc1Swenshuai.xi };
384*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_YCDelay_VSB[]=
385*53ee8cc1Swenshuai.xi {
386*53ee8cc1Swenshuai.xi     {SOS22_C0_L,0x15},  // SOS22 Y/C delay
387*53ee8cc1Swenshuai.xi     {SOS22_C0_H,0x02},
388*53ee8cc1Swenshuai.xi     {SOS22_C1_L,0x84},
389*53ee8cc1Swenshuai.xi     {SOS22_C1_H,0x06},
390*53ee8cc1Swenshuai.xi     {SOS22_C2_L,0x7c},
391*53ee8cc1Swenshuai.xi     {SOS22_C2_H,0x01},
392*53ee8cc1Swenshuai.xi     {SOS22_C3_L,0xeb},
393*53ee8cc1Swenshuai.xi     {SOS22_C3_H,0x05},
394*53ee8cc1Swenshuai.xi     {SOS22_C4_L,0x00},
395*53ee8cc1Swenshuai.xi     {SOS22_C4_H,0x02},
396*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
397*53ee8cc1Swenshuai.xi };
398*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_YCDelay_NULL[]=
399*53ee8cc1Swenshuai.xi {
400*53ee8cc1Swenshuai.xi     {SOS22_C0_L,0x00},  // SOS22
401*53ee8cc1Swenshuai.xi     {SOS22_C0_H,0x00},
402*53ee8cc1Swenshuai.xi     {SOS22_C1_L,0x00},
403*53ee8cc1Swenshuai.xi     {SOS22_C1_H,0x00},
404*53ee8cc1Swenshuai.xi     {SOS22_C2_L,0x00},
405*53ee8cc1Swenshuai.xi     {SOS22_C2_H,0x00},
406*53ee8cc1Swenshuai.xi     {SOS22_C3_L,0x00},
407*53ee8cc1Swenshuai.xi     {SOS22_C3_H,0x00},
408*53ee8cc1Swenshuai.xi     {SOS22_C4_L,0x00},
409*53ee8cc1Swenshuai.xi     {SOS22_C4_H,0x02},
410*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
411*53ee8cc1Swenshuai.xi };
412*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_Low_R[]=
413*53ee8cc1Swenshuai.xi {
414*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0xcc},  // SOS31
415*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x00},
416*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0x6c},
417*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x07},
418*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x94},
419*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x00},
420*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x34},
421*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x07},
422*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
423*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
424*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xb4},  // SOS32
425*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
426*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0xf8},
427*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x06},
428*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0x08},
429*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x01},
430*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x4c},
431*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
432*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
433*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
434*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
435*53ee8cc1Swenshuai.xi };
436*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_Low_L[]=
437*53ee8cc1Swenshuai.xi {
438*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0x3c},  // SOS31
439*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x02},
440*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0xb8},
441*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x06},
442*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x48},
443*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x01},
444*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0xc4},
445*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x05},
446*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
447*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
448*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xd9},  // SOS32
449*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
450*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0xf7},
451*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x06},
452*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0x0a},
453*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x01},
454*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x28},
455*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
456*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
457*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
458*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
459*53ee8cc1Swenshuai.xi };
460*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_High_R[]=
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0xcc},  // SOS31
463*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x00},
464*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0x6c},
465*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x07},
466*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x94},
467*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x00},
468*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x34},
469*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x07},
470*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
471*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
472*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xc7},  // SOS32
473*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
474*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0xd8},
475*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x06},
476*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0x28},
477*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x01},
478*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x39},
479*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
480*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
481*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
482*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
483*53ee8cc1Swenshuai.xi };
484*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_High_L[]=
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0xcc},  // SOS31
487*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x00},
488*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0x6c},
489*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x07},
490*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x94},
491*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x00},
492*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x34},
493*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x07},
494*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
495*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
496*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xb0},  // SOS32
497*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
498*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0x13},
499*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x07},
500*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0xed},
501*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x00},
502*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x50},
503*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
504*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
505*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
506*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
507*53ee8cc1Swenshuai.xi };
508*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_VSB_LG[]=
509*53ee8cc1Swenshuai.xi {
510*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0xab},  // SOS31
511*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x02},
512*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0x9b},
513*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x06},
514*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x65},
515*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x01},
516*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x55},
517*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x05},
518*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
519*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
520*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xe1},  // SOS32
521*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
522*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0xf7},
523*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x06},
524*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0x0a},
525*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x01},
526*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x1f},
527*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
528*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
529*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
530*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
531*53ee8cc1Swenshuai.xi };
532*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_VSB_Philips[]=
533*53ee8cc1Swenshuai.xi {
534*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0x9f},  // SOS31
535*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x02},
536*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0xa8},
537*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x06},
538*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x58},
539*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x01},
540*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x62},
541*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x05},
542*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
543*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
544*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0xcd},  // SOS32
545*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x02},
546*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0x05},
547*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x07},
548*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0xfb},
549*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x00},
550*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x33},
551*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x05},
552*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
553*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
554*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
555*53ee8cc1Swenshuai.xi };
556*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_GroupDelay_NULL[]=
557*53ee8cc1Swenshuai.xi {
558*53ee8cc1Swenshuai.xi     {SOS31_C0_L,0x00},  // SOS31
559*53ee8cc1Swenshuai.xi     {SOS31_C0_H,0x00},
560*53ee8cc1Swenshuai.xi     {SOS31_C1_L,0x00},
561*53ee8cc1Swenshuai.xi     {SOS31_C1_H,0x00},
562*53ee8cc1Swenshuai.xi     {SOS31_C2_L,0x00},
563*53ee8cc1Swenshuai.xi     {SOS31_C2_H,0x00},
564*53ee8cc1Swenshuai.xi     {SOS31_C3_L,0x00},
565*53ee8cc1Swenshuai.xi     {SOS31_C3_H,0x00},
566*53ee8cc1Swenshuai.xi     {SOS31_C4_L,0x00},
567*53ee8cc1Swenshuai.xi     {SOS31_C4_H,0x02},
568*53ee8cc1Swenshuai.xi     {SOS32_C0_L,0x00},  // SOS32
569*53ee8cc1Swenshuai.xi     {SOS32_C0_H,0x00},
570*53ee8cc1Swenshuai.xi     {SOS32_C1_L,0x00},
571*53ee8cc1Swenshuai.xi     {SOS32_C1_H,0x00},
572*53ee8cc1Swenshuai.xi     {SOS32_C2_L,0x00},
573*53ee8cc1Swenshuai.xi     {SOS32_C2_H,0x00},
574*53ee8cc1Swenshuai.xi     {SOS32_C3_L,0x00},
575*53ee8cc1Swenshuai.xi     {SOS32_C3_H,0x00},
576*53ee8cc1Swenshuai.xi     {SOS32_C4_L,0x00},
577*53ee8cc1Swenshuai.xi     {SOS32_C4_H,0x02},
578*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
579*53ee8cc1Swenshuai.xi };
580*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_B_A2[]=
581*53ee8cc1Swenshuai.xi {
582*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x9f}, // Notch_A1, R = 0.94
583*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
584*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
585*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
586*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0x37},
587*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
588*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x86}, // Notch_A2, R = 0.94
589*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
590*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
591*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
592*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x51},
593*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
594*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x9f}, // SOS12, R = 0.94
595*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
596*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
597*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
598*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
599*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
600*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x37},
601*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
602*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
603*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
604*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G A2
605*53ee8cc1Swenshuai.xi };
606*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_B_NICAM[]=
607*53ee8cc1Swenshuai.xi {
608*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x9f}, // Notch_A1, R = 0.94
609*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
610*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
611*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
612*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0x37},
613*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
614*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x7b}, // Notch_A2, R = 0.94
615*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
616*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
617*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
618*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x5d},
619*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
620*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x9f}, // SOS12, R = 0.94
621*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
622*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
623*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
624*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
625*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
626*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x37},
627*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
628*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
629*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
630*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G NICAM
631*53ee8cc1Swenshuai.xi };
632*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_GH_A2[]=
633*53ee8cc1Swenshuai.xi {
634*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x9f}, // Notch_A1, R = 0.94
635*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
636*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
637*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
638*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0x37},
639*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
640*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x86}, // Notch_A2, R = 0.94
641*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
642*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
643*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
644*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x51},
645*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
646*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x9f}, // SOS12, R = 0.94
647*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
648*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
649*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
650*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
651*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
652*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x37},
653*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
654*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
655*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
656*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G A2
657*53ee8cc1Swenshuai.xi };
658*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_GH_NICAM[]=
659*53ee8cc1Swenshuai.xi {
660*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x9f}, // Notch_A1, R = 0.94
661*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
662*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
663*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
664*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0x37},
665*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
666*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x7b}, // Notch_A2, R = 0.94
667*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
668*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
669*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
670*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x5d},
671*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
672*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x9f}, // SOS12, R = 0.94
673*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
674*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
675*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
676*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
677*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
678*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x37},
679*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
680*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
681*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
682*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G NICAM
683*53ee8cc1Swenshuai.xi };
684*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_SECAM_L_NICAM[]=
685*53ee8cc1Swenshuai.xi {
686*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x34}, // Notch_A1, R = 0.94
687*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
688*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
689*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
690*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xa9},
691*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
692*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x7b}, // Notch_A2, R = 0.94
693*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
694*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
695*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
696*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x5d},
697*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
698*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x34}, // SOS12, R = 0.94
699*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
700*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
701*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
702*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
703*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
704*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xa9},
705*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
706*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
707*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
708*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // SECAM L NICAM
709*53ee8cc1Swenshuai.xi };
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_I_NICAM[]=
712*53ee8cc1Swenshuai.xi {
713*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x6b}, // Notch_A1, R = 0.94
714*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
715*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
716*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
717*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0x6e},
718*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
719*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x2e}, // Notch_A2, R = 0.94
720*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
721*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
722*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
723*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0xaf},
724*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
725*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x6b}, // SOS12, R = 0.94
726*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
727*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
728*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
729*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
730*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
731*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x6e},
732*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
733*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
734*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
735*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL I NICAM
736*53ee8cc1Swenshuai.xi };
737*53ee8cc1Swenshuai.xi 
738*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_SECAM_DK1_A2[]=
739*53ee8cc1Swenshuai.xi {
740*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x34}, // Notch_A1, R = 0.94
741*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
742*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
743*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
744*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xa9},
745*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
746*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x4f}, // Notch_A2, R = 0.94
747*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
748*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
749*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
750*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x8c},
751*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
752*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x34}, // SOS12, R = 0.94
753*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
754*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
755*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
756*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
757*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
758*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xa9},
759*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
760*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
761*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
762*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK1 A2
763*53ee8cc1Swenshuai.xi };
764*53ee8cc1Swenshuai.xi 
765*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_DK2_A2[]=
766*53ee8cc1Swenshuai.xi {
767*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x34}, // Notch_A1, R = 0.94
768*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
769*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
770*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
771*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xa9},
772*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
773*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x18}, // Notch_A2, R = 0.94
774*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
775*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
776*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
777*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0xc6},
778*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
779*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x34}, // SOS12, R = 0.96
780*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
781*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
782*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
783*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
784*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
785*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xa9},
786*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
787*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
788*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
789*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK2 A2
790*53ee8cc1Swenshuai.xi };
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_DK2_NICAM[]=
793*53ee8cc1Swenshuai.xi {
794*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x34}, // Notch_A1, R = 0.94
795*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
796*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
797*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
798*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xa9},
799*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
800*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x7b}, // Notch_A2, R = 0.94
801*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
802*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
803*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
804*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x5d},
805*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
806*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x34}, // SOS12, R = 0.94
807*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
808*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
809*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
810*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
811*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
812*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xa9},
813*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
814*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
815*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
816*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK NICAM
817*53ee8cc1Swenshuai.xi };
818*53ee8cc1Swenshuai.xi 
819*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_SECAM_DK3_A2[]=
820*53ee8cc1Swenshuai.xi {
821*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0x34}, // Notch_A1, R = 0.94
822*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
823*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
824*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
825*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xa9},
826*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x05},
827*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0x86}, // Notch_A2, R = 0.94
828*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
829*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
830*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
831*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0x51},
832*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x05},
833*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x34}, // SOS12, R = 0.94
834*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
835*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
836*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
837*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
838*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
839*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xa9},
840*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x05},
841*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
842*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
843*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK3 A2
844*53ee8cc1Swenshuai.xi };
845*53ee8cc1Swenshuai.xi 
846*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_BG_A2_NOTCH[]=
847*53ee8cc1Swenshuai.xi {
848*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x9f}, // Notch_A3, R = 0.94
849*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
850*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
851*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
852*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0x37},
853*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
854*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x86}, // Notch_A4, R = 0.94
855*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
856*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
857*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
858*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x51},
859*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
860*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
861*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
862*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
863*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
864*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
865*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
866*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G A2
867*53ee8cc1Swenshuai.xi };
868*53ee8cc1Swenshuai.xi 
869*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_BG_NICAM_NOTCH[]=
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x9f}, // Notch_A3, R = 0.94
872*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
873*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
874*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
875*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0x37},
876*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
877*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x7b}, // Notch_A4, R = 0.94
878*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
879*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
880*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
881*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x5d},
882*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
883*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
884*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
885*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
886*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
887*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
888*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
889*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL B/G NICAM
890*53ee8cc1Swenshuai.xi };
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_I_NOTCH[]=
893*53ee8cc1Swenshuai.xi {
894*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x6b}, // Notch_A3, R = 0.94
895*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
896*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
897*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
898*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0x6e},
899*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
900*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x2e}, // Notch_A4, R = 0.94
901*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
902*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
903*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
904*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0xaf},
905*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
906*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0xbb}, // Notch_A5 at 9.5MHz, image of audio 1 (bw 3.5, Apass 0.05)
907*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x00},
908*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
909*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
910*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0x40},
911*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x07},
912*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL I NICAM
913*53ee8cc1Swenshuai.xi };
914*53ee8cc1Swenshuai.xi 
915*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_DK1_NOTCH[]=
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x34}, // Notch_A3, R = 0.94
918*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
919*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
920*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
921*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xa9},
922*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
923*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x4f}, // Notch_A4, R = 0.94
924*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
925*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
926*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
927*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x8c},
928*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
929*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
930*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
931*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
932*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
933*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
934*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
935*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK1 A2
936*53ee8cc1Swenshuai.xi };
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_DK2_NOTCH[]=
939*53ee8cc1Swenshuai.xi {
940*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x34}, // Notch_A3, R = 0.94
941*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
942*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
943*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
944*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xa9},
945*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
946*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x18}, // Notch_A4, R = 0.94
947*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
948*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
949*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
950*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0xc6},
951*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
952*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
953*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
954*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
955*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
956*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
957*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
958*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK2 A2
959*53ee8cc1Swenshuai.xi };
960*53ee8cc1Swenshuai.xi 
961*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_DK3_NOTCH[]=
962*53ee8cc1Swenshuai.xi {
963*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x34}, // Notch_A3, R = 0.94
964*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
965*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
966*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
967*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xa9},
968*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
969*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x86}, // Notch_A4, R = 0.94
970*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
971*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
972*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
973*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x51},
974*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
975*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
976*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
977*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
978*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
979*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
980*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
981*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK3 A2
982*53ee8cc1Swenshuai.xi };
983*53ee8cc1Swenshuai.xi 
984*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_DK_NICAM_NOTCH[]=
985*53ee8cc1Swenshuai.xi {
986*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x34}, // Notch_A3, R = 0.94
987*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
988*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
989*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
990*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xa9},
991*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
992*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x7b}, // Notch_A4, R = 0.94
993*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
994*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
995*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
996*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x5d},
997*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
998*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
999*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
1000*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
1001*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
1002*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
1003*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
1004*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // PAL DK NICAM
1005*53ee8cc1Swenshuai.xi };
1006*53ee8cc1Swenshuai.xi 
1007*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_L_NICAM_NOTCH[]=
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x34}, // Notch_A3, R = 0.94
1010*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x02},
1011*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x3c},
1012*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
1013*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xa9},
1014*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x05},
1015*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0x7b}, // Notch_A4, R = 0.94
1016*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
1017*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
1018*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
1019*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0x5d},
1020*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x05},
1021*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
1022*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
1023*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
1024*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
1025*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
1026*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
1027*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // SECAM L NICAM
1028*53ee8cc1Swenshuai.xi };
1029*53ee8cc1Swenshuai.xi 
1030*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_GDE_MN_NOTCH[]=
1031*53ee8cc1Swenshuai.xi {
1032*53ee8cc1Swenshuai.xi     {N_A3_C0_L,0x1c}, // Notch_A3 (0.98)
1033*53ee8cc1Swenshuai.xi     {N_A3_C0_H,0x03},
1034*53ee8cc1Swenshuai.xi     {N_A3_C1_L,0x14},
1035*53ee8cc1Swenshuai.xi     {N_A3_C1_H,0x06},
1036*53ee8cc1Swenshuai.xi     {N_A3_C2_L,0xd4},
1037*53ee8cc1Swenshuai.xi     {N_A3_C2_H,0x04},
1038*53ee8cc1Swenshuai.xi     {N_A4_C0_L,0xe8}, // Notch_A4, R = 0.94
1039*53ee8cc1Swenshuai.xi     {N_A4_C0_H,0x02},
1040*53ee8cc1Swenshuai.xi     {N_A4_C1_L,0x3c},
1041*53ee8cc1Swenshuai.xi     {N_A4_C1_H,0x06},
1042*53ee8cc1Swenshuai.xi     {N_A4_C2_L,0xe8},
1043*53ee8cc1Swenshuai.xi     {N_A4_C2_H,0x04},
1044*53ee8cc1Swenshuai.xi     {N_A5_C0_L,0x02}, // Notch_A5 at 9MHz, image of audio 1 (bw 3.5, Apass 0.05)
1045*53ee8cc1Swenshuai.xi     {N_A5_C0_H,0x01},
1046*53ee8cc1Swenshuai.xi     {N_A5_C1_L,0x1c},
1047*53ee8cc1Swenshuai.xi     {N_A5_C1_H,0x06},
1048*53ee8cc1Swenshuai.xi     {N_A5_C2_L,0xf7},
1049*53ee8cc1Swenshuai.xi     {N_A5_C2_H,0x06},
1050*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // NTSC M/N
1051*53ee8cc1Swenshuai.xi };
1052*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_NTSC_MN_A2[]=
1053*53ee8cc1Swenshuai.xi {
1054*53ee8cc1Swenshuai.xi     {N_A1_C0_L,0xfc}, // Notch_A1, R = 0.94
1055*53ee8cc1Swenshuai.xi     {N_A1_C0_H,0x02},
1056*53ee8cc1Swenshuai.xi     {N_A1_C1_L,0x3c},
1057*53ee8cc1Swenshuai.xi     {N_A1_C1_H,0x06},
1058*53ee8cc1Swenshuai.xi     {N_A1_C2_L,0xd4},
1059*53ee8cc1Swenshuai.xi     {N_A1_C2_H,0x04},
1060*53ee8cc1Swenshuai.xi     {N_A2_C0_L,0xe8}, // Notch_A2, R = 0.94
1061*53ee8cc1Swenshuai.xi     {N_A2_C0_H,0x02},
1062*53ee8cc1Swenshuai.xi     {N_A2_C1_L,0x3c},
1063*53ee8cc1Swenshuai.xi     {N_A2_C1_H,0x06},
1064*53ee8cc1Swenshuai.xi     {N_A2_C2_L,0xe8},
1065*53ee8cc1Swenshuai.xi     {N_A2_C2_H,0x04},
1066*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0xfc}, // SOS12, R = 0.94
1067*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x02},
1068*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0x3c},
1069*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
1070*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
1071*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
1072*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xd4},
1073*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x04},
1074*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
1075*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
1076*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00}, // NTSC M/N
1077*53ee8cc1Swenshuai.xi };
1078*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_DK_LOWER_ACI[]=
1079*53ee8cc1Swenshuai.xi {
1080*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0x3a},  // SOS11 notch at 16.5MHz (0.94)
1081*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x05},
1082*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x3c},
1083*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x06},
1084*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1085*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x02},
1086*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0xf3},
1087*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x02},
1088*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1089*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1090*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1091*53ee8cc1Swenshuai.xi };
1092*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_I_LOWER_ACI[]=
1093*53ee8cc1Swenshuai.xi {
1094*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0x0d},  // SOS11 notch at 17MHz (0.94)
1095*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x05},
1096*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x3c},
1097*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x06},
1098*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1099*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x02},
1100*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0x23},
1101*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x03},
1102*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1103*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1104*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1105*53ee8cc1Swenshuai.xi };
1106*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_GH_LOWER_ACI[]=
1107*53ee8cc1Swenshuai.xi {
1108*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0xe4},  // SOS11 notch at 17.5MHz (0.94)
1109*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x04},
1110*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x3c},
1111*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x06},
1112*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1113*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x02},
1114*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0x4f},
1115*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x03},
1116*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1117*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1118*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1119*53ee8cc1Swenshuai.xi };
1120*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_B_LOWER_ACI[]=
1121*53ee8cc1Swenshuai.xi {
1122*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0x1C},  // SOS11 notch at 16.5MHz (0.98)
1123*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x05},
1124*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x14},
1125*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x06},
1126*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1127*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x02},
1128*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0xF3},
1129*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x02},
1130*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1131*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1132*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1133*53ee8cc1Swenshuai.xi };
1134*53ee8cc1Swenshuai.xi 
1135*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_NTSC_MN_LOWER_ACI[]=
1136*53ee8cc1Swenshuai.xi {
1137*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0x15},  // SOS11 notch at 16.5MHz
1138*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x05},
1139*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x0A},
1140*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x06},
1141*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1142*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x02},
1143*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0xF3},
1144*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x02},
1145*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1146*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1147*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1148*53ee8cc1Swenshuai.xi };
1149*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_DK_Audio_SingleSAW[]=
1150*53ee8cc1Swenshuai.xi {
1151*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x0D},  // SOS12 notch at 8.5MHz
1152*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x01},
1153*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0xB8},
1154*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
1155*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
1156*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
1157*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xB0},
1158*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x06},
1159*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
1160*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
1161*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1162*53ee8cc1Swenshuai.xi };
1163*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_GH_Audio_SingleSAW[]=
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0x9A},  // SOS12 notch at 9.5MHz
1166*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x00},
1167*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0xB8},
1168*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
1169*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
1170*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
1171*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0x40},
1172*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x07},
1173*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
1174*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
1175*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1176*53ee8cc1Swenshuai.xi };
1177*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_PAL_I_Audio_SingleSAW[]=
1178*53ee8cc1Swenshuai.xi {
1179*53ee8cc1Swenshuai.xi     {SOS12_C0_L,0xD4},  // SOS12 notch at 9MHz
1180*53ee8cc1Swenshuai.xi     {SOS12_C0_H,0x00},
1181*53ee8cc1Swenshuai.xi     {SOS12_C1_L,0xB8},
1182*53ee8cc1Swenshuai.xi     {SOS12_C1_H,0x06},
1183*53ee8cc1Swenshuai.xi     {SOS12_C2_L,0x00},
1184*53ee8cc1Swenshuai.xi     {SOS12_C2_H,0x02},
1185*53ee8cc1Swenshuai.xi     {SOS12_C3_L,0xF7},
1186*53ee8cc1Swenshuai.xi     {SOS12_C3_H,0x06},
1187*53ee8cc1Swenshuai.xi     {SOS12_C4_L,0x00},
1188*53ee8cc1Swenshuai.xi     {SOS12_C4_H,0x02},
1189*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1190*53ee8cc1Swenshuai.xi };
1191*53ee8cc1Swenshuai.xi 
1192*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_NULL_LOWER_ACI[]=
1193*53ee8cc1Swenshuai.xi {
1194*53ee8cc1Swenshuai.xi     {SOS11_C0_L,0x00},  // SOS11
1195*53ee8cc1Swenshuai.xi     {SOS11_C0_H,0x00},
1196*53ee8cc1Swenshuai.xi     {SOS11_C1_L,0x00},
1197*53ee8cc1Swenshuai.xi     {SOS11_C1_H,0x00},
1198*53ee8cc1Swenshuai.xi     {SOS11_C2_L,0x00},
1199*53ee8cc1Swenshuai.xi     {SOS11_C2_H,0x00},
1200*53ee8cc1Swenshuai.xi     {SOS11_C3_L,0x00},
1201*53ee8cc1Swenshuai.xi     {SOS11_C3_H,0x00},
1202*53ee8cc1Swenshuai.xi     {SOS11_C4_L,0x00},
1203*53ee8cc1Swenshuai.xi     {SOS11_C4_H,0x02},
1204*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1205*53ee8cc1Swenshuai.xi };
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_CR_IIR_LPF1[]=
1208*53ee8cc1Swenshuai.xi {
1209*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_G,0x02},
1210*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_G+1,0x00},
1211*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A1,0xfc},
1212*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A1+1,0x01},
1213*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A2,0x00},
1214*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A2+1,0x00},
1215*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B1,0x00},
1216*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B1+1,0x02},
1217*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B2,0x00},
1218*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B2+1,0x00},
1219*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1220*53ee8cc1Swenshuai.xi };
1221*53ee8cc1Swenshuai.xi MS_VIF_REG_TYPE VIF_CR_IIR_LPF2[]=
1222*53ee8cc1Swenshuai.xi {
1223*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_G,0x02},
1224*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_G+1,0x00},
1225*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A1,0xd6},
1226*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A1+1,0x03},
1227*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A2,0x27},
1228*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_A2+1,0x06},
1229*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B1,0x5b},
1230*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B1+1,0x06},
1231*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B2,0x00},
1232*53ee8cc1Swenshuai.xi     {CR_IIR_COEF_B2+1,0x02},
1233*53ee8cc1Swenshuai.xi     {_END_OF_TBL_,0x00},
1234*53ee8cc1Swenshuai.xi };
1235*53ee8cc1Swenshuai.xi 
1236*53ee8cc1Swenshuai.xi 
1237*53ee8cc1Swenshuai.xi U16 VIF_PAL_EQ_CO_A_REJ[]=
1238*53ee8cc1Swenshuai.xi {
1239*53ee8cc1Swenshuai.xi             0x0009,
1240*53ee8cc1Swenshuai.xi             0x0003,
1241*53ee8cc1Swenshuai.xi             0x000B,
1242*53ee8cc1Swenshuai.xi             0x1FE1,
1243*53ee8cc1Swenshuai.xi             0x002F,
1244*53ee8cc1Swenshuai.xi             0x1FD0,
1245*53ee8cc1Swenshuai.xi             0x001F,
1246*53ee8cc1Swenshuai.xi             0x1FF2,
1247*53ee8cc1Swenshuai.xi             0x001A,
1248*53ee8cc1Swenshuai.xi             0x1FB4,
1249*53ee8cc1Swenshuai.xi             0x008A,
1250*53ee8cc1Swenshuai.xi             0x1F5E,
1251*53ee8cc1Swenshuai.xi             0x0077,
1252*53ee8cc1Swenshuai.xi             0x1FDC,
1253*53ee8cc1Swenshuai.xi             0x1FFC,
1254*53ee8cc1Swenshuai.xi             0x1FBB,
1255*53ee8cc1Swenshuai.xi             0x00F1,
1256*53ee8cc1Swenshuai.xi             0x1E79,
1257*53ee8cc1Swenshuai.xi             0x0165,
1258*53ee8cc1Swenshuai.xi             0x1FC9,
1259*53ee8cc1Swenshuai.xi             0x1E4C,
1260*53ee8cc1Swenshuai.xi             0x037C,
1261*53ee8cc1Swenshuai.xi             0x0BCA,
1262*53ee8cc1Swenshuai.xi             0x037C,
1263*53ee8cc1Swenshuai.xi             0x1E4C,
1264*53ee8cc1Swenshuai.xi             0x1FC9,
1265*53ee8cc1Swenshuai.xi             0x0165,
1266*53ee8cc1Swenshuai.xi             0x1E79,
1267*53ee8cc1Swenshuai.xi             0x00F1,
1268*53ee8cc1Swenshuai.xi             0x1FBB,
1269*53ee8cc1Swenshuai.xi             0x1FFC,
1270*53ee8cc1Swenshuai.xi             0x1FDC,
1271*53ee8cc1Swenshuai.xi             0x0077,
1272*53ee8cc1Swenshuai.xi             0x1F5E,
1273*53ee8cc1Swenshuai.xi             0x008A,
1274*53ee8cc1Swenshuai.xi             0x1FB4,
1275*53ee8cc1Swenshuai.xi             0x001A,
1276*53ee8cc1Swenshuai.xi             0x1FF2,
1277*53ee8cc1Swenshuai.xi             0x001F,
1278*53ee8cc1Swenshuai.xi             0x1FD0,
1279*53ee8cc1Swenshuai.xi             0x002F,
1280*53ee8cc1Swenshuai.xi             0x1FE1,
1281*53ee8cc1Swenshuai.xi             0x000B,
1282*53ee8cc1Swenshuai.xi             0x0003,
1283*53ee8cc1Swenshuai.xi             0x0009,
1284*53ee8cc1Swenshuai.xi             0x0000,
1285*53ee8cc1Swenshuai.xi 
1286*53ee8cc1Swenshuai.xi             0x0000,
1287*53ee8cc1Swenshuai.xi             0x0000,
1288*53ee8cc1Swenshuai.xi             0x0000,
1289*53ee8cc1Swenshuai.xi             0x0000,
1290*53ee8cc1Swenshuai.xi             0x0000,
1291*53ee8cc1Swenshuai.xi             0x0000,
1292*53ee8cc1Swenshuai.xi             0x0000,
1293*53ee8cc1Swenshuai.xi             0x0000,
1294*53ee8cc1Swenshuai.xi             0x0000,
1295*53ee8cc1Swenshuai.xi             0x0000
1296*53ee8cc1Swenshuai.xi };
1297*53ee8cc1Swenshuai.xi 
1298*53ee8cc1Swenshuai.xi U16 VIF_NTSC_EQ_CO_A_REJ[]=
1299*53ee8cc1Swenshuai.xi {
1300*53ee8cc1Swenshuai.xi             0x001B,
1301*53ee8cc1Swenshuai.xi             0x1FEB,
1302*53ee8cc1Swenshuai.xi             0x0001,
1303*53ee8cc1Swenshuai.xi             0x0000,
1304*53ee8cc1Swenshuai.xi             0x0024,
1305*53ee8cc1Swenshuai.xi             0x1FBF,
1306*53ee8cc1Swenshuai.xi             0x0027,
1307*53ee8cc1Swenshuai.xi             0x1FFE,
1308*53ee8cc1Swenshuai.xi             0x0025,
1309*53ee8cc1Swenshuai.xi             0x1F87,
1310*53ee8cc1Swenshuai.xi             0x0083,
1311*53ee8cc1Swenshuai.xi             0x1FD6,
1312*53ee8cc1Swenshuai.xi             0x0009,
1313*53ee8cc1Swenshuai.xi             0x1F78,
1314*53ee8cc1Swenshuai.xi             0x0106,
1315*53ee8cc1Swenshuai.xi             0x1F5A,
1316*53ee8cc1Swenshuai.xi             0x1FD9,
1317*53ee8cc1Swenshuai.xi             0x1FEF,
1318*53ee8cc1Swenshuai.xi             0x017E,
1319*53ee8cc1Swenshuai.xi             0x1DF8,
1320*53ee8cc1Swenshuai.xi             0x1FB4,
1321*53ee8cc1Swenshuai.xi             0x044E,
1322*53ee8cc1Swenshuai.xi             0x09AF,
1323*53ee8cc1Swenshuai.xi             0x044E,
1324*53ee8cc1Swenshuai.xi             0x1FB4,
1325*53ee8cc1Swenshuai.xi             0x1DF8,
1326*53ee8cc1Swenshuai.xi             0x017E,
1327*53ee8cc1Swenshuai.xi             0x1FEF,
1328*53ee8cc1Swenshuai.xi             0x1FD9,
1329*53ee8cc1Swenshuai.xi             0x1F5A,
1330*53ee8cc1Swenshuai.xi             0x0106,
1331*53ee8cc1Swenshuai.xi             0x1F78,
1332*53ee8cc1Swenshuai.xi             0x0009,
1333*53ee8cc1Swenshuai.xi             0x1FD6,
1334*53ee8cc1Swenshuai.xi             0x0083,
1335*53ee8cc1Swenshuai.xi             0x1F87,
1336*53ee8cc1Swenshuai.xi             0x0025,
1337*53ee8cc1Swenshuai.xi             0x1FFE,
1338*53ee8cc1Swenshuai.xi             0x0027,
1339*53ee8cc1Swenshuai.xi             0x1FBF,
1340*53ee8cc1Swenshuai.xi             0x0024,
1341*53ee8cc1Swenshuai.xi             0x0000,
1342*53ee8cc1Swenshuai.xi             0x0001,
1343*53ee8cc1Swenshuai.xi             0x1FEB,
1344*53ee8cc1Swenshuai.xi             0x001B,
1345*53ee8cc1Swenshuai.xi             0x0000,
1346*53ee8cc1Swenshuai.xi 
1347*53ee8cc1Swenshuai.xi             0x0000,
1348*53ee8cc1Swenshuai.xi             0x0000,
1349*53ee8cc1Swenshuai.xi             0x0000,
1350*53ee8cc1Swenshuai.xi             0x0000,
1351*53ee8cc1Swenshuai.xi             0x0000,
1352*53ee8cc1Swenshuai.xi             0x0000,
1353*53ee8cc1Swenshuai.xi             0x0000,
1354*53ee8cc1Swenshuai.xi             0x0000,
1355*53ee8cc1Swenshuai.xi             0x0000,
1356*53ee8cc1Swenshuai.xi             0x0000
1357*53ee8cc1Swenshuai.xi };
1358*53ee8cc1Swenshuai.xi 
1359*53ee8cc1Swenshuai.xi U16 VIF_BG_EQ_IIR_BANDSTOP[]=
1360*53ee8cc1Swenshuai.xi {
1361*53ee8cc1Swenshuai.xi             0x070B,
1362*53ee8cc1Swenshuai.xi             0x0C15,
1363*53ee8cc1Swenshuai.xi             0x0BBB,
1364*53ee8cc1Swenshuai.xi             0x064E,
1365*53ee8cc1Swenshuai.xi             0x070B,
1366*53ee8cc1Swenshuai.xi             0x0B1A,
1367*53ee8cc1Swenshuai.xi             0x070B,
1368*53ee8cc1Swenshuai.xi             0x09F9,
1369*53ee8cc1Swenshuai.xi             0x05F9,
1370*53ee8cc1Swenshuai.xi 
1371*53ee8cc1Swenshuai.xi             0x07AF,
1372*53ee8cc1Swenshuai.xi             0x0BB0,
1373*53ee8cc1Swenshuai.xi             0x0A66,
1374*53ee8cc1Swenshuai.xi             0x0765,
1375*53ee8cc1Swenshuai.xi             0x07AF,
1376*53ee8cc1Swenshuai.xi             0x0C6B,
1377*53ee8cc1Swenshuai.xi             0x07AF,
1378*53ee8cc1Swenshuai.xi             0x0D1B,
1379*53ee8cc1Swenshuai.xi             0x078D
1380*53ee8cc1Swenshuai.xi };
1381*53ee8cc1Swenshuai.xi 
1382*53ee8cc1Swenshuai.xi U16 VIF_BG_NICAM_EQ_IIR_NOTCH[]=
1383*53ee8cc1Swenshuai.xi {
1384*53ee8cc1Swenshuai.xi             0x0764,
1385*53ee8cc1Swenshuai.xi             0x0BCC,
1386*53ee8cc1Swenshuai.xi             0x0AE6,
1387*53ee8cc1Swenshuai.xi             0x06C8,
1388*53ee8cc1Swenshuai.xi             0x0764,
1389*53ee8cc1Swenshuai.xi             0x0C4A,
1390*53ee8cc1Swenshuai.xi             0x0764,
1391*53ee8cc1Swenshuai.xi             0x0C4A,
1392*53ee8cc1Swenshuai.xi             0x06C8,
1393*53ee8cc1Swenshuai.xi 
1394*53ee8cc1Swenshuai.xi             0x0764,
1395*53ee8cc1Swenshuai.xi             0x0BCC,
1396*53ee8cc1Swenshuai.xi             0x0AE6,
1397*53ee8cc1Swenshuai.xi             0x06C8,
1398*53ee8cc1Swenshuai.xi             0x0764,
1399*53ee8cc1Swenshuai.xi             0x0C4A,
1400*53ee8cc1Swenshuai.xi             0x0764,
1401*53ee8cc1Swenshuai.xi             0x0C4A,
1402*53ee8cc1Swenshuai.xi             0x06C8
1403*53ee8cc1Swenshuai.xi };
1404*53ee8cc1Swenshuai.xi 
1405*53ee8cc1Swenshuai.xi U16 VIF_I_EQ_IIR_NOTCH[]=
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi             0x0764,
1408*53ee8cc1Swenshuai.xi             0x0DDB,
1409*53ee8cc1Swenshuai.xi             0x0CCD,
1410*53ee8cc1Swenshuai.xi             0x06C8,
1411*53ee8cc1Swenshuai.xi             0x0764,
1412*53ee8cc1Swenshuai.xi             0x0E30,
1413*53ee8cc1Swenshuai.xi             0x0764,
1414*53ee8cc1Swenshuai.xi             0x0E30,
1415*53ee8cc1Swenshuai.xi             0x06C8,
1416*53ee8cc1Swenshuai.xi 
1417*53ee8cc1Swenshuai.xi             0x0764,
1418*53ee8cc1Swenshuai.xi             0x0DDB,
1419*53ee8cc1Swenshuai.xi             0x0CCD,
1420*53ee8cc1Swenshuai.xi             0x06C8,
1421*53ee8cc1Swenshuai.xi             0x0764,
1422*53ee8cc1Swenshuai.xi             0x0E30,
1423*53ee8cc1Swenshuai.xi             0x0764,
1424*53ee8cc1Swenshuai.xi             0x0E30,
1425*53ee8cc1Swenshuai.xi             0x06C8
1426*53ee8cc1Swenshuai.xi };
1427*53ee8cc1Swenshuai.xi 
1428*53ee8cc1Swenshuai.xi U16 VIF_DK1_EQ_IIR_NOTCH[]=
1429*53ee8cc1Swenshuai.xi {
1430*53ee8cc1Swenshuai.xi             0x0764,
1431*53ee8cc1Swenshuai.xi             0x0F41,
1432*53ee8cc1Swenshuai.xi             0x0E18,
1433*53ee8cc1Swenshuai.xi             0x06C8,
1434*53ee8cc1Swenshuai.xi             0x0764,
1435*53ee8cc1Swenshuai.xi             0x0D87,
1436*53ee8cc1Swenshuai.xi             0x0764,
1437*53ee8cc1Swenshuai.xi             0x0D87,
1438*53ee8cc1Swenshuai.xi             0x06C8,
1439*53ee8cc1Swenshuai.xi 
1440*53ee8cc1Swenshuai.xi             0x0764,
1441*53ee8cc1Swenshuai.xi             0x0F41,
1442*53ee8cc1Swenshuai.xi             0x0E18,
1443*53ee8cc1Swenshuai.xi             0x06C8,
1444*53ee8cc1Swenshuai.xi             0x0764,
1445*53ee8cc1Swenshuai.xi             0x0D87,
1446*53ee8cc1Swenshuai.xi             0x0764,
1447*53ee8cc1Swenshuai.xi             0x0D87,
1448*53ee8cc1Swenshuai.xi             0x06C8
1449*53ee8cc1Swenshuai.xi };
1450*53ee8cc1Swenshuai.xi 
1451*53ee8cc1Swenshuai.xi U16 VIF_DK2_EQ_IIR_NOTCH[]=
1452*53ee8cc1Swenshuai.xi {
1453*53ee8cc1Swenshuai.xi             0x0764,
1454*53ee8cc1Swenshuai.xi             0x0F41,
1455*53ee8cc1Swenshuai.xi             0x0E18,
1456*53ee8cc1Swenshuai.xi             0x06C8,
1457*53ee8cc1Swenshuai.xi             0x0764,
1458*53ee8cc1Swenshuai.xi             0x0E7F,
1459*53ee8cc1Swenshuai.xi             0x0764,
1460*53ee8cc1Swenshuai.xi             0x0E7F,
1461*53ee8cc1Swenshuai.xi             0x06C8,
1462*53ee8cc1Swenshuai.xi 
1463*53ee8cc1Swenshuai.xi             0x0764,
1464*53ee8cc1Swenshuai.xi             0x0F41,
1465*53ee8cc1Swenshuai.xi             0x0E18,
1466*53ee8cc1Swenshuai.xi             0x06C8,
1467*53ee8cc1Swenshuai.xi             0x0764,
1468*53ee8cc1Swenshuai.xi             0x0E7F,
1469*53ee8cc1Swenshuai.xi             0x0764,
1470*53ee8cc1Swenshuai.xi             0x0E7F,
1471*53ee8cc1Swenshuai.xi             0x06C8
1472*53ee8cc1Swenshuai.xi };
1473*53ee8cc1Swenshuai.xi 
1474*53ee8cc1Swenshuai.xi U16 VIF_DK3_EQ_IIR_NOTCH[]=
1475*53ee8cc1Swenshuai.xi {
1476*53ee8cc1Swenshuai.xi             0x0764,
1477*53ee8cc1Swenshuai.xi             0x0F41,
1478*53ee8cc1Swenshuai.xi             0x0E18,
1479*53ee8cc1Swenshuai.xi             0x06C8,
1480*53ee8cc1Swenshuai.xi             0x0764,
1481*53ee8cc1Swenshuai.xi             0x0BEB,
1482*53ee8cc1Swenshuai.xi             0x0764,
1483*53ee8cc1Swenshuai.xi             0x0BEB,
1484*53ee8cc1Swenshuai.xi             0x06C8,
1485*53ee8cc1Swenshuai.xi 
1486*53ee8cc1Swenshuai.xi             0x0764,
1487*53ee8cc1Swenshuai.xi             0x0F41,
1488*53ee8cc1Swenshuai.xi             0x0E18,
1489*53ee8cc1Swenshuai.xi             0x06C8,
1490*53ee8cc1Swenshuai.xi             0x0764,
1491*53ee8cc1Swenshuai.xi             0x0BEB,
1492*53ee8cc1Swenshuai.xi             0x0764,
1493*53ee8cc1Swenshuai.xi             0x0BEB,
1494*53ee8cc1Swenshuai.xi             0x06C8
1495*53ee8cc1Swenshuai.xi };
1496*53ee8cc1Swenshuai.xi 
1497*53ee8cc1Swenshuai.xi U16 VIF_DK_NICAM_EQ_IIR_NOTCH[]=
1498*53ee8cc1Swenshuai.xi {
1499*53ee8cc1Swenshuai.xi             0x0764,
1500*53ee8cc1Swenshuai.xi             0x0F41,
1501*53ee8cc1Swenshuai.xi             0x0E18,
1502*53ee8cc1Swenshuai.xi             0x06C8,
1503*53ee8cc1Swenshuai.xi             0x0764,
1504*53ee8cc1Swenshuai.xi             0x0C4A,
1505*53ee8cc1Swenshuai.xi             0x0764,
1506*53ee8cc1Swenshuai.xi             0x0C4A,
1507*53ee8cc1Swenshuai.xi             0x06C8,
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi             0x0764,
1510*53ee8cc1Swenshuai.xi             0x0F41,
1511*53ee8cc1Swenshuai.xi             0x0E18,
1512*53ee8cc1Swenshuai.xi             0x06C8,
1513*53ee8cc1Swenshuai.xi             0x0764,
1514*53ee8cc1Swenshuai.xi             0x0C4A,
1515*53ee8cc1Swenshuai.xi             0x0764,
1516*53ee8cc1Swenshuai.xi             0x0C4A,
1517*53ee8cc1Swenshuai.xi             0x06C8
1518*53ee8cc1Swenshuai.xi };
1519*53ee8cc1Swenshuai.xi 
1520*53ee8cc1Swenshuai.xi U16 VIF_NTSC_MN_EQ_IIR_NOTCH[]=
1521*53ee8cc1Swenshuai.xi {
1522*53ee8cc1Swenshuai.xi             0x079E,
1523*53ee8cc1Swenshuai.xi             0x0620,
1524*53ee8cc1Swenshuai.xi             0x05D5,
1525*53ee8cc1Swenshuai.xi             0x073C,
1526*53ee8cc1Swenshuai.xi             0x079E,
1527*53ee8cc1Swenshuai.xi             0x072F,
1528*53ee8cc1Swenshuai.xi             0x079E,
1529*53ee8cc1Swenshuai.xi             0x072F,
1530*53ee8cc1Swenshuai.xi             0x073C,
1531*53ee8cc1Swenshuai.xi 
1532*53ee8cc1Swenshuai.xi             0x079E,
1533*53ee8cc1Swenshuai.xi             0x0620,
1534*53ee8cc1Swenshuai.xi             0x05D5,
1535*53ee8cc1Swenshuai.xi             0x073C,
1536*53ee8cc1Swenshuai.xi             0x079E,
1537*53ee8cc1Swenshuai.xi             0x072F,
1538*53ee8cc1Swenshuai.xi             0x079E,
1539*53ee8cc1Swenshuai.xi             0x072F,
1540*53ee8cc1Swenshuai.xi             0x073C
1541*53ee8cc1Swenshuai.xi };
1542*53ee8cc1Swenshuai.xi 
1543*53ee8cc1Swenshuai.xi 
msWriteByteMask(U32 u32Reg,U8 u8Val,U8 u8Mask)1544*53ee8cc1Swenshuai.xi void msWriteByteMask(U32 u32Reg, U8 u8Val, U8 u8Mask)
1545*53ee8cc1Swenshuai.xi {
1546*53ee8cc1Swenshuai.xi     RIU_WriteByteMask(u32Reg, u8Val, u8Mask);
1547*53ee8cc1Swenshuai.xi     msVifLoad();
1548*53ee8cc1Swenshuai.xi }
1549*53ee8cc1Swenshuai.xi 
msWriteBit(U32 u32Reg,BOOL bEnable,U8 u8Mask)1550*53ee8cc1Swenshuai.xi void msWriteBit(U32 u32Reg, BOOL bEnable, U8 u8Mask)
1551*53ee8cc1Swenshuai.xi {
1552*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(u32Reg, bEnable, u8Mask);
1553*53ee8cc1Swenshuai.xi     msVifLoad();
1554*53ee8cc1Swenshuai.xi }
1555*53ee8cc1Swenshuai.xi 
msWriteByte(U32 u32Reg,U8 u8Val)1556*53ee8cc1Swenshuai.xi void msWriteByte(U32 u32Reg, U8 u8Val )
1557*53ee8cc1Swenshuai.xi {
1558*53ee8cc1Swenshuai.xi     RIU_WriteByte(u32Reg,u8Val);
1559*53ee8cc1Swenshuai.xi     msVifLoad();
1560*53ee8cc1Swenshuai.xi }
1561*53ee8cc1Swenshuai.xi 
HAL_VIF_WriteByteMask(U32 u32Reg,U8 u8Val,U8 u8Mask)1562*53ee8cc1Swenshuai.xi void HAL_VIF_WriteByteMask(U32 u32Reg, U8 u8Val, U8 u8Mask)
1563*53ee8cc1Swenshuai.xi {
1564*53ee8cc1Swenshuai.xi     msWriteByteMask(u32Reg, u8Val, u8Mask);
1565*53ee8cc1Swenshuai.xi }
1566*53ee8cc1Swenshuai.xi 
HAL_VIF_WriteBit(U32 u32Reg,BOOL bEnable,U8 u8Mask)1567*53ee8cc1Swenshuai.xi void HAL_VIF_WriteBit(U32 u32Reg, BOOL bEnable, U8 u8Mask)
1568*53ee8cc1Swenshuai.xi {
1569*53ee8cc1Swenshuai.xi     msWriteBit(u32Reg, bEnable, u8Mask);
1570*53ee8cc1Swenshuai.xi }
1571*53ee8cc1Swenshuai.xi 
HAL_VIF_WriteByte(U32 u32Reg,U8 u8Val)1572*53ee8cc1Swenshuai.xi void HAL_VIF_WriteByte(U32 u32Reg, U8 u8Val )
1573*53ee8cc1Swenshuai.xi {
1574*53ee8cc1Swenshuai.xi     msWriteByte(u32Reg, u8Val);
1575*53ee8cc1Swenshuai.xi }
1576*53ee8cc1Swenshuai.xi 
HAL_VIF_ReadByte(U32 u32Reg)1577*53ee8cc1Swenshuai.xi U8 HAL_VIF_ReadByte(U32 u32Reg )
1578*53ee8cc1Swenshuai.xi {
1579*53ee8cc1Swenshuai.xi     return msReadByte(u32Reg);
1580*53ee8cc1Swenshuai.xi }
1581*53ee8cc1Swenshuai.xi 
msWriteRegsTbl(MS_VIF_REG_TYPE * pRegTable)1582*53ee8cc1Swenshuai.xi void msWriteRegsTbl(MS_VIF_REG_TYPE *pRegTable)
1583*53ee8cc1Swenshuai.xi {
1584*53ee8cc1Swenshuai.xi     U16 u16Dummy;
1585*53ee8cc1Swenshuai.xi     U32 u32Address;
1586*53ee8cc1Swenshuai.xi     U8  u8Value;
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi     u16Dummy = 2000;
1589*53ee8cc1Swenshuai.xi 
1590*53ee8cc1Swenshuai.xi     do
1591*53ee8cc1Swenshuai.xi     {
1592*53ee8cc1Swenshuai.xi         u32Address = pRegTable->u32Address;
1593*53ee8cc1Swenshuai.xi         u8Value = pRegTable->u8Value;
1594*53ee8cc1Swenshuai.xi         if (u32Address == 0xFFFF)       // check end of table
1595*53ee8cc1Swenshuai.xi             break;
1596*53ee8cc1Swenshuai.xi         RIU_WriteByte(u32Address, u8Value);
1597*53ee8cc1Swenshuai.xi         pRegTable++;
1598*53ee8cc1Swenshuai.xi     } while (--u16Dummy > 0);
1599*53ee8cc1Swenshuai.xi     msVifLoad();
1600*53ee8cc1Swenshuai.xi }
1601*53ee8cc1Swenshuai.xi 
HAL_VIF_RegInit(void)1602*53ee8cc1Swenshuai.xi void HAL_VIF_RegInit (void)
1603*53ee8cc1Swenshuai.xi {
1604*53ee8cc1Swenshuai.xi     MS_PHY phyNonPMBankSize, phyPMBankSize;
1605*53ee8cc1Swenshuai.xi     MS_VIRT  virtNonPMBank, virtPMBank;
1606*53ee8cc1Swenshuai.xi 
1607*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nHAL_VIF_RegInit()"));
1608*53ee8cc1Swenshuai.xi     if (!MDrv_MMIO_GetBASE( &virtNonPMBank, &phyNonPMBankSize, MS_MODULE_VIF))
1609*53ee8cc1Swenshuai.xi     {
1610*53ee8cc1Swenshuai.xi         printf("\r\nIOMap failure to get MAP_NONPM_BANK");
1611*53ee8cc1Swenshuai.xi         virtNonPMBank = BASEADDR_RIU; // TODO what to do if failed??
1612*53ee8cc1Swenshuai.xi     }
1613*53ee8cc1Swenshuai.xi     else
1614*53ee8cc1Swenshuai.xi     {
1615*53ee8cc1Swenshuai.xi         HALVIFDBG(printf("\r\nMS_MODULE_VIF base = 0x%lX, length = %lu", virtNonPMBank, phyNonPMBankSize));
1616*53ee8cc1Swenshuai.xi     }
1617*53ee8cc1Swenshuai.xi 
1618*53ee8cc1Swenshuai.xi     _hal_VIF.virtVIFBaseAddr = virtNonPMBank;
1619*53ee8cc1Swenshuai.xi     _hal_VIF.bBaseAddrInitialized = 1;
1620*53ee8cc1Swenshuai.xi 
1621*53ee8cc1Swenshuai.xi     if (!MDrv_MMIO_GetBASE( &virtPMBank, &phyPMBankSize, MS_MODULE_PM))
1622*53ee8cc1Swenshuai.xi     {
1623*53ee8cc1Swenshuai.xi         printf("\r\nIOMap failure to get MAP_PM_BANK");
1624*53ee8cc1Swenshuai.xi         virtPMBank = (VIRT)BASEADDR_RIU; // TODO what to do if failed??
1625*53ee8cc1Swenshuai.xi     }
1626*53ee8cc1Swenshuai.xi     else
1627*53ee8cc1Swenshuai.xi     {
1628*53ee8cc1Swenshuai.xi         HALVIFDBG(printf("\r\nMS_MODULE_PM base = 0x%lX, length = %lu", virtPMBank, phyPMBankSize));
1629*53ee8cc1Swenshuai.xi     }
1630*53ee8cc1Swenshuai.xi }
1631*53ee8cc1Swenshuai.xi 
1632*53ee8cc1Swenshuai.xi 
HAL_VIF_SetClock(BOOL bEnable)1633*53ee8cc1Swenshuai.xi void HAL_VIF_SetClock(BOOL bEnable)
1634*53ee8cc1Swenshuai.xi {
1635*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nHAL_VIF_SetClock=%d",bEnable));
1636*53ee8cc1Swenshuai.xi 
1637*53ee8cc1Swenshuai.xi     //bEnable = (bEnable) ? 0:1; // 0 means enable
1638*53ee8cc1Swenshuai.xi }
1639*53ee8cc1Swenshuai.xi 
msVifAdcInitial(void)1640*53ee8cc1Swenshuai.xi void msVifAdcInitial(void)
1641*53ee8cc1Swenshuai.xi {
1642*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifAdcInitial()"));
1643*53ee8cc1Swenshuai.xi 
1644*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi     RIU_WriteByteMask(0x1E39L, 0x00, 0x03);  // DMDTOP/DMDANA_controlled by HK_MCU (0) or DMD_MCU (1)
1647*53ee8cc1Swenshuai.xi 
1648*53ee8cc1Swenshuai.xi     // enable vif DAC clock
1649*53ee8cc1Swenshuai.xi     // enable atsc_adcd_sync clock
1650*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x331AL, 0x04);
1651*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x331BL, 0x00);
1652*53ee8cc1Swenshuai.xi 
1653*53ee8cc1Swenshuai.xi     // enable vif clock
1654*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F1CL, 0x00);
1655*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F1DL, 0x00);
1656*53ee8cc1Swenshuai.xi 
1657*53ee8cc1Swenshuai.xi     // SRAM share clock
1658*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11FE2L, 0x01);  // ckg_dvbtm_sram_t14x_t24x_srd1x
1659*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11FE3L, 0x10);
1660*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F78L, 0x00);  // ckg_dvbtm_sram_t14x_t24x_srd1x_vifssc_isdbt_inner4x
1661*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F79L, 0x00);
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi     // ACIFIR clock
1664*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F24L, 0x01);
1665*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F25L, 0x08);
1666*53ee8cc1Swenshuai.xi 
1667*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F2AL, 0x00);   // DAGC1/2 SRAM MUX
1668*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F2BL, 0x00);
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x52990L, 0x00);  // ckg_dvbtm_sram_t14x_t24x_t24x_srd1x_vifssc_isdbt_inner4x_dtmb_inner12x
1671*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x52991L, 0x01);  // ckg_sram_t14x_t24x_s2inn_isdbt_inn2x_dtmb_eq2x
1672*53ee8cc1Swenshuai.xi 
1673*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C0L, 0x00);  // mulan_dvbt2_sram_share_en
1674*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C1L, 0x00);
1675*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C2L, 0x00);
1676*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C3L, 0x00);
1677*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C4L, 0x00);
1678*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C5L, 0x00);
1679*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C6L, 0x00);
1680*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C7L, 0x00);
1681*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C8L, 0x00);
1682*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127C9L, 0x00);
1683*53ee8cc1Swenshuai.xi 
1684*53ee8cc1Swenshuai.xi     // SRAM Power Control
1685*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12090L, 0xB8);
1686*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12091L, 0xBB);
1687*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E0L, 0x70);   // SRAM_PWR_CTRL_SEL
1688*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E1L, 0x00);
1689*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E2L, 0x00);
1690*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E3L, 0x00);
1691*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E4L, 0x00);
1692*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E5L, 0x00);
1693*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E6L, 0x00);
1694*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E7L, 0x00);
1695*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E8L, 0x00);
1696*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E9L, 0x00);
1697*53ee8cc1Swenshuai.xi 
1698*53ee8cc1Swenshuai.xi     // Enable VIF, DVBT, ATSC and VIF reset
1699*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12002L, 0x74);
1700*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12003L, 0x00);
1701*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12002L, 0x14);  // Enable VIF
1702*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12003L, 0x00);
1703*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12004L, 0x22);
1704*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12005L, 0x00);
1705*53ee8cc1Swenshuai.xi 
1706*53ee8cc1Swenshuai.xi     // DMD_ANA_ADC_SYNC CLK_W
1707*53ee8cc1Swenshuai.xi     // [0]  : disable clock = 1'b1
1708*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1709*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128D0L, 0x01);
1710*53ee8cc1Swenshuai.xi 
1711*53ee8cc1Swenshuai.xi     // Disable ADC sign bit
1712*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12060L, 0x04);
1713*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12061L, 0x00);
1714*53ee8cc1Swenshuai.xi 
1715*53ee8cc1Swenshuai.xi     // ADC I channel offset
1716*53ee8cc1Swenshuai.xi     // Change unsin into sin
1717*53ee8cc1Swenshuai.xi     // [11:0] reg_adc_offset_i
1718*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12064L, 0x00);
1719*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12065L, 0x00);
1720*53ee8cc1Swenshuai.xi 
1721*53ee8cc1Swenshuai.xi     // ADC Q channel offset
1722*53ee8cc1Swenshuai.xi     // Change unsin into sin
1723*53ee8cc1Swenshuai.xi     // [11:0] reg_adc_offset_q
1724*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12066L, 0x00);
1725*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12067L, 0x00);
1726*53ee8cc1Swenshuai.xi 
1727*53ee8cc1Swenshuai.xi     // VIF use DVB SRAM and FIR
1728*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x120A0L, 0x01);
1729*53ee8cc1Swenshuai.xi 
1730*53ee8cc1Swenshuai.xi     // Enable LDOS
1731*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128AEL, 0x00);
1732*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128AFL, 0x00);
1733*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128B0L, 0x00);
1734*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128B1L, 0x00);
1735*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128B2L, 0x11);   // ana_setting_sel
1736*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128B3L, 0x00);
1737*53ee8cc1Swenshuai.xi 
1738*53ee8cc1Swenshuai.xi     // PLL power up
1739*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1286AL, 0x03);
1740*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1286BL, 0x00);
1741*53ee8cc1Swenshuai.xi 
1742*53ee8cc1Swenshuai.xi     // VIF : 24*36/6  = 144 MHz
1743*53ee8cc1Swenshuai.xi     // VIF : 24*36/18 =  48 MHz
1744*53ee8cc1Swenshuai.xi     // Set MPLL_LOOP_DIV_FIRST and SECOND
1745*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12866L, 0x01);  // loop divider
1746*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12867L, 0x12);
1747*53ee8cc1Swenshuai.xi 
1748*53ee8cc1Swenshuai.xi     // Set MPLL_ADC_DIV_SE
1749*53ee8cc1Swenshuai.xi     if(VIF_IS_ADC_48MHz == 0)
1750*53ee8cc1Swenshuai.xi     {
1751*53ee8cc1Swenshuai.xi         // 144MHz case
1752*53ee8cc1Swenshuai.xi         RIU_WriteByte(0x12860L, 0x00);     // DMPLL post divider
1753*53ee8cc1Swenshuai.xi         RIU_WriteByte(0x12861L, 0x06);
1754*53ee8cc1Swenshuai.xi     }
1755*53ee8cc1Swenshuai.xi     else
1756*53ee8cc1Swenshuai.xi     {
1757*53ee8cc1Swenshuai.xi         // 48MHz case
1758*53ee8cc1Swenshuai.xi         RIU_WriteByte(0x12860L, 0x00);    // DMPLL post divider
1759*53ee8cc1Swenshuai.xi         RIU_WriteByte(0x12861L, 0x12);
1760*53ee8cc1Swenshuai.xi     }
1761*53ee8cc1Swenshuai.xi 
1762*53ee8cc1Swenshuai.xi     // MPLL_output_div_second
1763*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12864L, 0x00);
1764*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12865L, 0x00);
1765*53ee8cc1Swenshuai.xi 
1766*53ee8cc1Swenshuai.xi     // SIF CLK select
1767*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1287EL, 0x00);
1768*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1287FL, 0x00);
1769*53ee8cc1Swenshuai.xi 
1770*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(0x12834L, 1, _BIT4);          // EN_VCO_DIG
1771*53ee8cc1Swenshuai.xi 
1772*53ee8cc1Swenshuai.xi     // Set IMUXS QMUXS
1773*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12802L, 0x40);                  // VIF path, Bypass PGA
1774*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12803L, 0x04);                  // Mux selection
1775*53ee8cc1Swenshuai.xi 
1776*53ee8cc1Swenshuai.xi     // Set enable ADC clock
1777*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12818L, 0x02);                  // ADC_Q power down
1778*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12819L, 0x00);
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12840L, 0x00);                 // Ref Enable
1781*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12841L, 0x00);
1782*53ee8cc1Swenshuai.xi 
1783*53ee8cc1Swenshuai.xi     // Set ADC gain is 1
1784*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12816L, 0x05);
1785*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12817L, 0x05);
1786*53ee8cc1Swenshuai.xi 
1787*53ee8cc1Swenshuai.xi     // Calibration buffer
1788*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1281EL, 0x80);
1789*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1281FL, 0x00);
1790*53ee8cc1Swenshuai.xi 
1791*53ee8cc1Swenshuai.xi     // AGC control
1792*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12830L, 0x01);                 // AGC enable
1793*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12831L, 0x00);
1794*53ee8cc1Swenshuai.xi 
1795*53ee8cc1Swenshuai.xi     if(VIFInitialIn_inst.VifSawArch == NO_SAW_DIF)
1796*53ee8cc1Swenshuai.xi         VIFInitialIn_inst.VifSawArch = NO_SAW;
1797*53ee8cc1Swenshuai.xi 
1798*53ee8cc1Swenshuai.xi     HAL_VIF_Delay1ms(1);
1799*53ee8cc1Swenshuai.xi 
1800*53ee8cc1Swenshuai.xi     // RFAGC and IFAGC control (ADC)
1801*53ee8cc1Swenshuai.xi     RIU_WriteByteMask(RFAGC_DATA_SEL, 0, 0x0C);		// RFAGC
1802*53ee8cc1Swenshuai.xi     RIU_WriteByteMask(IFAGC_DATA_SEL, 0, 0xC0);		// IFAGC
1803*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(RFAGC_ODMODE, 0, _BIT1);
1804*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(IFAGC_ODMODE, 0, _BIT5);
1805*53ee8cc1Swenshuai.xi 
1806*53ee8cc1Swenshuai.xi     if ((VIFInitialIn_inst.VifSawArch == SILICON_TUNER) || (VIFInitialIn_inst.VifSawArch == NO_SAW) ||(VIFInitialIn_inst.VifSawArch == SAVE_PIN_VIF))
1807*53ee8cc1Swenshuai.xi         RIU_WriteRegBit(RFAGC_ENABLE, 0, _BIT0);         // RFAGC disable
1808*53ee8cc1Swenshuai.xi     else
1809*53ee8cc1Swenshuai.xi         RIU_WriteRegBit(RFAGC_ENABLE, 1, _BIT0);         // RFAGC enable
1810*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(IFAGC_ENABLE, 1, _BIT4);		 // IFAGC enable
1811*53ee8cc1Swenshuai.xi 
1812*53ee8cc1Swenshuai.xi     // RFAGC and IFAGC control (RF)
1813*53ee8cc1Swenshuai.xi     msWriteBit(RFAGC_SEL_SECONDER, 1, _BIT6);	     // 0: 1st order; 1: 2nd order
1814*53ee8cc1Swenshuai.xi     msWriteBit(RFAGC_DITHER_EN, 1, _BIT7);	            // dither disable
1815*53ee8cc1Swenshuai.xi     msWriteBit(RFAGC_POLARITY, 1, _BIT4);                // RFAGC polarity 0: negative logic
1816*53ee8cc1Swenshuai.xi     msWriteBit(OREN_RFAGC, 0, _BIT5);		            // RFAGC 0: BB control; 1: I2C control
1817*53ee8cc1Swenshuai.xi 
1818*53ee8cc1Swenshuai.xi     msWriteBit(IFAGC_SEL_SECONDER, 1, _BIT6);	     // 0: 1st order; 1: 2nd order
1819*53ee8cc1Swenshuai.xi     msWriteBit(IFAGC_DITHER_EN, 1, _BIT7);	            // dither disable
1820*53ee8cc1Swenshuai.xi     msWriteBit(IFAGC_POLARITY, 1, _BIT4);                 // RFAGC polarity 0: negative logic
1821*53ee8cc1Swenshuai.xi     msWriteBit(OREN_IFAGC, 0, _BIT6);		            // RFAGC 0: BB control; 1: I2C control
1822*53ee8cc1Swenshuai.xi 
1823*53ee8cc1Swenshuai.xi     msWriteBit(OREN_PGA1_V, 0, _BIT3);                  // Video PGA1 0: BB control; 1: I2C control
1824*53ee8cc1Swenshuai.xi     msWriteBit(OREN_PGA2_V, 0, _BIT2);                  // Video PGA2 0: BB control; 1: I2C control
1825*53ee8cc1Swenshuai.xi     msWriteBit(OREN_PGA1_S, 0, _BIT1);                  // Audio PGA1 0: BB control; 1: I2C control
1826*53ee8cc1Swenshuai.xi     msWriteBit(OREN_PGA2_S, 0, _BIT0);                  // Audio PGA2 0: BB control; 1: I2C control
1827*53ee8cc1Swenshuai.xi 
1828*53ee8cc1Swenshuai.xi     // ADC_SYNC CLK_R
1829*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F0AL, 0x00);
1830*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F0BL, 0x00);
1831*53ee8cc1Swenshuai.xi 
1832*53ee8cc1Swenshuai.xi     // ADC_SYNC CLK_W / DMD_ANA_ADC_SYNC CLK_R
1833*53ee8cc1Swenshuai.xi     // enable dvbc adc clock
1834*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x3314L, 0x04);
1835*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x3315L, 0x00);
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi     // DMD_ANA_ADC_SYNC CLK_W
1838*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x128D0L, 0x00);
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi     // EQ BYPASS
1841*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_EQFIR, 1, _BIT0);
1842*53ee8cc1Swenshuai.xi }
1843*53ee8cc1Swenshuai.xi 
1844*53ee8cc1Swenshuai.xi // For API
msVifSetIfFreq(IfFrequencyType ucIfFreq)1845*53ee8cc1Swenshuai.xi void msVifSetIfFreq(IfFrequencyType ucIfFreq)
1846*53ee8cc1Swenshuai.xi {
1847*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifSetIfFreq() ucIfFreq=%d",ucIfFreq));
1848*53ee8cc1Swenshuai.xi 
1849*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
1850*53ee8cc1Swenshuai.xi 
1851*53ee8cc1Swenshuai.xi      //g_FreqType = ucIfFreq; // 0x1121_D2
1852*53ee8cc1Swenshuai.xi      msWriteByte(VIF_RF_RESERVED_1, ucIfFreq);
1853*53ee8cc1Swenshuai.xi 
1854*53ee8cc1Swenshuai.xi      // VifShiftClk : 0x1121_D3
1855*53ee8cc1Swenshuai.xi      BYTE VifShiftClk = msReadByte(VIF_RF_RESERVED_1+1);
1856*53ee8cc1Swenshuai.xi 
1857*53ee8cc1Swenshuai.xi     // cvbs output
1858*53ee8cc1Swenshuai.xi     msWriteBit(VIFDAC_ENABLE, 1, _BIT3);                // enable vifdac
1859*53ee8cc1Swenshuai.xi 
1860*53ee8cc1Swenshuai.xi     // for China descrambler box
1861*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.ChinaDescramblerBox == 0)
1862*53ee8cc1Swenshuai.xi     {
1863*53ee8cc1Swenshuai.xi         msWriteBit(N_A1_IN_SEL, 0, _BIT4);                         // 0:from dvga, 1:from image_rej_iir
1864*53ee8cc1Swenshuai.xi         msWriteByteMask(VIFDAC_OUT_SEL, 0x00, 0x07);    // 0: cvbs output; 4: debug bus
1865*53ee8cc1Swenshuai.xi     }
1866*53ee8cc1Swenshuai.xi     else
1867*53ee8cc1Swenshuai.xi     {
1868*53ee8cc1Swenshuai.xi         msWriteByteMask(VIFDAC_OUT_SEL, 0x04, 0x07);    // 0: cvbs output; 4: debug bus
1869*53ee8cc1Swenshuai.xi         msWriteBit(DEBUG2_EN, 1, _BIT7);                // select debug2 data
1870*53ee8cc1Swenshuai.xi         msWriteByteMask(DEBUG_MODULE, 0x00, 0x0F);      // select filter debug bus
1871*53ee8cc1Swenshuai.xi 
1872*53ee8cc1Swenshuai.xi         if(VIFInitialIn_inst.ChinaDescramblerBox == 1)
1873*53ee8cc1Swenshuai.xi         {
1874*53ee8cc1Swenshuai.xi            msWriteBit(N_A1_IN_SEL, 1, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1875*53ee8cc1Swenshuai.xi            msWriteByte(DEBUG_PORT, 0x84);                                     // selsect CVBS output after Notch_A2 filter
1876*53ee8cc1Swenshuai.xi         }
1877*53ee8cc1Swenshuai.xi         else if(VIFInitialIn_inst.ChinaDescramblerBox == 2)
1878*53ee8cc1Swenshuai.xi         {
1879*53ee8cc1Swenshuai.xi            msWriteBit(N_A1_IN_SEL, 0, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1880*53ee8cc1Swenshuai.xi            msWriteByte(DEBUG_PORT, 0x98);                                     // select CVBS output after IMAGE_IIR
1881*53ee8cc1Swenshuai.xi         }
1882*53ee8cc1Swenshuai.xi         else if (VIFInitialIn_inst.ChinaDescramblerBox == 3)
1883*53ee8cc1Swenshuai.xi         {
1884*53ee8cc1Swenshuai.xi             msWriteBit(N_A1_IN_SEL, 0, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1885*53ee8cc1Swenshuai.xi             msWriteByte(DEBUG_PORT, 0x8A);                                     // select CVBS output after IMAGE_REJ1
1886*53ee8cc1Swenshuai.xi         }
1887*53ee8cc1Swenshuai.xi         else if (VIFInitialIn_inst.ChinaDescramblerBox == 4)
1888*53ee8cc1Swenshuai.xi         {
1889*53ee8cc1Swenshuai.xi             msWriteBit(N_A1_IN_SEL, 0, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1890*53ee8cc1Swenshuai.xi             msWriteByte(DEBUG_PORT, 0x88);                                     // select CVBS output after ACI_REJ
1891*53ee8cc1Swenshuai.xi         }
1892*53ee8cc1Swenshuai.xi         else if (VIFInitialIn_inst.ChinaDescramblerBox == 5)
1893*53ee8cc1Swenshuai.xi         {
1894*53ee8cc1Swenshuai.xi             msWriteBit(N_A1_IN_SEL, 0, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1895*53ee8cc1Swenshuai.xi             msWriteByte(DEBUG_PORT, 0x86);                                     // select CVBS output after MIXER_OUT_I
1896*53ee8cc1Swenshuai.xi         }
1897*53ee8cc1Swenshuai.xi         else if (VIFInitialIn_inst.ChinaDescramblerBox == 6)
1898*53ee8cc1Swenshuai.xi         {
1899*53ee8cc1Swenshuai.xi             msWriteBit(N_A1_IN_SEL, 0, _BIT4);                                   // 0:from dvga, 1:from image_rej_iir
1900*53ee8cc1Swenshuai.xi             msWriteByte(DEBUG_PORT, 0x8B);                                     // select CVBS output after IMAGE_REJ2
1901*53ee8cc1Swenshuai.xi         }
1902*53ee8cc1Swenshuai.xi         else
1903*53ee8cc1Swenshuai.xi         {
1904*53ee8cc1Swenshuai.xi             msWriteByteMask(VIFDAC_OUT_SEL, 0x00, 0x07);            // 0: cvbs output; 4: debug bus
1905*53ee8cc1Swenshuai.xi             msWriteBit(DEBUG2_EN, 0, _BIT7);                                   // select debug2 data
1906*53ee8cc1Swenshuai.xi             msWriteByteMask(DEBUG_MODULE, 0x00, 0x0F);             // select filter debug bus
1907*53ee8cc1Swenshuai.xi             msWriteBit(N_A1_IN_SEL, 1, _BIT4);                                // 0:from dvga, 1:from image_rej_iir
1908*53ee8cc1Swenshuai.xi         }
1909*53ee8cc1Swenshuai.xi      }
1910*53ee8cc1Swenshuai.xi 
1911*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 1)
1912*53ee8cc1Swenshuai.xi     {
1913*53ee8cc1Swenshuai.xi         // silicon tuner
1914*53ee8cc1Swenshuai.xi         msWriteByte(IF_RATE, 0x00);                         // IF rate for 0 MHz
1915*53ee8cc1Swenshuai.xi         msWriteByte(IF_RATE+1, 0x00);
1916*53ee8cc1Swenshuai.xi         msWriteByteMask(IF_RATE+2, 0x00, 0x3F);
1917*53ee8cc1Swenshuai.xi     }
1918*53ee8cc1Swenshuai.xi     else if (VIFInitialIn_inst.VifTunerType == 2)
1919*53ee8cc1Swenshuai.xi     {
1920*53ee8cc1Swenshuai.xi         // FM tuner
1921*53ee8cc1Swenshuai.xi         if(VIFInitialIn_inst.VifSawArch == SILICON_TUNER)
1922*53ee8cc1Swenshuai.xi         {
1923*53ee8cc1Swenshuai.xi            // silicon tuner
1924*53ee8cc1Swenshuai.xi            msWriteByte(IF_RATE, 0x00);                         // IF rate for 0 MHz
1925*53ee8cc1Swenshuai.xi            msWriteByte(IF_RATE+1, 0x00);
1926*53ee8cc1Swenshuai.xi            msWriteByteMask(IF_RATE+2, 0x00, 0x3F);
1927*53ee8cc1Swenshuai.xi         }
1928*53ee8cc1Swenshuai.xi     }
1929*53ee8cc1Swenshuai.xi     else
1930*53ee8cc1Swenshuai.xi     {
1931*53ee8cc1Swenshuai.xi         switch(ucIfFreq)
1932*53ee8cc1Swenshuai.xi         {
1933*53ee8cc1Swenshuai.xi             case IF_FREQ_3395:
1934*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0x44);                 // IF rate for -48.9 MHz  // HEX [ (IF/144) * 2^22]
1935*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0x44);
1936*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x2A, 0x3F);
1937*53ee8cc1Swenshuai.xi                 break;
1938*53ee8cc1Swenshuai.xi             case IF_FREQ_3800:
1939*53ee8cc1Swenshuai.xi             	if (VifShiftClk/*g_VifShiftClk*/ == 1)
1940*53ee8cc1Swenshuai.xi             	{
1941*53ee8cc1Swenshuai.xi                     msWriteByte(0x12866L, 0x00);//loop divider
1942*53ee8cc1Swenshuai.xi                     msWriteByte(0x12867L, 0x23);
1943*53ee8cc1Swenshuai.xi 
1944*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE, 0xA8);                 // IF rate for 23 MHz
1945*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE+1, 0x83);
1946*53ee8cc1Swenshuai.xi                     msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
1947*53ee8cc1Swenshuai.xi             	}
1948*53ee8cc1Swenshuai.xi                 else if(VifShiftClk/*g_VifShiftClk*/ == 2)
1949*53ee8cc1Swenshuai.xi                 {
1950*53ee8cc1Swenshuai.xi                     msWriteByte(0x12866L, 0x00);//loop divider
1951*53ee8cc1Swenshuai.xi                     msWriteByte(0x12867L, 0x25);
1952*53ee8cc1Swenshuai.xi 
1953*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE, 0x29);                 // IF rate for 23 MHz
1954*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE+1, 0xF2);
1955*53ee8cc1Swenshuai.xi                     msWriteByteMask(IF_RATE+2, 0x09, 0x3F);
1956*53ee8cc1Swenshuai.xi                 }
1957*53ee8cc1Swenshuai.xi             	else
1958*53ee8cc1Swenshuai.xi             	{
1959*53ee8cc1Swenshuai.xi                     msWriteByte(0x12866L, 0x00);//loop divider
1960*53ee8cc1Swenshuai.xi                     msWriteByte(0x12867L, 0x24);
1961*53ee8cc1Swenshuai.xi 
1962*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE, 0xE3);                 // IF rate for 23 MHz
1963*53ee8cc1Swenshuai.xi                     msWriteByte(IF_RATE+1, 0x38);
1964*53ee8cc1Swenshuai.xi                     msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
1965*53ee8cc1Swenshuai.xi                 }
1966*53ee8cc1Swenshuai.xi                 break;
1967*53ee8cc1Swenshuai.xi             case IF_FREQ_3890:
1968*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0x49);                 // IF rate for 23.9 MHz
1969*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0x9F);
1970*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
1971*53ee8cc1Swenshuai.xi                 break;
1972*53ee8cc1Swenshuai.xi             case IF_FREQ_3950:
1973*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0x8E);                 // IF rate for 24.5 MHz
1974*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0xE3);
1975*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
1976*53ee8cc1Swenshuai.xi                 break;
1977*53ee8cc1Swenshuai.xi             case IF_FREQ_4575:
1978*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0xAA);                 // IF rate for 30.75 MHz
1979*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0xAA);
1980*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x0D, 0x3F);
1981*53ee8cc1Swenshuai.xi                 break;
1982*53ee8cc1Swenshuai.xi             case IF_FREQ_5875:
1983*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0xC7);                 // IF rate for 43.75 MHz
1984*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0x71);
1985*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x13, 0x3F);
1986*53ee8cc1Swenshuai.xi                 break;
1987*53ee8cc1Swenshuai.xi             default:
1988*53ee8cc1Swenshuai.xi                 break;
1989*53ee8cc1Swenshuai.xi         }
1990*53ee8cc1Swenshuai.xi     }
1991*53ee8cc1Swenshuai.xi }
1992*53ee8cc1Swenshuai.xi 
msVifGroupDelayFilter(VIFSoundSystem ucSoundSystem,FrequencyBand frequencyRange)1993*53ee8cc1Swenshuai.xi void msVifGroupDelayFilter(VIFSoundSystem ucSoundSystem, FrequencyBand frequencyRange)
1994*53ee8cc1Swenshuai.xi {
1995*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilter=0, VifYcDelayFilter=0, VifGroupDelayFilter=0;
1996*53ee8cc1Swenshuai.xi 
1997*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
1998*53ee8cc1Swenshuai.xi 
1999*53ee8cc1Swenshuai.xi     switch (ucSoundSystem)
2000*53ee8cc1Swenshuai.xi     {
2001*53ee8cc1Swenshuai.xi         case VIF_SOUND_B:
2002*53ee8cc1Swenshuai.xi         case VIF_SOUND_B_NICAM:
2003*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2004*53ee8cc1Swenshuai.xi             {
2005*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterB_VHF_L;
2006*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterB_VHF_L;
2007*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterB_VHF_L;
2008*53ee8cc1Swenshuai.xi             }
2009*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2010*53ee8cc1Swenshuai.xi             {
2011*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterB_VHF_H;
2012*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterB_VHF_H;
2013*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterB_VHF_H;
2014*53ee8cc1Swenshuai.xi             }
2015*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2016*53ee8cc1Swenshuai.xi             {
2017*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterB_UHF;
2018*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterB_UHF;
2019*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterB_UHF;
2020*53ee8cc1Swenshuai.xi             }
2021*53ee8cc1Swenshuai.xi             else
2022*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter B frequencyRange=%d", frequencyRange);
2023*53ee8cc1Swenshuai.xi             break;
2024*53ee8cc1Swenshuai.xi 
2025*53ee8cc1Swenshuai.xi         case VIF_SOUND_GH:
2026*53ee8cc1Swenshuai.xi         case VIF_SOUND_GH_NICAM:
2027*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2028*53ee8cc1Swenshuai.xi             {
2029*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterGH_VHF_L;
2030*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterGH_VHF_L;
2031*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterGH_VHF_L;
2032*53ee8cc1Swenshuai.xi             }
2033*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2034*53ee8cc1Swenshuai.xi             {
2035*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterGH_VHF_H;
2036*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterGH_VHF_H;
2037*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterGH_VHF_H;
2038*53ee8cc1Swenshuai.xi             }
2039*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2040*53ee8cc1Swenshuai.xi             {
2041*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterGH_UHF;
2042*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterGH_UHF;
2043*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterGH_UHF;
2044*53ee8cc1Swenshuai.xi             }
2045*53ee8cc1Swenshuai.xi             else
2046*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter GH frequencyRange=%d", frequencyRange);
2047*53ee8cc1Swenshuai.xi             break;
2048*53ee8cc1Swenshuai.xi 
2049*53ee8cc1Swenshuai.xi         case VIF_SOUND_I:
2050*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2051*53ee8cc1Swenshuai.xi             {
2052*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterI_VHF_L;
2053*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterI_VHF_L;
2054*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterI_VHF_L;
2055*53ee8cc1Swenshuai.xi             }
2056*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2057*53ee8cc1Swenshuai.xi {
2058*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterI_VHF_H;
2059*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterI_VHF_H;
2060*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterI_VHF_H;
2061*53ee8cc1Swenshuai.xi             }
2062*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2063*53ee8cc1Swenshuai.xi             {
2064*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterI_UHF;
2065*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterI_UHF;
2066*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterI_UHF;
2067*53ee8cc1Swenshuai.xi             }
2068*53ee8cc1Swenshuai.xi             else
2069*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter I frequencyRange=%d", frequencyRange);
2070*53ee8cc1Swenshuai.xi             break;
2071*53ee8cc1Swenshuai.xi 
2072*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK1:
2073*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK2:
2074*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK3:
2075*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK_NICAM:
2076*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2077*53ee8cc1Swenshuai.xi             {
2078*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterDK_VHF_L;
2079*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterDK_VHF_L;
2080*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterDK_VHF_L;
2081*53ee8cc1Swenshuai.xi             }
2082*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2083*53ee8cc1Swenshuai.xi             {
2084*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterDK_VHF_H;
2085*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterDK_VHF_H;
2086*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterDK_VHF_H;
2087*53ee8cc1Swenshuai.xi             }
2088*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2089*53ee8cc1Swenshuai.xi             {
2090*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterDK_UHF;
2091*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterDK_UHF;
2092*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterDK_UHF;
2093*53ee8cc1Swenshuai.xi             }
2094*53ee8cc1Swenshuai.xi             else
2095*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter DK frequencyRange=%d", frequencyRange);
2096*53ee8cc1Swenshuai.xi             break;
2097*53ee8cc1Swenshuai.xi 
2098*53ee8cc1Swenshuai.xi         case VIF_SOUND_L:
2099*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2100*53ee8cc1Swenshuai.xi             {
2101*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterL_VHF_L;
2102*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterL_VHF_L;
2103*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterL_VHF_L;
2104*53ee8cc1Swenshuai.xi             }
2105*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2106*53ee8cc1Swenshuai.xi             {
2107*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterL_VHF_H;
2108*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterL_VHF_H;
2109*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterL_VHF_H;
2110*53ee8cc1Swenshuai.xi             }
2111*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2112*53ee8cc1Swenshuai.xi             {
2113*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterL_UHF;
2114*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterL_UHF;
2115*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterL_UHF;
2116*53ee8cc1Swenshuai.xi             }
2117*53ee8cc1Swenshuai.xi             else
2118*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter L frequencyRange=%d", frequencyRange);
2119*53ee8cc1Swenshuai.xi             break;
2120*53ee8cc1Swenshuai.xi 
2121*53ee8cc1Swenshuai.xi         case VIF_SOUND_LL:
2122*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2123*53ee8cc1Swenshuai.xi             {
2124*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterLL_VHF_L;
2125*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterLL_VHF_L;
2126*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterLL_VHF_L;
2127*53ee8cc1Swenshuai.xi             }
2128*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2129*53ee8cc1Swenshuai.xi             {
2130*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterLL_VHF_H;
2131*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterLL_VHF_H;
2132*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterLL_VHF_H;
2133*53ee8cc1Swenshuai.xi             }
2134*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2135*53ee8cc1Swenshuai.xi             {
2136*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterLL_UHF;
2137*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterLL_UHF;
2138*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterLL_UHF;
2139*53ee8cc1Swenshuai.xi             }
2140*53ee8cc1Swenshuai.xi             else
2141*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter LL frequencyRange=%d", frequencyRange);
2142*53ee8cc1Swenshuai.xi             break;
2143*53ee8cc1Swenshuai.xi 
2144*53ee8cc1Swenshuai.xi         case VIF_SOUND_MN:
2145*53ee8cc1Swenshuai.xi             if (frequencyRange==FREQ_VHF_L)
2146*53ee8cc1Swenshuai.xi             {
2147*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterMN_VHF_L;
2148*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterMN_VHF_L;
2149*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterMN_VHF_L;
2150*53ee8cc1Swenshuai.xi             }
2151*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_VHF_H)
2152*53ee8cc1Swenshuai.xi             {
2153*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterMN_VHF_H;
2154*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterMN_VHF_H;
2155*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterMN_VHF_H;
2156*53ee8cc1Swenshuai.xi             }
2157*53ee8cc1Swenshuai.xi             else if (frequencyRange==FREQ_UHF)
2158*53ee8cc1Swenshuai.xi             {
2159*53ee8cc1Swenshuai.xi                 VifPeakingFilter = VIFInitialIn_inst.VifPeakingFilterMN_UHF;
2160*53ee8cc1Swenshuai.xi                 VifYcDelayFilter = VIFInitialIn_inst.VifYcDelayFilterMN_UHF;
2161*53ee8cc1Swenshuai.xi                 VifGroupDelayFilter =VIFInitialIn_inst.VifGroupDelayFilterMN_UHF;
2162*53ee8cc1Swenshuai.xi             }
2163*53ee8cc1Swenshuai.xi             else
2164*53ee8cc1Swenshuai.xi                 printf("\r\n ERROR msVifGroupDelayFilter MN frequencyRange=%d", frequencyRange);
2165*53ee8cc1Swenshuai.xi             break;
2166*53ee8cc1Swenshuai.xi 
2167*53ee8cc1Swenshuai.xi         default:
2168*53ee8cc1Swenshuai.xi             printf("\r\n Error msVifGroupDelayFilter ucSoundSystem=%d",ucSoundSystem);
2169*53ee8cc1Swenshuai.xi             break;
2170*53ee8cc1Swenshuai.xi     }
2171*53ee8cc1Swenshuai.xi 
2172*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifGroupDelayFilter() VifPeakingFilter=%d",VifPeakingFilter));
2173*53ee8cc1Swenshuai.xi     HALVIFDBG(printf(" VifYcDelayFilter=%d VifGroupDelayFilter=%d",VifYcDelayFilter, VifGroupDelayFilter));
2174*53ee8cc1Swenshuai.xi 
2175*53ee8cc1Swenshuai.xi     if (VifPeakingFilter == 0x00)
2176*53ee8cc1Swenshuai.xi     {
2177*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_NULL);
2178*53ee8cc1Swenshuai.xi     }
2179*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x01)
2180*53ee8cc1Swenshuai.xi     {
2181*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_1dB);
2182*53ee8cc1Swenshuai.xi     }
2183*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x02)
2184*53ee8cc1Swenshuai.xi     {
2185*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_2dB);
2186*53ee8cc1Swenshuai.xi     }
2187*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x03)
2188*53ee8cc1Swenshuai.xi     {
2189*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_3dB);
2190*53ee8cc1Swenshuai.xi     }
2191*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x04)
2192*53ee8cc1Swenshuai.xi     {
2193*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_4dB);
2194*53ee8cc1Swenshuai.xi     }
2195*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x05)
2196*53ee8cc1Swenshuai.xi     {
2197*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_3dB_VSB);
2198*53ee8cc1Swenshuai.xi     }
2199*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x06)
2200*53ee8cc1Swenshuai.xi     {
2201*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_4dB_VSB);
2202*53ee8cc1Swenshuai.xi     }
2203*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x07)
2204*53ee8cc1Swenshuai.xi     {
2205*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_PEAKING_5dB_VSB);
2206*53ee8cc1Swenshuai.xi     }
2207*53ee8cc1Swenshuai.xi     else if (VifPeakingFilter == 0x80)
2208*53ee8cc1Swenshuai.xi     {
2209*53ee8cc1Swenshuai.xi         msWriteByte(SOS21_C0_L, VIFInitialIn_inst.VifSos21FilterC0);    // SOS21 (user define)
2210*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS21_C0_H, VIFInitialIn_inst.VifSos21FilterC0>>8, 0x07);
2211*53ee8cc1Swenshuai.xi         msWriteByte(SOS21_C1_L, VIFInitialIn_inst.VifSos21FilterC1);
2212*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS21_C1_H, VIFInitialIn_inst.VifSos21FilterC1>>8, 0x07);
2213*53ee8cc1Swenshuai.xi         msWriteByte(SOS21_C2_L, VIFInitialIn_inst.VifSos21FilterC2);
2214*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS21_C2_H, VIFInitialIn_inst.VifSos21FilterC2>>8, 0x07);
2215*53ee8cc1Swenshuai.xi         msWriteByte(SOS21_C3_L, VIFInitialIn_inst.VifSos21FilterC3);
2216*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS21_C3_H, VIFInitialIn_inst.VifSos21FilterC3>>8, 0x07);
2217*53ee8cc1Swenshuai.xi         msWriteByte(SOS21_C4_L, VIFInitialIn_inst.VifSos21FilterC4);
2218*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS21_C4_H, VIFInitialIn_inst.VifSos21FilterC4>>8, 0x07);
2219*53ee8cc1Swenshuai.xi     }
2220*53ee8cc1Swenshuai.xi 
2221*53ee8cc1Swenshuai.xi     if (VifYcDelayFilter == 0x00)
2222*53ee8cc1Swenshuai.xi     {
2223*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_YCDelay_NULL);
2224*53ee8cc1Swenshuai.xi     }
2225*53ee8cc1Swenshuai.xi     else if (VifYcDelayFilter == 0x01)
2226*53ee8cc1Swenshuai.xi     {
2227*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_YCDelay_VSB);
2228*53ee8cc1Swenshuai.xi     }
2229*53ee8cc1Swenshuai.xi     else if (VifYcDelayFilter == 0x80)
2230*53ee8cc1Swenshuai.xi     {
2231*53ee8cc1Swenshuai.xi         msWriteByte(SOS22_C0_L, VIFInitialIn_inst.VifSos22FilterC0);    // SOS22 (user define)
2232*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS22_C0_H, VIFInitialIn_inst.VifSos22FilterC0>>8, 0x07);
2233*53ee8cc1Swenshuai.xi         msWriteByte(SOS22_C1_L, VIFInitialIn_inst.VifSos22FilterC1);
2234*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS22_C1_H, VIFInitialIn_inst.VifSos22FilterC1>>8, 0x07);
2235*53ee8cc1Swenshuai.xi         msWriteByte(SOS22_C2_L, VIFInitialIn_inst.VifSos22FilterC2);
2236*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS22_C2_H, VIFInitialIn_inst.VifSos22FilterC2>>8, 0x07);
2237*53ee8cc1Swenshuai.xi         msWriteByte(SOS22_C3_L, VIFInitialIn_inst.VifSos22FilterC3);
2238*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS22_C3_H, VIFInitialIn_inst.VifSos22FilterC3>>8, 0x07);
2239*53ee8cc1Swenshuai.xi         msWriteByte(SOS22_C4_L, VIFInitialIn_inst.VifSos22FilterC4);
2240*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS22_C4_H, VIFInitialIn_inst.VifSos22FilterC4>>8, 0x07);
2241*53ee8cc1Swenshuai.xi     }
2242*53ee8cc1Swenshuai.xi 
2243*53ee8cc1Swenshuai.xi     if (VifGroupDelayFilter == 0x00)
2244*53ee8cc1Swenshuai.xi     {
2245*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_NULL);
2246*53ee8cc1Swenshuai.xi     }
2247*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x01)
2248*53ee8cc1Swenshuai.xi     {
2249*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_VSB_LG);
2250*53ee8cc1Swenshuai.xi     }
2251*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x02)
2252*53ee8cc1Swenshuai.xi     {
2253*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_VSB_Philips);
2254*53ee8cc1Swenshuai.xi     }
2255*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x03)
2256*53ee8cc1Swenshuai.xi     {
2257*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_Low_R);
2258*53ee8cc1Swenshuai.xi     }
2259*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x04)
2260*53ee8cc1Swenshuai.xi     {
2261*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_Low_L);
2262*53ee8cc1Swenshuai.xi     }
2263*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x05)
2264*53ee8cc1Swenshuai.xi     {
2265*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_High_R);
2266*53ee8cc1Swenshuai.xi     }
2267*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x06)
2268*53ee8cc1Swenshuai.xi     {
2269*53ee8cc1Swenshuai.xi         msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_GroupDelay_High_L);
2270*53ee8cc1Swenshuai.xi     }
2271*53ee8cc1Swenshuai.xi     else if (VifGroupDelayFilter == 0x80)
2272*53ee8cc1Swenshuai.xi     {
2273*53ee8cc1Swenshuai.xi         msWriteByte(SOS31_C0_L, VIFInitialIn_inst.VifSos31FilterC0);    // SOS31 (user define)
2274*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS31_C0_H, VIFInitialIn_inst.VifSos31FilterC0>>8, 0x07);
2275*53ee8cc1Swenshuai.xi         msWriteByte(SOS31_C1_L, VIFInitialIn_inst.VifSos31FilterC1);
2276*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS31_C1_H, VIFInitialIn_inst.VifSos31FilterC1>>8, 0x07);
2277*53ee8cc1Swenshuai.xi         msWriteByte(SOS31_C2_L, VIFInitialIn_inst.VifSos31FilterC2);
2278*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS31_C2_H, VIFInitialIn_inst.VifSos31FilterC2>>8, 0x07);
2279*53ee8cc1Swenshuai.xi         msWriteByte(SOS31_C3_L, VIFInitialIn_inst.VifSos31FilterC3);
2280*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS31_C3_H, VIFInitialIn_inst.VifSos31FilterC3>>8, 0x07);
2281*53ee8cc1Swenshuai.xi         msWriteByte(SOS31_C4_L, VIFInitialIn_inst.VifSos31FilterC4);
2282*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS31_C4_H, VIFInitialIn_inst.VifSos31FilterC4>>8, 0x07);
2283*53ee8cc1Swenshuai.xi         msWriteByte(SOS32_C0_L, VIFInitialIn_inst.VifSos32FilterC0);    // SOS32 (user define)
2284*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS32_C0_H, VIFInitialIn_inst.VifSos32FilterC0>>8, 0x07);
2285*53ee8cc1Swenshuai.xi         msWriteByte(SOS32_C1_L, VIFInitialIn_inst.VifSos32FilterC1);
2286*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS32_C1_H, VIFInitialIn_inst.VifSos32FilterC1>>8, 0x07);
2287*53ee8cc1Swenshuai.xi         msWriteByte(SOS32_C2_L, VIFInitialIn_inst.VifSos32FilterC2);
2288*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS32_C2_H, VIFInitialIn_inst.VifSos32FilterC2>>8, 0x07);
2289*53ee8cc1Swenshuai.xi         msWriteByte(SOS32_C3_L, VIFInitialIn_inst.VifSos32FilterC3);
2290*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS32_C3_H, VIFInitialIn_inst.VifSos32FilterC3>>8, 0x07);
2291*53ee8cc1Swenshuai.xi         msWriteByte(SOS32_C4_L, VIFInitialIn_inst.VifSos32FilterC4);
2292*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS32_C4_H, VIFInitialIn_inst.VifSos32FilterC4>>8, 0x07);
2293*53ee8cc1Swenshuai.xi     /*
2294*53ee8cc1Swenshuai.xi         msWriteByte(SOS33_C0_L, sVIFSOS33.Vif_SOS_33_C0);    // SOS33 (user define)
2295*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS33_C0_H, sVIFSOS33.Vif_SOS_33_C0>>8, 0x07);
2296*53ee8cc1Swenshuai.xi         msWriteByte(SOS33_C1_L, sVIFSOS33.Vif_SOS_33_C1);
2297*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS33_C1_H, sVIFSOS33.Vif_SOS_33_C1>>8, 0x07);
2298*53ee8cc1Swenshuai.xi         msWriteByte(SOS33_C2_L, sVIFSOS33.Vif_SOS_33_C2);
2299*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS33_C2_H, sVIFSOS33.Vif_SOS_33_C2>>8, 0x07);
2300*53ee8cc1Swenshuai.xi         msWriteByte(SOS33_C3_L, sVIFSOS33.Vif_SOS_33_C3);
2301*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS33_C3_H, sVIFSOS33.Vif_SOS_33_C3>>8, 0x07);
2302*53ee8cc1Swenshuai.xi         msWriteByte(SOS33_C4_L, sVIFSOS33.Vif_SOS_33_C4);
2303*53ee8cc1Swenshuai.xi         msWriteByteMask(SOS33_C4_H, sVIFSOS33.Vif_SOS_33_C4>>8, 0x07);
2304*53ee8cc1Swenshuai.xi     */
2305*53ee8cc1Swenshuai.xi     }
2306*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS33, 1, _BIT6);
2307*53ee8cc1Swenshuai.xi }
2308*53ee8cc1Swenshuai.xi 
2309*53ee8cc1Swenshuai.xi // For API
msVifSetSoundSystem(VIFSoundSystem ucSoundSystem)2310*53ee8cc1Swenshuai.xi void msVifSetSoundSystem(VIFSoundSystem ucSoundSystem)
2311*53ee8cc1Swenshuai.xi {
2312*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifSetSoundSystem() ucSoundSystem=%d",ucSoundSystem));
2313*53ee8cc1Swenshuai.xi 
2314*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
2315*53ee8cc1Swenshuai.xi 
2316*53ee8cc1Swenshuai.xi     DWORD VifCrRateTemp;
2317*53ee8cc1Swenshuai.xi 
2318*53ee8cc1Swenshuai.xi      // VifShiftClk : 0x1121_D3
2319*53ee8cc1Swenshuai.xi      BYTE VifShiftClk = msReadByte(VIF_RF_RESERVED_1+1);
2320*53ee8cc1Swenshuai.xi 
2321*53ee8cc1Swenshuai.xi     g_ucVifSoundSystemType = ucSoundSystem;
2322*53ee8cc1Swenshuai.xi 
2323*53ee8cc1Swenshuai.xi     if((ucSoundSystem == VIF_SOUND_L)||(ucSoundSystem == VIF_SOUND_LL))
2324*53ee8cc1Swenshuai.xi         msVifInitial();
2325*53ee8cc1Swenshuai.xi 
2326*53ee8cc1Swenshuai.xi     switch(ucSoundSystem)
2327*53ee8cc1Swenshuai.xi     {
2328*53ee8cc1Swenshuai.xi         case VIF_SOUND_B:
2329*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2330*53ee8cc1Swenshuai.xi             {
2331*53ee8cc1Swenshuai.xi                 // silicon tuner
2332*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2333*53ee8cc1Swenshuai.xi                 {
2334*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_B;
2335*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2336*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2337*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2338*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2339*53ee8cc1Swenshuai.xi                 }
2340*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2341*53ee8cc1Swenshuai.xi                 {
2342*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_B;
2343*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2344*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2345*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2346*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2347*53ee8cc1Swenshuai.xi                 }
2348*53ee8cc1Swenshuai.xi                 else
2349*53ee8cc1Swenshuai.xi                 {
2350*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_B & 0x000000FF));                                     // cr_rate for 6.4 MHz
2351*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_B>>8) & 0x000000FF));
2352*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_B>>16) & 0x000000FF), 0x0F);
2353*53ee8cc1Swenshuai.xi                 }
2354*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_B, _BIT0);                                                      // cr_rate not invert
2355*53ee8cc1Swenshuai.xi 
2356*53ee8cc1Swenshuai.xi             }
2357*53ee8cc1Swenshuai.xi 
2358*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_B_A2);
2359*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_B, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2360*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_BG_A2_NOTCH);
2361*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_B_LOWER_ACI); //Notch N-1 Audio Carrier
2362*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2363*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2364*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 0, _BIT1);                  // A_LPF_BG not bypass
2365*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                      // A3 notch not bypass
2366*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2367*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2368*53ee8cc1Swenshuai.xi 
2369*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2370*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2371*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2372*53ee8cc1Swenshuai.xi 
2373*53ee8cc1Swenshuai.xi             break;
2374*53ee8cc1Swenshuai.xi 
2375*53ee8cc1Swenshuai.xi         case VIF_SOUND_B_NICAM:
2376*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2377*53ee8cc1Swenshuai.xi             {
2378*53ee8cc1Swenshuai.xi                 // silicon tuner
2379*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2380*53ee8cc1Swenshuai.xi                 {
2381*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_B;
2382*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2383*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2384*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2385*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2386*53ee8cc1Swenshuai.xi                 }
2387*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2388*53ee8cc1Swenshuai.xi                 {
2389*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_B;
2390*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2391*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2392*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2393*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2394*53ee8cc1Swenshuai.xi                 }
2395*53ee8cc1Swenshuai.xi                 else
2396*53ee8cc1Swenshuai.xi                 {
2397*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_B & 0x000000FF));                                     // cr_rate for 6.4 MHz
2398*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_B>>8) & 0x000000FF));
2399*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_B>>16) & 0x000000FF), 0x0F);
2400*53ee8cc1Swenshuai.xi                 }
2401*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_B, _BIT0);                                                      // cr_rate not invert
2402*53ee8cc1Swenshuai.xi             }
2403*53ee8cc1Swenshuai.xi 
2404*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_B_NICAM);
2405*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_B_NICAM, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2406*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_BG_NICAM_NOTCH);
2407*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_B_LOWER_ACI); //Notch N-1 Audio Carrier
2408*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2409*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2410*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 0, _BIT1);                  // A_LPF_BG not bypass
2411*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                      // A3 notch not bypass
2412*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2413*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2414*53ee8cc1Swenshuai.xi              //for Non-NTSC Setting
2415*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2416*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2417*53ee8cc1Swenshuai.xi 
2418*53ee8cc1Swenshuai.xi             break;
2419*53ee8cc1Swenshuai.xi 
2420*53ee8cc1Swenshuai.xi         case VIF_SOUND_GH:
2421*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2422*53ee8cc1Swenshuai.xi             {
2423*53ee8cc1Swenshuai.xi                 // silicon tuner
2424*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2425*53ee8cc1Swenshuai.xi                 {
2426*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_GH;
2427*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2428*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2429*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2430*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2431*53ee8cc1Swenshuai.xi                 }
2432*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2433*53ee8cc1Swenshuai.xi                 {
2434*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_GH;
2435*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2436*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2437*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2438*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2439*53ee8cc1Swenshuai.xi                 }
2440*53ee8cc1Swenshuai.xi                 else
2441*53ee8cc1Swenshuai.xi                 {
2442*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_GH & 0x000000FF));                                     // cr_rate for 6.4 MHz
2443*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_GH>>8) & 0x000000FF));
2444*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_GH>>16) & 0x000000FF), 0x0F);
2445*53ee8cc1Swenshuai.xi                 }
2446*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_GH, _BIT0);                                                      // cr_rate not invert
2447*53ee8cc1Swenshuai.xi             }
2448*53ee8cc1Swenshuai.xi 
2449*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_GH_A2);
2450*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_GH, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2451*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_BG_A2_NOTCH);
2452*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_GH_LOWER_ACI); //Notch N-1 Audio Carrier
2453*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2454*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2455*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 0, _BIT1);                  // A_LPF_BG not bypass
2456*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                      // A3 notch not bypass
2457*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2458*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2459*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2460*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2461*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2462*53ee8cc1Swenshuai.xi 
2463*53ee8cc1Swenshuai.xi             break;
2464*53ee8cc1Swenshuai.xi 
2465*53ee8cc1Swenshuai.xi         case VIF_SOUND_GH_NICAM:
2466*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2467*53ee8cc1Swenshuai.xi             {
2468*53ee8cc1Swenshuai.xi                // silicon tuner
2469*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2470*53ee8cc1Swenshuai.xi                 {
2471*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_GH;
2472*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2473*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2474*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2475*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2476*53ee8cc1Swenshuai.xi                 }
2477*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2478*53ee8cc1Swenshuai.xi                 {
2479*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_GH;
2480*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2481*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2482*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2483*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2484*53ee8cc1Swenshuai.xi                 }
2485*53ee8cc1Swenshuai.xi                 else
2486*53ee8cc1Swenshuai.xi                 {
2487*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_GH & 0x000000FF));                                     // cr_rate for 6.4 MHz
2488*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_GH>>8) & 0x000000FF));
2489*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_GH>>16) & 0x000000FF), 0x0F);
2490*53ee8cc1Swenshuai.xi                 }
2491*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_GH, _BIT0);                                                      // cr_rate not invert
2492*53ee8cc1Swenshuai.xi             }
2493*53ee8cc1Swenshuai.xi 
2494*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_GH_NICAM);
2495*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_GH_NICAM, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2496*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_BG_NICAM_NOTCH);
2497*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_GH_LOWER_ACI); //Notch N-1 Audio Carrier
2498*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2499*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2500*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 0, _BIT1);                  // A_LPF_BG not bypass
2501*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                      // A3 notch not bypass
2502*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2503*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2504*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2505*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2506*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi             break;
2509*53ee8cc1Swenshuai.xi 
2510*53ee8cc1Swenshuai.xi         case VIF_SOUND_I:
2511*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2512*53ee8cc1Swenshuai.xi             {
2513*53ee8cc1Swenshuai.xi                // silicon tuner
2514*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2515*53ee8cc1Swenshuai.xi                 {
2516*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_I;
2517*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2518*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2519*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2520*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2521*53ee8cc1Swenshuai.xi                 }
2522*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2523*53ee8cc1Swenshuai.xi                 {
2524*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_I;
2525*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2526*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2527*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2528*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2529*53ee8cc1Swenshuai.xi                 }
2530*53ee8cc1Swenshuai.xi                 else
2531*53ee8cc1Swenshuai.xi                 {
2532*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_I & 0x000000FF));                                     // cr_rate for 6.4 MHz
2533*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_I>>8) & 0x000000FF));
2534*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_I>>16) & 0x000000FF), 0x0F);
2535*53ee8cc1Swenshuai.xi                 }
2536*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_I, _BIT0);                                                      // cr_rate not invert
2537*53ee8cc1Swenshuai.xi             }
2538*53ee8cc1Swenshuai.xi 
2539*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_I_NICAM);
2540*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_I, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2541*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_I_NOTCH);
2542*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_I_LOWER_ACI);  //Notch N-1 Audio Carrier
2543*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2544*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2545*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2546*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2547*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2548*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2549*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2550*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2551*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2552*53ee8cc1Swenshuai.xi 
2553*53ee8cc1Swenshuai.xi             break;
2554*53ee8cc1Swenshuai.xi 
2555*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK1:
2556*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2557*53ee8cc1Swenshuai.xi             {
2558*53ee8cc1Swenshuai.xi                // silicon tuner
2559*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2560*53ee8cc1Swenshuai.xi                 {
2561*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2562*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2563*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2564*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2565*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2566*53ee8cc1Swenshuai.xi                 }
2567*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2568*53ee8cc1Swenshuai.xi                 {
2569*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2570*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2571*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2572*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2573*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2574*53ee8cc1Swenshuai.xi                 }
2575*53ee8cc1Swenshuai.xi                 else
2576*53ee8cc1Swenshuai.xi                 {
2577*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_DK & 0x000000FF));                                     // cr_rate for 6.4 MHz
2578*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>8) & 0x000000FF));
2579*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>16) & 0x000000FF), 0x0F);
2580*53ee8cc1Swenshuai.xi                 }
2581*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_DK, _BIT0);                                                      // cr_rate not invert
2582*53ee8cc1Swenshuai.xi             }
2583*53ee8cc1Swenshuai.xi 
2584*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_SECAM_DK1_A2);
2585*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_DK1, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2586*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_DK1_NOTCH);
2587*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI);//Notch N-1 Audio Carrier
2588*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2589*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2590*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2591*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2592*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2593*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2594*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2595*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2596*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2597*53ee8cc1Swenshuai.xi 
2598*53ee8cc1Swenshuai.xi             break;
2599*53ee8cc1Swenshuai.xi 
2600*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK2:
2601*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2602*53ee8cc1Swenshuai.xi             {
2603*53ee8cc1Swenshuai.xi                // silicon tuner
2604*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2605*53ee8cc1Swenshuai.xi                 {
2606*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2607*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2608*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2609*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2610*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2611*53ee8cc1Swenshuai.xi                 }
2612*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2613*53ee8cc1Swenshuai.xi                 {
2614*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2615*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2616*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2617*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2618*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2619*53ee8cc1Swenshuai.xi                 }
2620*53ee8cc1Swenshuai.xi                 else
2621*53ee8cc1Swenshuai.xi                 {
2622*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_DK & 0x000000FF));                                     // cr_rate for 6.4 MHz
2623*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>8) & 0x000000FF));
2624*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>16) & 0x000000FF), 0x0F);
2625*53ee8cc1Swenshuai.xi                 }
2626*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_DK, _BIT0);                                                      // cr_rate not invert
2627*53ee8cc1Swenshuai.xi             }
2628*53ee8cc1Swenshuai.xi 
2629*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK2_A2);
2630*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_DK2, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2631*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_DK2_NOTCH);
2632*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI);  //Notch N-1 Audio Carrier
2633*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2634*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2635*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2636*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2637*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2638*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2639*53ee8cc1Swenshuai.xi 	        //for Non-NTSC Setting
2640*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2641*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2642*53ee8cc1Swenshuai.xi 
2643*53ee8cc1Swenshuai.xi             break;
2644*53ee8cc1Swenshuai.xi 
2645*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK_NICAM:
2646*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2647*53ee8cc1Swenshuai.xi             {
2648*53ee8cc1Swenshuai.xi                // silicon tuner
2649*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2650*53ee8cc1Swenshuai.xi                 {
2651*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2652*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2653*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2654*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2655*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2656*53ee8cc1Swenshuai.xi                 }
2657*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2658*53ee8cc1Swenshuai.xi                 {
2659*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2660*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2661*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2662*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2663*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2664*53ee8cc1Swenshuai.xi                 }
2665*53ee8cc1Swenshuai.xi                 else
2666*53ee8cc1Swenshuai.xi                 {
2667*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_DK & 0x000000FF));                                     // cr_rate for 6.4 MHz
2668*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>8) & 0x000000FF));
2669*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>16) & 0x000000FF), 0x0F);
2670*53ee8cc1Swenshuai.xi                 }
2671*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_DK, _BIT0);                                                      // cr_rate not invert
2672*53ee8cc1Swenshuai.xi             }
2673*53ee8cc1Swenshuai.xi 
2674*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK2_NICAM);
2675*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_DK_NICAM, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2676*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_DK_NICAM_NOTCH);
2677*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI);  //Notch N-1 Audio Carrier
2678*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_ACI_REJ_NTSC, 1, _BIT6);       // bypass ACI_REJ_NTSC_filter
2679*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2680*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2681*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2682*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2683*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2684*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2685*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2686*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2687*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2688*53ee8cc1Swenshuai.xi 
2689*53ee8cc1Swenshuai.xi             break;
2690*53ee8cc1Swenshuai.xi 
2691*53ee8cc1Swenshuai.xi         case VIF_SOUND_DK3:
2692*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2693*53ee8cc1Swenshuai.xi             {
2694*53ee8cc1Swenshuai.xi                // silicon tuner
2695*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2696*53ee8cc1Swenshuai.xi                 {
2697*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2698*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2699*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2700*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2701*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2702*53ee8cc1Swenshuai.xi                 }
2703*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2704*53ee8cc1Swenshuai.xi                 {
2705*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_DK;
2706*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2707*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2708*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2709*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2710*53ee8cc1Swenshuai.xi                 }
2711*53ee8cc1Swenshuai.xi                 else
2712*53ee8cc1Swenshuai.xi                 {
2713*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_DK & 0x000000FF));                                     // cr_rate for 6.4 MHz
2714*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>8) & 0x000000FF));
2715*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_DK>>16) & 0x000000FF), 0x0F);
2716*53ee8cc1Swenshuai.xi                 }
2717*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_DK, _BIT0);                                                      // cr_rate not invert
2718*53ee8cc1Swenshuai.xi             }
2719*53ee8cc1Swenshuai.xi 
2720*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_SECAM_DK3_A2);
2721*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_DK3, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2722*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_DK3_NOTCH);
2723*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI);//Notch N-1 Audio Carrier
2724*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2725*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2726*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2727*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2728*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2729*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2730*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2731*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2732*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2733*53ee8cc1Swenshuai.xi 
2734*53ee8cc1Swenshuai.xi             break;
2735*53ee8cc1Swenshuai.xi 
2736*53ee8cc1Swenshuai.xi         case VIF_SOUND_L:
2737*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2738*53ee8cc1Swenshuai.xi             {
2739*53ee8cc1Swenshuai.xi                // silicon tuner
2740*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2741*53ee8cc1Swenshuai.xi                 {
2742*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_L;
2743*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2744*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2745*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2746*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2747*53ee8cc1Swenshuai.xi                 }
2748*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2749*53ee8cc1Swenshuai.xi                 {
2750*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_L;
2751*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2752*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2753*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2754*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2755*53ee8cc1Swenshuai.xi                 }
2756*53ee8cc1Swenshuai.xi                 else
2757*53ee8cc1Swenshuai.xi                 {
2758*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_L & 0x000000FF));                                     // cr_rate for 6.4 MHz
2759*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_L>>8) & 0x000000FF));
2760*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_L>>16) & 0x000000FF), 0x0F);
2761*53ee8cc1Swenshuai.xi                 }
2762*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_L, _BIT0);                                                      // cr_rate not invert
2763*53ee8cc1Swenshuai.xi             }
2764*53ee8cc1Swenshuai.xi 
2765*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_SECAM_L_NICAM);
2766*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_L, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2767*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_L_NICAM_NOTCH);
2768*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI); //Notch N-1 Audio Carrier
2769*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2770*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2771*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2772*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2773*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2774*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2775*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2776*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2777*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2778*53ee8cc1Swenshuai.xi 
2779*53ee8cc1Swenshuai.xi             break;
2780*53ee8cc1Swenshuai.xi 
2781*53ee8cc1Swenshuai.xi         case VIF_SOUND_LL:
2782*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2783*53ee8cc1Swenshuai.xi             {
2784*53ee8cc1Swenshuai.xi                // silicon tuner
2785*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2786*53ee8cc1Swenshuai.xi                 {
2787*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_LL;
2788*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2789*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2790*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2791*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2792*53ee8cc1Swenshuai.xi                 }
2793*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2794*53ee8cc1Swenshuai.xi                 {
2795*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_LL;
2796*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2797*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2798*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2799*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2800*53ee8cc1Swenshuai.xi                 }
2801*53ee8cc1Swenshuai.xi                 else
2802*53ee8cc1Swenshuai.xi                 {
2803*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_LL & 0x000000FF));                                     // cr_rate for 6.4 MHz
2804*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_LL>>8) & 0x000000FF));
2805*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_LL>>16) & 0x000000FF), 0x0F);
2806*53ee8cc1Swenshuai.xi                 }
2807*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_LL, _BIT0);                                                      // cr_rate not invert
2808*53ee8cc1Swenshuai.xi             }
2809*53ee8cc1Swenshuai.xi 
2810*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_SECAM_L_NICAM);
2811*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_LL, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2812*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_L_NICAM_NOTCH);
2813*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_PAL_DK_LOWER_ACI);//Notch N-1 Audio Carrier
2814*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 0, _BIT6);                     // A_LPF_BG_SEL = 0 (PAL)
2815*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);             // CO_A_REJ_NTSC bypass
2816*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2817*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                         // A3 notch not bypass
2818*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2819*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2820*53ee8cc1Swenshuai.xi             //for Non-NTSC Setting
2821*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 1 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2822*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 1 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2823*53ee8cc1Swenshuai.xi 
2824*53ee8cc1Swenshuai.xi             break;
2825*53ee8cc1Swenshuai.xi 
2826*53ee8cc1Swenshuai.xi         case VIF_SOUND_MN:
2827*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 1)
2828*53ee8cc1Swenshuai.xi             {
2829*53ee8cc1Swenshuai.xi                // silicon tuner
2830*53ee8cc1Swenshuai.xi                 if((VifShiftClk/*g_VifShiftClk*/ == 1)&&(VIF_IS_ADC_48MHz == 0))
2831*53ee8cc1Swenshuai.xi                 {
2832*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_MN;
2833*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *2107)>>11; // 43.2/42 = 1.02857 ~= 1.02881
2834*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2835*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2836*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2837*53ee8cc1Swenshuai.xi                 }
2838*53ee8cc1Swenshuai.xi                 else if((VifShiftClk/*g_VifShiftClk*/ == 2)&&(VIF_IS_ADC_48MHz == 0))
2839*53ee8cc1Swenshuai.xi                 {
2840*53ee8cc1Swenshuai.xi                     VifCrRateTemp = VIFInitialIn_inst.VifCrRate_MN;
2841*53ee8cc1Swenshuai.xi                     VifCrRateTemp = (VifCrRateTemp *1993)>>11; // 43.2/44.4 = 0.97297 ~= 0.97314
2842*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VifCrRateTemp & 0x000000FF));                                     // cr_rate for 6.4 MHz
2843*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VifCrRateTemp>>8) & 0x000000FF));
2844*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VifCrRateTemp>>16) & 0x000000FF), 0x0F);
2845*53ee8cc1Swenshuai.xi                 }
2846*53ee8cc1Swenshuai.xi                 else
2847*53ee8cc1Swenshuai.xi                 {
2848*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE, (BYTE) (VIFInitialIn_inst.VifCrRate_MN & 0x000000FF));                                     // cr_rate for 6.4 MHz
2849*53ee8cc1Swenshuai.xi                     msWriteByte(CR_RATE+1, (BYTE) ((VIFInitialIn_inst.VifCrRate_MN>>8) & 0x000000FF));
2850*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_RATE+2, (BYTE) ((VIFInitialIn_inst.VifCrRate_MN>>16) & 0x000000FF), 0x0F);
2851*53ee8cc1Swenshuai.xi                 }
2852*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, VIFInitialIn_inst.VifCrInvert_MN, _BIT0);                                                      // cr_rate not invert
2853*53ee8cc1Swenshuai.xi             }
2854*53ee8cc1Swenshuai.xi 
2855*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_NTSC_MN_A2);
2856*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_GDE_MN_NOTCH);
2857*53ee8cc1Swenshuai.xi             msVifGroupDelayFilter(VIF_SOUND_MN, (FrequencyBand)VIFInitialIn_inst.VifFreqBand);
2858*53ee8cc1Swenshuai.xi             msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_NTSC_MN_LOWER_ACI); //Notch N-1 Audio Carrier
2859*53ee8cc1Swenshuai.xi             msWriteBit(A_LPF_BG_SEL, 1, _BIT6);                     // A_LPF_BG_SEL = 1 (NTSC)
2860*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_CO_A_REJ_NTSC, 1, _BIT5);        // CO_A_REJ_NTSC bypass
2861*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_A_LPF_BG, 1, _BIT1);                  // A_LPF_BG bypass
2862*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A3, 0, _BIT5);                      // A3 notch not bypass
2863*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A4, 0, _BIT6);                        // A4 notch not bypass
2864*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_N_A5, 0, _BIT3);                        //Notch_S filter not bypass
2865*53ee8cc1Swenshuai.xi             //for NTSC Setting
2866*53ee8cc1Swenshuai.xi             msWriteBit(V_ACI_BPF_SEL, 0 , _BIT2); // Video_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2867*53ee8cc1Swenshuai.xi             msWriteBit(A_ACI_BPF_SEL, 0 , _BIT3); // Audio_ACI_BPF_Selective   0:ACI_BPF_6M , 1:ACI_BPF_7M
2868*53ee8cc1Swenshuai.xi 
2869*53ee8cc1Swenshuai.xi             break;
2870*53ee8cc1Swenshuai.xi 
2871*53ee8cc1Swenshuai.xi         default:
2872*53ee8cc1Swenshuai.xi             break;
2873*53ee8cc1Swenshuai.xi     }
2874*53ee8cc1Swenshuai.xi     msVifLoadEQCoeff(ucSoundSystem);
2875*53ee8cc1Swenshuai.xi }
2876*53ee8cc1Swenshuai.xi 
2877*53ee8cc1Swenshuai.xi // For API
msVifTopAdjust(void)2878*53ee8cc1Swenshuai.xi void msVifTopAdjust(void)
2879*53ee8cc1Swenshuai.xi {
2880*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifTopAdjust() "));
2881*53ee8cc1Swenshuai.xi 
2882*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
2883*53ee8cc1Swenshuai.xi 
2884*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 0)
2885*53ee8cc1Swenshuai.xi     {
2886*53ee8cc1Swenshuai.xi         msWriteByteMask(AGC_PGA2_MIN, VIFInitialIn_inst.VifTop, 0x1F); 	// pga2 min
2887*53ee8cc1Swenshuai.xi         msWriteByteMask(AGC_PGA2_OV, VIFInitialIn_inst.VifTop, 0x1F);
2888*53ee8cc1Swenshuai.xi         msWriteBit(AGC_PGA2_OREN, 1, _BIT1);
2889*53ee8cc1Swenshuai.xi         msWriteBit(AGC_PGA2_OREN, 0, _BIT1);
2890*53ee8cc1Swenshuai.xi     }
2891*53ee8cc1Swenshuai.xi }
2892*53ee8cc1Swenshuai.xi 
msVifDynamicTopAdjust(void)2893*53ee8cc1Swenshuai.xi void msVifDynamicTopAdjust(void)
2894*53ee8cc1Swenshuai.xi {
2895*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifDynamicTopAdjust() "));
2896*53ee8cc1Swenshuai.xi 
2897*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
2898*53ee8cc1Swenshuai.xi 
2899*53ee8cc1Swenshuai.xi     BYTE mean256=0, agc_pga2=0, ref=0, diff=0;
2900*53ee8cc1Swenshuai.xi     WORD vga=0;
2901*53ee8cc1Swenshuai.xi 
2902*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 0)
2903*53ee8cc1Swenshuai.xi     {
2904*53ee8cc1Swenshuai.xi         vga = msRead2Bytes(AGC_VGA);
2905*53ee8cc1Swenshuai.xi         agc_pga2 = msReadByte(AGC_PGA2C) & 0x1F;
2906*53ee8cc1Swenshuai.xi         mean256 = (BYTE)(msRead2Bytes(AGC_MEAN256)>>1);              // AGC mean256
2907*53ee8cc1Swenshuai.xi         ref = msReadByte(AGC_REF);                      // AGC ref
2908*53ee8cc1Swenshuai.xi 
2909*53ee8cc1Swenshuai.xi         if (g_bCheckModulationType == 0)
2910*53ee8cc1Swenshuai.xi         {
2911*53ee8cc1Swenshuai.xi             diff = 0x15;                                // negative modulation
2912*53ee8cc1Swenshuai.xi         }
2913*53ee8cc1Swenshuai.xi         else
2914*53ee8cc1Swenshuai.xi         {
2915*53ee8cc1Swenshuai.xi             diff = 0x0A;                                // positive modulation
2916*53ee8cc1Swenshuai.xi         }
2917*53ee8cc1Swenshuai.xi 
2918*53ee8cc1Swenshuai.xi         if ((vga == VIFInitialIn_inst.VifVgaMinimum) && (mean256 >= (ref+diff)) && (agc_pga2 == VIFInitialIn_inst.VifTop))
2919*53ee8cc1Swenshuai.xi         {
2920*53ee8cc1Swenshuai.xi             msWriteByteMask(AGC_PGA2_MIN, VIFInitialIn_inst.VifDynamicTopMin, 0x1F);  // pga2 min
2921*53ee8cc1Swenshuai.xi         }
2922*53ee8cc1Swenshuai.xi         else if (((agc_pga2) < VIFInitialIn_inst.VifTop) && ((vga >= 0xF000) || (vga <= VIFInitialIn_inst.VifVgaMaximum)))
2923*53ee8cc1Swenshuai.xi         {
2924*53ee8cc1Swenshuai.xi             msVifTopAdjust();
2925*53ee8cc1Swenshuai.xi         }
2926*53ee8cc1Swenshuai.xi     }
2927*53ee8cc1Swenshuai.xi }
2928*53ee8cc1Swenshuai.xi 
msVifLoad(void)2929*53ee8cc1Swenshuai.xi void msVifLoad(void)
2930*53ee8cc1Swenshuai.xi {
2931*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
2932*53ee8cc1Swenshuai.xi 
2933*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(RF_LOAD , 1 , _BIT0);
2934*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(DBB1_LOAD , 1 , _BIT0);
2935*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(DBB2_LOAD , 1 , _BIT0);
2936*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(DBB2_LOAD , 0, _BIT0);
2937*53ee8cc1Swenshuai.xi }
2938*53ee8cc1Swenshuai.xi 
2939*53ee8cc1Swenshuai.xi // For API
msVifInitial(void)2940*53ee8cc1Swenshuai.xi void msVifInitial(void)
2941*53ee8cc1Swenshuai.xi {
2942*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifInitial()"));
2943*53ee8cc1Swenshuai.xi 
2944*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
2945*53ee8cc1Swenshuai.xi 
2946*53ee8cc1Swenshuai.xi      // VifShiftClk : 0x1121_D3
2947*53ee8cc1Swenshuai.xi      BYTE VifShiftClk = msReadByte(VIF_RF_RESERVED_1+1);
2948*53ee8cc1Swenshuai.xi 
2949*53ee8cc1Swenshuai.xi     msWriteByteMask(VIF_SOFT_RSTZ, 0x00, 0x7F);                     // VIF software reset
2950*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_RSTZ, 0, _BIT0);                           // clampgain software reset
2951*53ee8cc1Swenshuai.xi     msWriteBit(VSYNC_RSTZ, 0, _BIT0);                               // vsync software reset
2952*53ee8cc1Swenshuai.xi 
2953*53ee8cc1Swenshuai.xi     g_ucVifStatusStep = VIF_START;
2954*53ee8cc1Swenshuai.xi 
2955*53ee8cc1Swenshuai.xi     //Serious_ACI_Det parameter
2956*53ee8cc1Swenshuai.xi     AGC_Change_Index = 0;
2957*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x1286EL, 0x04); // ADC Setting Overflow value
2958*53ee8cc1Swenshuai.xi 
2959*53ee8cc1Swenshuai.xi     if ((g_ucVifSoundSystemType == VIF_SOUND_L) || (g_ucVifSoundSystemType == VIF_SOUND_LL))
2960*53ee8cc1Swenshuai.xi     {
2961*53ee8cc1Swenshuai.xi         g_bCheckModulationType = 1;     // positive modulation
2962*53ee8cc1Swenshuai.xi         g_bCheckIFFreq = (g_ucVifSoundSystemType == VIF_SOUND_L) ? 0 : 1;   // 0: 38.9 MHz; 1: 33.9 MHz
2963*53ee8cc1Swenshuai.xi     }
2964*53ee8cc1Swenshuai.xi     else
2965*53ee8cc1Swenshuai.xi     {
2966*53ee8cc1Swenshuai.xi         g_bCheckModulationType = 0;     // negative modulation
2967*53ee8cc1Swenshuai.xi         g_bCheckIFFreq = 0;             // 38.9 MHz
2968*53ee8cc1Swenshuai.xi     }
2969*53ee8cc1Swenshuai.xi 
2970*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
2971*53ee8cc1Swenshuai.xi     {
2972*53ee8cc1Swenshuai.xi         msWriteByteMask(MODULATION_TYPE, 0x0F, 0x0F);               // positive modulation
2973*53ee8cc1Swenshuai.xi     }
2974*53ee8cc1Swenshuai.xi     else
2975*53ee8cc1Swenshuai.xi     {
2976*53ee8cc1Swenshuai.xi         msWriteByteMask(MODULATION_TYPE, 0x00, 0x0F);               // negative modulation
2977*53ee8cc1Swenshuai.xi     }
2978*53ee8cc1Swenshuai.xi 
2979*53ee8cc1Swenshuai.xi     // AGC
2980*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
2981*53ee8cc1Swenshuai.xi     {
2982*53ee8cc1Swenshuai.xi 	    msWriteByte(AGC_PEAK_CNT_L, 0x00);                          // AGC peak cnt
2983*53ee8cc1Swenshuai.xi 	    msWriteByteMask(AGC_PEAK_CNT_H, 0x0B, 0x0F);
2984*53ee8cc1Swenshuai.xi 	    msWriteByte(AGC_REF, VIFInitialIn_inst.VifAgcRefPositive);  // AGC ref
2985*53ee8cc1Swenshuai.xi     }
2986*53ee8cc1Swenshuai.xi     else
2987*53ee8cc1Swenshuai.xi     {
2988*53ee8cc1Swenshuai.xi 	    msWriteByte(AGC_PEAK_CNT_L, 0x00);                          // AGC peak cnt
2989*53ee8cc1Swenshuai.xi 	    msWriteByteMask(AGC_PEAK_CNT_H, 0x0C, 0x0F);
2990*53ee8cc1Swenshuai.xi 	    msWriteByte(AGC_REF, VIFInitialIn_inst.VifAgcRefNegative);  // AGC ref
2991*53ee8cc1Swenshuai.xi     }
2992*53ee8cc1Swenshuai.xi     msWriteByteMask(AGC_MEAN_SEL, _BIT2, _BIT2|_BIT3);              // mean16
2993*53ee8cc1Swenshuai.xi     msWriteByte(AGC_LINE_CNT_L, 0x01);                              // AGC line cnt = 1
2994*53ee8cc1Swenshuai.xi     msWriteByte(AGC_LINE_CNT_H, 0x00);
2995*53ee8cc1Swenshuai.xi 
2996*53ee8cc1Swenshuai.xi     if (bEnableUsrNonSteadyAgcK)
2997*53ee8cc1Swenshuai.xi         msWriteByteMask(AGC_K, u8UsrNonSteadyAgcK, _BIT0|_BIT1|_BIT2);                // k
2998*53ee8cc1Swenshuai.xi     else
2999*53ee8cc1Swenshuai.xi     {
3000*53ee8cc1Swenshuai.xi         if (VIFInitialIn_inst.VifTunerType == 1)
3001*53ee8cc1Swenshuai.xi             msWriteByteMask(AGC_K, 0x03, _BIT0|_BIT1|_BIT2);                // k
3002*53ee8cc1Swenshuai.xi         else
3003*53ee8cc1Swenshuai.xi             msWriteByteMask(AGC_K, 0x02, _BIT0|_BIT1|_BIT2);                // k
3004*53ee8cc1Swenshuai.xi     }
3005*53ee8cc1Swenshuai.xi 
3006*53ee8cc1Swenshuai.xi     msWriteByteMask(AGC_PGA2_OREN, 0x00, 0x03);
3007*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_MAX_L, VIFInitialIn_inst.VifVgaMaximum);    // vga max
3008*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_MAX_H, VIFInitialIn_inst.VifVgaMaximum>>8);
3009*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_MIN_L, VIFInitialIn_inst.VifVgaMinimum);    // vga min
3010*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_MIN_H, VIFInitialIn_inst.VifVgaMinimum>>8);
3011*53ee8cc1Swenshuai.xi     msWriteByteMask(AGC_PGA1_MAX, 0x00, 0x0F); 		                // pga1 max
3012*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 1)
3013*53ee8cc1Swenshuai.xi         msWriteByteMask(AGC_PGA2_MAX, 0x00, 0x1F); 		                // pga2 max
3014*53ee8cc1Swenshuai.xi     else
3015*53ee8cc1Swenshuai.xi         msWriteByteMask(AGC_PGA2_MAX, 0x1F, 0x1F); 		                // pga2 max
3016*53ee8cc1Swenshuai.xi 
3017*53ee8cc1Swenshuai.xi     msWriteByte(VAGC_VGA2_OV_L, 0x00);		    			    // VGA2(IFAGC) output minimun
3018*53ee8cc1Swenshuai.xi     msWriteByte(VAGC_VGA2_OV_H, 0x80);
3019*53ee8cc1Swenshuai.xi     msWriteBit(VAGC_VGA2_OREN, 1, _BIT2);
3020*53ee8cc1Swenshuai.xi 
3021*53ee8cc1Swenshuai.xi     if ((VIFInitialIn_inst.VifSawArch == SILICON_TUNER) || (VIFInitialIn_inst.VifSawArch == NO_SAW) ||(VIFInitialIn_inst.VifSawArch == SAVE_PIN_VIF))
3022*53ee8cc1Swenshuai.xi         msWriteBit(VAGC_VGA_OUT_SEL, 1, _BIT0);				// VGA1 -> IFAGC
3023*53ee8cc1Swenshuai.xi 
3024*53ee8cc1Swenshuai.xi     if(VIFInitialIn_inst.VifSawArch == NO_SAW)
3025*53ee8cc1Swenshuai.xi     {
3026*53ee8cc1Swenshuai.xi         msWriteBit(LEVEL_SENSE_BYPASS, 0, _BIT0);               // Level_Sense not bypass
3027*53ee8cc1Swenshuai.xi         msWriteBit(LEVEL_SENSE_OUT_SEL, 0, _BIT4);           // DVGA input: 0: from LEVEL_SENSE out(can be bypassed); 1: ACI_BPF out(cannot be bypassed)
3028*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_V_ACI_BPF4AGC, 0, _BIT0);           // bypass ACI_BPF before AGC input: 0:not bypass; 1: bypass
3029*53ee8cc1Swenshuai.xi     }
3030*53ee8cc1Swenshuai.xi     else
3031*53ee8cc1Swenshuai.xi     {
3032*53ee8cc1Swenshuai.xi         msWriteBit(LEVEL_SENSE_BYPASS, 1, _BIT0);               // Level_Sense bypass
3033*53ee8cc1Swenshuai.xi         msWriteBit(LEVEL_SENSE_OUT_SEL, 0, _BIT4);           // DVGA input: 0: from LEVEL_SENSE out(can be bypassed); 1: ACI_BPF out(cannot be bypassed)
3034*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_V_ACI_BPF4AGC, 1, _BIT0);           // bypass ACI_BPF before AGC input: 0:not bypass; 1: bypass
3035*53ee8cc1Swenshuai.xi     }
3036*53ee8cc1Swenshuai.xi 
3037*53ee8cc1Swenshuai.xi     msWriteBit(AGC_IN_SEL, 1, _BIT1);                    // AGC input 0: from SOS_out ; 1:from ACI_BPF out(can be bypassed)
3038*53ee8cc1Swenshuai.xi 
3039*53ee8cc1Swenshuai.xi     // AGC gain distribution
3040*53ee8cc1Swenshuai.xi     msWriteBit(AGC_DBB_VVGA_SEL, 0, _BIT3);                         // Vga gain force x1
3041*53ee8cc1Swenshuai.xi     msWriteBit(AGC_DBB_AVGA_SEL, 0, _BIT4);                         // Avga gain force x1
3042*53ee8cc1Swenshuai.xi 
3043*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_THR, VIFInitialIn_inst.VifVgaMaximum);      // vga threshold
3044*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_THR+1, (VIFInitialIn_inst.VifVgaMaximum - 0x1000)>>8);
3045*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_BASE, (VIFInitialIn_inst.VifAgcVgaBase - 0x14));     // vga base
3046*53ee8cc1Swenshuai.xi     msWriteByte(AGC_VGA_OFFS, VIFInitialIn_inst.VifAgcVgaOffs);     // vga offset
3047*53ee8cc1Swenshuai.xi 
3048*53ee8cc1Swenshuai.xi     msWriteBit(AGC_ENABLE, 1, _BIT0);	                            // AGC enable
3049*53ee8cc1Swenshuai.xi 
3050*53ee8cc1Swenshuai.xi     // CR
3051*53ee8cc1Swenshuai.xi     msWriteByte(CR_DL_A, 0x16);	            	    	            // CR audio delay line
3052*53ee8cc1Swenshuai.xi     msWriteByte(CR_PD_ERR_MAX_L, 0xFF);	                            // CR pd error max
3053*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_PD_ERR_MAX_H, 0x3F, 0x3F);
3054*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_A1_L, 0x41);	            	            // CR notch filter coefficient
3055*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_A1_H, 0x0C);
3056*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_A2_L, 0xE9);	            	            // CR notch filter coefficient
3057*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_A2_H, 0x0B);
3058*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_B1_L, 0x58);	            	            // CR notch filter coefficient
3059*53ee8cc1Swenshuai.xi     msWriteByte(CR_NOTCH_B1_H, 0x00);
3060*53ee8cc1Swenshuai.xi     msWriteBit(CR_ANCO_SEL, 1, _BIT0);	            	            // audio nco select
3061*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 2)
3062*53ee8cc1Swenshuai.xi     {
3063*53ee8cc1Swenshuai.xi         msWriteByteMask(CR_KF1_HW, 0x00, 0x0F);   // kf1 hardware mode
3064*53ee8cc1Swenshuai.xi         msWriteByteMask(CR_KP1_HW, 0x00, 0x0F);   // kp1 hardware mode
3065*53ee8cc1Swenshuai.xi         msWriteByteMask(CR_KI1_HW, 0x00, 0xF0);// ki1 hardware mode
3066*53ee8cc1Swenshuai.xi         msWriteByteMask(CR_KP2_HW, 0x00, 0x0F);   // kp2 hardware mode
3067*53ee8cc1Swenshuai.xi         msWriteByteMask(CR_KI2_HW, 0x00, 0xF0);// ki2 hardware mode
3068*53ee8cc1Swenshuai.xi         msWriteBit(CR_K_SEL, 0, _BIT6);	          			            // hw mode
3069*53ee8cc1Swenshuai.xi     }
3070*53ee8cc1Swenshuai.xi     else
3071*53ee8cc1Swenshuai.xi     {
3072*53ee8cc1Swenshuai.xi        msWriteByteMask(CR_KF1_HW, VIFInitialIn_inst.VifCrKf1, 0x0F);   // kf1 hardware mode
3073*53ee8cc1Swenshuai.xi        msWriteByteMask(CR_KP1_HW, VIFInitialIn_inst.VifCrKp1, 0x0F);   // kp1 hardware mode
3074*53ee8cc1Swenshuai.xi        msWriteByteMask(CR_KI1_HW, VIFInitialIn_inst.VifCrKi1<<4, 0xF0);// ki1 hardware mode
3075*53ee8cc1Swenshuai.xi        msWriteByteMask(CR_KP2_HW, VIFInitialIn_inst.VifCrKp2, 0x0F);   // kp2 hardware mode
3076*53ee8cc1Swenshuai.xi        msWriteByteMask(CR_KI2_HW, VIFInitialIn_inst.VifCrKi2<<4, 0xF0);// ki2 hardware mode
3077*53ee8cc1Swenshuai.xi        msWriteBit(CR_K_SEL, 1, _BIT6);			// kp,ki,kf
3078*53ee8cc1Swenshuai.xi        msWriteBit(CR_PD_IMAG_INV, 1, _BIT1);                             // for > 150% overmodulation
3079*53ee8cc1Swenshuai.xi     }
3080*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KF_SW, 0x00, 0x0F);                          // kf software mode
3081*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KP_SW, 0x00, 0x0F);                          // kp software mode
3082*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KI_SW, 0x00, 0xF0);                          // ki software mode
3083*53ee8cc1Swenshuai.xi     msWriteBit(CR_JTRDET_IN_SEL, 1, _BIT4);                         // carrier jitter detector input select CR_LF1
3084*53ee8cc1Swenshuai.xi     msWriteBit(VNCO_INV_OREN, 0, _BIT1);
3085*53ee8cc1Swenshuai.xi 
3086*53ee8cc1Swenshuai.xi     //locking range setting
3087*53ee8cc1Swenshuai.xi     msWriteBit(CR_FD_IN_SEL, 0 , _BIT0);                               //0:IIR LPF2; 1:FIR
3088*53ee8cc1Swenshuai.xi     msWriteBit(CR_IIR_SEL, 1 , _BIT1);                                   //0:IIR LPF1; 1:IIR LPF2
3089*53ee8cc1Swenshuai.xi 
3090*53ee8cc1Swenshuai.xi     if(VIFInitialIn_inst.VifCrPdModeSel == 0)                      // 0: imaginary part; 1: cordic
3091*53ee8cc1Swenshuai.xi       msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_CR_IIR_LPF1);    // IIR LPF1 coefficients
3092*53ee8cc1Swenshuai.xi     else
3093*53ee8cc1Swenshuai.xi       msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_CR_IIR_LPF2);    // IIR LPF2 coefficients
3094*53ee8cc1Swenshuai.xi 
3095*53ee8cc1Swenshuai.xi     msWriteBit(CR_LPF_SEL, VIFInitialIn_inst.VifCrLpfSel, _BIT4);   // CR LPF 0: FIR LPF; 1: IIR LPF
3096*53ee8cc1Swenshuai.xi     msWriteBit(CR_PD_MODE, VIFInitialIn_inst.VifCrPdModeSel, _BIT1);    // 0: imaginary part; 1: cordic
3097*53ee8cc1Swenshuai.xi     msWriteBit(LOCK_LEAKY_SEL, VIFInitialIn_inst.VifCrLockLeakySel, _BIT0);
3098*53ee8cc1Swenshuai.xi     msWriteBit(CR_PD_X2, VIFInitialIn_inst.VifCrPdX2, _BIT2);       // CR X2 0: lock 0 degree; 1: lock 0 or 180 degree
3099*53ee8cc1Swenshuai.xi     msWriteByte(CR_LOCK_TH_L, VIFInitialIn_inst.VifCrLockThr);      // CR lock threshold
3100*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_LOCK_TH_H, VIFInitialIn_inst.VifCrLockThr>>8, 0x03);
3101*53ee8cc1Swenshuai.xi     msWriteByte(CR_UNLOCK_NUM, 0x00);                               // CR unlock num
3102*53ee8cc1Swenshuai.xi     msWriteByte(CR_UNLOCK_NUM+1, 0x40);
3103*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_UNLOCK_NUM+2, 0x00, 0x0F);
3104*53ee8cc1Swenshuai.xi     msWriteByte(CR_LOCK_NUM, VIFInitialIn_inst.VifCrLockNum);       // CR lock num
3105*53ee8cc1Swenshuai.xi     msWriteByte(CR_LOCK_NUM+1, VIFInitialIn_inst.VifCrLockNum>>8);
3106*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_LOCK_NUM+2, VIFInitialIn_inst.VifCrLockNum>>16, 0x0F);
3107*53ee8cc1Swenshuai.xi     msWriteByte(CR_CODIC_TH, VIFInitialIn_inst.VifCrThr);           // CR cordic threshold
3108*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_CODIC_TH+1, VIFInitialIn_inst.VifCrThr>>8, 0x3F);
3109*53ee8cc1Swenshuai.xi 
3110*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 0)
3111*53ee8cc1Swenshuai.xi     {
3112*53ee8cc1Swenshuai.xi         if (VifShiftClk/*g_VifShiftClk*/ == 1)
3113*53ee8cc1Swenshuai.xi         {
3114*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE, 0x6D);                                     // cr_rate for 15 MHz
3115*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE+1, 0xDB);
3116*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_RATE+2, 0x16, 0x1F);
3117*53ee8cc1Swenshuai.xi             msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
3118*53ee8cc1Swenshuai.xi         }
3119*53ee8cc1Swenshuai.xi         else if(VifShiftClk/*g_VifShiftClk*/ == 2)
3120*53ee8cc1Swenshuai.xi         {
3121*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE, 0x22);                                     // cr_rate for 15 MHz
3122*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE+1, 0x9F);
3123*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_RATE+2, 0x15, 0x1F);
3124*53ee8cc1Swenshuai.xi             msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
3125*53ee8cc1Swenshuai.xi         }
3126*53ee8cc1Swenshuai.xi       	 else
3127*53ee8cc1Swenshuai.xi         {
3128*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE, 0xE3);                                     // cr_rate for 15 MHz
3129*53ee8cc1Swenshuai.xi             msWriteByte(CR_RATE+1, 0x38);
3130*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_RATE+2, 0x16, 0x1F);
3131*53ee8cc1Swenshuai.xi             msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
3132*53ee8cc1Swenshuai.xi         }
3133*53ee8cc1Swenshuai.xi     }
3134*53ee8cc1Swenshuai.xi 
3135*53ee8cc1Swenshuai.xi     // tuner step size
3136*53ee8cc1Swenshuai.xi     //VIFInitialIn_inst.VifTunerStepSize = FREQ_STEP_62_5KHz;
3137*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerStepSize == FREQ_STEP_62_5KHz)    // 62.5KHz
3138*53ee8cc1Swenshuai.xi     {
3139*53ee8cc1Swenshuai.xi         if (g_bCheckIFFreq == 0)
3140*53ee8cc1Swenshuai.xi         {
3141*53ee8cc1Swenshuai.xi             msWriteByte(CR_FOE_SCAL_FACTOR_L, 0xB3);                // foe scaling factor
3142*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_FOE_SCAL_FACTOR_H, 0x02, 0x0F);
3143*53ee8cc1Swenshuai.xi         }
3144*53ee8cc1Swenshuai.xi         else
3145*53ee8cc1Swenshuai.xi         {                                                    // SECAM L'
3146*53ee8cc1Swenshuai.xi             msWriteByte(CR_FOE_SCAL_FACTOR_L, 0x4D);                // foe scaling factor
3147*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_FOE_SCAL_FACTOR_H, 0x0D, 0x0F);
3148*53ee8cc1Swenshuai.xi         }
3149*53ee8cc1Swenshuai.xi     }
3150*53ee8cc1Swenshuai.xi     else if (VIFInitialIn_inst.VifTunerStepSize == FREQ_STEP_50KHz) // 50KHz
3151*53ee8cc1Swenshuai.xi     {
3152*53ee8cc1Swenshuai.xi         if (g_bCheckIFFreq == 0)
3153*53ee8cc1Swenshuai.xi         {
3154*53ee8cc1Swenshuai.xi             msWriteByte(CR_FOE_SCAL_FACTOR_L, 0x60);                // foe scaling factor
3155*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_FOE_SCAL_FACTOR_H, 0x03, 0x0F);
3156*53ee8cc1Swenshuai.xi         }
3157*53ee8cc1Swenshuai.xi         else
3158*53ee8cc1Swenshuai.xi         {                                                    // SECAM L'
3159*53ee8cc1Swenshuai.xi             msWriteByte(CR_FOE_SCAL_FACTOR_L, 0xA0);                // foe scaling factor
3160*53ee8cc1Swenshuai.xi             msWriteByteMask(CR_FOE_SCAL_FACTOR_H, 0x0C, 0x0F);
3161*53ee8cc1Swenshuai.xi         }
3162*53ee8cc1Swenshuai.xi     }
3163*53ee8cc1Swenshuai.xi 
3164*53ee8cc1Swenshuai.xi     // Filter
3165*53ee8cc1Swenshuai.xi     msWriteBit(DEBUG_V_A, 1, _BIT5);                            // single ADC
3166*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.ChinaDescramblerBox !=0)
3167*53ee8cc1Swenshuai.xi     {
3168*53ee8cc1Swenshuai.xi         msWriteByteMask(IMAGE_REJ_IIR_SEL, _BIT3, _BIT2|_BIT3);      // 0: aci_rej_out; 1: nyq_slp_out1; 2: nyq_slp_out2; 3: mixer_out_i
3169*53ee8cc1Swenshuai.xi     }
3170*53ee8cc1Swenshuai.xi     msWriteByteMask(IMAGE_REJ1_SEL, _BIT0, _BIT0|_BIT1);      // 0: aci_rej_out; 1: nyq_slp_out1; 2: nyq_slp_out2; 3: mixer_out_i
3171*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_CO_A_REJ, 0, _BIT4);                      // CO_A_REJ not bypass
3172*53ee8cc1Swenshuai.xi 
3173*53ee8cc1Swenshuai.xi     msWriteBit(IMAGE_REJ_OUT_SEL, 0, _BIT7);                                // 0: IMAGE_REJ1; 1: IMAGE_REJ_IIR
3174*53ee8cc1Swenshuai.xi     msWriteBit(A_BP_OUT_X2, 1, _BIT7);                              // A_BP output x2
3175*53ee8cc1Swenshuai.xi     msWriteBit(A_DAGC_SEL, 1, _BIT7);                               // 0: input from a_sos; 1: input from a_lpf_up
3176*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_A_NOTCH, 1, _BIT6);                           // A_NOTCH bypass
3177*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_A_SOS, 1, _BIT7);                             // A_SOS bypass
3178*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS21, 0, _BIT2);                             // SOS21 not bypass
3179*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS22, 0, _BIT3);                             // SOS22 not bypass
3180*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS31, 0, _BIT4);             	            // SOS31 not bypass
3181*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS32, 0, _BIT5);             	            // SOS32 not bypass
3182*53ee8cc1Swenshuai.xi 
3183*53ee8cc1Swenshuai.xi     // silicon tuner
3184*53ee8cc1Swenshuai.xi     if (VIFInitialIn_inst.VifTunerType == 1)
3185*53ee8cc1Swenshuai.xi     {
3186*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_V_ACI_BPF4LS, 1, _BIT5);             	        // VACI_BPF bypass
3187*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_A_ACI_BPF, 0, _BIT1);             	        // AACI_BPF not bypass
3188*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_VSPUR_REJ, 1, _BIT2);             	        // VSPUR_REJ bypass
3189*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_ASPUR_REJ, 1, _BIT3);             	        // ASPUR_REJ bypass
3190*53ee8cc1Swenshuai.xi 
3191*53ee8cc1Swenshuai.xi         if ((msReadByte(CR_RATE_INV) & 0x01) != 0)
3192*53ee8cc1Swenshuai.xi             msWriteBit(BYPASS_SOS11, 1, _BIT0);                            // SOS11 bypass
3193*53ee8cc1Swenshuai.xi     }
3194*53ee8cc1Swenshuai.xi     else
3195*53ee8cc1Swenshuai.xi     {
3196*53ee8cc1Swenshuai.xi         msWriteBit(BYPASS_A_ACI_BPF, 0, _BIT1);             	        // AACI_BPF  not bypass
3197*53ee8cc1Swenshuai.xi     }
3198*53ee8cc1Swenshuai.xi 
3199*53ee8cc1Swenshuai.xi     // DAGC1
3200*53ee8cc1Swenshuai.xi     if (_bit1_(VIFInitialIn_inst.VifDelayReduce))
3201*53ee8cc1Swenshuai.xi     {
3202*53ee8cc1Swenshuai.xi         msWriteBit(DAGC1_DL_BYPASS, 1, _BIT3);                      // DAGC1 delay line bypass
3203*53ee8cc1Swenshuai.xi     }
3204*53ee8cc1Swenshuai.xi     else
3205*53ee8cc1Swenshuai.xi     {
3206*53ee8cc1Swenshuai.xi         msWriteBit(DAGC1_DL_BYPASS, 0, _BIT3);                      // DAGC1 delay line not bypass
3207*53ee8cc1Swenshuai.xi     }
3208*53ee8cc1Swenshuai.xi     msWriteBit(DAGC1_BYPASS, 0, _BIT1);                             // DAGC1 not bypass
3209*53ee8cc1Swenshuai.xi 
3210*53ee8cc1Swenshuai.xi     msWriteBit(DAGC1_OREN, 1, _BIT6);	                            // DAGC1 gain_overwrite = 1
3211*53ee8cc1Swenshuai.xi     msWriteBit(DAGC1_OREN, 0, _BIT6);	                            // DAGC1 gain_overwrite = 0
3212*53ee8cc1Swenshuai.xi 
3213*53ee8cc1Swenshuai.xi     msWriteBit(DAGC1_GAIN0_FB_EN, 0, _BIT2);	                    // DAGC1 gain_update = 1
3214*53ee8cc1Swenshuai.xi 
3215*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
3216*53ee8cc1Swenshuai.xi     {
3217*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_REF, 0x0B, 0x3F);		                // DAGC1 ref
3218*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_RATIO, 0x03, 0x07);		            // DAGC1 ratio
3219*53ee8cc1Swenshuai.xi         msWriteByte(DAGC1_PEAK_CNT_L, 0x00);	    	            // DAGC1 peak cnt
3220*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_PEAK_CNT_H, 0x0B, 0x0F);
3221*53ee8cc1Swenshuai.xi         msWriteByte(DAGC1_GAIN_OVERWRITE_L, VIFInitialIn_inst.VifDagc1GainOv);
3222*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_GAIN_OVERWRITE_H, VIFInitialIn_inst.VifDagc1GainOv>>8, 0x3F);
3223*53ee8cc1Swenshuai.xi     }
3224*53ee8cc1Swenshuai.xi     else
3225*53ee8cc1Swenshuai.xi     {
3226*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_REF, VIFInitialIn_inst.VifDagc1Ref, 0x3F);    // DAGC1 ref
3227*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_RATIO, 0x00, 0x07);		            // DAGC1 ratio
3228*53ee8cc1Swenshuai.xi         msWriteByte(DAGC1_PEAK_CNT_L, 0x00);	                    // DAGC1 peak cnt
3229*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC1_PEAK_CNT_H, 0x0C, 0x0F);
3230*53ee8cc1Swenshuai.xi     }
3231*53ee8cc1Swenshuai.xi     msWriteBit(DAGC1_ENABLE, 1, _BIT0);                             // DAGC1 enable
3232*53ee8cc1Swenshuai.xi 
3233*53ee8cc1Swenshuai.xi     // DAGC2
3234*53ee8cc1Swenshuai.xi     if (_bit2_(VIFInitialIn_inst.VifDelayReduce))
3235*53ee8cc1Swenshuai.xi     {
3236*53ee8cc1Swenshuai.xi         msWriteBit(DAGC2_DL_BYPASS, 1, _BIT3);                      // DAGC2 delay line bypass
3237*53ee8cc1Swenshuai.xi     }
3238*53ee8cc1Swenshuai.xi     else
3239*53ee8cc1Swenshuai.xi     {
3240*53ee8cc1Swenshuai.xi         msWriteBit(DAGC2_DL_BYPASS, 0, _BIT3);                      // DAGC2 delay line not bypass
3241*53ee8cc1Swenshuai.xi     }
3242*53ee8cc1Swenshuai.xi     msWriteBit(DAGC2_BYPASS, 0, _BIT1);                             // DAGC2 not bypass
3243*53ee8cc1Swenshuai.xi 
3244*53ee8cc1Swenshuai.xi     msWriteBit(DAGC2_OREN, 1, _BIT6);	                            // DAGC2 gain_overwrite = 1
3245*53ee8cc1Swenshuai.xi     msWriteBit(DAGC2_OREN, 0, _BIT6);	                            // DAGC2 gain_overwrite = 0
3246*53ee8cc1Swenshuai.xi 
3247*53ee8cc1Swenshuai.xi     msWriteBit(DAGC2_GAIN0_FB_EN, 0, _BIT2);	                    // DAGC2 gain_update = 1
3248*53ee8cc1Swenshuai.xi 
3249*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
3250*53ee8cc1Swenshuai.xi     {
3251*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_REF, 0x0B, 0x3F);		                // DAGC2 ref
3252*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_RATIO, 0x03, 0x07);		            // DAGC2 ratio
3253*53ee8cc1Swenshuai.xi         msWriteByte(DAGC2_PEAK_CNT_L, 0x00);	                    // DAGC2 peak cnt
3254*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_PEAK_CNT_H, 0x0B, 0x0F);
3255*53ee8cc1Swenshuai.xi         msWriteByte(DAGC2_GAIN_OVERWRITE_L, VIFInitialIn_inst.VifDagc2GainOv);
3256*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_GAIN_OVERWRITE_H, VIFInitialIn_inst.VifDagc2GainOv>>8, 0x3F);
3257*53ee8cc1Swenshuai.xi     }
3258*53ee8cc1Swenshuai.xi     else
3259*53ee8cc1Swenshuai.xi     {
3260*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_REF, VIFInitialIn_inst.VifDagc2Ref, 0x3F);    // DAGC2 ref
3261*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_RATIO, 0x00, 0x07);		            // DAGC2 ratio
3262*53ee8cc1Swenshuai.xi         msWriteByte(DAGC2_PEAK_CNT_L, 0x00);	    	            // DAGC2 peak cnt
3263*53ee8cc1Swenshuai.xi         msWriteByteMask(DAGC2_PEAK_CNT_H, 0x0C, 0x0F);
3264*53ee8cc1Swenshuai.xi     }
3265*53ee8cc1Swenshuai.xi     msWriteBit(DAGC2_ENABLE, 1, _BIT0);                             // DAGC2 enable
3266*53ee8cc1Swenshuai.xi 
3267*53ee8cc1Swenshuai.xi     // clampgain
3268*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
3269*53ee8cc1Swenshuai.xi     {
3270*53ee8cc1Swenshuai.xi         msWriteByte(CLAMPGAIN_CLAMP_OVERWRITE, VIFInitialIn_inst.VifClampgainClampOvPositive);  // clampgain clamp overwrite value
3271*53ee8cc1Swenshuai.xi         msWriteByteMask(CLAMPGAIN_CLAMP_OVERWRITE+1, VIFInitialIn_inst.VifClampgainClampOvPositive>>8, 0x07);
3272*53ee8cc1Swenshuai.xi         msWriteByte(CLAMPGAIN_GAIN_OVERWRITE, VIFInitialIn_inst.VifClampgainGainOvPositive);    // clampgain gain overwrite value
3273*53ee8cc1Swenshuai.xi         msWriteByteMask(CLAMPGAIN_GAIN_OVERWRITE+1, VIFInitialIn_inst.VifClampgainGainOvPositive>>8, 0x07);
3274*53ee8cc1Swenshuai.xi     }
3275*53ee8cc1Swenshuai.xi     else
3276*53ee8cc1Swenshuai.xi     {
3277*53ee8cc1Swenshuai.xi         msWriteByte(CLAMPGAIN_CLAMP_OVERWRITE, VIFInitialIn_inst.VifClampgainClampOvNegative);  // clampgain clamp overwrite value
3278*53ee8cc1Swenshuai.xi         msWriteByteMask(CLAMPGAIN_CLAMP_OVERWRITE+1, VIFInitialIn_inst.VifClampgainClampOvNegative>>8, 0x07);
3279*53ee8cc1Swenshuai.xi         msWriteByte(CLAMPGAIN_GAIN_OVERWRITE, VIFInitialIn_inst.VifClampgainGainOvNegative);    // clampgain gain overwrite value
3280*53ee8cc1Swenshuai.xi         msWriteByteMask(CLAMPGAIN_GAIN_OVERWRITE+1, VIFInitialIn_inst.VifClampgainGainOvNegative>>8, 0x07);
3281*53ee8cc1Swenshuai.xi     }
3282*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_BYPASS, 0, _BIT1);				                                        // clampgain not bypass
3283*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_SEL, VIFInitialIn_inst.VifClampgainClampSel, _BIT3);                   // 0: clamp select sync bottom; 1: clamp select porch
3284*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_SYNCBOTT_REF, VIFInitialIn_inst.VifClampgainSyncbottRef);	            // porch or syncbottom ref
3285*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_SYNCHEIGHT_REF, VIFInitialIn_inst.VifClampgainSyncheightRef);         // syncheight ref
3286*53ee8cc1Swenshuai.xi     msWriteByteMask(CLAMPGAIN_KC, VIFInitialIn_inst.VifClampgainKc, 0x07);			            // kc
3287*53ee8cc1Swenshuai.xi     msWriteByteMask(CLAMPGAIN_KG, VIFInitialIn_inst.VifClampgainKg<<4, 0x70);			        // kg
3288*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_PORCH_CNT, VIFInitialIn_inst.VifClampgainPorchCnt);                   // clampgain porch cnt for NTSC
3289*53ee8cc1Swenshuai.xi     msWriteByteMask(CLAMPGAIN_PORCH_CNT+1, VIFInitialIn_inst.VifClampgainPorchCnt>>8, 0x01);
3290*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_CLAMP_MIN, VIFInitialIn_inst.VifClampgainClampMin);                   // clampgain clamp min
3291*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_CLAMP_MAX, VIFInitialIn_inst.VifClampgainClampMax);                   // clampgain clamp max
3292*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_GAIN_MIN, VIFInitialIn_inst.VifClampgainGainMin);                     // clampgain gain min
3293*53ee8cc1Swenshuai.xi     msWriteByte(CLAMPGAIN_GAIN_MAX, VIFInitialIn_inst.VifClampgainGainMax);                     // clampgain gain max
3294*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_CLAMP_OREN, VIFInitialIn_inst.VifClampgainClampOren, _BIT0);           // clampgain clamp overwrite enable
3295*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_CLAMP_OREN, VIFInitialIn_inst.VifClampgainGainOren, _BIT1);            // clampgain gain overwrite enable
3296*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_EN, 1, _BIT2);					                                        // clampgain enable
3297*53ee8cc1Swenshuai.xi 
3298*53ee8cc1Swenshuai.xi     // vsync
3299*53ee8cc1Swenshuai.xi     msWriteBit(VSYNC_ENABLE, 1, _BIT1);                             // vsync enable
3300*53ee8cc1Swenshuai.xi 
3301*53ee8cc1Swenshuai.xi     // ADAGC
3302*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 1)
3303*53ee8cc1Swenshuai.xi     {
3304*53ee8cc1Swenshuai.xi         msWriteBit(ADAGC_BYPASS, 1, _BIT1);                         // ADAGC bypass
3305*53ee8cc1Swenshuai.xi     	msWriteByteMask(ADAGC_K, 0x00, 0x07);			            // ADAGC k
3306*53ee8cc1Swenshuai.xi         msWriteBit(ADAGC_ENABLE, 0, _BIT0);                         // ADAGC disable
3307*53ee8cc1Swenshuai.xi     }
3308*53ee8cc1Swenshuai.xi     else
3309*53ee8cc1Swenshuai.xi     {
3310*53ee8cc1Swenshuai.xi         msWriteBit(ADAGC_BYPASS, 0, _BIT1);                         // ADAGC not bypass
3311*53ee8cc1Swenshuai.xi         msWriteByteMask(ADAGC_K, 0x04, 0x07);			            // ADAGC k
3312*53ee8cc1Swenshuai.xi         msWriteBit(ADAGC_ENABLE, 1, _BIT0);                         // ADAGC enable
3313*53ee8cc1Swenshuai.xi     }
3314*53ee8cc1Swenshuai.xi 
3315*53ee8cc1Swenshuai.xi     if(VIFInitialIn_inst.VifSeriousACIDetect == 1)                 //ACI_Functions_Selective
3316*53ee8cc1Swenshuai.xi     {
3317*53ee8cc1Swenshuai.xi          VIFInitialIn_inst.VifACIDetect = 0;
3318*53ee8cc1Swenshuai.xi     }
3319*53ee8cc1Swenshuai.xi 
3320*53ee8cc1Swenshuai.xi     // zero detector
3321*53ee8cc1Swenshuai.xi     msWriteBit(ZERO_IN_SEL, 1 , _BIT1);                         // 0: from dagc_in; 1: from dagc_out
3322*53ee8cc1Swenshuai.xi     msWriteByteMask(ZERO_TH, 0x20, 0x7F);
3323*53ee8cc1Swenshuai.xi     msWriteByte(ZERO_CNT_NUM, 0x0A);
3324*53ee8cc1Swenshuai.xi     msWriteByteMask(ZERO_CNT_NUM+1, 0x00, 0x0F);
3325*53ee8cc1Swenshuai.xi     msWriteByte(ZERO_ZERO_NUM, 0x20);
3326*53ee8cc1Swenshuai.xi     msWriteByte(ZERO_ZERO_NUM+1, 0x00);
3327*53ee8cc1Swenshuai.xi     msWriteBit(ZERO_ENABLE, 0 , _BIT0);                            // zero detector disable
3328*53ee8cc1Swenshuai.xi 
3329*53ee8cc1Swenshuai.xi     // Level Sense setting
3330*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_LOCK_CNT, 0x00);
3331*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_LOCK_CNT+1, 0x01);
3332*53ee8cc1Swenshuai.xi 
3333*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_DIFF_AVG_TH, 0x28);
3334*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_DIFF_AVG_TH+1, 0x00, 0x0F);
3335*53ee8cc1Swenshuai.xi 
3336*53ee8cc1Swenshuai.xi     msWriteBit(LEVEL_SENSE_EN, 1, _BIT0);
3337*53ee8cc1Swenshuai.xi     msWriteBit(LEVLE_SENSE_MOD_TYPE, 0, _BIT4);                 // 0: negedge; 1: posedge
3338*53ee8cc1Swenshuai.xi     msWriteBit(LEVEL_SENSE_MODE, 0, _BIT0);                     // 0: porch; 1: sync height
3339*53ee8cc1Swenshuai.xi     msWriteBit(LEVEL_SENSE_VGA_OREN, 0, _BIT4);
3340*53ee8cc1Swenshuai.xi 
3341*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_MEAN_SEL, 0x01, 0x03);          // 0: 1 line; 1: 16 lines; 2, 3: 256 lines
3342*53ee8cc1Swenshuai.xi     msWriteBit(LEVEL_SENSE_DVGA_OREN_SEL, 1 , _BIT4);           // 0: SW; 1: HW
3343*53ee8cc1Swenshuai.xi 
3344*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_REF, 0x59);
3345*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_REF+1, 0x00);
3346*53ee8cc1Swenshuai.xi 
3347*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_LINE_CNT, 0x04);
3348*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_LINE_CNT+1, 0x00);
3349*53ee8cc1Swenshuai.xi 
3350*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_PORCH_CNT, 0xE0);
3351*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_PORCH_CNT+1, 0x00, 0x01);
3352*53ee8cc1Swenshuai.xi 
3353*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_PEAK_CNT , 0x00);
3354*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_PEAK_CNT +1, 0x0C, 0x0F);
3355*53ee8cc1Swenshuai.xi 
3356*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_K, 0x04, 0x07);                 // 0~7: 0, 2^-2 ~ 2^-8
3357*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_K+1, 0x00, 0x00);
3358*53ee8cc1Swenshuai.xi 
3359*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_VGA_OV, 0x80);
3360*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_VGA_OV+1, 0x00);
3361*53ee8cc1Swenshuai.xi 
3362*53ee8cc1Swenshuai.xi     msWriteByte(LEVEL_SENSE_DIFF_AVG_INI, 0xFF);                // level_sense diff_avg initial value
3363*53ee8cc1Swenshuai.xi     msWriteByteMask(LEVEL_SENSE_DIFF_AVG_INI+1, 0x0F, 0x0F);
3364*53ee8cc1Swenshuai.xi 
3365*53ee8cc1Swenshuai.xi     //AM Hum detection setting
3366*53ee8cc1Swenshuai.xi     msWriteByteMask(AGC_HUM_CNT_MAX , _BIT5 , _BIT4|_BIT5|_BIT6);   // 0->128 ,1->256, 2->512 samples
3367*53ee8cc1Swenshuai.xi     msWriteByte(AGC_HUM_ERR_THR , 0x20);                                             // format <8,8> => 0.125 = 0x20
3368*53ee8cc1Swenshuai.xi     msWriteByte(AGC_HUM_DET_LIM , 0x20);                                              // format <8,-2> => 128 samples
3369*53ee8cc1Swenshuai.xi 
3370*53ee8cc1Swenshuai.xi     //CR_Ki/Kp speed up setting
3371*53ee8cc1Swenshuai.xi     msWriteBit(CR_KPKI_SPEEDUP_EN , 0 , _BIT0);                                     //0:disable , 1:enable
3372*53ee8cc1Swenshuai.xi     msWriteBit(CR_INV2_EN , 0 , _BIT4);                                                    //0:disable , 1:enable
3373*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KP_SPEED, _BIT2 , _BIT0|_BIT1|_BIT2|_BIT3);
3374*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KI_SPEED, _BIT6 , _BIT4|_BIT5|_BIT6|_BIT7);
3375*53ee8cc1Swenshuai.xi 
3376*53ee8cc1Swenshuai.xi     if(VIF_IS_ADC_48MHz == 0)
3377*53ee8cc1Swenshuai.xi     {
3378*53ee8cc1Swenshuai.xi         // VIF ADC clock setting
3379*53ee8cc1Swenshuai.xi         msWriteBit(VIF_ADC_48M, 0, _BIT4);              // 0:144MHz , 1:48MHz
3380*53ee8cc1Swenshuai.xi 
3381*53ee8cc1Swenshuai.xi         // VIF DECI_filter coefficient selection
3382*53ee8cc1Swenshuai.xi         msWriteBit(VIF_DECI_COEF_SEL, 0, _BIT4);    // 0:old, 1:new
3383*53ee8cc1Swenshuai.xi 
3384*53ee8cc1Swenshuai.xi         msWriteBit(HALVIFDBG2_BIT, 0, _BIT4);         // 0:144MHz, 1:48MHz
3385*53ee8cc1Swenshuai.xi     }
3386*53ee8cc1Swenshuai.xi     else
3387*53ee8cc1Swenshuai.xi     {
3388*53ee8cc1Swenshuai.xi         // VIF ADC clock setting
3389*53ee8cc1Swenshuai.xi         msWriteBit(VIF_ADC_48M, 1, _BIT4);               // 0:144MHz , 1:48MHz
3390*53ee8cc1Swenshuai.xi 
3391*53ee8cc1Swenshuai.xi         // VIF DECI_filter coefficient selection
3392*53ee8cc1Swenshuai.xi         msWriteBit(VIF_DECI_COEF_SEL, 1, _BIT4);     // 0:old, 1:new
3393*53ee8cc1Swenshuai.xi 
3394*53ee8cc1Swenshuai.xi         msWriteBit(HALVIFDBG2_BIT, 1, _BIT4);          // 0:144MHz, 1:48MHz
3395*53ee8cc1Swenshuai.xi     }
3396*53ee8cc1Swenshuai.xi 
3397*53ee8cc1Swenshuai.xi     // VIF ADC LSB mask
3398*53ee8cc1Swenshuai.xi     msWriteByteMask(VIF_ADC_LSB_MASK, 0x00, _BIT0|_BIT1);    // Un-mask ADC_LSB bits
3399*53ee8cc1Swenshuai.xi 
3400*53ee8cc1Swenshuai.xi     // locking range +/- 500KHz  ->  +/- 1MHz  setting
3401*53ee8cc1Swenshuai.xi     //msWriteByteMask(CR_KF1_HW, 0x02, 0x0F);   // kf1 hardware mode
3402*53ee8cc1Swenshuai.xi     //msWriteByteMask(CR_KP1_HW, 0x43, 0x0F);   // kp1 hardware mode
3403*53ee8cc1Swenshuai.xi     //msWriteByteMask(CR_KI1_HW, 0x43, 0xF0);   // ki1 hardware mode
3404*53ee8cc1Swenshuai.xi     //msWriteByteMask(CR_FD_DELAY_SEL, _BIT5, _BIT4|_BIT5);
3405*53ee8cc1Swenshuai.xi     //msWriteByteMask(CR_FD_MU, _BIT5, _BIT4|_BIT5);
3406*53ee8cc1Swenshuai.xi 
3407*53ee8cc1Swenshuai.xi     //msWriteBit(BYPASS_SOS33, 1, _BIT6);
3408*53ee8cc1Swenshuai.xi 
3409*53ee8cc1Swenshuai.xi     // real HW_KPKI_THR1_L
3410*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH1_L, 0x50);
3411*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH1_L+1, 0x00);
3412*53ee8cc1Swenshuai.xi 
3413*53ee8cc1Swenshuai.xi      // real HW_KPKI_THR1_H
3414*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH1_H, 0x50);
3415*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH1_H+1, 0x00);
3416*53ee8cc1Swenshuai.xi 
3417*53ee8cc1Swenshuai.xi     // real HW_KPKI_THR2_L
3418*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH2_L, 0x00);
3419*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH2_L+1, 0x01);
3420*53ee8cc1Swenshuai.xi 
3421*53ee8cc1Swenshuai.xi     // real HW_KPKI_THR2_H
3422*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH2_H, 0x00);
3423*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH2_H+1, 0x01);
3424*53ee8cc1Swenshuai.xi 
3425*53ee8cc1Swenshuai.xi     // real HW_KPKI_THR3_L
3426*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH3_L, 0xFF);
3427*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH3_L+1, 0xFF);
3428*53ee8cc1Swenshuai.xi 
3429*53ee8cc1Swenshuai.xi     // real HW_KPKI_THR3_H
3430*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH3_H, 0xFF);
3431*53ee8cc1Swenshuai.xi     msWriteByte(KPKI_ADJ_TH3_H+1, 0xFF);
3432*53ee8cc1Swenshuai.xi 
3433*53ee8cc1Swenshuai.xi     // real HW_KPKI setting
3434*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KP_ADJ1, 0x05, 0x0F);
3435*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KI_ADJ1, 0x80, 0xF0);
3436*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KP_ADJ2, 0x04, 0x0F);
3437*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KI_ADJ2, 0x70, 0xF0);
3438*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KP_ADJ3, 0x03, 0x0F);
3439*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_KI_ADJ3, 0x60, 0xF0);
3440*53ee8cc1Swenshuai.xi 
3441*53ee8cc1Swenshuai.xi     // real HW_KPKI_disable
3442*53ee8cc1Swenshuai.xi     msWriteBit(KPKI_ADJ_EN, 0, _BIT0);
3443*53ee8cc1Swenshuai.xi     g_VifHWKpKiFlag = 1; // 0:SW_Kp/Ki ; 1:Real HW_Kp/Ki
3444*53ee8cc1Swenshuai.xi     msWriteBit(HALVIFDBG2_BIT, g_VifHWKpKiFlag, _BIT0);
3445*53ee8cc1Swenshuai.xi 
3446*53ee8cc1Swenshuai.xi     // for China stream setting
3447*53ee8cc1Swenshuai.xi     msWriteByte(CR_JTR_MAX_CNT, 0x00);
3448*53ee8cc1Swenshuai.xi     msWriteByte(CR_JTR_MAX_CNT+1, 0x70);
3449*53ee8cc1Swenshuai.xi     msWriteByteMask(JTR_DELTA_AVE_NUM, 0x20, 0x30);
3450*53ee8cc1Swenshuai.xi 
3451*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_N_A1, 1, _BIT2);
3452*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_N_A2, 1, _BIT3);
3453*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS11, 1, _BIT0);
3454*53ee8cc1Swenshuai.xi     msWriteBit(BYPASS_SOS12, 1, _BIT1);
3455*53ee8cc1Swenshuai.xi 
3456*53ee8cc1Swenshuai.xi     //msWriteBit(BYPASS_A_DC, 1, _BIT0);                               // Bypass A_DC filter
3457*53ee8cc1Swenshuai.xi     //msWriteBit(BYPASS_A_BPF, 1, _BIT1);                              // Bypass A_BPF
3458*53ee8cc1Swenshuai.xi     //msWriteBit(ADAGC_GAIN_OREN, 1, _BIT0);                       // fixed ADAGC gain
3459*53ee8cc1Swenshuai.xi     //msWriteByte(ADAGC_GAIN_OV, 0x24);
3460*53ee8cc1Swenshuai.xi     //msWriteByte(ADAGC_GAIN_OV+1, 0x00);
3461*53ee8cc1Swenshuai.xi 
3462*53ee8cc1Swenshuai.xi     msWriteByteMask(VIF_SOFT_RSTZ, 0x7F, 0x7D);                     // VIF software reset
3463*53ee8cc1Swenshuai.xi     msWriteBit(CLAMPGAIN_RSTZ, 1, _BIT0);                           // clampgain software reset
3464*53ee8cc1Swenshuai.xi     msWriteBit(VSYNC_RSTZ, 1, _BIT0);                               // vsync software reset
3465*53ee8cc1Swenshuai.xi 
3466*53ee8cc1Swenshuai.xi     // TOP
3467*53ee8cc1Swenshuai.xi     msVifTopAdjust();
3468*53ee8cc1Swenshuai.xi 
3469*53ee8cc1Swenshuai.xi     // version control
3470*53ee8cc1Swenshuai.xi     msWriteByte(FIRMWARE_VERSION_L, 0x13);                          // 19(dd)
3471*53ee8cc1Swenshuai.xi     msWriteByte(FIRMWARE_VERSION_H, 0x90);                         // 09/16 (mm/yy)  firmware version control
3472*53ee8cc1Swenshuai.xi 
3473*53ee8cc1Swenshuai.xi     HAL_VIF_Delay1ms(1);
3474*53ee8cc1Swenshuai.xi     msWriteByteMask(VIF_SOFT_RSTZ, 0x7F, 0x7F);
3475*53ee8cc1Swenshuai.xi }
3476*53ee8cc1Swenshuai.xi 
3477*53ee8cc1Swenshuai.xi // For API
msVifExit(void)3478*53ee8cc1Swenshuai.xi void msVifExit(void)
3479*53ee8cc1Swenshuai.xi {
3480*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
3481*53ee8cc1Swenshuai.xi 
3482*53ee8cc1Swenshuai.xi     // RFAGC/IFAGC disable
3483*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(RFAGC_ENABLE, 0, _BIT0);
3484*53ee8cc1Swenshuai.xi     RIU_WriteRegBit(IFAGC_ENABLE, 0, _BIT4);
3485*53ee8cc1Swenshuai.xi 
3486*53ee8cc1Swenshuai.xi     // AGC Disable
3487*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12830L, 0x00);
3488*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12831L, 0x00);
3489*53ee8cc1Swenshuai.xi 
3490*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F0AL, 0x11);
3491*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F0BL, 0x11);
3492*53ee8cc1Swenshuai.xi 
3493*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F1CL, 0x11);
3494*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F1DL, 0x11);
3495*53ee8cc1Swenshuai.xi 
3496*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11FE3L, 0x11);
3497*53ee8cc1Swenshuai.xi 
3498*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F78L, 0x11);
3499*53ee8cc1Swenshuai.xi 
3500*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x11F25L, 0x01);
3501*53ee8cc1Swenshuai.xi 
3502*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x52991L, 0x11);
3503*53ee8cc1Swenshuai.xi 
3504*53ee8cc1Swenshuai.xi     // SRAM Power Control
3505*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12090L, 0xFC);
3506*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12091L, 0xFF);
3507*53ee8cc1Swenshuai.xi 
3508*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E0L, 0x00);
3509*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E1L, 0x00);
3510*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E2L, 0x00);
3511*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E3L, 0x00);
3512*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E4L, 0x00);
3513*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E5L, 0x00);
3514*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E6L, 0x00);
3515*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E7L, 0x00);
3516*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E8L, 0x00);
3517*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x127E9L, 0x00);
3518*53ee8cc1Swenshuai.xi 
3519*53ee8cc1Swenshuai.xi     // MPLL Power Down
3520*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12860L, 0xFA);
3521*53ee8cc1Swenshuai.xi     RIU_WriteByte(0x12861L, 0x24);
3522*53ee8cc1Swenshuai.xi }
3523*53ee8cc1Swenshuai.xi 
3524*53ee8cc1Swenshuai.xi // For API
msVifHandler(BOOL bVifDbbAcq)3525*53ee8cc1Swenshuai.xi void msVifHandler(BOOL bVifDbbAcq)
3526*53ee8cc1Swenshuai.xi {
3527*53ee8cc1Swenshuai.xi     BYTE afc_foe;
3528*53ee8cc1Swenshuai.xi     BYTE mean16;
3529*53ee8cc1Swenshuai.xi     BYTE agc_pga2;
3530*53ee8cc1Swenshuai.xi     WORD agc_vga;
3531*53ee8cc1Swenshuai.xi     BYTE dagc1_var;
3532*53ee8cc1Swenshuai.xi     BYTE kpki_gear;
3533*53ee8cc1Swenshuai.xi     static BYTE crjtr_det_cnt = 0;
3534*53ee8cc1Swenshuai.xi     static WORD kpki_cnt_idx = 0;
3535*53ee8cc1Swenshuai.xi 
3536*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return ;
3537*53ee8cc1Swenshuai.xi 
3538*53ee8cc1Swenshuai.xi     MsOS_DelayTask(3);
3539*53ee8cc1Swenshuai.xi 
3540*53ee8cc1Swenshuai.xi     switch(g_ucVifStatusStep)
3541*53ee8cc1Swenshuai.xi     {
3542*53ee8cc1Swenshuai.xi         case VIF_START:
3543*53ee8cc1Swenshuai.xi         case VIF_AGC_STATUS:
3544*53ee8cc1Swenshuai.xi             g_VifCrKpKiAdjLoopCnt = 0;
3545*53ee8cc1Swenshuai.xi             kpki_cnt_idx = 0;
3546*53ee8cc1Swenshuai.xi             crjtr_det_cnt = 0;
3547*53ee8cc1Swenshuai.xi 	          mean16 = (BYTE)(msRead2Bytes(AGC_MEAN16)>>1);                        // AGC mean16
3548*53ee8cc1Swenshuai.xi             agc_pga2 = msReadByte(AGC_PGA2C) & 0x1F;
3549*53ee8cc1Swenshuai.xi             agc_vga = msRead2Bytes(AGC_VGA);
3550*53ee8cc1Swenshuai.xi             if (g_bCheckModulationType == 0)
3551*53ee8cc1Swenshuai.xi             {
3552*53ee8cc1Swenshuai.xi     	        if (((mean16 < AGC_MEAN16_UPBOUND) && (mean16 > AGC_MEAN16_LOWBOUND)) || (agc_pga2 == 0x1F) || (agc_vga == VIFInitialIn_inst.VifVgaMinimum))
3553*53ee8cc1Swenshuai.xi                 {
3554*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_L, 0x04);              // AGC line cnt = 4
3555*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_H, 0x00);
3556*53ee8cc1Swenshuai.xi 
3557*53ee8cc1Swenshuai.xi                     msWriteBit(CR_K_SEL, 0, _BIT6);	                // kp1,ki1,kf1; kp2,ki2,kf2
3558*53ee8cc1Swenshuai.xi                     msWriteBit(CR_K_SEL2, 0, _BIT0);
3559*53ee8cc1Swenshuai.xi 
3560*53ee8cc1Swenshuai.xi                     g_ucVifStatusStep = VIF_AFC_STATUS;
3561*53ee8cc1Swenshuai.xi             	}
3562*53ee8cc1Swenshuai.xi             }
3563*53ee8cc1Swenshuai.xi             else
3564*53ee8cc1Swenshuai.xi             {
3565*53ee8cc1Swenshuai.xi                 if (((mean16 < AGC_MEAN16_UPBOUND_SECAM) && (mean16 > AGC_MEAN16_LOWBOUND_SECAM)) || (agc_pga2 == 0x1F) || (agc_vga == VIFInitialIn_inst.VifVgaMinimum))
3566*53ee8cc1Swenshuai.xi                 {
3567*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_L, 0x04);              // AGC line cnt = 4
3568*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_H, 0x00);
3569*53ee8cc1Swenshuai.xi 
3570*53ee8cc1Swenshuai.xi                     msWriteBit(CR_K_SEL, 0, _BIT6);	                // kp1,ki1,kf1,kp2,ki2,kf2
3571*53ee8cc1Swenshuai.xi 
3572*53ee8cc1Swenshuai.xi                     g_ucVifStatusStep = VIF_AFC_STATUS;
3573*53ee8cc1Swenshuai.xi                 }
3574*53ee8cc1Swenshuai.xi             }
3575*53ee8cc1Swenshuai.xi 
3576*53ee8cc1Swenshuai.xi 	     // for No-SAW use
3577*53ee8cc1Swenshuai.xi            if((VIFInitialIn_inst.VifSawArch == NO_SAW)&&(g_bCheckModulationType == 0))
3578*53ee8cc1Swenshuai.xi            {
3579*53ee8cc1Swenshuai.xi                if(bVifDbbAcq == 0)
3580*53ee8cc1Swenshuai.xi                   msWriteByte(AGC_REF, VIFInitialIn_inst.VifAgcRefNegative);
3581*53ee8cc1Swenshuai.xi                else
3582*53ee8cc1Swenshuai.xi                   msWriteByte(AGC_REF, VIFInitialIn_inst.VifChanelScanAGCREF);
3583*53ee8cc1Swenshuai.xi             }
3584*53ee8cc1Swenshuai.xi 
3585*53ee8cc1Swenshuai.xi             break;
3586*53ee8cc1Swenshuai.xi 
3587*53ee8cc1Swenshuai.xi         case VIF_AFC_STATUS:
3588*53ee8cc1Swenshuai.xi             if (_bit0_(msReadByte(CR_LOCK_STATUS)))
3589*53ee8cc1Swenshuai.xi             {
3590*53ee8cc1Swenshuai.xi                 // DAGC
3591*53ee8cc1Swenshuai.xi                 if (g_bCheckModulationType == 1)
3592*53ee8cc1Swenshuai.xi                 {
3593*53ee8cc1Swenshuai.xi                     msWriteBit(DAGC1_OREN, 1, _BIT6);	            // DAGC1 gain_overwrite = 1
3594*53ee8cc1Swenshuai.xi                     msWriteBit(DAGC2_OREN, 1, _BIT6);	            // DAGC2 gain_overwrite = 1
3595*53ee8cc1Swenshuai.xi                 }
3596*53ee8cc1Swenshuai.xi                 g_ucVifStatusStep = VIF_AFC_STATUS2;
3597*53ee8cc1Swenshuai.xi             }
3598*53ee8cc1Swenshuai.xi             else
3599*53ee8cc1Swenshuai.xi             {
3600*53ee8cc1Swenshuai.xi                 msWriteBit(CR_K_SEL, 0, _BIT6);	                // kp1,ki1,kf1,kp2,ki2,kf2
3601*53ee8cc1Swenshuai.xi                 HAL_VIF_Delay1us(1);
3602*53ee8cc1Swenshuai.xi                 msWriteBit(CR_NCO_FF_RSTZ, 0, _BIT2);       // reset NCO_FF
3603*53ee8cc1Swenshuai.xi                 msWriteBit(CR_LF_FF_RSTZ, 0, _BIT5);            // reset AFC integral part
3604*53ee8cc1Swenshuai.xi                 HAL_VIF_Delay1us(5);
3605*53ee8cc1Swenshuai.xi                 msWriteBit(CR_NCO_FF_RSTZ, 1, _BIT2);
3606*53ee8cc1Swenshuai.xi                 HAL_VIF_Delay1us(1);
3607*53ee8cc1Swenshuai.xi                 msWriteBit(CR_LF_FF_RSTZ, 1, _BIT5);
3608*53ee8cc1Swenshuai.xi             }
3609*53ee8cc1Swenshuai.xi             break;
3610*53ee8cc1Swenshuai.xi 
3611*53ee8cc1Swenshuai.xi         case VIF_AFC_STATUS2:
3612*53ee8cc1Swenshuai.xi             afc_foe = msReadByte(CR_FOE);                           // AFC_FOE
3613*53ee8cc1Swenshuai.xi             if ((afc_foe <= 0x04) || (afc_foe >= 0xFC))             // |AFC_FOE|<=4
3614*53ee8cc1Swenshuai.xi             {
3615*53ee8cc1Swenshuai.xi                 // AGC
3616*53ee8cc1Swenshuai.xi                 msWriteByte(AGC_VGA_THR, VIFInitialIn_inst.GainDistributionThr);    // vga threshold
3617*53ee8cc1Swenshuai.xi                 msWriteByte(AGC_VGA_THR+1, VIFInitialIn_inst.GainDistributionThr>>8);
3618*53ee8cc1Swenshuai.xi                 msWriteByte(AGC_VGA_BASE, VIFInitialIn_inst.VifAgcVgaBase);         // vga base
3619*53ee8cc1Swenshuai.xi                 if (bVifDbbAcq == 0)        // 0: not channel scan; 1: channel scan
3620*53ee8cc1Swenshuai.xi                 {
3621*53ee8cc1Swenshuai.xi                     // AGC
3622*53ee8cc1Swenshuai.xi                     if (bEnableUsrSteadyAgcK)
3623*53ee8cc1Swenshuai.xi                         msWriteByteMask(AGC_K, u8UsrSteadyAgcK, _BIT0|_BIT1|_BIT2);// k
3624*53ee8cc1Swenshuai.xi                     else
3625*53ee8cc1Swenshuai.xi                     msWriteByteMask(AGC_K, 0x04, _BIT0|_BIT1|_BIT2);// k
3626*53ee8cc1Swenshuai.xi 
3627*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_L, 0x10);              // AGC line cnt = 16
3628*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_LINE_CNT_H, 0x00);
3629*53ee8cc1Swenshuai.xi 
3630*53ee8cc1Swenshuai.xi                     // CR
3631*53ee8cc1Swenshuai.xi                     msWriteRegsTbl((MS_VIF_REG_TYPE *)VIF_CR_IIR_LPF2);    // IIR LPF2 coefficients
3632*53ee8cc1Swenshuai.xi 
3633*53ee8cc1Swenshuai.xi                     g_VifCrKp = VIFInitialIn_inst.VifCrKp;
3634*53ee8cc1Swenshuai.xi                     g_VifCrKi = VIFInitialIn_inst.VifCrKi;
3635*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_KP_SW, g_VifCrKp, 0x0F);            // Ki Kp software mode
3636*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_KI_SW, g_VifCrKi << 4, 0xF0);
3637*53ee8cc1Swenshuai.xi 
3638*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_KF_SW, 0x00, 0x0F);                              // kf software mode
3639*53ee8cc1Swenshuai.xi                     msWriteBit(CR_K_SEL, 1, _BIT6);	                                    // kp,ki,kf
3640*53ee8cc1Swenshuai.xi 
3641*53ee8cc1Swenshuai.xi                     if (VIFInitialIn_inst.VifCrKpKiAdjust)
3642*53ee8cc1Swenshuai.xi                     {
3643*53ee8cc1Swenshuai.xi                          //if(g_VifHWKpKiFlag == 1)
3644*53ee8cc1Swenshuai.xi                          if((msReadByte(HALVIFDBG2_BIT) & 0x01) != 0)
3645*53ee8cc1Swenshuai.xi                          {
3646*53ee8cc1Swenshuai.xi                              msWriteBit(KPKI_ADJ_EN, 1, _BIT0);                 // real HW_KPKI_enable
3647*53ee8cc1Swenshuai.xi                              kpki_gear = msReadByte(CR_KPKI_GEAR) & 0x30;
3648*53ee8cc1Swenshuai.xi                          }
3649*53ee8cc1Swenshuai.xi                     }
3650*53ee8cc1Swenshuai.xi 
3651*53ee8cc1Swenshuai.xi                     msWriteByte(CR_PD_ERR_MAX_L, VIFInitialIn_inst.VifCrPdErrMax);      // CR pd error max
3652*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_PD_ERR_MAX_H, VIFInitialIn_inst.VifCrPdErrMax>>8, 0x3F);
3653*53ee8cc1Swenshuai.xi                     msWriteByte(CR_UNLOCK_NUM, VIFInitialIn_inst.VifCrUnlockNum);       // CR unlock num
3654*53ee8cc1Swenshuai.xi                     msWriteByte(CR_UNLOCK_NUM+1, VIFInitialIn_inst.VifCrUnlockNum>>8);
3655*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_UNLOCK_NUM+2, VIFInitialIn_inst.VifCrUnlockNum>>16, 0x0F);
3656*53ee8cc1Swenshuai.xi 
3657*53ee8cc1Swenshuai.xi                     // over modulation
3658*53ee8cc1Swenshuai.xi                     if ((VIFInitialIn_inst.VifOverModulation == 1) && (g_bCheckModulationType == 0))
3659*53ee8cc1Swenshuai.xi                     {
3660*53ee8cc1Swenshuai.xi                         msWriteBit(VNCO_INV_OREN, 1, _BIT1);
3661*53ee8cc1Swenshuai.xi                         msWriteBit(VNCO_INV_OV, 0, _BIT2);
3662*53ee8cc1Swenshuai.xi                     }
3663*53ee8cc1Swenshuai.xi 
3664*53ee8cc1Swenshuai.xi                     g_ucVifStatusStep = VIF_STEADY_STATUS;
3665*53ee8cc1Swenshuai.xi                 }
3666*53ee8cc1Swenshuai.xi             }
3667*53ee8cc1Swenshuai.xi 
3668*53ee8cc1Swenshuai.xi             if (!(_bit0_(msReadByte(CR_LOCK_STATUS))))
3669*53ee8cc1Swenshuai.xi                 msVifInitial();
3670*53ee8cc1Swenshuai.xi             break;
3671*53ee8cc1Swenshuai.xi 
3672*53ee8cc1Swenshuai.xi         case VIF_STEADY_STATUS:
3673*53ee8cc1Swenshuai.xi 
3674*53ee8cc1Swenshuai.xi 	        // for SAWless, ADC back-off for +20dB ACI
3675*53ee8cc1Swenshuai.xi 	     if(VIFInitialIn_inst.VifSawArch == NO_SAW)
3676*53ee8cc1Swenshuai.xi 	     {
3677*53ee8cc1Swenshuai.xi 		   if(VIFInitialIn_inst.VifSeriousACIDetect)
3678*53ee8cc1Swenshuai.xi                        msVifSeriousACIDetection();
3679*53ee8cc1Swenshuai.xi             }
3680*53ee8cc1Swenshuai.xi 
3681*53ee8cc1Swenshuai.xi             // Dynamic TOP adjust for strong signal
3682*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifDynamicTopAdjust)
3683*53ee8cc1Swenshuai.xi             {
3684*53ee8cc1Swenshuai.xi                 msVifDynamicTopAdjust();
3685*53ee8cc1Swenshuai.xi             }
3686*53ee8cc1Swenshuai.xi 
3687*53ee8cc1Swenshuai.xi             // AM hum detector
3688*53ee8cc1Swenshuai.xi             agc_vga = msRead2Bytes(AGC_VGA);
3689*53ee8cc1Swenshuai.xi             dagc1_var = msReadByte(DAGC1_VAR+1);
3690*53ee8cc1Swenshuai.xi             if ((VIFInitialIn_inst.VifAmHumDetection == 1) && ((agc_vga > VIFInitialIn_inst.VifVgaMinimum) || (agc_vga < (VIFInitialIn_inst.GainDistributionThr - 0x1000))))
3691*53ee8cc1Swenshuai.xi             {
3692*53ee8cc1Swenshuai.xi                 if ((dagc1_var >= 0x18) && (g_bCheckModulationType == 0))
3693*53ee8cc1Swenshuai.xi                 {
3694*53ee8cc1Swenshuai.xi                     // 20% AM modulation
3695*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_REF, 0x43);                                     // AGC ref
3696*53ee8cc1Swenshuai.xi                 }
3697*53ee8cc1Swenshuai.xi                 else if ((dagc1_var <= 0x05) && (g_bCheckModulationType == 0))
3698*53ee8cc1Swenshuai.xi                 {
3699*53ee8cc1Swenshuai.xi                     // 10% AM modulation
3700*53ee8cc1Swenshuai.xi                     msWriteByte(AGC_REF, VIFInitialIn_inst.VifAgcRefNegative);      // AGC ref
3701*53ee8cc1Swenshuai.xi                 }
3702*53ee8cc1Swenshuai.xi             }
3703*53ee8cc1Swenshuai.xi 
3704*53ee8cc1Swenshuai.xi             // AGC
3705*53ee8cc1Swenshuai.xi             mean16 = (BYTE)(msRead2Bytes(AGC_MEAN16)>>1);                // AGC mean16
3706*53ee8cc1Swenshuai.xi             if (g_bCheckModulationType == 0)
3707*53ee8cc1Swenshuai.xi             {
3708*53ee8cc1Swenshuai.xi     	        if ((mean16 < AGC_MEAN16_UPBOUND) && (mean16 > AGC_MEAN16_LOWBOUND))
3709*53ee8cc1Swenshuai.xi                 {
3710*53ee8cc1Swenshuai.xi                     if (bEnableUsrSteadyAgcK)
3711*53ee8cc1Swenshuai.xi                         msWriteByteMask(AGC_K, u8UsrSteadyAgcK, _BIT0|_BIT1|_BIT2);// k
3712*53ee8cc1Swenshuai.xi                     else
3713*53ee8cc1Swenshuai.xi                     msWriteByteMask(AGC_K, 0x04, _BIT0|_BIT1|_BIT2);    // k
3714*53ee8cc1Swenshuai.xi             	}
3715*53ee8cc1Swenshuai.xi                 else
3716*53ee8cc1Swenshuai.xi                 {
3717*53ee8cc1Swenshuai.xi                     if (bEnableUsrNonSteadyAgcK)
3718*53ee8cc1Swenshuai.xi                         msWriteByteMask(AGC_K, u8UsrNonSteadyAgcK, _BIT0|_BIT1|_BIT2);                // k
3719*53ee8cc1Swenshuai.xi                     else
3720*53ee8cc1Swenshuai.xi                     {
3721*53ee8cc1Swenshuai.xi                         if (VIFInitialIn_inst.VifTunerType == 1)
3722*53ee8cc1Swenshuai.xi                             msWriteByteMask(AGC_K, 0x03, _BIT0|_BIT1|_BIT2);                // k
3723*53ee8cc1Swenshuai.xi                         else
3724*53ee8cc1Swenshuai.xi                     msWriteByteMask(AGC_K, 0x02, _BIT0|_BIT1|_BIT2);    // k
3725*53ee8cc1Swenshuai.xi             	}
3726*53ee8cc1Swenshuai.xi             }
3727*53ee8cc1Swenshuai.xi             }
3728*53ee8cc1Swenshuai.xi 
3729*53ee8cc1Swenshuai.xi             // CR monitor
3730*53ee8cc1Swenshuai.xi             agc_pga2 = msReadByte(AGC_PGA2C) & 0x1F;
3731*53ee8cc1Swenshuai.xi             if ((agc_pga2 >= 0x0F) && (VIFInitialIn_inst.VifCrPdModeSel == 1))
3732*53ee8cc1Swenshuai.xi             {
3733*53ee8cc1Swenshuai.xi                 msWriteByteMask(CR_KP_SW,  (VIFInitialIn_inst.VifCrKp)+0x01, 0x0F);     // kp software mode
3734*53ee8cc1Swenshuai.xi                 msWriteByteMask(CR_KI_SW, (VIFInitialIn_inst.VifCrKi<<4)+0x10, 0xF0);  // ki software mode
3735*53ee8cc1Swenshuai.xi             }
3736*53ee8cc1Swenshuai.xi             else
3737*53ee8cc1Swenshuai.xi             {
3738*53ee8cc1Swenshuai.xi                 if (VIFInitialIn_inst.VifCrKpKiAdjust)
3739*53ee8cc1Swenshuai.xi                 {
3740*53ee8cc1Swenshuai.xi                   //if(g_VifHWKpKiFlag == 1)
3741*53ee8cc1Swenshuai.xi                   if((msReadByte(HALVIFDBG2_BIT) & 0x01) != 0)
3742*53ee8cc1Swenshuai.xi                   {
3743*53ee8cc1Swenshuai.xi                       g_VifCrKp = VIFInitialIn_inst.VifCrKp;
3744*53ee8cc1Swenshuai.xi                       g_VifCrKi = VIFInitialIn_inst.VifCrKi;
3745*53ee8cc1Swenshuai.xi                       msWriteByteMask(CR_KP_SW, g_VifCrKp, 0x0F);            // Ki Kp software mode
3746*53ee8cc1Swenshuai.xi                       msWriteByteMask(CR_KI_SW, g_VifCrKi << 4, 0xF0);
3747*53ee8cc1Swenshuai.xi 
3748*53ee8cc1Swenshuai.xi                       msWriteBit(KPKI_ADJ_EN, 1, _BIT0);                 // real HW_KPKI_enable
3749*53ee8cc1Swenshuai.xi                       kpki_gear = msReadByte(CR_KPKI_GEAR) & 0x30;
3750*53ee8cc1Swenshuai.xi 
3751*53ee8cc1Swenshuai.xi                       if(kpki_gear == 0)
3752*53ee8cc1Swenshuai.xi                           kpki_cnt_idx = 0;
3753*53ee8cc1Swenshuai.xi                       else
3754*53ee8cc1Swenshuai.xi                       {
3755*53ee8cc1Swenshuai.xi                           if(kpki_cnt_idx == 7000)
3756*53ee8cc1Swenshuai.xi                           {
3757*53ee8cc1Swenshuai.xi                               msWriteBit(CR_PD_IMAG_INV, 0, _BIT1);             // for > 150% overmodulation
3758*53ee8cc1Swenshuai.xi                               kpki_cnt_idx = 0;
3759*53ee8cc1Swenshuai.xi                           }
3760*53ee8cc1Swenshuai.xi                           kpki_cnt_idx++;
3761*53ee8cc1Swenshuai.xi                       }
3762*53ee8cc1Swenshuai.xi                    }
3763*53ee8cc1Swenshuai.xi                    else
3764*53ee8cc1Swenshuai.xi                    {
3765*53ee8cc1Swenshuai.xi                        msWriteBit(KPKI_ADJ_EN, 0, _BIT0);                 // real HW_KPKI_disable
3766*53ee8cc1Swenshuai.xi 
3767*53ee8cc1Swenshuai.xi                        if(crjtr_det_cnt < 6)
3768*53ee8cc1Swenshuai.xi                        {
3769*53ee8cc1Swenshuai.xi                            msVifCrKpKiAutoAdjust(VIFInitialIn_inst.VifCrKpKiAdjustThr1, VIFInitialIn_inst.VifCrKpKiAdjustThr2);
3770*53ee8cc1Swenshuai.xi 
3771*53ee8cc1Swenshuai.xi                            if(g_VifCrKpKiAdjLoopCnt == 0)
3772*53ee8cc1Swenshuai.xi                            {
3773*53ee8cc1Swenshuai.xi                                crjtr_det_cnt++;
3774*53ee8cc1Swenshuai.xi                                msWriteByteMask(CR_KP_SW, g_VifCrKp, 0x0F);            // Ki Kp software mode
3775*53ee8cc1Swenshuai.xi                                msWriteByteMask(CR_KI_SW, g_VifCrKi << 4, 0xF0);
3776*53ee8cc1Swenshuai.xi 
3777*53ee8cc1Swenshuai.xi                                if(g_VifCrKp != VIFInitialIn_inst.VifCrKp)              // If carrier drift
3778*53ee8cc1Swenshuai.xi 			             msWriteBit(CR_PD_IMAG_INV, 0, _BIT1);
3779*53ee8cc1Swenshuai.xi                                else
3780*53ee8cc1Swenshuai.xi 			             msWriteBit(CR_PD_IMAG_INV, 1, _BIT1);
3781*53ee8cc1Swenshuai.xi                             }
3782*53ee8cc1Swenshuai.xi                          }
3783*53ee8cc1Swenshuai.xi                      }
3784*53ee8cc1Swenshuai.xi                 }
3785*53ee8cc1Swenshuai.xi                 else
3786*53ee8cc1Swenshuai.xi                 {
3787*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_KP_SW, VIFInitialIn_inst.VifCrKp, 0x0F);         // kp software mode
3788*53ee8cc1Swenshuai.xi                     msWriteByteMask(CR_KI_SW, VIFInitialIn_inst.VifCrKi<<4, 0xF0);      // ki software mode
3789*53ee8cc1Swenshuai.xi                 }
3790*53ee8cc1Swenshuai.xi             }
3791*53ee8cc1Swenshuai.xi 
3792*53ee8cc1Swenshuai.xi             if(!(_bit0_(msReadByte(CR_LOCK_STATUS))))
3793*53ee8cc1Swenshuai.xi             {
3794*53ee8cc1Swenshuai.xi                     HAL_VIF_Delay1ms(50);                           // for Fluke 54200 50dBuV <-> 51dBuV switch
3795*53ee8cc1Swenshuai.xi                 if(!(_bit0_(msReadByte(CR_LOCK_STATUS))))
3796*53ee8cc1Swenshuai.xi                 {
3797*53ee8cc1Swenshuai.xi                     // for debug
3798*53ee8cc1Swenshuai.xi                     if (msReadByte(HALVIFDBG_BIT) & 0x08)
3799*53ee8cc1Swenshuai.xi                     {
3800*53ee8cc1Swenshuai.xi                           printf("VIF msVifInitial!!!");
3801*53ee8cc1Swenshuai.xi                     }
3802*53ee8cc1Swenshuai.xi                     msVifInitial();
3803*53ee8cc1Swenshuai.xi                 }
3804*53ee8cc1Swenshuai.xi             }
3805*53ee8cc1Swenshuai.xi 
3806*53ee8cc1Swenshuai.xi             // for debug
3807*53ee8cc1Swenshuai.xi             if (msReadByte(HALVIFDBG_BIT) & 0x40)
3808*53ee8cc1Swenshuai.xi             {
3809*53ee8cc1Swenshuai.xi                 if (VIFInitialIn_inst.VifCrKpKiAdjust==1 )
3810*53ee8cc1Swenshuai.xi                 {
3811*53ee8cc1Swenshuai.xi                     VIFInitialIn_inst.VifCrKpKiAdjust=0;
3812*53ee8cc1Swenshuai.xi                 }
3813*53ee8cc1Swenshuai.xi                 printf("\r\n Disable VIF KpKi auto adjust");
3814*53ee8cc1Swenshuai.xi             }
3815*53ee8cc1Swenshuai.xi 
3816*53ee8cc1Swenshuai.xi             // for debug
3817*53ee8cc1Swenshuai.xi             if ((msReadByte(HALVIFDBG_BIT) & 0x80) || (VIFInitialIn_inst.VifReserve & _BIT3))
3818*53ee8cc1Swenshuai.xi             {
3819*53ee8cc1Swenshuai.xi                 U8 ir_rate;
3820*53ee8cc1Swenshuai.xi 
3821*53ee8cc1Swenshuai.xi                 // IR Rate
3822*53ee8cc1Swenshuai.xi                 ir_rate = msReadByte(IF_RATE);
3823*53ee8cc1Swenshuai.xi                 if (ir_rate==0x49)
3824*53ee8cc1Swenshuai.xi                     printf("\r\n IF_FREQ_3395 IF_FREQ_3890");
3825*53ee8cc1Swenshuai.xi                 else if (ir_rate==0xE3)
3826*53ee8cc1Swenshuai.xi                     printf("\r\n IF_FREQ_3800");
3827*53ee8cc1Swenshuai.xi                 else if (ir_rate==0x8E)
3828*53ee8cc1Swenshuai.xi                     printf("\r\n IF_FREQ_3950");
3829*53ee8cc1Swenshuai.xi                 else if (ir_rate==0xAA)
3830*53ee8cc1Swenshuai.xi                     printf("\r\n IF_FREQ_4575");
3831*53ee8cc1Swenshuai.xi                 else if (ir_rate==0xC7)
3832*53ee8cc1Swenshuai.xi                     printf("\r\n IF_FREQ_5875");
3833*53ee8cc1Swenshuai.xi                 else
3834*53ee8cc1Swenshuai.xi                     printf("\r\n unknown");
3835*53ee8cc1Swenshuai.xi 
3836*53ee8cc1Swenshuai.xi                 printf(" IR_RATE=0x%x ", ir_rate);
3837*53ee8cc1Swenshuai.xi 
3838*53ee8cc1Swenshuai.xi                 // sound system
3839*53ee8cc1Swenshuai.xi                 if (g_ucVifSoundSystemType==0)
3840*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_B");
3841*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==1)
3842*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_B_NICAM");
3843*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==2)
3844*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_GH");
3845*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==3)
3846*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_GH_NICAM");
3847*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==4)
3848*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_I");
3849*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==5)
3850*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_DK1");
3851*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==6)
3852*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_DK2");
3853*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==7)
3854*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_DK3");
3855*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==8)
3856*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_DK_NICAM");
3857*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==9)
3858*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_L");
3859*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==10)
3860*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_LL");
3861*53ee8cc1Swenshuai.xi                 else if (g_ucVifSoundSystemType==11)
3862*53ee8cc1Swenshuai.xi                     printf("\r\n VIF_SOUND_MN");
3863*53ee8cc1Swenshuai.xi                 else
3864*53ee8cc1Swenshuai.xi                     printf("\r\n unknown");
3865*53ee8cc1Swenshuai.xi 
3866*53ee8cc1Swenshuai.xi                 printf(" sound system=%d", (BYTE)g_ucVifSoundSystemType);
3867*53ee8cc1Swenshuai.xi 
3868*53ee8cc1Swenshuai.xi                 // freq band select
3869*53ee8cc1Swenshuai.xi                 printf("\r\n band=%d", (BYTE)VIFInitialIn_inst.VifFreqBand);
3870*53ee8cc1Swenshuai.xi             }
3871*53ee8cc1Swenshuai.xi             break;
3872*53ee8cc1Swenshuai.xi 
3873*53ee8cc1Swenshuai.xi         default:
3874*53ee8cc1Swenshuai.xi             g_ucVifStatusStep++;
3875*53ee8cc1Swenshuai.xi             break;
3876*53ee8cc1Swenshuai.xi     }
3877*53ee8cc1Swenshuai.xi 
3878*53ee8cc1Swenshuai.xi     if ((g_ucVifSoundSystemType == VIF_SOUND_L) || (g_ucVifSoundSystemType == VIF_SOUND_LL))
3879*53ee8cc1Swenshuai.xi     {
3880*53ee8cc1Swenshuai.xi         if (g_bCheckModulationType == 0)
3881*53ee8cc1Swenshuai.xi             msVifInitial();
3882*53ee8cc1Swenshuai.xi         if ((g_ucVifSoundSystemType == VIF_SOUND_L) && (g_bCheckIFFreq == 1))
3883*53ee8cc1Swenshuai.xi             msVifInitial();
3884*53ee8cc1Swenshuai.xi         if ((g_ucVifSoundSystemType == VIF_SOUND_LL) && (g_bCheckIFFreq == 0))
3885*53ee8cc1Swenshuai.xi             msVifInitial();
3886*53ee8cc1Swenshuai.xi     }
3887*53ee8cc1Swenshuai.xi     else
3888*53ee8cc1Swenshuai.xi     {
3889*53ee8cc1Swenshuai.xi         if (g_bCheckModulationType == 1)
3890*53ee8cc1Swenshuai.xi             msVifInitial();
3891*53ee8cc1Swenshuai.xi     }
3892*53ee8cc1Swenshuai.xi }
3893*53ee8cc1Swenshuai.xi 
msVifSeriousACIDetection(void)3894*53ee8cc1Swenshuai.xi void msVifSeriousACIDetection(void)
3895*53ee8cc1Swenshuai.xi {
3896*53ee8cc1Swenshuai.xi      BYTE AGC_Ref, AGC_Mean256, temp;
3897*53ee8cc1Swenshuai.xi      BYTE PGA = 0, ADC_Index = 0, ADC_Underflow_Index = 0, ADC_Overflow_Index = 0;
3898*53ee8cc1Swenshuai.xi      WORD VGA = 0;
3899*53ee8cc1Swenshuai.xi 
3900*53ee8cc1Swenshuai.xi      temp = msReadByte(AGC_REF);
3901*53ee8cc1Swenshuai.xi      AGC_Ref =(temp << 1);
3902*53ee8cc1Swenshuai.xi      AGC_Mean256 = msReadByte(AGC_MEAN256);
3903*53ee8cc1Swenshuai.xi 
3904*53ee8cc1Swenshuai.xi      if(SeriousACI_Index == 1)
3905*53ee8cc1Swenshuai.xi      {
3906*53ee8cc1Swenshuai.xi          VGA = msRead2Bytes(AGC_VGA);
3907*53ee8cc1Swenshuai.xi          PGA = msReadByte(AGC_PGA2C);
3908*53ee8cc1Swenshuai.xi          ADC_Index = RIU_ReadByte(0x12870L);
3909*53ee8cc1Swenshuai.xi          ADC_Underflow_Index = ADC_Index & 0x02;
3910*53ee8cc1Swenshuai.xi          ADC_Overflow_Index = ADC_Index & 0x04;
3911*53ee8cc1Swenshuai.xi 
3912*53ee8cc1Swenshuai.xi          if((ADC_Underflow_Index == 0x02 ||ADC_Overflow_Index == 0x04)&&(VGA == 0x7000)&&(PGA == 0x1F)&&(AGC_Change_Index == 0)
3913*53ee8cc1Swenshuai.xi 	   	&&(AGC_Ref - AGC_Mean256 > 5))
3914*53ee8cc1Swenshuai.xi          {
3915*53ee8cc1Swenshuai.xi              msWriteByte(AGC_REF, VIFInitialIn_inst.VifADCOverflowAGCREF);
3916*53ee8cc1Swenshuai.xi 	      msWriteBit(BYPASS_SOS21, 1 , _BIT2);
3917*53ee8cc1Swenshuai.xi 	      msWriteBit(BYPASS_SOS22, 1 , _BIT3);
3918*53ee8cc1Swenshuai.xi 	      msWriteByte(CLAMPGAIN_GAIN_OVERWRITE, 0x00);
3919*53ee8cc1Swenshuai.xi 	      msWriteByte(CLAMPGAIN_GAIN_OVERWRITE+1, 0x04);
3920*53ee8cc1Swenshuai.xi              AGC_Change_Index = 1;
3921*53ee8cc1Swenshuai.xi          }
3922*53ee8cc1Swenshuai.xi 	  SeriousACI_Index = 0;
3923*53ee8cc1Swenshuai.xi      }
3924*53ee8cc1Swenshuai.xi      SeriousACI_Index = SeriousACI_Index + 1;
3925*53ee8cc1Swenshuai.xi  }
3926*53ee8cc1Swenshuai.xi 
msVifCrKpKiAutoAdjust(BYTE VifCrKpKiAdjustThr1,BYTE VifCrKpKiAdjustThr2)3927*53ee8cc1Swenshuai.xi void msVifCrKpKiAutoAdjust(BYTE VifCrKpKiAdjustThr1, BYTE VifCrKpKiAdjustThr2)
3928*53ee8cc1Swenshuai.xi {
3929*53ee8cc1Swenshuai.xi     MS_S16 CrJtrMax, CrJtrMin;
3930*53ee8cc1Swenshuai.xi     static DWORD CrJtrDelta;
3931*53ee8cc1Swenshuai.xi 
3932*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\msVifCrKpKiAutoAdjust()"));
3933*53ee8cc1Swenshuai.xi 
3934*53ee8cc1Swenshuai.xi     msWriteBit(CR_STATUS_LATCH_EN, 1, _BIT4);                  // latch CR loop-filter
3935*53ee8cc1Swenshuai.xi 
3936*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_JTR_SEL, 0, _BIT3|_BIT2|_BIT1|_BIT0);         // 0: max
3937*53ee8cc1Swenshuai.xi     CrJtrMax = msRead2Bytes(CR_JTR_OUT);
3938*53ee8cc1Swenshuai.xi 
3939*53ee8cc1Swenshuai.xi     msWriteByteMask(CR_JTR_SEL, _BIT0, _BIT3|_BIT2|_BIT1|_BIT0);     // 1: min
3940*53ee8cc1Swenshuai.xi     CrJtrMin = msRead2Bytes(CR_JTR_OUT);
3941*53ee8cc1Swenshuai.xi 
3942*53ee8cc1Swenshuai.xi     msWriteBit(CR_STATUS_LATCH_EN, 0, _BIT4);                  // un-latch CR loop-filter status
3943*53ee8cc1Swenshuai.xi 
3944*53ee8cc1Swenshuai.xi     if(g_VifCrKpKiAdjLoopCnt == 0)                           // reset delta value
3945*53ee8cc1Swenshuai.xi         CrJtrDelta = 0;
3946*53ee8cc1Swenshuai.xi 
3947*53ee8cc1Swenshuai.xi     CrJtrDelta += (DWORD)(CrJtrMax - CrJtrMin);
3948*53ee8cc1Swenshuai.xi 
3949*53ee8cc1Swenshuai.xi     if (++g_VifCrKpKiAdjLoopCnt == 32)                       // 32 samples
3950*53ee8cc1Swenshuai.xi    {
3951*53ee8cc1Swenshuai.xi         CrJtrDelta = CrJtrDelta >> 5;                                // divided by 32
3952*53ee8cc1Swenshuai.xi         CrJtrDelta = CrJtrDelta >> 7;
3953*53ee8cc1Swenshuai.xi         if (g_VifCrKp >= VIFInitialIn_inst.VifCrKp)
3954*53ee8cc1Swenshuai.xi         {
3955*53ee8cc1Swenshuai.xi             if (CrJtrDelta >= VifCrKpKiAdjustThr2)
3956*53ee8cc1Swenshuai.xi             {
3957*53ee8cc1Swenshuai.xi                 g_VifCrKp -= 0x02;
3958*53ee8cc1Swenshuai.xi                 g_VifCrKi -= 0x02;
3959*53ee8cc1Swenshuai.xi             }
3960*53ee8cc1Swenshuai.xi     	     else if ((CrJtrDelta < VifCrKpKiAdjustThr2) && (CrJtrDelta >= VifCrKpKiAdjustThr1))
3961*53ee8cc1Swenshuai.xi             {
3962*53ee8cc1Swenshuai.xi                 g_VifCrKp -= 0x01;
3963*53ee8cc1Swenshuai.xi                 g_VifCrKi -= 0x01;
3964*53ee8cc1Swenshuai.xi             }
3965*53ee8cc1Swenshuai.xi         }
3966*53ee8cc1Swenshuai.xi         else if (g_VifCrKp == VIFInitialIn_inst.VifCrKp - 1)
3967*53ee8cc1Swenshuai.xi         {
3968*53ee8cc1Swenshuai.xi             if (CrJtrDelta >= VifCrKpKiAdjustThr2)
3969*53ee8cc1Swenshuai.xi             {
3970*53ee8cc1Swenshuai.xi                 g_VifCrKp -= 0x01;
3971*53ee8cc1Swenshuai.xi                 g_VifCrKi -= 0x01;
3972*53ee8cc1Swenshuai.xi             }
3973*53ee8cc1Swenshuai.xi             else if (CrJtrDelta < VifCrKpKiAdjustThr1 - 1)
3974*53ee8cc1Swenshuai.xi             {
3975*53ee8cc1Swenshuai.xi                 g_VifCrKp += 0x01 ;
3976*53ee8cc1Swenshuai.xi                 g_VifCrKi += 0x01;
3977*53ee8cc1Swenshuai.xi             }
3978*53ee8cc1Swenshuai.xi         }
3979*53ee8cc1Swenshuai.xi 	 else if (g_VifCrKp == VIFInitialIn_inst.VifCrKp - 2)
3980*53ee8cc1Swenshuai.xi 	{
3981*53ee8cc1Swenshuai.xi             if (CrJtrDelta < VifCrKpKiAdjustThr1 - 1)
3982*53ee8cc1Swenshuai.xi             {
3983*53ee8cc1Swenshuai.xi                 g_VifCrKp += 0x02;
3984*53ee8cc1Swenshuai.xi                 g_VifCrKi += 0x02;
3985*53ee8cc1Swenshuai.xi             }
3986*53ee8cc1Swenshuai.xi             else if (CrJtrDelta < VifCrKpKiAdjustThr2 - 3)
3987*53ee8cc1Swenshuai.xi             {
3988*53ee8cc1Swenshuai.xi                 g_VifCrKp += 0x01;
3989*53ee8cc1Swenshuai.xi                 g_VifCrKi += 0x01;
3990*53ee8cc1Swenshuai.xi             }
3991*53ee8cc1Swenshuai.xi 	}
3992*53ee8cc1Swenshuai.xi 
3993*53ee8cc1Swenshuai.xi         g_VifCrKpKiAdjLoopCnt = 0;
3994*53ee8cc1Swenshuai.xi         if (msReadByte(HALVIFDBG_BIT) & 0x20)
3995*53ee8cc1Swenshuai.xi         {
3996*53ee8cc1Swenshuai.xi             printf("\r\ng_ucVifStatusStep = %d", g_ucVifStatusStep);
3997*53ee8cc1Swenshuai.xi             printf("\nKi/Kp = %x%x", g_VifCrKi, g_VifCrKp);
3998*53ee8cc1Swenshuai.xi             printf("\nCrJtrMax = %x", CrJtrMax >> 7);
3999*53ee8cc1Swenshuai.xi             printf("\nCrJtrMin = %x", CrJtrMin >> 7);
4000*53ee8cc1Swenshuai.xi             printf("\r\nCrJtrDelta = %x", (WORD)((CrJtrDelta & 0xFFFF0000) >> 16));
4001*53ee8cc1Swenshuai.xi             printf("%x\r\n",(WORD)(CrJtrDelta & 0x0000FFFF));
4002*53ee8cc1Swenshuai.xi 	 }
4003*53ee8cc1Swenshuai.xi     }
4004*53ee8cc1Swenshuai.xi }
4005*53ee8cc1Swenshuai.xi 
msVifReadCRFOE(void)4006*53ee8cc1Swenshuai.xi U8 msVifReadCRFOE(void)
4007*53ee8cc1Swenshuai.xi {
4008*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifReadCRFOE()"));
4009*53ee8cc1Swenshuai.xi 
4010*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return 0;
4011*53ee8cc1Swenshuai.xi 
4012*53ee8cc1Swenshuai.xi     return msReadByte(CR_FOE);
4013*53ee8cc1Swenshuai.xi }
4014*53ee8cc1Swenshuai.xi 
msVifReadLockStatus(void)4015*53ee8cc1Swenshuai.xi U8 msVifReadLockStatus(void)
4016*53ee8cc1Swenshuai.xi {
4017*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nmsVifReadLockStatus()"));
4018*53ee8cc1Swenshuai.xi 
4019*53ee8cc1Swenshuai.xi     if (!_hal_VIF.bBaseAddrInitialized) return 0;
4020*53ee8cc1Swenshuai.xi 
4021*53ee8cc1Swenshuai.xi     return msReadByte(CR_LOCK_STATUS);
4022*53ee8cc1Swenshuai.xi }
4023*53ee8cc1Swenshuai.xi 
msVifLoadEQCoeff(BYTE VifSoundStandard)4024*53ee8cc1Swenshuai.xi void msVifLoadEQCoeff(BYTE VifSoundStandard)
4025*53ee8cc1Swenshuai.xi {
4026*53ee8cc1Swenshuai.xi    U8 u8index;
4027*53ee8cc1Swenshuai.xi 
4028*53ee8cc1Swenshuai.xi    HALVIFDBG(printf("\r\n msVifLoadEQCoeff()"));
4029*53ee8cc1Swenshuai.xi 
4030*53ee8cc1Swenshuai.xi    // set coef
4031*53ee8cc1Swenshuai.xi    RIU_WriteByte(0x120A0L, 0x01);                      // VIF use DVB SRAM and FIR
4032*53ee8cc1Swenshuai.xi    RIU_WriteByteMask(0x120A2L, 0x01, 0x0F);    // reg_vif_fir_coef_ctrl
4033*53ee8cc1Swenshuai.xi    RIU_WriteByteMask(0x120A2L, 0x03, 0x0F);    // reg_vif_fir_coef_ctrl
4034*53ee8cc1Swenshuai.xi    msWriteBit(BYPASS_EQFIR, 1, _BIT0);         // EQ BYPASS
4035*53ee8cc1Swenshuai.xi 
4036*53ee8cc1Swenshuai.xi    if(VIF_IS_EQ_IIR == 0)
4037*53ee8cc1Swenshuai.xi    {
4038*53ee8cc1Swenshuai.xi        // EQ FIR
4039*53ee8cc1Swenshuai.xi        RIU_WriteRegBit(0x120A0L, 0, _BIT4);             // 0:FIR, 1:IIR
4040*53ee8cc1Swenshuai.xi 
4041*53ee8cc1Swenshuai.xi        if(VifSoundStandard == VIF_SOUND_MN)
4042*53ee8cc1Swenshuai.xi        {
4043*53ee8cc1Swenshuai.xi            for(u8index = 0; u8index < 56; ++u8index)
4044*53ee8cc1Swenshuai.xi            {
4045*53ee8cc1Swenshuai.xi                RIU_Write2Byte(0x120A4, VIF_NTSC_EQ_CO_A_REJ[u8index]+0x8000);
4046*53ee8cc1Swenshuai.xi                RIU_Write2Byte(0x120A4, VIF_NTSC_EQ_CO_A_REJ[u8index]);
4047*53ee8cc1Swenshuai.xi            }
4048*53ee8cc1Swenshuai.xi        }
4049*53ee8cc1Swenshuai.xi        else
4050*53ee8cc1Swenshuai.xi        {
4051*53ee8cc1Swenshuai.xi            for(u8index = 0; u8index < 56; ++u8index)
4052*53ee8cc1Swenshuai.xi            {
4053*53ee8cc1Swenshuai.xi                RIU_Write2Byte(0x120A4, VIF_PAL_EQ_CO_A_REJ[u8index]+0x8000);
4054*53ee8cc1Swenshuai.xi                RIU_Write2Byte(0x120A4, VIF_PAL_EQ_CO_A_REJ[u8index]);
4055*53ee8cc1Swenshuai.xi            }
4056*53ee8cc1Swenshuai.xi        }
4057*53ee8cc1Swenshuai.xi    }
4058*53ee8cc1Swenshuai.xi    else
4059*53ee8cc1Swenshuai.xi    {
4060*53ee8cc1Swenshuai.xi        // EQ IIR
4061*53ee8cc1Swenshuai.xi        RIU_WriteRegBit(0x120A0L, 1, _BIT4);             // 0:FIR, 1:IIR
4062*53ee8cc1Swenshuai.xi 
4063*53ee8cc1Swenshuai.xi        switch(VifSoundStandard)
4064*53ee8cc1Swenshuai.xi        {
4065*53ee8cc1Swenshuai.xi            case VIF_SOUND_B:
4066*53ee8cc1Swenshuai.xi 	    case VIF_SOUND_GH:
4067*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4068*53ee8cc1Swenshuai.xi                {
4069*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_BG_EQ_IIR_BANDSTOP[u8index]+0x8000);
4070*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_BG_EQ_IIR_BANDSTOP[u8index]);
4071*53ee8cc1Swenshuai.xi                }
4072*53ee8cc1Swenshuai.xi                break;
4073*53ee8cc1Swenshuai.xi 
4074*53ee8cc1Swenshuai.xi            case VIF_SOUND_B_NICAM:
4075*53ee8cc1Swenshuai.xi            case VIF_SOUND_GH_NICAM:
4076*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4077*53ee8cc1Swenshuai.xi                {
4078*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_BG_NICAM_EQ_IIR_NOTCH[u8index]+0x8000);
4079*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_BG_NICAM_EQ_IIR_NOTCH[u8index]);
4080*53ee8cc1Swenshuai.xi                }
4081*53ee8cc1Swenshuai.xi                break;
4082*53ee8cc1Swenshuai.xi 
4083*53ee8cc1Swenshuai.xi            case VIF_SOUND_I:
4084*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4085*53ee8cc1Swenshuai.xi                {
4086*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_I_EQ_IIR_NOTCH[u8index]+0x8000);
4087*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_I_EQ_IIR_NOTCH[u8index]);
4088*53ee8cc1Swenshuai.xi                }
4089*53ee8cc1Swenshuai.xi                break;
4090*53ee8cc1Swenshuai.xi 
4091*53ee8cc1Swenshuai.xi            case VIF_SOUND_DK1:
4092*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4093*53ee8cc1Swenshuai.xi                {
4094*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK1_EQ_IIR_NOTCH[u8index]+0x8000);
4095*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK1_EQ_IIR_NOTCH[u8index]);
4096*53ee8cc1Swenshuai.xi                }
4097*53ee8cc1Swenshuai.xi                break;
4098*53ee8cc1Swenshuai.xi 
4099*53ee8cc1Swenshuai.xi            case VIF_SOUND_DK2:
4100*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4101*53ee8cc1Swenshuai.xi                {
4102*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK2_EQ_IIR_NOTCH[u8index]+0x8000);
4103*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK2_EQ_IIR_NOTCH[u8index]);
4104*53ee8cc1Swenshuai.xi                }
4105*53ee8cc1Swenshuai.xi                break;
4106*53ee8cc1Swenshuai.xi 
4107*53ee8cc1Swenshuai.xi            case VIF_SOUND_DK3:
4108*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4109*53ee8cc1Swenshuai.xi                {
4110*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK3_EQ_IIR_NOTCH[u8index]+0x8000);
4111*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK3_EQ_IIR_NOTCH[u8index]);
4112*53ee8cc1Swenshuai.xi                }
4113*53ee8cc1Swenshuai.xi                break;
4114*53ee8cc1Swenshuai.xi 
4115*53ee8cc1Swenshuai.xi            case VIF_SOUND_DK_NICAM:
4116*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4117*53ee8cc1Swenshuai.xi                {
4118*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK_NICAM_EQ_IIR_NOTCH[u8index]+0x8000);
4119*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK_NICAM_EQ_IIR_NOTCH[u8index]);
4120*53ee8cc1Swenshuai.xi                }
4121*53ee8cc1Swenshuai.xi                break;
4122*53ee8cc1Swenshuai.xi 
4123*53ee8cc1Swenshuai.xi            case VIF_SOUND_MN:
4124*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4125*53ee8cc1Swenshuai.xi                {
4126*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_NTSC_MN_EQ_IIR_NOTCH[u8index]+0x8000);
4127*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_NTSC_MN_EQ_IIR_NOTCH[u8index]);
4128*53ee8cc1Swenshuai.xi                }
4129*53ee8cc1Swenshuai.xi                break;
4130*53ee8cc1Swenshuai.xi 
4131*53ee8cc1Swenshuai.xi            case VIF_SOUND_L:
4132*53ee8cc1Swenshuai.xi            case VIF_SOUND_LL:
4133*53ee8cc1Swenshuai.xi 		 //audio carrier 1 and 2 are at the same position as DK NICAM
4134*53ee8cc1Swenshuai.xi                for(u8index = 0; u8index < 18; ++u8index)
4135*53ee8cc1Swenshuai.xi                {
4136*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK_NICAM_EQ_IIR_NOTCH[u8index]+0x8000);
4137*53ee8cc1Swenshuai.xi                    RIU_Write2Byte(0x120A4, VIF_DK_NICAM_EQ_IIR_NOTCH[u8index]);
4138*53ee8cc1Swenshuai.xi                }
4139*53ee8cc1Swenshuai.xi                break;
4140*53ee8cc1Swenshuai.xi 
4141*53ee8cc1Swenshuai.xi            case VIF_SOUND_NUMS:
4142*53ee8cc1Swenshuai.xi            default:
4143*53ee8cc1Swenshuai.xi                break;
4144*53ee8cc1Swenshuai.xi        }
4145*53ee8cc1Swenshuai.xi    }
4146*53ee8cc1Swenshuai.xi    msWriteBit(BYPASS_EQFIR , 0 , _BIT0);     // EQ not BYPASS
4147*53ee8cc1Swenshuai.xi }
4148*53ee8cc1Swenshuai.xi 
msVifShiftClk(BYTE VifShiftClk)4149*53ee8cc1Swenshuai.xi void msVifShiftClk(BYTE VifShiftClk)
4150*53ee8cc1Swenshuai.xi {
4151*53ee8cc1Swenshuai.xi     if(VIF_IS_ADC_48MHz == 0)
4152*53ee8cc1Swenshuai.xi     {
4153*53ee8cc1Swenshuai.xi         if (VifShiftClk == 1)
4154*53ee8cc1Swenshuai.xi         {
4155*53ee8cc1Swenshuai.xi             //g_VifShiftClk = 1; // 0x1121_D3
4156*53ee8cc1Swenshuai.xi             msWriteByte(VIF_RF_RESERVED_1+1, 0x01);
4157*53ee8cc1Swenshuai.xi 
4158*53ee8cc1Swenshuai.xi             msWriteByte(0x12866L, 0x00);//loop divider
4159*53ee8cc1Swenshuai.xi             msWriteByte(0x12867L, 0x23);
4160*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 0)
4161*53ee8cc1Swenshuai.xi             {
4162*53ee8cc1Swenshuai.xi                 // move to clk 42 Mhz
4163*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE, 0x6D);                                     // cr_rate for 15 MHz
4164*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE+1, 0xDB);
4165*53ee8cc1Swenshuai.xi                 msWriteByteMask(CR_RATE+2, 0x16, 0x1F);
4166*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
4167*53ee8cc1Swenshuai.xi 
4168*53ee8cc1Swenshuai.xi     	         // move to clk 140 Mhz
4169*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0xA8);                 			   // IF rate for 23 MHz
4170*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0x83);
4171*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
4172*53ee8cc1Swenshuai.xi             }
4173*53ee8cc1Swenshuai.xi         }
4174*53ee8cc1Swenshuai.xi         else if(VifShiftClk == 2)
4175*53ee8cc1Swenshuai.xi         {
4176*53ee8cc1Swenshuai.xi             //g_VifShiftClk = 2; // 0x1121_D3
4177*53ee8cc1Swenshuai.xi             msWriteByte(VIF_RF_RESERVED_1+1, 0x02);
4178*53ee8cc1Swenshuai.xi 
4179*53ee8cc1Swenshuai.xi             msWriteByte(0x12866L, 0x00);//loop divider
4180*53ee8cc1Swenshuai.xi             msWriteByte(0x12867L, 0x25);
4181*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 0)
4182*53ee8cc1Swenshuai.xi             {
4183*53ee8cc1Swenshuai.xi     	         // move to clk 44.4 Mhz
4184*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE, 0x22);                                     // cr_rate for 15 MHz
4185*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE+1, 0x9F);
4186*53ee8cc1Swenshuai.xi                 msWriteByteMask(CR_RATE+2, 0x15, 0x1F);
4187*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
4188*53ee8cc1Swenshuai.xi 
4189*53ee8cc1Swenshuai.xi     	         // move to clk 148 Mhz
4190*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0x29);                 			    // IF rate for 23 MHz
4191*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0xF2);
4192*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x09, 0x3F);
4193*53ee8cc1Swenshuai.xi             }
4194*53ee8cc1Swenshuai.xi         }
4195*53ee8cc1Swenshuai.xi         else
4196*53ee8cc1Swenshuai.xi         {
4197*53ee8cc1Swenshuai.xi             //g_VifShiftClk = 0; // 0x1121_D3
4198*53ee8cc1Swenshuai.xi             msWriteByte(VIF_RF_RESERVED_1+1, 0x00);
4199*53ee8cc1Swenshuai.xi 
4200*53ee8cc1Swenshuai.xi             msWriteByte(0x12866L, 0x00);//loop divider
4201*53ee8cc1Swenshuai.xi             msWriteByte(0x12867L, 0x24);
4202*53ee8cc1Swenshuai.xi             if (VIFInitialIn_inst.VifTunerType == 0)
4203*53ee8cc1Swenshuai.xi             {
4204*53ee8cc1Swenshuai.xi     	         // move to clk 43.2 Mhz
4205*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE, 0xE3);                                     // cr_rate for 15 MHz
4206*53ee8cc1Swenshuai.xi                 msWriteByte(CR_RATE+1, 0x38);
4207*53ee8cc1Swenshuai.xi                 msWriteByteMask(CR_RATE+2, 0x16, 0x1F);
4208*53ee8cc1Swenshuai.xi                 msWriteBit(CR_RATE_INV, 0, _BIT0);                           // cr_rate not invert
4209*53ee8cc1Swenshuai.xi 
4210*53ee8cc1Swenshuai.xi     	         // move to clk 142 Mhz
4211*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE, 0xE3);                 			   // IF rate for 23 MHz
4212*53ee8cc1Swenshuai.xi                 msWriteByte(IF_RATE+1, 0x38);
4213*53ee8cc1Swenshuai.xi                 msWriteByteMask(IF_RATE+2, 0x0A, 0x3F);
4214*53ee8cc1Swenshuai.xi             }
4215*53ee8cc1Swenshuai.xi         }
4216*53ee8cc1Swenshuai.xi     }
4217*53ee8cc1Swenshuai.xi }
4218*53ee8cc1Swenshuai.xi 
HAL_VIF_BypassDBBAudioFilter(BOOL bEnable)4219*53ee8cc1Swenshuai.xi void HAL_VIF_BypassDBBAudioFilter(BOOL bEnable)
4220*53ee8cc1Swenshuai.xi {
4221*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("HAL_VIF_BypassDBBAudioFilter() bEnableq=%d\n",bEnable));
4222*53ee8cc1Swenshuai.xi     msWriteBit(A_DAGC_SEL, (!bEnable), _BIT7);  // 0: input from a_sos; 1: input from a_lpf_up
4223*53ee8cc1Swenshuai.xi }
4224*53ee8cc1Swenshuai.xi 
HAL_VIF_GetInputLevelIndicator(void)4225*53ee8cc1Swenshuai.xi BOOL HAL_VIF_GetInputLevelIndicator(void)
4226*53ee8cc1Swenshuai.xi {
4227*53ee8cc1Swenshuai.xi     BYTE ref, mean256, diff;
4228*53ee8cc1Swenshuai.xi 
4229*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("\r\nHAL_VIF_GetInputLevelIndicator()"));
4230*53ee8cc1Swenshuai.xi 
4231*53ee8cc1Swenshuai.xi     ref = msReadByte(AGC_REF);                         // AGC ref
4232*53ee8cc1Swenshuai.xi     mean256 = (BYTE)(msRead2Bytes(AGC_MEAN256)>>1);     // AGC mean256
4233*53ee8cc1Swenshuai.xi 
4234*53ee8cc1Swenshuai.xi     if (g_bCheckModulationType == 0)
4235*53ee8cc1Swenshuai.xi         diff = 0x15;                                // negative modulation
4236*53ee8cc1Swenshuai.xi     else
4237*53ee8cc1Swenshuai.xi         diff = 0x0A;                                // positive modulation
4238*53ee8cc1Swenshuai.xi 
4239*53ee8cc1Swenshuai.xi     if (mean256 >= (ref-diff))
4240*53ee8cc1Swenshuai.xi         return 1;
4241*53ee8cc1Swenshuai.xi     else
4242*53ee8cc1Swenshuai.xi         return 0;
4243*53ee8cc1Swenshuai.xi }
4244*53ee8cc1Swenshuai.xi 
HAL_VIF_GetCrPDInverse(void)4245*53ee8cc1Swenshuai.xi U8 HAL_VIF_GetCrPDInverse(void)
4246*53ee8cc1Swenshuai.xi {
4247*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("HAL_VIF_GetCrPDInverse() %d \n", 0));
4248*53ee8cc1Swenshuai.xi     if ((HAL_VIF_ReadByte(CR_PD_IMAG_INV) & _BIT1)!=0)
4249*53ee8cc1Swenshuai.xi         return 1;
4250*53ee8cc1Swenshuai.xi     else
4251*53ee8cc1Swenshuai.xi         return 0;
4252*53ee8cc1Swenshuai.xi }
4253*53ee8cc1Swenshuai.xi 
HAL_VIF_SetCrPDInverse(BOOL bEnable)4254*53ee8cc1Swenshuai.xi void HAL_VIF_SetCrPDInverse(BOOL bEnable)
4255*53ee8cc1Swenshuai.xi {
4256*53ee8cc1Swenshuai.xi     HALVIFDBG(printf("HAL_VIF_SetCrPDInverse() bEnableq=%d\n",bEnable));
4257*53ee8cc1Swenshuai.xi     msWriteBit(CR_PD_IMAG_INV, (bEnable), _BIT1);  // 0: disable; 1: enable
4258*53ee8cc1Swenshuai.xi }
4259*53ee8cc1Swenshuai.xi 
4260*53ee8cc1Swenshuai.xi #endif //_HALVIF_C_
4261*53ee8cc1Swenshuai.xi 
4262