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