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