xref: /utopia/UTPA2-700.0.x/modules/demodulator/hal/mooney/demod/halDMD_INTERN_ATSC.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) 2006-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!�L) 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 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi #include <stdio.h>
101*53ee8cc1Swenshuai.xi #include <math.h>
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi #include "drvDMD_ATSC.h"
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #include "MsTypes.h"
106*53ee8cc1Swenshuai.xi #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
107*53ee8cc1Swenshuai.xi #include "drvDMD_common.h"
108*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
109*53ee8cc1Swenshuai.xi #endif
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
112*53ee8cc1Swenshuai.xi //  Driver Compiler Options
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_T3_T10        0x01
116*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_T7            0x02
117*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_T8_T9         0x03
118*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_A1            0x04
119*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_A3            0x05
120*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_A5            0x06
121*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_A7            0x07
122*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_A7P           0x08
123*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_AGATE         0x09
124*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EDISON        0x0A
125*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EINSTEIN      0x0B
126*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EMERALD       0x0C
127*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EIFFEL        0x0D
128*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EDEN          0x0E
129*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_EINSTEIN3     0x0F
130*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_MONACO        0x10
131*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_MIAMI         0x11
132*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_MUJI          0x12
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_K3            0x80 //UTOF start from 0x80
135*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_KELTIC        0x81
136*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_KERES         0x82
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi #if defined(a1)
139*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_A1
140*53ee8cc1Swenshuai.xi #elif defined(a3)
141*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_A3
142*53ee8cc1Swenshuai.xi #elif defined(a5)
143*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_A5
144*53ee8cc1Swenshuai.xi #elif defined(a7)
145*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_A7
146*53ee8cc1Swenshuai.xi #elif defined(amethyst)
147*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_A7P
148*53ee8cc1Swenshuai.xi #elif defined(agate)
149*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_AGATE
150*53ee8cc1Swenshuai.xi #elif defined(edison)
151*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EDISON
152*53ee8cc1Swenshuai.xi #elif defined(einstein)
153*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EINSTEIN
154*53ee8cc1Swenshuai.xi #elif defined(einstein3)
155*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EINSTEIN3
156*53ee8cc1Swenshuai.xi #elif defined(monaco)
157*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_MONACO
158*53ee8cc1Swenshuai.xi #elif defined(emerald)
159*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EMERALD
160*53ee8cc1Swenshuai.xi #elif defined(eiffel)
161*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EIFFEL
162*53ee8cc1Swenshuai.xi #elif defined(kaiser)
163*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_K3
164*53ee8cc1Swenshuai.xi #elif defined(keltic)
165*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_KELTIC
166*53ee8cc1Swenshuai.xi #elif defined(eden)
167*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EDEN
168*53ee8cc1Swenshuai.xi #elif defined(miami)
169*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_MIAMI
170*53ee8cc1Swenshuai.xi #elif defined(keres)
171*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_VERSION       DMD_ATSC_CHIP_KERES
172*53ee8cc1Swenshuai.xi #elif defined(muji)
173*53ee8cc1Swenshuai.xi #define DMD_ATSC_CHIP_VERSION       DMD_ATSC_CHIP_MUJI
174*53ee8cc1Swenshuai.xi #else
175*53ee8cc1Swenshuai.xi  #define DMD_ATSC_CHIP_VERSION      DMD_ATSC_CHIP_EMERALD
176*53ee8cc1Swenshuai.xi #endif
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
179*53ee8cc1Swenshuai.xi //  Local Defines
180*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi #define HAL_INTERN_ATSC_DBINFO(y)   //y
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
185*53ee8cc1Swenshuai.xi  #ifndef MBRegBase
186*53ee8cc1Swenshuai.xi   #define MBRegBase                 0x112600UL
187*53ee8cc1Swenshuai.xi  #endif
188*53ee8cc1Swenshuai.xi  #ifndef MBRegBase_DMD1
189*53ee8cc1Swenshuai.xi   #define MBRegBase_DMD1            0x112400UL
190*53ee8cc1Swenshuai.xi  #endif
191*53ee8cc1Swenshuai.xi #else
192*53ee8cc1Swenshuai.xi  #define MBRegBase                  0x110500UL
193*53ee8cc1Swenshuai.xi #endif
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T3_T10)
196*53ee8cc1Swenshuai.xi  #define DMDMcuBase                 0x103460UL
197*53ee8cc1Swenshuai.xi #else
198*53ee8cc1Swenshuai.xi  //#define DMDMcuBase                 0x103480UL
199*53ee8cc1Swenshuai.xi #endif
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
202*53ee8cc1Swenshuai.xi  #define INTERN_ATSC_OUTER_STATE          0xF0
203*53ee8cc1Swenshuai.xi #else
204*53ee8cc1Swenshuai.xi  #define INTERN_ATSC_OUTER_STATE          0x80
205*53ee8cc1Swenshuai.xi #endif
206*53ee8cc1Swenshuai.xi #define INTERN_ATSC_VSB_TRAIN_SNR_LIMIT   0x05//0xBE//14.5dB
207*53ee8cc1Swenshuai.xi #define INTERN_ATSC_FEC_ENABLE            0x1F
208*53ee8cc1Swenshuai.xi 
209*53ee8cc1Swenshuai.xi #define VSB_ATSC           0x04
210*53ee8cc1Swenshuai.xi #define QAM256_ATSC        0x02
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi #define QAM16_J83ABC       0x00
213*53ee8cc1Swenshuai.xi #define QAM32_J83ABC       0x01
214*53ee8cc1Swenshuai.xi #define QAM64_J83ABC       0x02
215*53ee8cc1Swenshuai.xi #define QAM128_J83ABC      0x03
216*53ee8cc1Swenshuai.xi #define QAM256_J83ABC      0x04
217*53ee8cc1Swenshuai.xi 
218*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
219*53ee8cc1Swenshuai.xi //  Local Variables
220*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi const MS_U8 INTERN_ATSC_table[] = {
223*53ee8cc1Swenshuai.xi     #include "DMD_INTERN_ATSC.dat"
224*53ee8cc1Swenshuai.xi };
225*53ee8cc1Swenshuai.xi 
226*53ee8cc1Swenshuai.xi static MS_U16 u16Lib_size = sizeof(INTERN_ATSC_table);
227*53ee8cc1Swenshuai.xi 
228*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T7)
231*53ee8cc1Swenshuai.xi static MS_U8 Demod_Flow_register[17] = {0x52, 0x72, 0x52, 0x72, 0x5C, 0x5C, 0xA3, 0xEC, 0xEA,
232*53ee8cc1Swenshuai.xi                                         0x05, 0x74, 0x1E, 0x38, 0x3A, 0x08, 0x70, 0x68};
233*53ee8cc1Swenshuai.xi #else
234*53ee8cc1Swenshuai.xi static MS_U8 Demod_Flow_register[21] = {0x52, 0x72, 0x52, 0x72, 0x5C, 0x5C, 0xA3, 0xEC, 0xEA,
235*53ee8cc1Swenshuai.xi                                         0x05, 0x74, 0x1E, 0x38, 0x3A, 0x00, 0x00, 0x00, 0x00,
236*53ee8cc1Swenshuai.xi                                         0x00, 0x00, 0x00};
237*53ee8cc1Swenshuai.xi #endif
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi #endif
240*53ee8cc1Swenshuai.xi 
241*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
242*53ee8cc1Swenshuai.xi //  Global Variables
243*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
244*53ee8cc1Swenshuai.xi 
245*53ee8cc1Swenshuai.xi extern MS_U8 u8DMD_ATSC_DMD_ID;
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi extern DMD_ATSC_ResData *psDMD_ATSC_ResData;
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
250*53ee8cc1Swenshuai.xi //  Local Functions
251*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MBX_WriteReg(MS_U16 u16Addr,MS_U8 u8Data)252*53ee8cc1Swenshuai.xi static MS_BOOL _MBX_WriteReg(MS_U16 u16Addr, MS_U8 u8Data)
253*53ee8cc1Swenshuai.xi {
254*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount;
255*53ee8cc1Swenshuai.xi     MS_U8 u8CheckFlag = 0xFF;
256*53ee8cc1Swenshuai.xi 
257*53ee8cc1Swenshuai.xi     if (u8DMD_ATSC_DMD_ID == 0)
258*53ee8cc1Swenshuai.xi     {
259*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, (u16Addr&0xff));
260*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x01, (u16Addr>>8));
261*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x10, u8Data);
262*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x1E, 0x01);
263*53ee8cc1Swenshuai.xi     }
264*53ee8cc1Swenshuai.xi     else if (u8DMD_ATSC_DMD_ID == 1)
265*53ee8cc1Swenshuai.xi     {
266*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x00, (u16Addr&0xff));
267*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x01, (u16Addr>>8));
268*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x10, u8Data);
269*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x1E, 0x01);
270*53ee8cc1Swenshuai.xi     }
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
273*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi     if (u8DMD_ATSC_DMD_ID == 0)
276*53ee8cc1Swenshuai.xi     {
277*53ee8cc1Swenshuai.xi         for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
278*53ee8cc1Swenshuai.xi         {
279*53ee8cc1Swenshuai.xi             u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase + 0x1E);
280*53ee8cc1Swenshuai.xi             if ((u8CheckFlag&0x01)==0)
281*53ee8cc1Swenshuai.xi                 break;
282*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
283*53ee8cc1Swenshuai.xi         }
284*53ee8cc1Swenshuai.xi     }
285*53ee8cc1Swenshuai.xi     else if (u8DMD_ATSC_DMD_ID == 1)
286*53ee8cc1Swenshuai.xi     {
287*53ee8cc1Swenshuai.xi         for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
288*53ee8cc1Swenshuai.xi         {
289*53ee8cc1Swenshuai.xi             u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase_DMD1 + 0x1E);
290*53ee8cc1Swenshuai.xi             if ((u8CheckFlag&0x01)==0)
291*53ee8cc1Swenshuai.xi                  break;
292*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
293*53ee8cc1Swenshuai.xi         }
294*53ee8cc1Swenshuai.xi     }
295*53ee8cc1Swenshuai.xi 
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi     if (u8CheckFlag&0x01)
298*53ee8cc1Swenshuai.xi     {
299*53ee8cc1Swenshuai.xi         printf("ERROR: ATSC INTERN DEMOD MBX WRITE TIME OUT!\n");
300*53ee8cc1Swenshuai.xi         return FALSE;
301*53ee8cc1Swenshuai.xi     }
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi     return TRUE;
304*53ee8cc1Swenshuai.xi }
305*53ee8cc1Swenshuai.xi 
_MBX_ReadReg(MS_U16 u16Addr,MS_U8 * u8Data)306*53ee8cc1Swenshuai.xi static MS_BOOL _MBX_ReadReg(MS_U16 u16Addr, MS_U8 *u8Data)
307*53ee8cc1Swenshuai.xi {
308*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount;
309*53ee8cc1Swenshuai.xi     MS_U8 u8CheckFlag = 0xFF;
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi     if (u8DMD_ATSC_DMD_ID == 0)
312*53ee8cc1Swenshuai.xi     {
313*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, (u16Addr&0xff));
314*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x01, (u16Addr>>8));
315*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase + 0x1E, 0x02);
316*53ee8cc1Swenshuai.xi     }
317*53ee8cc1Swenshuai.xi     else if (u8DMD_ATSC_DMD_ID == 1)
318*53ee8cc1Swenshuai.xi     {
319*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x00, (u16Addr&0xff));
320*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x01, (u16Addr>>8));
321*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(MBRegBase_DMD1 + 0x1E, 0x02);
322*53ee8cc1Swenshuai.xi     }
323*53ee8cc1Swenshuai.xi 
324*53ee8cc1Swenshuai.xi 
325*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
326*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi     if (u8DMD_ATSC_DMD_ID == 0)
329*53ee8cc1Swenshuai.xi     {
330*53ee8cc1Swenshuai.xi         for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
331*53ee8cc1Swenshuai.xi         {
332*53ee8cc1Swenshuai.xi             u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase + 0x1E);
333*53ee8cc1Swenshuai.xi             if ((u8CheckFlag&0x02)==0)
334*53ee8cc1Swenshuai.xi             {
335*53ee8cc1Swenshuai.xi                 *u8Data = HAL_DMD_RIU_ReadByte(MBRegBase + 0x10);
336*53ee8cc1Swenshuai.xi             }
337*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
338*53ee8cc1Swenshuai.xi         }
339*53ee8cc1Swenshuai.xi     }
340*53ee8cc1Swenshuai.xi     else if (u8DMD_ATSC_DMD_ID == 1)
341*53ee8cc1Swenshuai.xi     {
342*53ee8cc1Swenshuai.xi         for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
343*53ee8cc1Swenshuai.xi         {
344*53ee8cc1Swenshuai.xi             u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase_DMD1 + 0x1E);
345*53ee8cc1Swenshuai.xi             if ((u8CheckFlag&0x02)==0)
346*53ee8cc1Swenshuai.xi             {
347*53ee8cc1Swenshuai.xi                 *u8Data = HAL_DMD_RIU_ReadByte(MBRegBase_DMD1 + 0x10);
348*53ee8cc1Swenshuai.xi             }
349*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
350*53ee8cc1Swenshuai.xi         }
351*53ee8cc1Swenshuai.xi     }
352*53ee8cc1Swenshuai.xi 
353*53ee8cc1Swenshuai.xi     if (u8CheckFlag&0x02)
354*53ee8cc1Swenshuai.xi     {
355*53ee8cc1Swenshuai.xi         printf("ERROR: ATSC INTERN DEMOD MBX READ TIME OUT!\n");
356*53ee8cc1Swenshuai.xi         return FALSE;
357*53ee8cc1Swenshuai.xi     }
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi     return TRUE;
360*53ee8cc1Swenshuai.xi }
361*53ee8cc1Swenshuai.xi 
362*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_K3)
_SEL_DMD(void)363*53ee8cc1Swenshuai.xi static MS_BOOL _SEL_DMD(void)
364*53ee8cc1Swenshuai.xi {
365*53ee8cc1Swenshuai.xi     MS_U8 u8data = 0;
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi     u8data = HAL_DMD_RIU_ReadByte(0x101e3c);
368*53ee8cc1Swenshuai.xi 
369*53ee8cc1Swenshuai.xi     if (u8DMD_ATSC_DMD_ID == 0) //select DMD0
370*53ee8cc1Swenshuai.xi         u8data &= (~0x10);
371*53ee8cc1Swenshuai.xi     else if (u8DMD_ATSC_DMD_ID == 1) //sel DMD1
372*53ee8cc1Swenshuai.xi         u8data |= 0x10;
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e3c, u8data);
375*53ee8cc1Swenshuai.xi 
376*53ee8cc1Swenshuai.xi     return TRUE;
377*53ee8cc1Swenshuai.xi }
378*53ee8cc1Swenshuai.xi #endif
379*53ee8cc1Swenshuai.xi 
380*53ee8cc1Swenshuai.xi #if ((DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1) && (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3))
_initTable(void)381*53ee8cc1Swenshuai.xi static void _initTable(void)
382*53ee8cc1Swenshuai.xi {
383*53ee8cc1Swenshuai.xi     DMD_ATSC_ResData *pRes = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
384*53ee8cc1Swenshuai.xi 
385*53ee8cc1Swenshuai.xi     if (pRes->sDMD_ATSC_InitData.bTunerGainInvert)
386*53ee8cc1Swenshuai.xi         Demod_Flow_register[12]=1;
387*53ee8cc1Swenshuai.xi     else Demod_Flow_register[12]=0;
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi     if (pRes->sDMD_ATSC_InitData.bIQSwap)
390*53ee8cc1Swenshuai.xi         Demod_Flow_register[14] = 1;
391*53ee8cc1Swenshuai.xi     else Demod_Flow_register[14] = 0;
392*53ee8cc1Swenshuai.xi 
393*53ee8cc1Swenshuai.xi     Demod_Flow_register[15] =  pRes->sDMD_ATSC_InitData.u16IF_KHZ&0xFF;
394*53ee8cc1Swenshuai.xi     Demod_Flow_register[16] = (pRes->sDMD_ATSC_InitData.u16IF_KHZ)>>8;
395*53ee8cc1Swenshuai.xi 
396*53ee8cc1Swenshuai.xi     printf("\n#### IF_KHz  = [%d]\n", pRes->sDMD_ATSC_InitData.u16IF_KHZ);
397*53ee8cc1Swenshuai.xi     printf("\n#### IQ_SWAP = [%d]\n", pRes->sDMD_ATSC_InitData.bIQSwap);
398*53ee8cc1Swenshuai.xi     printf("\n#### Tuner Gain Invert = [%d]\n", pRes->sDMD_ATSC_InitData.bTunerGainInvert);
399*53ee8cc1Swenshuai.xi }
400*53ee8cc1Swenshuai.xi #endif
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T3_T10)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)403*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
404*53ee8cc1Swenshuai.xi {
405*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_T3_T10--------------\n");
406*53ee8cc1Swenshuai.xi 
407*53ee8cc1Swenshuai.xi     // MailBox
408*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b44, 0x00); //clk mail box0 =xtal  <<hk51 <--mail box 0--> aeon
409*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b45, 0x00); //clk mail box0 =xtal  <<hk51 <--mail box 1--> aeon
410*53ee8cc1Swenshuai.xi 
411*53ee8cc1Swenshuai.xi     // Enable DMD MCU clock (108MHz)
412*53ee8cc1Swenshuai.xi     if (HAL_DMD_RIU_ReadByte(0x001ecf) == 0x00)
413*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x100b42, 0x10);
414*53ee8cc1Swenshuai.xi     else  //after t3_u02
415*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x100b42, 0x0D);
416*53ee8cc1Swenshuai.xi 
417*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b43, 0x01); // Disable VD200 clock
418*53ee8cc1Swenshuai.xi 
419*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x01); // Disable ADC clock
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x01); // Disable DVB INNER clock
422*53ee8cc1Swenshuai.xi 
423*53ee8cc1Swenshuai.xi     // Enable ATSC clock
424*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x00);
425*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103303, 0x00);
426*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103304, 0x00);
427*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103305, 0x00);
428*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103306, 0x00);
429*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103307, 0x00);
430*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330a, 0x08);
431*53ee8cc1Swenshuai.xi 
432*53ee8cc1Swenshuai.xi     // Enable DVB INNERx1&2 clock
433*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330c, 0x00);
434*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330d, 0x00);
435*53ee8cc1Swenshuai.xi 
436*53ee8cc1Swenshuai.xi     // Enable DVB SRAM0~SRAM3 clock
437*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103318, 0x00);
438*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103319, 0x00);
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00); // Enable ATSC TS clock
441*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x01); // Disable DVB TS clock
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x18); // Set DMD clock div
444*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x04); // Enable DMD clock
445*53ee8cc1Swenshuai.xi 
446*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00); // Enable ADC clock
449*53ee8cc1Swenshuai.xi 
450*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e22, 0x02); // Set TS PAD
451*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e23, 0x00);
452*53ee8cc1Swenshuai.xi 
453*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b50, 0x08); // Enable TS0&1 clock
454*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b51, 0x08);
455*53ee8cc1Swenshuai.xi 
456*53ee8cc1Swenshuai.xi     if (bRFAGCTristateEnable)
457*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x20, 0x30); // Set IF&RF AGC output mode
458*53ee8cc1Swenshuai.xi     else
459*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x00, 0x30); // Set IF&RF AGC output mode
460*53ee8cc1Swenshuai.xi }
461*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T7)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)462*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
463*53ee8cc1Swenshuai.xi {
464*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_T7--------------\n");
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10); // Enable DMD MCU clock (108MHz)
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x01); // Disable ADC clock
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x01); // Disable DVB INNER clock
471*53ee8cc1Swenshuai.xi 
472*53ee8cc1Swenshuai.xi     // Enable ATSC clock
473*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x00);
474*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103303, 0x00);
475*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103304, 0x00);
476*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103305, 0x00);
477*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103306, 0x00);
478*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103307, 0x00);
479*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330a, 0x08);
480*53ee8cc1Swenshuai.xi 
481*53ee8cc1Swenshuai.xi     // Enable DVB INNERx1&2&4 clock
482*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330c, 0x00);
483*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330d, 0x00);
484*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10330e, 0x00);
485*53ee8cc1Swenshuai.xi 
486*53ee8cc1Swenshuai.xi     // Enable DVB OUTERx1&2&2_c clock
487*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103310, 0x00);
488*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103311, 0x00);
489*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103312, 0x00);
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi     // Enable DVB EQx1&8c clock
492*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103316, 0x00);
493*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103317, 0x00);
494*53ee8cc1Swenshuai.xi 
495*53ee8cc1Swenshuai.xi     // Enable DVB SRAM0~SRAM3 clock
496*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103318, 0x00);
497*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103319, 0x00);
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00); // Enable ATSC TS clock
500*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x01); // Disable DVB TS clock
501*53ee8cc1Swenshuai.xi 
502*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x18); // Set DMD clock div
503*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x04); // Enable DMD clock
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
506*53ee8cc1Swenshuai.xi 
507*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00); // Enable ADC clock
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e22, 0x02); // Set TS PAD
510*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e23, 0x00);
511*53ee8cc1Swenshuai.xi 
512*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b50, 0x08); // Enable TS0&1 clock
513*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b51, 0x08);
514*53ee8cc1Swenshuai.xi 
515*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e9e, 0x00, 0xCF); // Set IF&RF AGC PAD and PWM AGC mode
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi     if (bRFAGCTristateEnable)
518*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x20, 0x30); // Set IF&RF AGC output mode
519*53ee8cc1Swenshuai.xi     else
520*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x00, 0x30); // Set IF&RF AGC output mode
521*53ee8cc1Swenshuai.xi 
522*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101ea1, 0x00, 0x80); // Set all pads (except SPI) as output
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x01);
525*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x112003, 0x20, 0x20); // Release Ana misc resest
526*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x01, 0x01);
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi     // Set DMD ANA
529*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112864, 0x00); // Set VCO first and second div
530*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112865, 0x00);
531*53ee8cc1Swenshuai.xi 
532*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286C, 0x20); // Disable T&RF-AGC
533*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286D, 0x00);
534*53ee8cc1Swenshuai.xi 
535*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112868, 0x00);
536*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112869, 0x80);
537*53ee8cc1Swenshuai.xi 
538*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112862, 0x00); // Set PLL first and second div
539*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112863, 0x00);
540*53ee8cc1Swenshuai.xi 
541*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112818, 0x03); // ADC I&Q pown down
542*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112819, 0x00);
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(2);
545*53ee8cc1Swenshuai.xi 
546*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286A, 0x86); // Initial MPLL procedure
547*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286B, 0x1E);
548*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(2);
549*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286A, 0x06);
550*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286B, 0x1E);
551*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(2);
552*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286A, 0x06);
553*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11286B, 0x06);
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(2);
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112866, 0x01); // Set MPLL first and second div
558*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112867, 0x1d);
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112860, 0x00); // MPLL power up
561*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112861, 0x1c); // Set ADC output div
562*53ee8cc1Swenshuai.xi 
563*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112802, 0x40); // Set ADC I&Q
564*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112803, 0x04);
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112816, 0x05); // set PGA gain
567*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112817, 0x05);
568*53ee8cc1Swenshuai.xi 
569*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112818, 0x00); // ADC I&Q pown up
570*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112819, 0x00);
571*53ee8cc1Swenshuai.xi 
572*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112840, 0x00); // Disable SIF&VIF
573*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112841, 0x00);
574*53ee8cc1Swenshuai.xi }
575*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T8_T9)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)576*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
577*53ee8cc1Swenshuai.xi {
578*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_T8_T9--------------\n");
579*53ee8cc1Swenshuai.xi 
580*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331E, 0x10); // Enable DMD MCU clock (108MHz)
581*53ee8cc1Swenshuai.xi 
582*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x01); // Disable ADC clock
583*53ee8cc1Swenshuai.xi 
584*53ee8cc1Swenshuai.xi     // Enable ATSC clock
585*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);
586*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
587*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
588*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
589*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
590*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
591*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
592*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
593*53ee8cc1Swenshuai.xi 
594*53ee8cc1Swenshuai.xi     // Disable DVB INNERx1&2&4 clock
595*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x01);
596*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x01);
597*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x01);
598*53ee8cc1Swenshuai.xi 
599*53ee8cc1Swenshuai.xi     // Disable DVB OUTERx1&2&2_c clock
600*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x01);
601*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x01);
602*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x01);
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi     // Disable DVB INNER clock
605*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f15, 0x01);
606*53ee8cc1Swenshuai.xi 
607*53ee8cc1Swenshuai.xi     // Disable DVB EQx1&8c clock
608*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f16, 0x01);
609*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f17, 0x01);
610*53ee8cc1Swenshuai.xi 
611*53ee8cc1Swenshuai.xi     // Enable DVB SRAM0~SRAM3 clock
612*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
613*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
614*53ee8cc1Swenshuai.xi 
615*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11); // Set DMD clock div
616*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05); // Enable DMD clock
617*53ee8cc1Swenshuai.xi 
618*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00); // Enable ATSC TS clock
619*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x01); // Disable DVB TS clock
620*53ee8cc1Swenshuai.xi 
621*53ee8cc1Swenshuai.xi     // Disable VIF clock
622*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f1c, 0x01);
623*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f1d, 0x01);
624*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331a, 0x01);
625*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331b, 0x01);
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00); // Enable ADC clock
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101eaf, 0x10, 0x18); // Set TS PAD
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi     if (bRFAGCTristateEnable)
634*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x20, 0x30); // Set IF&RF AGC output mode
635*53ee8cc1Swenshuai.xi     else
636*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByteMask(0x101e05, 0x00, 0x30); // Set IF&RF AGC output mode
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e9e, 0x00, 0xCF); // Set IF&RF AGC PAD and PWM AGC mode
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101ea0, 0x00, 0x03); // PWM2 uses PAD_PWM2 and PWM3 uses PAD_PWM3
641*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101ea1, 0x00, 0x80); // Set all pads (except SPI) as output
642*53ee8cc1Swenshuai.xi 
643*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
644*53ee8cc1Swenshuai.xi }
645*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_A1)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)646*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
647*53ee8cc1Swenshuai.xi {
648*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_A1--------------\n");
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi     //Set register at CLKGEN1
651*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
652*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10); // Denny: change 0x10!! 108M
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x01); // Disable ADC clock
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi     // set parallet ts clock
657*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);
658*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi     // enable atsc, DVBTC ts clock
661*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
662*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
663*53ee8cc1Swenshuai.xi 
664*53ee8cc1Swenshuai.xi     // enable dvbc adc clock
665*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi     // enable vif DAC clock
668*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331b, 0x00);
669*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331a, 0x00);
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi     // Set register at CLKGEN_DMD
672*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
673*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
674*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
675*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
676*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
677*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
678*53ee8cc1Swenshuai.xi 
679*53ee8cc1Swenshuai.xi     // enable clk_atsc_adcd_sync
680*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
681*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi     // enable dvbt inner clock
684*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
685*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi     // enable dvbt inner clock
688*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
689*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
690*53ee8cc1Swenshuai.xi 
691*53ee8cc1Swenshuai.xi     // enable dvbt inner clock
692*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
693*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
694*53ee8cc1Swenshuai.xi 
695*53ee8cc1Swenshuai.xi     // enable dvbc outer clock
696*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
697*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi     // enable dvbc inner-c clock
700*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f15, 0x00);
701*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f14, 0x00);
702*53ee8cc1Swenshuai.xi 
703*53ee8cc1Swenshuai.xi     // enable dvbc eq clock
704*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
705*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi     // enable vif clock
708*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f1d, 0x00);
709*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f1c, 0x00);
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi     // For ADC DMA Dump
712*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f21, 0x00);
713*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f20, 0x00);
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi     // select clock
716*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
717*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
718*53ee8cc1Swenshuai.xi 
719*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
720*53ee8cc1Swenshuai.xi 
721*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00); // Enable ADC clock
722*53ee8cc1Swenshuai.xi 
723*53ee8cc1Swenshuai.xi     //  Turn TSP
724*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b55, 0x00);
725*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b54, 0x00);
726*53ee8cc1Swenshuai.xi 
727*53ee8cc1Swenshuai.xi     // set the ts0_clk from demod
728*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b51, 0x00);
729*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x100b50, 0x0C);
730*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e22, 0x02);
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_A7)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)735*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_A7--------------\n");
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
740*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
741*53ee8cc1Swenshuai.xi 
742*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x01); // Disable ADC clock
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);
745*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
746*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
747*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
748*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
749*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
750*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
751*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
752*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
753*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
754*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
755*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
756*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
757*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
758*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
759*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
760*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
761*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
762*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
763*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
764*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);
765*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
766*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
767*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f25, 0x00);
768*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f24, 0x00);
769*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
770*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
771*53ee8cc1Swenshuai.xi 
772*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
773*53ee8cc1Swenshuai.xi 
774*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00); // Enable ADC clock
775*53ee8cc1Swenshuai.xi 
776*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x000e13, 0x00, 0x04);
777*53ee8cc1Swenshuai.xi 
778*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
779*53ee8cc1Swenshuai.xi }
780*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_K3)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)781*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
782*53ee8cc1Swenshuai.xi {
783*53ee8cc1Swenshuai.xi     DMD_ATSC_ResData *pRes  = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_K3--------------\n");
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi     if (pRes->sDMD_ATSC_InitData.u8IS_DUAL)
788*53ee8cc1Swenshuai.xi     {
789*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e39, 0x00);
790*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e3d, 0x00);
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi         /****************DMD0****************/
793*53ee8cc1Swenshuai.xi 
794*53ee8cc1Swenshuai.xi         //set CLK_DMDMCU as 108M Hz
795*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi         // set parallet ts clock
798*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301, 0x07);
799*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, 0x11);
800*53ee8cc1Swenshuai.xi 
801*53ee8cc1Swenshuai.xi         // enable DVBTC ts clock
802*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x00);
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi         // enable dvbc adc clock
805*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103315, 0x00);
806*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103314, 0x00);
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi         // enable clk_atsc_adcd_sync
809*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
810*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0a, 0x04);
811*53ee8cc1Swenshuai.xi 
812*53ee8cc1Swenshuai.xi         // enable dvbt inner clock
813*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
814*53ee8cc1Swenshuai.xi 
815*53ee8cc1Swenshuai.xi         // enable dvbt outer clock
816*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi         // enable dvbc outer clock
819*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
820*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
821*53ee8cc1Swenshuai.xi 
822*53ee8cc1Swenshuai.xi         // enable dvbc inner-c clock
823*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f15, 0x04);
824*53ee8cc1Swenshuai.xi 
825*53ee8cc1Swenshuai.xi         // enable dvbc eq clock
826*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f17, 0x00);
827*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f16, 0x00);
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi         // For ADC DMA Dump
830*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f22, 0x04);
831*53ee8cc1Swenshuai.xi 
832*53ee8cc1Swenshuai.xi         //  Turn TSP
833*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x000e13, 0x01);
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi         //set reg_allpad_in
836*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101ea1, 0x00);
837*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e04, 0x02);
838*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e76, 0x03);
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi         /****************DMD1****************/
841*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x10331f, 0x10);
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103321, 0x07);
844*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103320, 0x11);
845*53ee8cc1Swenshuai.xi 
846*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103323, 0x00);
847*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103322, 0x00);
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x11220b, 0x00);
850*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x11220a, 0x04);
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x11220c, 0x00);
853*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112211, 0x00);
854*53ee8cc1Swenshuai.xi 
855*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112213, 0x00);
856*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112212, 0x00);
857*53ee8cc1Swenshuai.xi 
858*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112215, 0x04);
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112217, 0x00);
861*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112216, 0x00);
862*53ee8cc1Swenshuai.xi 
863*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x112222, 0x04);
864*53ee8cc1Swenshuai.xi 
865*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e39, 0x03); //force ANA MISC controlled by DMD0
866*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e3d, 0x01);
867*53ee8cc1Swenshuai.xi     }
868*53ee8cc1Swenshuai.xi     else
869*53ee8cc1Swenshuai.xi     {
870*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e39, 0x00);
871*53ee8cc1Swenshuai.xi 
872*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
873*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301, 0x07);
876*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, 0x11);
877*53ee8cc1Swenshuai.xi 
878*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x00);
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103315, 0x00);
881*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103314, 0x00);
882*53ee8cc1Swenshuai.xi 
883*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
884*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
885*53ee8cc1Swenshuai.xi 
886*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
889*53ee8cc1Swenshuai.xi 
890*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
891*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f15, 0x00);
894*53ee8cc1Swenshuai.xi 
895*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f17, 0x00);
896*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f16, 0x00);
897*53ee8cc1Swenshuai.xi 
898*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
899*53ee8cc1Swenshuai.xi 
900*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101ea1, 0x00);
901*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e04, 0x02);
902*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e76, 0x03);
903*53ee8cc1Swenshuai.xi 
904*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e39, 0x03); //force ANA MISC controlled by DMD0
905*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101e3d, 0x01);
906*53ee8cc1Swenshuai.xi     }
907*53ee8cc1Swenshuai.xi }
908*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_KELTIC)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)909*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
910*53ee8cc1Swenshuai.xi {
911*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_KELTIC--------------\n");
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, 0x00);
914*53ee8cc1Swenshuai.xi 
915*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
916*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
917*53ee8cc1Swenshuai.xi 
918*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x07);
919*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
920*53ee8cc1Swenshuai.xi 
921*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
924*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
927*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
928*53ee8cc1Swenshuai.xi 
929*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
930*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
931*53ee8cc1Swenshuai.xi 
932*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f15, 0x00);
933*53ee8cc1Swenshuai.xi 
934*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f17, 0x00);
935*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f16, 0x00);
936*53ee8cc1Swenshuai.xi 
937*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
938*53ee8cc1Swenshuai.xi 
939*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x1120bc, 0x00);
940*53ee8cc1Swenshuai.xi 
941*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101ea1, 0x00);
942*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e04, 0x02);
943*53ee8cc1Swenshuai.xi 
944*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, 0x03);
945*53ee8cc1Swenshuai.xi }
946*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_KERES)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)947*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
948*53ee8cc1Swenshuai.xi {
949*53ee8cc1Swenshuai.xi     MS_U8 u8Val=0x00;
950*53ee8cc1Swenshuai.xi 
951*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_KERES--------------\n");
952*53ee8cc1Swenshuai.xi 
953*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
954*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f,0x00);
957*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e,0x10);
958*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301,0x07);
959*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300,0x11);
960*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309,0x00);
961*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315,0x00);
962*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314,0x00);
963*53ee8cc1Swenshuai.xi 
964*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b,0x00);
965*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a,0x00);
966*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c,0x00);
967*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11,0x00);
968*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13,0x00);
969*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12,0x00);
970*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f15,0x00);
971*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f17,0x00);
972*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f16,0x00);
973*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22,0x00);
974*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f2b,0x00);  //enable clk_rs
975*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f2a,0x10);
976*53ee8cc1Swenshuai.xi     //HAL_DMD_RIU_WriteByte(0x000e13,0x01); // No need, it cause uart issue.
977*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101ea1,0x00);
978*53ee8cc1Swenshuai.xi 
979*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e04,0x02);
980*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e76,0x03);
981*53ee8cc1Swenshuai.xi 
982*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
983*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
984*53ee8cc1Swenshuai.xi }
985*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EDEN)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)986*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
987*53ee8cc1Swenshuai.xi {
988*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0x00;
989*53ee8cc1Swenshuai.xi 
990*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EDEN--------------\n");
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
993*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e,0x10);
996*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301,0x04);
997*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300,0x0B);
998*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309,0x00);
999*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308,0x00);
1000*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315,0x00);
1001*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314,0x04);
1002*53ee8cc1Swenshuai.xi 
1003*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03,0x00);
1004*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02,0x00);
1005*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05,0x00);
1006*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04,0x00);
1007*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07,0x00);
1008*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06,0x00);
1009*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b,0x00);
1010*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a,0x08);
1011*53ee8cc1Swenshuai.xi 
1012*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d,0x00);
1013*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c,0x00);
1014*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f,0x00);
1015*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e,0x00);
1016*53ee8cc1Swenshuai.xi 
1017*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11,0x00);
1018*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10,0x00);
1019*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13,0x00);
1020*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12,0x08);
1021*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19,0x00);
1022*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18,0x00);
1023*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23,0x40);
1024*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22,0x00);
1025*53ee8cc1Swenshuai.xi 
1026*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1027*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, (u8Val|0x03));
1028*53ee8cc1Swenshuai.xi }
1029*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EMERALD)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1030*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1031*53ee8cc1Swenshuai.xi {
1032*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0x00;
1033*53ee8cc1Swenshuai.xi 
1034*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EMERALD--------------\n");
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1037*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1038*53ee8cc1Swenshuai.xi 
1039*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f,0x00);//Different with EDEN!
1040*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e,0x10);
1041*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301,0x05);//Different with EDEN!
1042*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300,0x11);//Different with EDEN!
1043*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309,0x00);
1044*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308,0x00);
1045*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315,0x00);
1046*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314,0x00);//Different with EDEN!
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03,0x00);
1049*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02,0x00);
1050*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05,0x00);
1051*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04,0x00);
1052*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07,0x00);
1053*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06,0x00);
1054*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b,0x00);
1055*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a,0x08);
1056*53ee8cc1Swenshuai.xi 
1057*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d,0x00);
1058*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c,0x00);
1059*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f,0x00);
1060*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e,0x00);
1061*53ee8cc1Swenshuai.xi 
1062*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11,0x00);
1063*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10,0x00);
1064*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13,0x00);
1065*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12,0x08);
1066*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19,0x00);
1067*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18,0x00);
1068*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23,0x00);//Different with EDEN!
1069*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22,0x00);
1070*53ee8cc1Swenshuai.xi 
1071*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f25,0x00);//Different with EDEN!
1072*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f24,0x00);//Different with EDEN!
1073*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f1E,0x00);//Different with EDEN!
1074*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f09,0x00);//Different with EDEN!
1075*53ee8cc1Swenshuai.xi 
1076*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x000e13);
1077*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x000e13, u8Val&0xFB);
1078*53ee8cc1Swenshuai.xi 
1079*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1080*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
1081*53ee8cc1Swenshuai.xi }
1082*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EINSTEIN)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1083*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1084*53ee8cc1Swenshuai.xi {
1085*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1086*53ee8cc1Swenshuai.xi 
1087*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EINSTEIN--------------\n");
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1090*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
1093*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10); //Denny: change 0x10!! 108M
1094*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05); //addy update 0809 MAdp_Demod_WriteReg(0x103301, 0x06);
1095*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11); //addy update 0809 MAdp_Demod_WriteReg(0x103300, 0x0B);
1096*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1097*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1098*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1099*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1100*53ee8cc1Swenshuai.xi 
1101*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x00); //dan add for nugget
1102*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
1103*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
1104*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
1105*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
1106*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
1107*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
1108*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1109*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08); // note enable clk_atsc_adcd_sync=25.41
1110*53ee8cc1Swenshuai.xi 
1111*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
1112*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
1113*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
1114*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
1115*53ee8cc1Swenshuai.xi 
1116*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
1117*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
1118*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
1119*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08); //0406 update 0->8
1120*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1121*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1122*53ee8cc1Swenshuai.xi 
1123*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);  //dan add for nugget
1124*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);  //dan add for nugget
1125*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);  //dan add for nugget
1126*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);  //dan add for nugget
1127*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);  //dan add for nugget
1128*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);  //dan add for nugget
1129*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);  //dan add for nugget
1130*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);  //dan add for nugget
1131*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);  //dan add for nugget
1132*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);  //dan add for nugget
1133*53ee8cc1Swenshuai.xi 
1134*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
1135*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);//0x08); VT found some err.
1136*53ee8cc1Swenshuai.xi 
1137*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1138*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
1139*53ee8cc1Swenshuai.xi }
1140*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EINSTEIN3)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1141*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1142*53ee8cc1Swenshuai.xi {
1143*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1144*53ee8cc1Swenshuai.xi 
1145*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EINSTEIN3--------------\n");
1146*53ee8cc1Swenshuai.xi 
1147*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1148*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1149*53ee8cc1Swenshuai.xi 
1150*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
1151*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);// Denny: change 0x10!! 108M
1152*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);//addy update 0809 MAdp_Demod_WriteReg(0x103301, 0x06);
1153*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);//addy update 0809 MAdp_Demod_WriteReg(0x103300, 0x0B);
1154*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1155*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1156*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1157*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x00); //dan add for nugget
1160*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
1161*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
1162*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
1163*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
1164*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
1165*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
1166*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1167*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);  // note enable clk_atsc_adcd_sync=25.41
1168*53ee8cc1Swenshuai.xi 
1169*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
1170*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
1171*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
1172*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
1173*53ee8cc1Swenshuai.xi 
1174*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
1175*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
1176*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
1177*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);//0406 update 0->8
1178*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1179*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1180*53ee8cc1Swenshuai.xi 
1181*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);  //dan add for nugget
1182*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);  //dan add for nugget
1183*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);  //dan add for nugget
1184*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);  //dan add for nugget
1185*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);  //dan add for nugget
1186*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);  //dan add for nugget
1187*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);  //dan add for nugget
1188*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);  //dan add for nugget
1189*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);  //dan add for nugget
1190*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);  //dan add for nugget
1191*53ee8cc1Swenshuai.xi 
1192*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
1193*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);//0x08); VT found some err.
1194*53ee8cc1Swenshuai.xi 
1195*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1196*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
1197*53ee8cc1Swenshuai.xi }
1198*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_MONACO)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1199*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1200*53ee8cc1Swenshuai.xi {
1201*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1202*53ee8cc1Swenshuai.xi 
1203*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_MONACO--------------\n");
1204*53ee8cc1Swenshuai.xi 
1205*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1206*53ee8cc1Swenshuai.xi     u8Val &= (~0x03);
1207*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1208*53ee8cc1Swenshuai.xi     // DMDMCU 108M
1209*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
1210*53ee8cc1Swenshuai.xi     // Set parallel TS clock
1211*53ee8cc1Swenshuai.xi     // [11] : reg_ckg_demod_test_in_en = 0
1212*53ee8cc1Swenshuai.xi     //        0: select internal ADC CLK
1213*53ee8cc1Swenshuai.xi     //        1: select external test-in clock
1214*53ee8cc1Swenshuai.xi     // [10] : reg_ckg_dvbtm_ts_out_mode = 1
1215*53ee8cc1Swenshuai.xi     //        0: select gated clock
1216*53ee8cc1Swenshuai.xi     //        1: select free-run clock
1217*53ee8cc1Swenshuai.xi     // [9]  : reg_ckg_atsc_dvbtc_ts_inv = 0
1218*53ee8cc1Swenshuai.xi     //        0: normal phase to pad
1219*53ee8cc1Swenshuai.xi     //        1: invert phase to pad
1220*53ee8cc1Swenshuai.xi     // [8]  : reg_ckg_atsc_dvb_div_sel = 1
1221*53ee8cc1Swenshuai.xi     //        0: select clk_dmplldiv5
1222*53ee8cc1Swenshuai.xi     //        1: select clk_dmplldiv3
1223*53ee8cc1Swenshuai.xi     // [4:0]: reg_ckg_dvbtm_ts_divnum = 17
1224*53ee8cc1Swenshuai.xi     //        => TS clock = (864/3)/(2*(17+1)) = 8MHz
1225*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1226*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1227*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);
1228*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
1229*53ee8cc1Swenshuai.xi     // Enable ATSC, DVBTC TS clock
1230*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1231*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1232*53ee8cc1Swenshuai.xi     // Enable ADC clock in clkgen_demod
1233*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1234*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1235*53ee8cc1Swenshuai.xi     // Enable VIF DAC clock in clkgen_demod
1236*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f29, 0x00);
1237*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x00);
1238*53ee8cc1Swenshuai.xi     // Enable ATSC clock
1239*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
1240*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
1241*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
1242*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
1243*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
1244*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
1245*53ee8cc1Swenshuai.xi     // Enable clk_atsc_adcd_sync = 25.41
1246*53ee8cc1Swenshuai.xi     // [3:0]: reg_ckg_atsc_adcd_sync
1247*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1248*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1249*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1250*53ee8cc1Swenshuai.xi     //        00: clk_dmdadc_sync
1251*53ee8cc1Swenshuai.xi     //        01: clk_atsc50_p
1252*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^
1253*53ee8cc1Swenshuai.xi     //        if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7(49.7 MHz)
1254*53ee8cc1Swenshuai.xi     //                   else               => clk_dmplldiv17(50.82 MHz)
1255*53ee8cc1Swenshuai.xi     //        10: clk_atsc25_p
1256*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^
1257*53ee8cc1Swenshuai.xi     //        if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div2(24.85 MHz)
1258*53ee8cc1Swenshuai.xi     //                   else			            => clk_dmplldiv17_div2(25.41 MHz)
1259*53ee8cc1Swenshuai.xi     //        11: 1'b0
1260*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0008);
1261*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0008);
1262*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1263*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);
1264*53ee8cc1Swenshuai.xi     // Enable DVBT inner clock
1265*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
1266*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
1267*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
1268*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
1269*53ee8cc1Swenshuai.xi     // Enable DVBT outer clock
1270*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
1271*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
1272*53ee8cc1Swenshuai.xi     // Enable DVBC outer clock
1273*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
1274*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);
1275*53ee8cc1Swenshuai.xi     // Enable SRAM clock
1276*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1277*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1278*53ee8cc1Swenshuai.xi     // Enable ISDBT SRAM share clock and symbol rate clock
1279*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x44);
1280*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
1281*53ee8cc1Swenshuai.xi     // select clock
1282*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
1283*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
1284*53ee8cc1Swenshuai.xi     // [3:0]  : reg_ckg_dtmb_eq2x_inner2x_12x
1285*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1286*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1287*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1288*53ee8cc1Swenshuai.xi     //        00: dtmb_clk288_buf(256 MHz)
1289*53ee8cc1Swenshuai.xi     //        01: dtmb_eq_sram_clk36_buf(32 MHz)
1290*53ee8cc1Swenshuai.xi     //        10: dtmb_eq_sram_clk216_buf(192 MHz)
1291*53ee8cc1Swenshuai.xi     //        11: 1'b0
1292*53ee8cc1Swenshuai.xi     // [7:4]  : reg_ckg_dtmb_inner1x_dvbc_eq1x => CCI LMS 1x
1293*53ee8cc1Swenshuai.xi     //                                            ^^^^^^^^^^
1294*53ee8cc1Swenshuai.xi     // [0] : disable clock
1295*53ee8cc1Swenshuai.xi     // [1] : invert clock
1296*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1297*53ee8cc1Swenshuai.xi     //        00: dtmb_clk18_buf(16 MHz)	    => DTMB
1298*53ee8cc1Swenshuai.xi     //        01: clk_dmplldiv3_div16(18 MHz)  => DVBC,ISDBT(>= (24/2=12))
1299*53ee8cc1Swenshuai.xi     //        10: clk_dmplldiv10_div8(10.8 MHz)=> DVBT
1300*53ee8cc1Swenshuai.xi     //        11: clk_cci_lms_1x_atsc_p_buf    => ATSC
1301*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^^^^^^^^^^^^^^
1302*53ee8cc1Swenshuai.xi     //        if(reg_atsc_eq_sel_mplldiv2) => clk_dmplldiv2_div2_inv_div8(21.75 MHz)
1303*53ee8cc1Swenshuai.xi     //             else                         => clk_dmplldiv5_inv_div8(21.6 MHz)
1304*53ee8cc1Swenshuai.xi     // [11:8] : reg_ckg_dtmb_inner4x_dvbc_eq4x => CCI LMS 4x
1305*53ee8cc1Swenshuai.xi     //                                            ^^^^^^^^^^
1306*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1307*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1308*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1309*53ee8cc1Swenshuai.xi     //        00: dtmb_clk72_buf(64 MHz)	    => DTMB
1310*53ee8cc1Swenshuai.xi     //        01: clk_dmplldiv3_div4(72 MHz)   => DVBC,ISDBT(>= 48)
1311*53ee8cc1Swenshuai.xi     //        10: clk_dmplldiv10_div2(43.2 MHz)=> DVBT
1312*53ee8cc1Swenshuai.xi     //        11: clk_cci_lms_4x_atsc_p_buf    => ATSC
1313*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^^^^^^^^^^^^^^
1314*53ee8cc1Swenshuai.xi     //            if(reg_atsc_eq_sel_mplldiv2) => clk_dmplldiv2_div2_inv_div2(87 MHz)
1315*53ee8cc1Swenshuai.xi     //            else                         => clk_dmplldiv5_inv_div2(86.4 MHz)
1316*53ee8cc1Swenshuai.xi     // [15:12]: reg_ckg_dtmb_sram_dump
1317*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1318*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1319*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1320*53ee8cc1Swenshuai.xi     //        00: dtmb_clk18_buf(16 MHz)
1321*53ee8cc1Swenshuai.xi     //        01: dtmb_sram_dump_clk144_buf(128 MHz)
1322*53ee8cc1Swenshuai.xi     //        10: dtmb_sram_dump_clk216_buf(192 MHz)
1323*53ee8cc1Swenshuai.xi     //        11: dtmb_sram_dump_dmplldiv5_buf(153.6 MHz)
1324*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h38, 2'b11, 16'h1cc1);
1325*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h38, 2'b11, 16'h1cc1);
1326*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f71, 0x1C);
1327*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f70, 0xC1);
1328*53ee8cc1Swenshuai.xi     // [4:0]  : reg_ckg_dtmb_inner4x_sr1x => symbol rate FFT 1x
1329*53ee8cc1Swenshuai.xi     //                                       ^^^^^^^^^^^^^^^^^^
1330*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1331*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1332*53ee8cc1Swenshuai.xi     // [4:2]: Select clock source
1333*53ee8cc1Swenshuai.xi     //        000: adc_clk_buf
1334*53ee8cc1Swenshuai.xi     //        001: clk_atsc25_p
1335*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^
1336*53ee8cc1Swenshuai.xi     //             if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div2(24.85 MHz)
1337*53ee8cc1Swenshuai.xi     //                              else			      => clk_dmplldiv17_div2(25.41 MHz)
1338*53ee8cc1Swenshuai.xi     //        010: clk_atsc_eq25_p
1339*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^
1340*53ee8cc1Swenshuai.xi     //		        case({reg_eq25_sel_mplldiv3,reg_atsc_eq_sel_mplldiv2})
1341*53ee8cc1Swenshuai.xi     //		           2'b00: clk_dmplldiv5_inv_div8	(21.6 MHz)
1342*53ee8cc1Swenshuai.xi     //		           2'b01: clk_dmplldiv2_div2_inv_div8	(21.75 MHz)
1343*53ee8cc1Swenshuai.xi     //		           2'b10: clk_dmplldiv3_div16		(18 MHz)
1344*53ee8cc1Swenshuai.xi     //		           2'b11: 1'b0
1345*53ee8cc1Swenshuai.xi     //                      endcase
1346*53ee8cc1Swenshuai.xi     //        011: dtmb_clk72_buf(72 MHz)
1347*53ee8cc1Swenshuai.xi     //        100: dtmb_clk18_buf(18 MHz)
1348*53ee8cc1Swenshuai.xi     //        101: 1'b0
1349*53ee8cc1Swenshuai.xi     //        110: 1'b0
1350*53ee8cc1Swenshuai.xi     //        111: 1'b0
1351*53ee8cc1Swenshuai.xi     // [12:8] : reg_ckg_dtmb_inner2x_sr0p5x => symbol rate FFT 0.5x
1352*53ee8cc1Swenshuai.xi     //                                         ^^^^^^^^^^^^^^^^^^^^
1353*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1354*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1355*53ee8cc1Swenshuai.xi     // [4:2]: Select clock source
1356*53ee8cc1Swenshuai.xi     //        000: clk_adc_div2_buf
1357*53ee8cc1Swenshuai.xi     //        001: clk_frontend_d2_p0
1358*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^^^^
1359*53ee8cc1Swenshuai.xi     //             if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div4(12.43 MHz)
1360*53ee8cc1Swenshuai.xi     //             else                          => clk_dmplldiv17_div4(12.705 MHz)
1361*53ee8cc1Swenshuai.xi     //        010: clk_atsc_eq25_div2_p
1362*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^^^^^^
1363*53ee8cc1Swenshuai.xi     //	       case({reg_eq25_sel_mplldiv3,reg_atsc_eq_sel_mplldiv2})
1364*53ee8cc1Swenshuai.xi     //		           2'b00: clk_dmplldiv5_inv_div8_div2	    (10.8 MHz)
1365*53ee8cc1Swenshuai.xi     //		           2'b01: clk_dmplldiv2_div2_inv_div8_div2  (10.875 MHz)
1366*53ee8cc1Swenshuai.xi     //		           2'b10: clk_dmplldiv3_div32		    (9 MHz)
1367*53ee8cc1Swenshuai.xi     //		           2'b11: 1'b0
1368*53ee8cc1Swenshuai.xi     //                      endcase
1369*53ee8cc1Swenshuai.xi     //        011: dtmb_clk36_buf(36 MHz)
1370*53ee8cc1Swenshuai.xi     //        100: dtmb_clk9_buf(9 MHz)
1371*53ee8cc1Swenshuai.xi     //        101: 1'b0
1372*53ee8cc1Swenshuai.xi     //        110: 1'b0
1373*53ee8cc1Swenshuai.xi     //        111: 1'b0
1374*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0404);
1375*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0404);
1376*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f77, 0x04);
1377*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f76, 0x04);
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi     //Enable SRAM power saving
1380*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112091, 0x44);
1381*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112090, 0x00);
1382*53ee8cc1Swenshuai.xi 
1383*53ee8cc1Swenshuai.xi     u8Val |= 0x03;
1384*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1385*53ee8cc1Swenshuai.xi }
1386*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EDISON)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1387*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1388*53ee8cc1Swenshuai.xi {
1389*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0x00;
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EDISON--------------\n");
1392*53ee8cc1Swenshuai.xi 
1393*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1394*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1395*53ee8cc1Swenshuai.xi 
1396*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f,0x00);//Different with EDEN!
1397*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e,0x10);
1398*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301,0x06);//Different with EDEN!
1399*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300,0x0B);//Different with EDEN!
1400*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309,0x00);
1401*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308,0x00);
1402*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315,0x00);
1403*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314,0x00);//Different with EDEN!
1404*53ee8cc1Swenshuai.xi 
1405*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03,0x00);
1406*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02,0x00);
1407*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05,0x00);
1408*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04,0x00);
1409*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07,0x00);
1410*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06,0x00);
1411*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b,0x00);
1412*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a,0x00);
1413*53ee8cc1Swenshuai.xi 
1414*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d,0x00);
1415*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c,0x00);
1416*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f,0x00);
1417*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e,0x00);
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11,0x00);
1420*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10,0x00);
1421*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13,0x00);
1422*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12,0x08);
1423*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19,0x00);
1424*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18,0x00);
1425*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23,0x00);//Different with EDEN!
1426*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22,0x00);
1427*53ee8cc1Swenshuai.xi 
1428*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f25,0x00);
1429*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f24,0x00);
1430*53ee8cc1Swenshuai.xi 
1431*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111F1E,0x00);
1432*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111F09,0x00);
1433*53ee8cc1Swenshuai.xi 
1434*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x000e13);
1435*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x000e13, u8Val&0xFB);
1436*53ee8cc1Swenshuai.xi 
1437*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1438*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
1439*53ee8cc1Swenshuai.xi }
1440*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_EIFFEL)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1441*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1442*53ee8cc1Swenshuai.xi {
1443*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0x00;
1444*53ee8cc1Swenshuai.xi 
1445*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_EIFFEL--------------\n");
1446*53ee8cc1Swenshuai.xi 
1447*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1448*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39 ,0x00);
1451*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f ,0x00);
1452*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e ,0x10);
1453*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301 ,0x05);
1454*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300 ,0x11);
1455*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309 ,0x00);
1456*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308 ,0x00);
1457*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315 ,0x00);
1458*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314 ,0x00);
1459*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28 ,0x00);
1460*53ee8cc1Swenshuai.xi  // HAL_DMD_RIU_WriteByte(0x112028 ,0x03);
1461*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03 ,0x00);
1462*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02 ,0x00);
1463*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05 ,0x00);
1464*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04 ,0x00);
1465*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07 ,0x00);
1466*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06 ,0x00);
1467*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b ,0x00);
1468*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a ,0x08);
1469*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d ,0x00);
1470*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c ,0x00);
1471*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f ,0x00);
1472*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e ,0x00);
1473*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11 ,0x00);
1474*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10 ,0x00);
1475*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13 ,0x00);
1476*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12 ,0x08);
1477*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19 ,0x00);
1478*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18 ,0x00);
1479*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23 ,0x00);
1480*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22 ,0x00);
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x000e61);
1483*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x000e61, u8Val&0xFE);
1484*53ee8cc1Swenshuai.xi 
1485*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1486*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val|0x03);
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_MIAMI)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1489*53ee8cc1Swenshuai.xi stativ void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1492*53ee8cc1Swenshuai.xi 
1493*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_MIAMI--------------\n");
1494*53ee8cc1Swenshuai.xi 
1495*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1496*53ee8cc1Swenshuai.xi     u8Val &= (~0x03);
1497*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1498*53ee8cc1Swenshuai.xi     // DMDMCU 108M
1499*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
1500*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
1501*53ee8cc1Swenshuai.xi     // Set parallel TS clock
1502*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);
1503*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
1504*53ee8cc1Swenshuai.xi     // Enable ATSC, DVBTC TS clock
1505*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1506*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1507*53ee8cc1Swenshuai.xi     // Enable ADC clock in clkgen_demod
1508*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1509*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1510*53ee8cc1Swenshuai.xi     // Select MPLLDIV17
1511*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x00);
1512*53ee8cc1Swenshuai.xi     // Enable ATSC clock
1513*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
1514*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
1515*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
1516*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
1517*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
1518*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
1519*53ee8cc1Swenshuai.xi     // enable clk_atsc_adcd_sync
1520*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1521*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);
1522*53ee8cc1Swenshuai.xi     // Enable DVBT inner clock
1523*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
1524*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
1525*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
1526*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
1527*53ee8cc1Swenshuai.xi     // Enable DVBT outer clock
1528*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
1529*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
1530*53ee8cc1Swenshuai.xi     // Enable DVBC outer clock
1531*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
1532*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);
1533*53ee8cc1Swenshuai.xi     // Enable SRAM clock
1534*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1535*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1536*53ee8cc1Swenshuai.xi     // enable clk_dvbtc_sram4_isdbt_inner4x & clk_adc1x_eq1x clock
1537*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
1538*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
1539*53ee8cc1Swenshuai.xi     // select clock
1540*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
1541*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
1542*53ee8cc1Swenshuai.xi     // enable CCI LMS clock
1543*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f51, 0x00);
1544*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f50, 0xCC);
1545*53ee8cc1Swenshuai.xi 
1546*53ee8cc1Swenshuai.xi     u8Val |= 0x03;
1547*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1548*53ee8cc1Swenshuai.xi }
1549*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_KERES)
HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1550*53ee8cc1Swenshuai.xi static void HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1551*53ee8cc1Swenshuai.xi {
1552*53ee8cc1Swenshuai.xi     MS_U8 u8Val=0x00;
1553*53ee8cc1Swenshuai.xi     u8Val=HAL_DMD_RIU_ReadByte(0x101e39);//MDrv_ReadByte(0x101e39);
1554*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_KERES--------------\n");
1555*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val&(~0x03));
1556*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f,0x00);
1557*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e,0x10);
1558*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301,0x07);
1559*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300,0x11);
1560*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309,0x00);
1561*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315,0x00);
1562*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314,0x00);
1563*53ee8cc1Swenshuai.xi 
1564*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b,0x00);
1565*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a,0x00);
1566*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c,0x00);
1567*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11,0x00);
1568*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13,0x00);
1569*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12,0x00);
1570*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f15,0x00);
1571*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f17,0x00);
1572*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f16,0x00);
1573*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22,0x00);
1574*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f2b,0x00);  //enable clk_rs
1575*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f2a,0x10);
1576*53ee8cc1Swenshuai.xi     //HAL_DMD_RIU_WriteByte(0x000e13,0x01); // No need, it cause uart issue.
1577*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101ea1,0x00);
1578*53ee8cc1Swenshuai.xi 
1579*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e04,0x02);
1580*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e76,0x03);
1581*53ee8cc1Swenshuai.xi 
1582*53ee8cc1Swenshuai.xi     u8Val=HAL_DMD_RIU_ReadByte(0x101e39);
1583*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39,(u8Val| 0x03));
1584*53ee8cc1Swenshuai.xi }
1585*53ee8cc1Swenshuai.xi #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_MUJI)
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1586*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1587*53ee8cc1Swenshuai.xi {
1588*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1589*53ee8cc1Swenshuai.xi 
1590*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_MUJI--------------\n");
1591*53ee8cc1Swenshuai.xi 
1592*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x101e39);
1593*53ee8cc1Swenshuai.xi     u8Val &= (~0x03);
1594*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1595*53ee8cc1Swenshuai.xi     // DMDMCU 108M
1596*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
1597*53ee8cc1Swenshuai.xi     // Set parallel TS clock
1598*53ee8cc1Swenshuai.xi     // [11] : reg_ckg_demod_test_in_en = 0
1599*53ee8cc1Swenshuai.xi     //        0: select internal ADC CLK
1600*53ee8cc1Swenshuai.xi     //        1: select external test-in clock
1601*53ee8cc1Swenshuai.xi     // [10] : reg_ckg_dvbtm_ts_out_mode = 1
1602*53ee8cc1Swenshuai.xi     //        0: select gated clock
1603*53ee8cc1Swenshuai.xi     //        1: select free-run clock
1604*53ee8cc1Swenshuai.xi     // [9]  : reg_ckg_atsc_dvbtc_ts_inv = 0
1605*53ee8cc1Swenshuai.xi     //        0: normal phase to pad
1606*53ee8cc1Swenshuai.xi     //        1: invert phase to pad
1607*53ee8cc1Swenshuai.xi     // [8]  : reg_ckg_atsc_dvb_div_sel = 1
1608*53ee8cc1Swenshuai.xi     //        0: select clk_dmplldiv5
1609*53ee8cc1Swenshuai.xi     //        1: select clk_dmplldiv3
1610*53ee8cc1Swenshuai.xi     // [4:0]: reg_ckg_dvbtm_ts_divnum = 17
1611*53ee8cc1Swenshuai.xi     //        => TS clock = (864/3)/(2*(17+1)) = 8MHz
1612*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1613*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1614*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x05);
1615*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x11);
1616*53ee8cc1Swenshuai.xi     // Enable ATSC, DVBTC TS clock
1617*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1618*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1619*53ee8cc1Swenshuai.xi     // Enable ADC clock in clkgen_demod
1620*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1621*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1622*53ee8cc1Swenshuai.xi     // Reset TS divider
1623*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x01);
1624*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x00);
1625*53ee8cc1Swenshuai.xi     // Enable VIF DAC clock in clkgen_demod
1626*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f29, 0x00);
1627*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x00);
1628*53ee8cc1Swenshuai.xi     // Enable ATSC clock
1629*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f03, 0x00);
1630*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f02, 0x00);
1631*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f05, 0x00);
1632*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f04, 0x00);
1633*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f07, 0x00);
1634*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f06, 0x00);
1635*53ee8cc1Swenshuai.xi     // Enable clk_atsc_adcd_sync = 25.41
1636*53ee8cc1Swenshuai.xi     // [3:0]: reg_ckg_atsc_adcd_sync
1637*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1638*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1639*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1640*53ee8cc1Swenshuai.xi     //        00: clk_dmdadc_sync
1641*53ee8cc1Swenshuai.xi     //        01: clk_atsc50_p
1642*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^
1643*53ee8cc1Swenshuai.xi     //        if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7(49.7 MHz)
1644*53ee8cc1Swenshuai.xi     //                   else               => clk_dmplldiv17(50.82 MHz)
1645*53ee8cc1Swenshuai.xi     //        10: clk_atsc25_p
1646*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^
1647*53ee8cc1Swenshuai.xi     //        if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div2(24.85 MHz)
1648*53ee8cc1Swenshuai.xi     //                   else			            => clk_dmplldiv17_div2(25.41 MHz)
1649*53ee8cc1Swenshuai.xi     //        11: 1'b0
1650*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0008);
1651*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0008);
1652*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
1653*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x08);
1654*53ee8cc1Swenshuai.xi     // Enable DVBT inner clock
1655*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
1656*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
1657*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
1658*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
1659*53ee8cc1Swenshuai.xi     // Enable DVBT outer clock
1660*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
1661*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
1662*53ee8cc1Swenshuai.xi     // Enable DVBC outer clock
1663*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
1664*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x08);
1665*53ee8cc1Swenshuai.xi     // Enable SRAM clock
1666*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
1667*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
1668*53ee8cc1Swenshuai.xi     // Enable ISDBT SRAM share clock and symbol rate clock
1669*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x44);
1670*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
1671*53ee8cc1Swenshuai.xi     // select clock
1672*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x00);
1673*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x00);
1674*53ee8cc1Swenshuai.xi     // [3:0]  : reg_ckg_dtmb_eq2x_inner2x_12x
1675*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1676*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1677*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1678*53ee8cc1Swenshuai.xi     //        00: dtmb_clk288_buf(256 MHz)
1679*53ee8cc1Swenshuai.xi     //        01: dtmb_eq_sram_clk36_buf(32 MHz)
1680*53ee8cc1Swenshuai.xi     //        10: dtmb_eq_sram_clk216_buf(192 MHz)
1681*53ee8cc1Swenshuai.xi     //        11: 1'b0
1682*53ee8cc1Swenshuai.xi     // [7:4]  : reg_ckg_dtmb_inner1x_dvbc_eq1x => CCI LMS 1x
1683*53ee8cc1Swenshuai.xi     //                                            ^^^^^^^^^^
1684*53ee8cc1Swenshuai.xi     // [0] : disable clock
1685*53ee8cc1Swenshuai.xi     // [1] : invert clock
1686*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1687*53ee8cc1Swenshuai.xi     //        00: dtmb_clk18_buf(16 MHz)	    => DTMB
1688*53ee8cc1Swenshuai.xi     //        01: clk_dmplldiv3_div16(18 MHz)  => DVBC,ISDBT(>= (24/2=12))
1689*53ee8cc1Swenshuai.xi     //        10: clk_dmplldiv10_div8(10.8 MHz)=> DVBT
1690*53ee8cc1Swenshuai.xi     //        11: clk_cci_lms_1x_atsc_p_buf    => ATSC
1691*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^^^^^^^^^^^^^^
1692*53ee8cc1Swenshuai.xi     //        if(reg_atsc_eq_sel_mplldiv2) => clk_dmplldiv2_div2_inv_div8(21.75 MHz)
1693*53ee8cc1Swenshuai.xi     //             else                         => clk_dmplldiv5_inv_div8(21.6 MHz)
1694*53ee8cc1Swenshuai.xi     // [11:8] : reg_ckg_dtmb_inner4x_dvbc_eq4x => CCI LMS 4x
1695*53ee8cc1Swenshuai.xi     //                                            ^^^^^^^^^^
1696*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1697*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1698*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1699*53ee8cc1Swenshuai.xi     //        00: dtmb_clk72_buf(64 MHz)	    => DTMB
1700*53ee8cc1Swenshuai.xi     //        01: clk_dmplldiv3_div4(72 MHz)   => DVBC,ISDBT(>= 48)
1701*53ee8cc1Swenshuai.xi     //        10: clk_dmplldiv10_div2(43.2 MHz)=> DVBT
1702*53ee8cc1Swenshuai.xi     //        11: clk_cci_lms_4x_atsc_p_buf    => ATSC
1703*53ee8cc1Swenshuai.xi     //            ^^^^^^^^^^^^^^^^^^^^^^^^^
1704*53ee8cc1Swenshuai.xi     //            if(reg_atsc_eq_sel_mplldiv2) => clk_dmplldiv2_div2_inv_div2(87 MHz)
1705*53ee8cc1Swenshuai.xi     //            else                         => clk_dmplldiv5_inv_div2(86.4 MHz)
1706*53ee8cc1Swenshuai.xi     // [15:12]: reg_ckg_dtmb_sram_dump
1707*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1708*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1709*53ee8cc1Swenshuai.xi     // [3:2]: Select clock source
1710*53ee8cc1Swenshuai.xi     //        00: dtmb_clk18_buf(16 MHz)
1711*53ee8cc1Swenshuai.xi     //        01: dtmb_sram_dump_clk144_buf(128 MHz)
1712*53ee8cc1Swenshuai.xi     //        10: dtmb_sram_dump_clk216_buf(192 MHz)
1713*53ee8cc1Swenshuai.xi     //        11: dtmb_sram_dump_dmplldiv5_buf(153.6 MHz)
1714*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h38, 2'b11, 16'h1cc1);
1715*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h38, 2'b11, 16'h1cc1);
1716*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f71, 0x1C);
1717*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f70, 0xC1);
1718*53ee8cc1Swenshuai.xi     // [4:0]  : reg_ckg_dtmb_inner4x_sr1x => symbol rate FFT 1x
1719*53ee8cc1Swenshuai.xi     //                                       ^^^^^^^^^^^^^^^^^^
1720*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1721*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1722*53ee8cc1Swenshuai.xi     // [4:2]: Select clock source
1723*53ee8cc1Swenshuai.xi     //        000: adc_clk_buf
1724*53ee8cc1Swenshuai.xi     //        001: clk_atsc25_p
1725*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^
1726*53ee8cc1Swenshuai.xi     //             if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div2(24.85 MHz)
1727*53ee8cc1Swenshuai.xi     //                              else			      => clk_dmplldiv17_div2(25.41 MHz)
1728*53ee8cc1Swenshuai.xi     //        010: clk_atsc_eq25_p
1729*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^
1730*53ee8cc1Swenshuai.xi     //		        case({reg_eq25_sel_mplldiv3,reg_atsc_eq_sel_mplldiv2})
1731*53ee8cc1Swenshuai.xi     //		           2'b00: clk_dmplldiv5_inv_div8	(21.6 MHz)
1732*53ee8cc1Swenshuai.xi     //		           2'b01: clk_dmplldiv2_div2_inv_div8	(21.75 MHz)
1733*53ee8cc1Swenshuai.xi     //		           2'b10: clk_dmplldiv3_div16		(18 MHz)
1734*53ee8cc1Swenshuai.xi     //		           2'b11: 1'b0
1735*53ee8cc1Swenshuai.xi     //                      endcase
1736*53ee8cc1Swenshuai.xi     //        011: dtmb_clk72_buf(72 MHz)
1737*53ee8cc1Swenshuai.xi     //        100: dtmb_clk18_buf(18 MHz)
1738*53ee8cc1Swenshuai.xi     //        101: 1'b0
1739*53ee8cc1Swenshuai.xi     //        110: 1'b0
1740*53ee8cc1Swenshuai.xi     //        111: 1'b0
1741*53ee8cc1Swenshuai.xi     // [12:8] : reg_ckg_dtmb_inner2x_sr0p5x => symbol rate FFT 0.5x
1742*53ee8cc1Swenshuai.xi     //                                         ^^^^^^^^^^^^^^^^^^^^
1743*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1744*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1745*53ee8cc1Swenshuai.xi     // [4:2]: Select clock source
1746*53ee8cc1Swenshuai.xi     //        000: clk_adc_div2_buf
1747*53ee8cc1Swenshuai.xi     //        001: clk_frontend_d2_p0
1748*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^^^^
1749*53ee8cc1Swenshuai.xi     //             if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7_div4(12.43 MHz)
1750*53ee8cc1Swenshuai.xi     //             else                          => clk_dmplldiv17_div4(12.705 MHz)
1751*53ee8cc1Swenshuai.xi     //        010: clk_atsc_eq25_div2_p
1752*53ee8cc1Swenshuai.xi     //             ^^^^^^^^^^^^^^^^^^^^
1753*53ee8cc1Swenshuai.xi     //	       case({reg_eq25_sel_mplldiv3,reg_atsc_eq_sel_mplldiv2})
1754*53ee8cc1Swenshuai.xi     //		           2'b00: clk_dmplldiv5_inv_div8_div2	    (10.8 MHz)
1755*53ee8cc1Swenshuai.xi     //		           2'b01: clk_dmplldiv2_div2_inv_div8_div2  (10.875 MHz)
1756*53ee8cc1Swenshuai.xi     //		           2'b10: clk_dmplldiv3_div32		    (9 MHz)
1757*53ee8cc1Swenshuai.xi     //		           2'b11: 1'b0
1758*53ee8cc1Swenshuai.xi     //                      endcase
1759*53ee8cc1Swenshuai.xi     //        011: dtmb_clk36_buf(36 MHz)
1760*53ee8cc1Swenshuai.xi     //        100: dtmb_clk9_buf(9 MHz)
1761*53ee8cc1Swenshuai.xi     //        101: 1'b0
1762*53ee8cc1Swenshuai.xi     //        110: 1'b0
1763*53ee8cc1Swenshuai.xi     //        111: 1'b0
1764*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0404);
1765*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h3b, 2'b11, 16'h0404);
1766*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f77, 0x04);
1767*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f76, 0x04);
1768*53ee8cc1Swenshuai.xi 
1769*53ee8cc1Swenshuai.xi     // Muji
1770*53ee8cc1Swenshuai.xi     // [1:0]  : reg_ckg_isdbt_outer1x_dvbt_outer1x
1771*53ee8cc1Swenshuai.xi     //          [0]  : disable clock
1772*53ee8cc1Swenshuai.xi     //          [1]  : invert clock
1773*53ee8cc1Swenshuai.xi     //          [3:2]: Select clock source
1774*53ee8cc1Swenshuai.xi     //                 vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
1775*53ee8cc1Swenshuai.xi     //                 sel[0]= (reg_demod_isdbt_on & reg_ckg_isdbt_outer1x[2])
1776*53ee8cc1Swenshuai.xi     //                 sel[1]= (~reg_demod_isdbt_on)
1777*53ee8cc1Swenshuai.xi     //                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1778*53ee8cc1Swenshuai.xi     //                 00: isdbt_clk6_lat(6 MHz)
1779*53ee8cc1Swenshuai.xi     //                 01: isdbt_clk8_lat(8 MHz)
1780*53ee8cc1Swenshuai.xi     //                 10: clk_dmplldiv10_div2(43.2 MHz)
1781*53ee8cc1Swenshuai.xi     //                 11: 1'b0
1782*53ee8cc1Swenshuai.xi     // [6:4]  : reg_ckg_miu_dvbtc_outer2x
1783*53ee8cc1Swenshuai.xi     //          [0]  : disable clock
1784*53ee8cc1Swenshuai.xi     //          [1]  : invert clock
1785*53ee8cc1Swenshuai.xi     //          [2]  : Select clock source
1786*53ee8cc1Swenshuai.xi     //                 0: clk_miu_p
1787*53ee8cc1Swenshuai.xi     //                 1: clk_dmplldiv10(86.4 MHz)
1788*53ee8cc1Swenshuai.xi     // [12:8] : reg_ckg_dvbtc_rs
1789*53ee8cc1Swenshuai.xi     //          [0]  : disable clock
1790*53ee8cc1Swenshuai.xi     //          [1]  : invert clock
1791*53ee8cc1Swenshuai.xi     //          [4:2]: Select clock source
1792*53ee8cc1Swenshuai.xi     //                 000: clk_dmplldiv10(86.4 MHz)
1793*53ee8cc1Swenshuai.xi     //                 001: clk_dmplldiv10_div2(43.2 MHz)
1794*53ee8cc1Swenshuai.xi     //                 010: clk_atsc50_p
1795*53ee8cc1Swenshuai.xi     //                      ^^^^^^^^^^^^
1796*53ee8cc1Swenshuai.xi     //		        if(reg_atsc_adc_sel_mplldiv2) => clk_dmplldiv2_div7(49.7 MHz)
1797*53ee8cc1Swenshuai.xi     //                      else                          => clk_dmplldiv17(50.82 MHz)
1798*53ee8cc1Swenshuai.xi     //                 011: clk_dvbtc_rs_216_buf(216 MHz)
1799*53ee8cc1Swenshuai.xi     //                 100: clk_dvbtc_rs_172_buf(172 MHz)
1800*53ee8cc1Swenshuai.xi     //                 101: clk_dvbtc_rs_144_buf(144 MHz)
1801*53ee8cc1Swenshuai.xi     //                 110: 1'b0
1802*53ee8cc1Swenshuai.xi     //                 111: 1'b0
1803*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h27, 2'b10, 16'h0800);
1804*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h27, 2'b10, 16'h0800);
1805*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4f, 0x08);
1806*53ee8cc1Swenshuai.xi 
1807*53ee8cc1Swenshuai.xi     //Enable SRAM power saving
1808*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112091, 0x44);
1809*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112090, 0x00);
1810*53ee8cc1Swenshuai.xi 
1811*53ee8cc1Swenshuai.xi     u8Val |= 0x03;
1812*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39, u8Val);
1813*53ee8cc1Swenshuai.xi }
1814*53ee8cc1Swenshuai.xi #else
_HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)1815*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_InitClk(MS_BOOL bRFAGCTristateEnable)
1816*53ee8cc1Swenshuai.xi {
1817*53ee8cc1Swenshuai.xi     printf("--------------DMD_ATSC_CHIP_NONE--------------\n");
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi #endif
1820*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Download(void)1821*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Download(void)
1822*53ee8cc1Swenshuai.xi {
1823*53ee8cc1Swenshuai.xi     DMD_ATSC_ResData *pRes  = psDMD_ATSC_ResData + u8DMD_ATSC_DMD_ID;
1824*53ee8cc1Swenshuai.xi 
1825*53ee8cc1Swenshuai.xi     MS_U8 udata = 0x00;
1826*53ee8cc1Swenshuai.xi     MS_U16 i=0;
1827*53ee8cc1Swenshuai.xi     MS_U16 fail_cnt=0;
1828*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
1829*53ee8cc1Swenshuai.xi     MS_U8  u8TmpData;
1830*53ee8cc1Swenshuai.xi     MS_U16 u16AddressOffset;
1831*53ee8cc1Swenshuai.xi     #endif
1832*53ee8cc1Swenshuai.xi 
1833*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T3_T10)
1834*53ee8cc1Swenshuai.xi     if (HAL_DMD_RIU_ReadByte(0x101E3E) != 0x08) HAL_PWS_Stop_VDMCU();
1835*53ee8cc1Swenshuai.xi     else
1836*53ee8cc1Swenshuai.xi     {
1837*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x01); // reset VD_MCU
1838*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x00);
1839*53ee8cc1Swenshuai.xi         MsOS_DelayTask(20);
1840*53ee8cc1Swenshuai.xi         return TRUE;
1841*53ee8cc1Swenshuai.xi     }
1842*53ee8cc1Swenshuai.xi     #else
1843*53ee8cc1Swenshuai.xi     if (pRes->sDMD_ATSC_PriData.bDownloaded)
1844*53ee8cc1Swenshuai.xi     {
1845*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x01); // reset VD_MCU
1846*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x00);
1847*53ee8cc1Swenshuai.xi         MsOS_DelayTask(20);
1848*53ee8cc1Swenshuai.xi         return TRUE;
1849*53ee8cc1Swenshuai.xi     }
1850*53ee8cc1Swenshuai.xi     #endif
1851*53ee8cc1Swenshuai.xi 
1852*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x01); // reset VD_MCU
1853*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x01, 0x00); // disable SRAM
1854*53ee8cc1Swenshuai.xi 
1855*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x00); // release MCU, madison patch
1856*53ee8cc1Swenshuai.xi 
1857*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x50); // enable "vdmcu51_if"
1858*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x51); // enable auto-increase
1859*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, 0x00); // sram address low byte
1860*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x00); // sram address high byte
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     ////  Load code thru VDMCU_IF ////
1863*53ee8cc1Swenshuai.xi     HAL_INTERN_ATSC_DBINFO(printf(">Load Code...\n"));
1864*53ee8cc1Swenshuai.xi 
1865*53ee8cc1Swenshuai.xi     for (i = 0; i < u16Lib_size; i++)
1866*53ee8cc1Swenshuai.xi     {
1867*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, INTERN_ATSC_table[i]); // write data to VD MCU 51 code sram
1868*53ee8cc1Swenshuai.xi     }
1869*53ee8cc1Swenshuai.xi 
1870*53ee8cc1Swenshuai.xi     ////  Content verification ////
1871*53ee8cc1Swenshuai.xi     HAL_INTERN_ATSC_DBINFO(printf(">Verify Code...\n"));
1872*53ee8cc1Swenshuai.xi 
1873*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, 0x00); // sram address low byte
1874*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x00); // sram address high byte
1875*53ee8cc1Swenshuai.xi 
1876*53ee8cc1Swenshuai.xi     for (i = 0; i < u16Lib_size; i++)
1877*53ee8cc1Swenshuai.xi     {
1878*53ee8cc1Swenshuai.xi         udata = HAL_DMD_RIU_ReadByte(DMDMcuBase+0x10); // read sram data
1879*53ee8cc1Swenshuai.xi 
1880*53ee8cc1Swenshuai.xi         if (udata != INTERN_ATSC_table[i])
1881*53ee8cc1Swenshuai.xi         {
1882*53ee8cc1Swenshuai.xi             HAL_INTERN_ATSC_DBINFO(printf(">fail add = 0x%x\n", i));
1883*53ee8cc1Swenshuai.xi             HAL_INTERN_ATSC_DBINFO(printf(">code = 0x%x\n", INTERN_ATSC_table[i]));
1884*53ee8cc1Swenshuai.xi             HAL_INTERN_ATSC_DBINFO(printf(">data = 0x%x\n", udata));
1885*53ee8cc1Swenshuai.xi 
1886*53ee8cc1Swenshuai.xi             if (fail_cnt++ > 10)
1887*53ee8cc1Swenshuai.xi             {
1888*53ee8cc1Swenshuai.xi                 HAL_INTERN_ATSC_DBINFO(printf(">DSP Loadcode fail!"));
1889*53ee8cc1Swenshuai.xi                 return FALSE;
1890*53ee8cc1Swenshuai.xi             }
1891*53ee8cc1Swenshuai.xi         }
1892*53ee8cc1Swenshuai.xi     }
1893*53ee8cc1Swenshuai.xi 
1894*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
1895*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
1896*53ee8cc1Swenshuai.xi     _initTable();
1897*53ee8cc1Swenshuai.xi     #endif
1898*53ee8cc1Swenshuai.xi 
1899*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, 0x80); // sram address low byte
1900*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T8_T9 || DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
1901*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x6B); // sram address high byte
1902*53ee8cc1Swenshuai.xi     #else
1903*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x5B); // sram address high byte
1904*53ee8cc1Swenshuai.xi     #endif
1905*53ee8cc1Swenshuai.xi 
1906*53ee8cc1Swenshuai.xi     for (i = 0; i < sizeof(Demod_Flow_register); i++)
1907*53ee8cc1Swenshuai.xi     {
1908*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, Demod_Flow_register[i]);
1909*53ee8cc1Swenshuai.xi     }
1910*53ee8cc1Swenshuai.xi     #else // #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
1911*53ee8cc1Swenshuai.xi     u16AddressOffset = (INTERN_ATSC_table[0x400] << 8)|INTERN_ATSC_table[0x401];
1912*53ee8cc1Swenshuai.xi 
1913*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, (u16AddressOffset&0xFF)); // sram address low byte
1914*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, (u16AddressOffset>>8));   // sram address high byte
1915*53ee8cc1Swenshuai.xi 
1916*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ATSC_InitData.u16IF_KHZ;
1917*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1918*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ATSC_InitData.u16IF_KHZ >> 8);
1919*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1920*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ATSC_InitData.bIQSwap;
1921*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1922*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ATSC_InitData.u16AGC_REFERENCE;
1923*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1924*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ATSC_InitData.u16AGC_REFERENCE >> 8);
1925*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1926*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ATSC_InitData.u8IS_DUAL;
1927*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1928*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)u8DMD_ATSC_DMD_ID;
1929*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
1930*53ee8cc1Swenshuai.xi     #endif // #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
1931*53ee8cc1Swenshuai.xi 
1932*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x50); // diable auto-increase
1933*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x00); // disable "vdmcu51_if"
1934*53ee8cc1Swenshuai.xi 
1935*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x01); // reset MCU, madison patch
1936*53ee8cc1Swenshuai.xi 
1937*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x01, 0x01); // enable SRAM
1938*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x00); // release VD_MCU
1939*53ee8cc1Swenshuai.xi 
1940*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T3_T10)
1941*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101E3E, 0x08);     // ATSC = BIT3 -> 0x08
1942*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11051C, 0x00);
1943*53ee8cc1Swenshuai.xi     #elif (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_T7)
1944*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11261C, 0x00);
1945*53ee8cc1Swenshuai.xi     pRes->sDMD_ATSC_PriData.bDownloaded = true;
1946*53ee8cc1Swenshuai.xi     #else
1947*53ee8cc1Swenshuai.xi     pRes->sDMD_ATSC_PriData.bDownloaded = true;
1948*53ee8cc1Swenshuai.xi     #endif
1949*53ee8cc1Swenshuai.xi 
1950*53ee8cc1Swenshuai.xi     MsOS_DelayTask(20);
1951*53ee8cc1Swenshuai.xi 
1952*53ee8cc1Swenshuai.xi     HAL_INTERN_ATSC_DBINFO(printf(">DSP Loadcode done.\n"));
1953*53ee8cc1Swenshuai.xi 
1954*53ee8cc1Swenshuai.xi     return TRUE;
1955*53ee8cc1Swenshuai.xi }
1956*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_FWVERSION(void)1957*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_FWVERSION(void)
1958*53ee8cc1Swenshuai.xi {
1959*53ee8cc1Swenshuai.xi     MS_U8 data1,data2,data3;
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
1962*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C4, &data1);
1963*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C5, &data2);
1964*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C6, &data3);
1965*53ee8cc1Swenshuai.xi 	#else
1966*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C4, &data1);
1967*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20CF, &data2);
1968*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20D0, &data3);
1969*53ee8cc1Swenshuai.xi 	#endif
1970*53ee8cc1Swenshuai.xi 
1971*53ee8cc1Swenshuai.xi     HAL_INTERN_ATSC_DBINFO(printf("INTERN_ATSC_FW_VERSION:%x.%x.%x\n", data1, data2, data3));
1972*53ee8cc1Swenshuai.xi }
1973*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Exit(void)1974*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Exit(void)
1975*53ee8cc1Swenshuai.xi {
1976*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount = 0;
1977*53ee8cc1Swenshuai.xi 
1978*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x1C, 0x01);
1979*53ee8cc1Swenshuai.xi 
1980*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
1981*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
1982*53ee8cc1Swenshuai.xi 
1983*53ee8cc1Swenshuai.xi     while ((HAL_DMD_RIU_ReadByte(MBRegBase + 0x1C)&0x02) != 0x02)
1984*53ee8cc1Swenshuai.xi     {
1985*53ee8cc1Swenshuai.xi         MsOS_DelayTaskUs(10);
1986*53ee8cc1Swenshuai.xi 
1987*53ee8cc1Swenshuai.xi         if (u8CheckCount++ == 0xFF)
1988*53ee8cc1Swenshuai.xi         {
1989*53ee8cc1Swenshuai.xi             printf(">> ATSC Exit Fail!\n");
1990*53ee8cc1Swenshuai.xi             return FALSE;
1991*53ee8cc1Swenshuai.xi         }
1992*53ee8cc1Swenshuai.xi     }
1993*53ee8cc1Swenshuai.xi 
1994*53ee8cc1Swenshuai.xi     printf(">> ATSC Exit Ok!\n");
1995*53ee8cc1Swenshuai.xi 
1996*53ee8cc1Swenshuai.xi     return TRUE;
1997*53ee8cc1Swenshuai.xi }
1998*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_SoftReset(void)1999*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_SoftReset(void)
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0xFF;
2002*53ee8cc1Swenshuai.xi 
2003*53ee8cc1Swenshuai.xi     //Reset FSM
2004*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C0, 0x00)==FALSE) return FALSE;
2005*53ee8cc1Swenshuai.xi 
2006*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2007*53ee8cc1Swenshuai.xi     while (u8Data != 0x02)
2008*53ee8cc1Swenshuai.xi     #else
2009*53ee8cc1Swenshuai.xi     while (u8Data != 0x00)
2010*53ee8cc1Swenshuai.xi     #endif
2011*53ee8cc1Swenshuai.xi     {
2012*53ee8cc1Swenshuai.xi         if (_MBX_ReadReg(0x20C1, &u8Data)==FALSE) return FALSE;
2013*53ee8cc1Swenshuai.xi     }
2014*53ee8cc1Swenshuai.xi 
2015*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
2016*53ee8cc1Swenshuai.xi     //Execute demod top reset
2017*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2002, &u8Data);
2018*53ee8cc1Swenshuai.xi     _MBX_WriteReg(0x2002, (u8Data|0x10));
2019*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x2002, (u8Data&(~0x10)));
2020*53ee8cc1Swenshuai.xi 	#else
2021*53ee8cc1Swenshuai.xi 	return TRUE;
2022*53ee8cc1Swenshuai.xi 	#endif
2023*53ee8cc1Swenshuai.xi }
2024*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_SetVsbMode(void)2025*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_SetVsbMode(void)
2026*53ee8cc1Swenshuai.xi {
2027*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x08);
2028*53ee8cc1Swenshuai.xi }
2029*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Set64QamMode(void)2030*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Set64QamMode(void)
2031*53ee8cc1Swenshuai.xi {
2032*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
2033*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C3, 0x00)==FALSE) return FALSE;
2034*53ee8cc1Swenshuai.xi     #endif
2035*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x04);
2036*53ee8cc1Swenshuai.xi }
2037*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Set256QamMode(void)2038*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Set256QamMode(void)
2039*53ee8cc1Swenshuai.xi {
2040*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION < DMD_ATSC_CHIP_K3)
2041*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C3, 0x01)==FALSE) return FALSE;
2042*53ee8cc1Swenshuai.xi     #endif
2043*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x04);
2044*53ee8cc1Swenshuai.xi }
2045*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_SetModeClean(void)2046*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_SetModeClean(void)
2047*53ee8cc1Swenshuai.xi {
2048*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x00);
2049*53ee8cc1Swenshuai.xi }
2050*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Check8VSB64_256QAM(void)2051*53ee8cc1Swenshuai.xi static DMD_ATSC_DEMOD_TYPE _HAL_INTERN_ATSC_Check8VSB64_256QAM(void)
2052*53ee8cc1Swenshuai.xi {
2053*53ee8cc1Swenshuai.xi     MS_U8 mode = 0;
2054*53ee8cc1Swenshuai.xi 
2055*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2056*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2A02, &mode); //EQ mode check
2057*53ee8cc1Swenshuai.xi 
2058*53ee8cc1Swenshuai.xi     mode &= 0x07;
2059*53ee8cc1Swenshuai.xi 
2060*53ee8cc1Swenshuai.xi     if (mode == QAM16_J83ABC) return DMD_ATSC_DEMOD_ATSC_16QAM;
2061*53ee8cc1Swenshuai.xi     else if (mode == QAM32_J83ABC) return DMD_ATSC_DEMOD_ATSC_32QAM;
2062*53ee8cc1Swenshuai.xi     else if (mode == QAM64_J83ABC) return DMD_ATSC_DEMOD_ATSC_64QAM;
2063*53ee8cc1Swenshuai.xi     else if (mode == QAM128_J83ABC) return DMD_ATSC_DEMOD_ATSC_128QAM;
2064*53ee8cc1Swenshuai.xi     else if (mode == QAM256_J83ABC) return DMD_ATSC_DEMOD_ATSC_256QAM;
2065*53ee8cc1Swenshuai.xi     else return DMD_ATSC_DEMOD_ATSC_256QAM;
2066*53ee8cc1Swenshuai.xi     #else
2067*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2900, &mode); //mode check
2068*53ee8cc1Swenshuai.xi 
2069*53ee8cc1Swenshuai.xi     if ((mode&VSB_ATSC) == VSB_ATSC) return DMD_ATSC_DEMOD_ATSC_VSB;
2070*53ee8cc1Swenshuai.xi     else if ((mode & QAM256_ATSC) == QAM256_ATSC) return DMD_ATSC_DEMOD_ATSC_256QAM;
2071*53ee8cc1Swenshuai.xi     else return DMD_ATSC_DEMOD_ATSC_64QAM;
2072*53ee8cc1Swenshuai.xi     #endif
2073*53ee8cc1Swenshuai.xi }
2074*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Vsb_QAM_AGCLock(void)2075*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Vsb_QAM_AGCLock(void)
2076*53ee8cc1Swenshuai.xi {
2077*53ee8cc1Swenshuai.xi     MS_U8 data1 = 0;
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2080*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x271D, &data1); //AGC_LOCK
2081*53ee8cc1Swenshuai.xi     #else
2082*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x293A, &data1); //AGC_LOCK
2083*53ee8cc1Swenshuai.xi     #endif
2084*53ee8cc1Swenshuai.xi 
2085*53ee8cc1Swenshuai.xi     if(data1&0x01)
2086*53ee8cc1Swenshuai.xi     {
2087*53ee8cc1Swenshuai.xi         return TRUE;
2088*53ee8cc1Swenshuai.xi     }
2089*53ee8cc1Swenshuai.xi     else
2090*53ee8cc1Swenshuai.xi     {
2091*53ee8cc1Swenshuai.xi         return FALSE;
2092*53ee8cc1Swenshuai.xi     }
2093*53ee8cc1Swenshuai.xi }
2094*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Vsb_PreLock(void)2095*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Vsb_PreLock(void)
2096*53ee8cc1Swenshuai.xi {
2097*53ee8cc1Swenshuai.xi     MS_U8 data1 = 0;
2098*53ee8cc1Swenshuai.xi     MS_U8 data2 = 0;
2099*53ee8cc1Swenshuai.xi     MS_U16 checkValue;
2100*53ee8cc1Swenshuai.xi 
2101*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C2, &data1); //<0>TR_LOCK, <1>PTK_LOCK
2102*53ee8cc1Swenshuai.xi 
2103*53ee8cc1Swenshuai.xi     if ((data1&0x02) == 0x02)
2104*53ee8cc1Swenshuai.xi     {
2105*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2AEA, &data1);
2106*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2AEB, &data2);
2107*53ee8cc1Swenshuai.xi 
2108*53ee8cc1Swenshuai.xi         checkValue  = data1 << 8;
2109*53ee8cc1Swenshuai.xi         checkValue |= data2;
2110*53ee8cc1Swenshuai.xi 
2111*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("Internal Pre Locking time :[%d]ms\n",checkValue));
2112*53ee8cc1Swenshuai.xi 
2113*53ee8cc1Swenshuai.xi         return TRUE;
2114*53ee8cc1Swenshuai.xi     }
2115*53ee8cc1Swenshuai.xi     else
2116*53ee8cc1Swenshuai.xi     {
2117*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nPreLock - FALSE"));
2118*53ee8cc1Swenshuai.xi 
2119*53ee8cc1Swenshuai.xi         return FALSE;
2120*53ee8cc1Swenshuai.xi     }
2121*53ee8cc1Swenshuai.xi }
2122*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Vsb_FSync_Lock(void)2123*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Vsb_FSync_Lock(void)
2124*53ee8cc1Swenshuai.xi {
2125*53ee8cc1Swenshuai.xi     MS_U8 data1 = 0;
2126*53ee8cc1Swenshuai.xi     MS_U8 data2 = 0;
2127*53ee8cc1Swenshuai.xi     MS_U16 checkValue;
2128*53ee8cc1Swenshuai.xi 
2129*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2A24, &data1); //<4>1:Field Sync lock = Fsync lock
2130*53ee8cc1Swenshuai.xi 
2131*53ee8cc1Swenshuai.xi     if ((data1&0x10) == 0x10)
2132*53ee8cc1Swenshuai.xi     {
2133*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2AEE, &data1);
2134*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2AEF, &data2);
2135*53ee8cc1Swenshuai.xi 
2136*53ee8cc1Swenshuai.xi         checkValue  = data1 << 8;
2137*53ee8cc1Swenshuai.xi         checkValue |= data2;
2138*53ee8cc1Swenshuai.xi 
2139*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("Internal Fsync Locking time :[%d]ms\n",checkValue));
2140*53ee8cc1Swenshuai.xi 
2141*53ee8cc1Swenshuai.xi         return TRUE;
2142*53ee8cc1Swenshuai.xi     }
2143*53ee8cc1Swenshuai.xi     else
2144*53ee8cc1Swenshuai.xi     {
2145*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nFsync Lock - FALSE"));
2146*53ee8cc1Swenshuai.xi 
2147*53ee8cc1Swenshuai.xi         return FALSE;
2148*53ee8cc1Swenshuai.xi     }
2149*53ee8cc1Swenshuai.xi }
2150*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Vsb_CE_Lock(void)2151*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Vsb_CE_Lock(void)
2152*53ee8cc1Swenshuai.xi {
2153*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2154*53ee8cc1Swenshuai.xi     return TRUE;
2155*53ee8cc1Swenshuai.xi     #else
2156*53ee8cc1Swenshuai.xi     MS_U8 data1 = 0;
2157*53ee8cc1Swenshuai.xi 
2158*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C2, &data1); //<4>1:CE Search Fail
2159*53ee8cc1Swenshuai.xi 
2160*53ee8cc1Swenshuai.xi     if((data1&0x10) == 0)
2161*53ee8cc1Swenshuai.xi     {
2162*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nCE Lock"));
2163*53ee8cc1Swenshuai.xi         return TRUE;
2164*53ee8cc1Swenshuai.xi     }
2165*53ee8cc1Swenshuai.xi     else
2166*53ee8cc1Swenshuai.xi     {
2167*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nCE unLock"));
2168*53ee8cc1Swenshuai.xi         return FALSE;
2169*53ee8cc1Swenshuai.xi     }
2170*53ee8cc1Swenshuai.xi     #endif
2171*53ee8cc1Swenshuai.xi }
2172*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_Vsb_FEC_Lock(void)2173*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_Vsb_FEC_Lock(void)
2174*53ee8cc1Swenshuai.xi {
2175*53ee8cc1Swenshuai.xi     MS_U8 data1=0, data2=0, data3=0, data4=0, data5=0;
2176*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2177*53ee8cc1Swenshuai.xi     MS_U8 data6 =0, data7 = 0;
2178*53ee8cc1Swenshuai.xi     #endif
2179*53ee8cc1Swenshuai.xi 
2180*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2181*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C1, &data1);
2182*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C17, &data2);//AD_NOISE_PWR_TRAIN1
2183*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C2, &data3);//<0>TR_LOCK, <1>PTK_LOCK
2184*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B01, &data4);//FEC_EN_CTL
2185*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2D67, &data5);//addy
2186*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x1F01, &data6);
2187*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x1F40, &data7);
2188*53ee8cc1Swenshuai.xi 
2189*53ee8cc1Swenshuai.xi     //Driver update 0426 :suggestion for field claim
2190*53ee8cc1Swenshuai.xi     if (data1==INTERN_ATSC_OUTER_STATE &&
2191*53ee8cc1Swenshuai.xi         ((data2<=INTERN_ATSC_VSB_TRAIN_SNR_LIMIT) || (data5 <= INTERN_ATSC_VSB_TRAIN_SNR_LIMIT)) &&
2192*53ee8cc1Swenshuai.xi         ((data3&0x02)==0x02) &&
2193*53ee8cc1Swenshuai.xi         ((data4&INTERN_ATSC_FEC_ENABLE)==INTERN_ATSC_FEC_ENABLE) &&
2194*53ee8cc1Swenshuai.xi         ((data6&0x10) == 0x10) && ((data7&0x01) == 0x01))
2195*53ee8cc1Swenshuai.xi     {
2196*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nFEC Lock"));
2197*53ee8cc1Swenshuai.xi         return TRUE;
2198*53ee8cc1Swenshuai.xi     }
2199*53ee8cc1Swenshuai.xi     else
2200*53ee8cc1Swenshuai.xi     {
2201*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nFEC unLock"));
2202*53ee8cc1Swenshuai.xi         return FALSE;
2203*53ee8cc1Swenshuai.xi     }
2204*53ee8cc1Swenshuai.xi     #else
2205*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C1, &data1);
2206*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C17, &data2); //AD_NOISE_PWR_TRAIN1 (DFS)
2207*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C2, &data3); //<0>TR_LOCK, <1>PTK_LOCK
2208*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B01, &data4); //FEC_EN_CTL
2209*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C15, &data5); //AD_NOISE_PWR_TRAIN1 (DSS)
2210*53ee8cc1Swenshuai.xi 
2211*53ee8cc1Swenshuai.xi     if ((data1 == INTERN_ATSC_OUTER_STATE) &&
2212*53ee8cc1Swenshuai.xi         ((data2 <= INTERN_ATSC_VSB_TRAIN_SNR_LIMIT) || (data5 <= INTERN_ATSC_VSB_TRAIN_SNR_LIMIT)) &&
2213*53ee8cc1Swenshuai.xi         ((data3&0x02)==0x02) &&
2214*53ee8cc1Swenshuai.xi         ((data4&INTERN_ATSC_FEC_ENABLE) == INTERN_ATSC_FEC_ENABLE))
2215*53ee8cc1Swenshuai.xi     {
2216*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nFEC Lock"));
2217*53ee8cc1Swenshuai.xi         return TRUE;
2218*53ee8cc1Swenshuai.xi     }
2219*53ee8cc1Swenshuai.xi     else
2220*53ee8cc1Swenshuai.xi     {
2221*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("\nFEC unLock"));
2222*53ee8cc1Swenshuai.xi         return FALSE;
2223*53ee8cc1Swenshuai.xi     }
2224*53ee8cc1Swenshuai.xi     #endif
2225*53ee8cc1Swenshuai.xi }
2226*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_QAM_PreLock(void)2227*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_QAM_PreLock(void)
2228*53ee8cc1Swenshuai.xi {
2229*53ee8cc1Swenshuai.xi     MS_U8 data1 = 0;
2230*53ee8cc1Swenshuai.xi 
2231*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2232*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2950, &data1); //TR_LOCK
2233*53ee8cc1Swenshuai.xi     #elif (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2234*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2615, &data1); //TR_LOCK
2235*53ee8cc1Swenshuai.xi     #else
2236*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2921, &data1); //TR_LOCK
2237*53ee8cc1Swenshuai.xi     #endif
2238*53ee8cc1Swenshuai.xi 
2239*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2240*53ee8cc1Swenshuai.xi     if (data1&0x01)
2241*53ee8cc1Swenshuai.xi     {
2242*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("    QAM preLock OK  \n"));
2243*53ee8cc1Swenshuai.xi         return TRUE;
2244*53ee8cc1Swenshuai.xi     }
2245*53ee8cc1Swenshuai.xi     else
2246*53ee8cc1Swenshuai.xi     {
2247*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("    QAM preLock NOT OK   \n"));
2248*53ee8cc1Swenshuai.xi         return FALSE;
2249*53ee8cc1Swenshuai.xi     }
2250*53ee8cc1Swenshuai.xi     #else
2251*53ee8cc1Swenshuai.xi     if((data1&0x10) == 0x10)
2252*53ee8cc1Swenshuai.xi     {
2253*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("    QAM preLock OK  \n"));
2254*53ee8cc1Swenshuai.xi         return TRUE;
2255*53ee8cc1Swenshuai.xi     }
2256*53ee8cc1Swenshuai.xi     else
2257*53ee8cc1Swenshuai.xi     {
2258*53ee8cc1Swenshuai.xi         HAL_INTERN_ATSC_DBINFO(printf("    QAM preLock NOT OK   \n"));
2259*53ee8cc1Swenshuai.xi         return FALSE;
2260*53ee8cc1Swenshuai.xi     }
2261*53ee8cc1Swenshuai.xi     #endif
2262*53ee8cc1Swenshuai.xi }
2263*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_QAM_Main_Lock(void)2264*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_QAM_Main_Lock(void)
2265*53ee8cc1Swenshuai.xi {
2266*53ee8cc1Swenshuai.xi     #if DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1
2267*53ee8cc1Swenshuai.xi     MS_U8 data1=0, data2=0, data3=0, data4=0, data5=0, data6=0;
2268*53ee8cc1Swenshuai.xi     #else
2269*53ee8cc1Swenshuai.xi     MS_U8 data1=0, data4=0, data5=0, data6=0;
2270*53ee8cc1Swenshuai.xi     #endif
2271*53ee8cc1Swenshuai.xi 
2272*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2273*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C1, &data1);
2274*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B18, &data2); //boundary detected
2275*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2950, &data3); //TR_LOCK
2276*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B01, &data4); //FEC_EN_CTL
2277*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2101, &data5); //RS_backend
2278*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2140, &data6); //RS_backend
2279*53ee8cc1Swenshuai.xi 
2280*53ee8cc1Swenshuai.xi     if (data1==INTERN_ATSC_OUTER_STATE && (data2&0x01)==0x01 &&
2281*53ee8cc1Swenshuai.xi         data4==INTERN_ATSC_FEC_ENABLE && (data3&0x01) ==0x01 &&
2282*53ee8cc1Swenshuai.xi         ((data5&0x10) == 0x10) && ((data6&0x01) == 0x01))
2283*53ee8cc1Swenshuai.xi     {
2284*53ee8cc1Swenshuai.xi         return TRUE;
2285*53ee8cc1Swenshuai.xi     }
2286*53ee8cc1Swenshuai.xi     else
2287*53ee8cc1Swenshuai.xi     {
2288*53ee8cc1Swenshuai.xi         return FALSE;
2289*53ee8cc1Swenshuai.xi     }
2290*53ee8cc1Swenshuai.xi     #elif (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2291*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C1, &data1);
2292*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B18, &data2); //boundary detected
2293*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2615, &data3); //TR_LOCK
2294*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B01, &data4); //FEC_EN_CTL
2295*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x1F01, &data5);
2296*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x1F40, &data6);
2297*53ee8cc1Swenshuai.xi 
2298*53ee8cc1Swenshuai.xi     if (data1==INTERN_ATSC_OUTER_STATE && (data2&0x01)==0x01 &&
2299*53ee8cc1Swenshuai.xi         data4==INTERN_ATSC_FEC_ENABLE && (data3&0x10)==0x10 &&
2300*53ee8cc1Swenshuai.xi         ((data5&0x10) == 0x10) && ((data6&0x01) == 0x01))
2301*53ee8cc1Swenshuai.xi     {
2302*53ee8cc1Swenshuai.xi         return TRUE;
2303*53ee8cc1Swenshuai.xi     }
2304*53ee8cc1Swenshuai.xi     else
2305*53ee8cc1Swenshuai.xi     {
2306*53ee8cc1Swenshuai.xi         return FALSE;
2307*53ee8cc1Swenshuai.xi     }
2308*53ee8cc1Swenshuai.xi     #else
2309*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B18, &data4); //boundary detected
2310*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2B01, &data5); //FEC_EN_CTL
2311*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2921, &data6); //TR_LOCK
2312*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C1, &data1);
2313*53ee8cc1Swenshuai.xi 
2314*53ee8cc1Swenshuai.xi     if (data1==INTERN_ATSC_OUTER_STATE && (data4&0x01) == 0x01 &&
2315*53ee8cc1Swenshuai.xi         (data5&INTERN_ATSC_FEC_ENABLE) == INTERN_ATSC_FEC_ENABLE &&
2316*53ee8cc1Swenshuai.xi         (data6&0x10) == 0x10)
2317*53ee8cc1Swenshuai.xi     {
2318*53ee8cc1Swenshuai.xi         return TRUE;
2319*53ee8cc1Swenshuai.xi     }
2320*53ee8cc1Swenshuai.xi     else
2321*53ee8cc1Swenshuai.xi     {
2322*53ee8cc1Swenshuai.xi         return FALSE;
2323*53ee8cc1Swenshuai.xi     }
2324*53ee8cc1Swenshuai.xi     #endif
2325*53ee8cc1Swenshuai.xi }
2326*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_ReadIFAGC(void)2327*53ee8cc1Swenshuai.xi static MS_U8 _HAL_INTERN_ATSC_ReadIFAGC(void)
2328*53ee8cc1Swenshuai.xi {
2329*53ee8cc1Swenshuai.xi     MS_U16 data = 0;
2330*53ee8cc1Swenshuai.xi 
2331*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2332*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2726, ((MS_U8*)(&data))+1); //reg_frontend
2333*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2727,  (MS_U8*)(&data));
2334*53ee8cc1Swenshuai.xi     #elif (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_A1)
2335*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2944, ((MS_U8*)(&data))+1);
2336*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2945,  (MS_U8*)(&data));
2337*53ee8cc1Swenshuai.xi     #endif
2338*53ee8cc1Swenshuai.xi 
2339*53ee8cc1Swenshuai.xi     return data;
2340*53ee8cc1Swenshuai.xi }
2341*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_CheckSignalCondition(DMD_ATSC_SIGNAL_CONDITION * pstatus)2342*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ATSC_CheckSignalCondition(DMD_ATSC_SIGNAL_CONDITION* pstatus)
2343*53ee8cc1Swenshuai.xi {
2344*53ee8cc1Swenshuai.xi     DMD_ATSC_DEMOD_TYPE eMode;
2345*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2346*53ee8cc1Swenshuai.xi     MS_U8 u8NoisePowerH = 0, u8NoisePowerL = 0;
2347*53ee8cc1Swenshuai.xi     static MS_U8 u8NoisePowerL_Last = 0xff;
2348*53ee8cc1Swenshuai.xi     #else
2349*53ee8cc1Swenshuai.xi     MS_U8 u8NoisePowerH=0;
2350*53ee8cc1Swenshuai.xi     #endif
2351*53ee8cc1Swenshuai.xi     static MS_U8 u8NoisePowerH_Last = 0xff;
2352*53ee8cc1Swenshuai.xi 
2353*53ee8cc1Swenshuai.xi     eMode = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
2354*53ee8cc1Swenshuai.xi 
2355*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2356*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2ABE, &u8NoisePowerL); //DVBC_EQ
2357*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2ABF, &u8NoisePowerH);
2358*53ee8cc1Swenshuai.xi     #else
2359*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C15, &u8NoisePowerH);
2360*53ee8cc1Swenshuai.xi     #endif
2361*53ee8cc1Swenshuai.xi 
2362*53ee8cc1Swenshuai.xi     if (eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//SNR=10*log10((1344<<10)/noisepower)
2363*53ee8cc1Swenshuai.xi     {
2364*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_Vsb_FEC_Lock()) u8NoisePowerH=0xFF;
2365*53ee8cc1Swenshuai.xi         else if (abs(u8NoisePowerH_Last-u8NoisePowerH) > 5)
2366*53ee8cc1Swenshuai.xi             u8NoisePowerH_Last = u8NoisePowerH;
2367*53ee8cc1Swenshuai.xi         else u8NoisePowerH = u8NoisePowerH_Last;
2368*53ee8cc1Swenshuai.xi 
2369*53ee8cc1Swenshuai.xi         if (u8NoisePowerH > 0xBE) //SNR<14.5
2370*53ee8cc1Swenshuai.xi             *pstatus=DMD_ATSC_SIGNAL_NO;
2371*53ee8cc1Swenshuai.xi         else if (u8NoisePowerH > 0x4D) //SNR<18.4
2372*53ee8cc1Swenshuai.xi             *pstatus=DMD_ATSC_SIGNAL_WEAK;
2373*53ee8cc1Swenshuai.xi         else if (u8NoisePowerH > 0x23) //SNR<21.8
2374*53ee8cc1Swenshuai.xi             *pstatus=DMD_ATSC_SIGNAL_MODERATE;
2375*53ee8cc1Swenshuai.xi         else if (u8NoisePowerH > 0x0A) //SNR<26.9
2376*53ee8cc1Swenshuai.xi             *pstatus=DMD_ATSC_SIGNAL_STRONG;
2377*53ee8cc1Swenshuai.xi         else
2378*53ee8cc1Swenshuai.xi             *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
2379*53ee8cc1Swenshuai.xi     }
2380*53ee8cc1Swenshuai.xi     else //QAM MODE
2381*53ee8cc1Swenshuai.xi     {
2382*53ee8cc1Swenshuai.xi         #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2383*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_QAM_Main_Lock() || u8NoisePowerH) u8NoisePowerL=0xFF;
2384*53ee8cc1Swenshuai.xi         else if (abs(u8NoisePowerL_Last-u8NoisePowerL) > 5)
2385*53ee8cc1Swenshuai.xi             u8NoisePowerL_Last = u8NoisePowerL;
2386*53ee8cc1Swenshuai.xi         else u8NoisePowerL = u8NoisePowerL_Last;
2387*53ee8cc1Swenshuai.xi 
2388*53ee8cc1Swenshuai.xi         //SNR=10*log10(65536/noisepower)
2389*53ee8cc1Swenshuai.xi         if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM)
2390*53ee8cc1Swenshuai.xi         {
2391*53ee8cc1Swenshuai.xi             if (u8NoisePowerL > 0x71) //SNR<27.6
2392*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_NO;
2393*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x31) //SNR<31.2
2394*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_WEAK;
2395*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x25) //SNR<32.4
2396*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_MODERATE;
2397*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x17) //SNR<34.4
2398*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_STRONG;
2399*53ee8cc1Swenshuai.xi             else
2400*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
2401*53ee8cc1Swenshuai.xi         }
2402*53ee8cc1Swenshuai.xi         else
2403*53ee8cc1Swenshuai.xi         {
2404*53ee8cc1Swenshuai.xi             if (u8NoisePowerL > 0x1D) //SNR<21.5
2405*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_NO;
2406*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x14) //SNR<25.4
2407*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_WEAK;
2408*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x0F) //SNR<27.8
2409*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_MODERATE;
2410*53ee8cc1Swenshuai.xi             else if (u8NoisePowerL > 0x0B) //SNR<31.4
2411*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_STRONG;
2412*53ee8cc1Swenshuai.xi             else
2413*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
2414*53ee8cc1Swenshuai.xi         }
2415*53ee8cc1Swenshuai.xi         #else
2416*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_QAM_Main_Lock()) u8NoisePowerH=0xFF;
2417*53ee8cc1Swenshuai.xi         else if (abs(u8NoisePowerH_Last-u8NoisePowerH) > 5)
2418*53ee8cc1Swenshuai.xi             u8NoisePowerH_Last = u8NoisePowerH;
2419*53ee8cc1Swenshuai.xi         else u8NoisePowerH = u8NoisePowerH_Last;
2420*53ee8cc1Swenshuai.xi 
2421*53ee8cc1Swenshuai.xi         if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//SNR=10*log10((2720<<10)/noisepower)
2422*53ee8cc1Swenshuai.xi         {
2423*53ee8cc1Swenshuai.xi             if (u8NoisePowerH > 0x13) //SNR<27.5
2424*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_NO;
2425*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x08) //SNR<31.2
2426*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_WEAK;
2427*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x06) //SNR<32.4
2428*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_MODERATE;
2429*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x04) //SNR<34.2
2430*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_STRONG;
2431*53ee8cc1Swenshuai.xi             else
2432*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
2433*53ee8cc1Swenshuai.xi         }
2434*53ee8cc1Swenshuai.xi         else //64QAM//SNR=10*log10((2688<<10)/noisepower)
2435*53ee8cc1Swenshuai.xi         {
2436*53ee8cc1Swenshuai.xi             if (u8NoisePowerH > 0x4C) //SNR<21.5
2437*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_NO;
2438*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x1F) //SNR<25.4
2439*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_WEAK;
2440*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x11) //SNR<27.8
2441*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_MODERATE;
2442*53ee8cc1Swenshuai.xi             else if (u8NoisePowerH > 0x07) //SNR<31.4
2443*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_STRONG;
2444*53ee8cc1Swenshuai.xi             else
2445*53ee8cc1Swenshuai.xi                 *pstatus=DMD_ATSC_SIGNAL_VERY_STRONG;
2446*53ee8cc1Swenshuai.xi         }
2447*53ee8cc1Swenshuai.xi         #endif
2448*53ee8cc1Swenshuai.xi     }
2449*53ee8cc1Swenshuai.xi }
2450*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_ReadSNRPercentage(void)2451*53ee8cc1Swenshuai.xi static MS_U8 _HAL_INTERN_ATSC_ReadSNRPercentage(void)
2452*53ee8cc1Swenshuai.xi {
2453*53ee8cc1Swenshuai.xi     DMD_ATSC_DEMOD_TYPE eMode;
2454*53ee8cc1Swenshuai.xi     MS_U8 u8NoisePowerH = 0, u8NoisePowerL = 0;
2455*53ee8cc1Swenshuai.xi     MS_U16 u16NoisePower;
2456*53ee8cc1Swenshuai.xi 
2457*53ee8cc1Swenshuai.xi     eMode = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
2458*53ee8cc1Swenshuai.xi 
2459*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2460*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2ABE, &u8NoisePowerL); //DVBC_EQ
2461*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2ABF, &u8NoisePowerH);
2462*53ee8cc1Swenshuai.xi     #else
2463*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C14, &u8NoisePowerL);
2464*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x2C15, &u8NoisePowerH);
2465*53ee8cc1Swenshuai.xi     #endif
2466*53ee8cc1Swenshuai.xi 
2467*53ee8cc1Swenshuai.xi     u16NoisePower = (u8NoisePowerH<<8) | u8NoisePowerL;
2468*53ee8cc1Swenshuai.xi 
2469*53ee8cc1Swenshuai.xi     if (eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//SNR=10*log10((1344<<10)/noisepower)
2470*53ee8cc1Swenshuai.xi     {
2471*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_Vsb_FEC_Lock())
2472*53ee8cc1Swenshuai.xi             return 0;//SNR=0;
2473*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x008A)//SNR>=40dB
2474*53ee8cc1Swenshuai.xi             return 100;//SNR=MAX_SNR;
2475*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0097)//SNR>=39.6dB
2476*53ee8cc1Swenshuai.xi             return 99;//
2477*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x00A5)//SNR>=39.2dB
2478*53ee8cc1Swenshuai.xi             return 98;//
2479*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x00B5)//SNR>=38.8dB
2480*53ee8cc1Swenshuai.xi             return 97;//
2481*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x00C7)//SNR>=38.4dB
2482*53ee8cc1Swenshuai.xi             return 96;//
2483*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x00DA)//SNR>=38.0dB
2484*53ee8cc1Swenshuai.xi             return 95;//
2485*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x00EF)//SNR>=37.6dB
2486*53ee8cc1Swenshuai.xi             return 94;//
2487*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0106)//SNR>=37.2dB
2488*53ee8cc1Swenshuai.xi             return 93;//
2489*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0120)//SNR>=36.8dB
2490*53ee8cc1Swenshuai.xi             return 92;//
2491*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x013B)//SNR>=36.4dB
2492*53ee8cc1Swenshuai.xi             return 91;//
2493*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x015A)//SNR>=36.0dB
2494*53ee8cc1Swenshuai.xi             return 90;//
2495*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x017B)//SNR>=35.6dB
2496*53ee8cc1Swenshuai.xi             return 89;//
2497*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x01A0)//SNR>=35.2dB
2498*53ee8cc1Swenshuai.xi             return 88;//
2499*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x01C8)//SNR>=34.8dB
2500*53ee8cc1Swenshuai.xi             return 87;//
2501*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x01F4)//SNR>=34.4dB
2502*53ee8cc1Swenshuai.xi             return 86;//
2503*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0224)//SNR>=34.0dB
2504*53ee8cc1Swenshuai.xi             return 85;//
2505*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0259)//SNR>=33.6dB
2506*53ee8cc1Swenshuai.xi             return 84;//
2507*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0293)//SNR>=33.2dB
2508*53ee8cc1Swenshuai.xi             return 83;//
2509*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x02D2)//SNR>=32.8dB
2510*53ee8cc1Swenshuai.xi             return 82;//
2511*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0318)//SNR>=32.4dB
2512*53ee8cc1Swenshuai.xi             return 81;//
2513*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0364)//SNR>=32.0dB
2514*53ee8cc1Swenshuai.xi             return 80;//
2515*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x03B8)//SNR>=31.6dB
2516*53ee8cc1Swenshuai.xi             return 79;//
2517*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0414)//SNR>=31.2dB
2518*53ee8cc1Swenshuai.xi             return 78;//
2519*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0479)//SNR>=30.8dB
2520*53ee8cc1Swenshuai.xi             return 77;//
2521*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x04E7)//SNR>=30.4dB
2522*53ee8cc1Swenshuai.xi             return 76;//
2523*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0560)//SNR>=30.0dB
2524*53ee8cc1Swenshuai.xi             return 75;//
2525*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x05E5)//SNR>=29.6dB
2526*53ee8cc1Swenshuai.xi             return 74;//
2527*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0677)//SNR>=29.2dB
2528*53ee8cc1Swenshuai.xi             return 73;//
2529*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0716)//SNR>=28.8dB
2530*53ee8cc1Swenshuai.xi             return 72;//
2531*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x07C5)//SNR>=28.4dB
2532*53ee8cc1Swenshuai.xi             return 71;//
2533*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0885)//SNR>=28.0dB
2534*53ee8cc1Swenshuai.xi             return 70;//
2535*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0958)//SNR>=27.6dB
2536*53ee8cc1Swenshuai.xi             return 69;//
2537*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0A3E)//SNR>=27.2dB
2538*53ee8cc1Swenshuai.xi             return 68;//
2539*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0B3B)//SNR>=26.8dB
2540*53ee8cc1Swenshuai.xi             return 67;//
2541*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0C51)//SNR>=26.4dB
2542*53ee8cc1Swenshuai.xi             return 66;//
2543*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0D81)//SNR>=26.0dB
2544*53ee8cc1Swenshuai.xi             return 65;//
2545*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x0ECF)//SNR>=25.6dB
2546*53ee8cc1Swenshuai.xi             return 64;//
2547*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x103C)//SNR>=25.2dB
2548*53ee8cc1Swenshuai.xi             return 63;//
2549*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x11CD)//SNR>=24.8dB
2550*53ee8cc1Swenshuai.xi             return 62;//
2551*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x1385)//SNR>=24.4dB
2552*53ee8cc1Swenshuai.xi             return 61;//
2553*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x1567)//SNR>=24.0dB
2554*53ee8cc1Swenshuai.xi             return 60;//
2555*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x1778)//SNR>=23.6dB
2556*53ee8cc1Swenshuai.xi             return 59;//
2557*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x19BB)//SNR>=23.2dB
2558*53ee8cc1Swenshuai.xi             return 58;//
2559*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x1C37)//SNR>=22.8dB
2560*53ee8cc1Swenshuai.xi             return 57;//
2561*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x1EF0)//SNR>=22.4dB
2562*53ee8cc1Swenshuai.xi             return 56;//
2563*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x21EC)//SNR>=22.0dB
2564*53ee8cc1Swenshuai.xi             return 55;//
2565*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x2531)//SNR>=21.6dB
2566*53ee8cc1Swenshuai.xi             return 54;//
2567*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x28C8)//SNR>=21.2dB
2568*53ee8cc1Swenshuai.xi             return 53;//
2569*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x2CB7)//SNR>=20.8dB
2570*53ee8cc1Swenshuai.xi             return 52;//
2571*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x3108)//SNR>=20.4dB
2572*53ee8cc1Swenshuai.xi             return 51;//
2573*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x35C3)//SNR>=20.0dB
2574*53ee8cc1Swenshuai.xi             return 50;//
2575*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x3AF2)//SNR>=19.6dB
2576*53ee8cc1Swenshuai.xi             return 49;//
2577*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x40A2)//SNR>=19.2dB
2578*53ee8cc1Swenshuai.xi             return 48;//
2579*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x46DF)//SNR>=18.8dB
2580*53ee8cc1Swenshuai.xi             return 47;//
2581*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x4DB5)//SNR>=18.4dB
2582*53ee8cc1Swenshuai.xi             return 46;//
2583*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x5534)//SNR>=18.0dB
2584*53ee8cc1Swenshuai.xi             return 45;//
2585*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x5D6D)//SNR>=17.6dB
2586*53ee8cc1Swenshuai.xi             return 44;//
2587*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x6670)//SNR>=17.2dB
2588*53ee8cc1Swenshuai.xi             return 43;//
2589*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x7052)//SNR>=16.8dB
2590*53ee8cc1Swenshuai.xi             return 42;//
2591*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x7B28)//SNR>=16.4dB
2592*53ee8cc1Swenshuai.xi             return 41;//
2593*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x870A)//SNR>=16.0dB
2594*53ee8cc1Swenshuai.xi             return 40;//
2595*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0x9411)//SNR>=15.6dB
2596*53ee8cc1Swenshuai.xi             return 39;//
2597*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0xA25A)//SNR>=15.2dB
2598*53ee8cc1Swenshuai.xi             return 38;//
2599*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0xB204)//SNR>=14.8dB
2600*53ee8cc1Swenshuai.xi             return 37;//
2601*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0xC331)//SNR>=14.4dB
2602*53ee8cc1Swenshuai.xi             return 36;//
2603*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0xD606)//SNR>=14.0dB
2604*53ee8cc1Swenshuai.xi             return 35;//
2605*53ee8cc1Swenshuai.xi         else if (u16NoisePower<=0xEAAC)//SNR>=13.6dB
2606*53ee8cc1Swenshuai.xi             return 34;//
2607*53ee8cc1Swenshuai.xi         else// if (u16NoisePower>=0xEAAC)//SNR<13.6dB
2608*53ee8cc1Swenshuai.xi             return 33;//
2609*53ee8cc1Swenshuai.xi     }
2610*53ee8cc1Swenshuai.xi     else //QAM MODE
2611*53ee8cc1Swenshuai.xi     {
2612*53ee8cc1Swenshuai.xi         if( eMode == DMD_ATSC_DEMOD_ATSC_256QAM ) //256QAM//SNR=10*log10((2720<<10)/noisepower)
2613*53ee8cc1Swenshuai.xi         {
2614*53ee8cc1Swenshuai.xi             if (!_HAL_INTERN_ATSC_QAM_Main_Lock())
2615*53ee8cc1Swenshuai.xi                 return 0;//SNR=0;
2616*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0117)//SNR>=40dB
2617*53ee8cc1Swenshuai.xi                 return 100;//
2618*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0131)//SNR>=39.6dB
2619*53ee8cc1Swenshuai.xi                 return 99;//
2620*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x014F)//SNR>=39.2dB
2621*53ee8cc1Swenshuai.xi                 return 98;//
2622*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x016F)//SNR>=38.8dB
2623*53ee8cc1Swenshuai.xi                 return 97;//
2624*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0193)//SNR>=38.4dB
2625*53ee8cc1Swenshuai.xi                 return 96;//
2626*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x01B9)//SNR>=38.0dB
2627*53ee8cc1Swenshuai.xi                 return 95;//
2628*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x01E4)//SNR>=37.6dB
2629*53ee8cc1Swenshuai.xi                 return 94;//
2630*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0213)//SNR>=37.2dB
2631*53ee8cc1Swenshuai.xi                 return 93;//
2632*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0246)//SNR>=36.8dB
2633*53ee8cc1Swenshuai.xi                 return 92;//
2634*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x027E)//SNR>=36.4dB
2635*53ee8cc1Swenshuai.xi                 return 91;//
2636*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x02BC)//SNR>=36.0dB
2637*53ee8cc1Swenshuai.xi                 return 90;//
2638*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x02FF)//SNR>=35.6dB
2639*53ee8cc1Swenshuai.xi                 return 89;//
2640*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0349)//SNR>=35.2dB
2641*53ee8cc1Swenshuai.xi                 return 88;//
2642*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x039A)//SNR>=34.8dB
2643*53ee8cc1Swenshuai.xi                 return 87;//
2644*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x03F3)//SNR>=34.4dB
2645*53ee8cc1Swenshuai.xi                 return 86;//
2646*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0455)//SNR>=34.0dB
2647*53ee8cc1Swenshuai.xi                 return 85;//
2648*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x04C0)//SNR>=33.6dB
2649*53ee8cc1Swenshuai.xi                 return 84;//
2650*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0535)//SNR>=33.2dB
2651*53ee8cc1Swenshuai.xi                 return 83;//
2652*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x05B6)//SNR>=32.8dB
2653*53ee8cc1Swenshuai.xi                 return 82;//
2654*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0643)//SNR>=32.4dB
2655*53ee8cc1Swenshuai.xi                 return 81;//
2656*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x06DD)//SNR>=32.0dB
2657*53ee8cc1Swenshuai.xi                 return 80;//
2658*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0787)//SNR>=31.6dB
2659*53ee8cc1Swenshuai.xi                 return 79;//
2660*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0841)//SNR>=31.2dB
2661*53ee8cc1Swenshuai.xi                 return 78;//
2662*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x090D)//SNR>=30.8dB
2663*53ee8cc1Swenshuai.xi                 return 77;//
2664*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x09EC)//SNR>=30.4dB
2665*53ee8cc1Swenshuai.xi                 return 76;//
2666*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0AE1)//SNR>=30.0dB
2667*53ee8cc1Swenshuai.xi                 return 75;//
2668*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0BEE)//SNR>=29.6dB
2669*53ee8cc1Swenshuai.xi                 return 74;//
2670*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0D15)//SNR>=29.2dB
2671*53ee8cc1Swenshuai.xi                 return 73;//
2672*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0E58)//SNR>=28.8dB
2673*53ee8cc1Swenshuai.xi                 return 72;//
2674*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0FBA)//SNR>=28.4dB
2675*53ee8cc1Swenshuai.xi                 return 71;//
2676*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x113E)//SNR>=28.0dB
2677*53ee8cc1Swenshuai.xi                 return 70;//
2678*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x12E8)//SNR>=27.6dB
2679*53ee8cc1Swenshuai.xi                 return 69;//
2680*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x14BB)//SNR>=27.2dB
2681*53ee8cc1Swenshuai.xi                 return 68;//
2682*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x16BB)//SNR>=26.8dB
2683*53ee8cc1Swenshuai.xi                 return 67;//
2684*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x18ED)//SNR>=26.4dB
2685*53ee8cc1Swenshuai.xi                 return 66;//
2686*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x1B54)//SNR>=26.0dB
2687*53ee8cc1Swenshuai.xi                 return 65;//
2688*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x1DF7)//SNR>=25.6dB
2689*53ee8cc1Swenshuai.xi                 return 64;//
2690*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x20DB)//SNR>=25.2dB
2691*53ee8cc1Swenshuai.xi                 return 63;//
2692*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2407)//SNR>=24.8dB
2693*53ee8cc1Swenshuai.xi                 return 62;//
2694*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2781)//SNR>=24.4dB
2695*53ee8cc1Swenshuai.xi                 return 61;//
2696*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2B50)//SNR>=24.0dB
2697*53ee8cc1Swenshuai.xi                 return 60;//
2698*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2F7E)//SNR>=23.6dB
2699*53ee8cc1Swenshuai.xi                 return 59;//
2700*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x3413)//SNR>=23.2dB
2701*53ee8cc1Swenshuai.xi                 return 58;//
2702*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x3919)//SNR>=22.8dB
2703*53ee8cc1Swenshuai.xi                 return 57;//
2704*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x3E9C)//SNR>=22.4dB
2705*53ee8cc1Swenshuai.xi                 return 56;//
2706*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x44A6)//SNR>=22.0dB
2707*53ee8cc1Swenshuai.xi                 return 55;//
2708*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x4B45)//SNR>=21.6dB
2709*53ee8cc1Swenshuai.xi                 return 54;//
2710*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x5289)//SNR>=21.2dB
2711*53ee8cc1Swenshuai.xi                 return 53;//
2712*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x5A7F)//SNR>=20.8dB
2713*53ee8cc1Swenshuai.xi                 return 52;//
2714*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x633A)//SNR>=20.4dB
2715*53ee8cc1Swenshuai.xi                 return 51;//
2716*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x6CCD)//SNR>=20.0dB
2717*53ee8cc1Swenshuai.xi                 return 50;//
2718*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x774C)//SNR>=19.6dB
2719*53ee8cc1Swenshuai.xi                 return 49;//
2720*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x82CE)//SNR>=19.2dB
2721*53ee8cc1Swenshuai.xi                 return 48;//
2722*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x8F6D)//SNR>=18.8dB
2723*53ee8cc1Swenshuai.xi                 return 47;//
2724*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x9D44)//SNR>=18.4dB
2725*53ee8cc1Swenshuai.xi                 return 46;//
2726*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xAC70)//SNR>=18.0dB
2727*53ee8cc1Swenshuai.xi                 return 45;//
2728*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xBD13)//SNR>=17.6dB
2729*53ee8cc1Swenshuai.xi                 return 44;//
2730*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xCF50)//SNR>=17.2dB
2731*53ee8cc1Swenshuai.xi                 return 43;//
2732*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xE351)//SNR>=16.8dB
2733*53ee8cc1Swenshuai.xi                 return 42;//
2734*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xF93F)//SNR>=16.4dB
2735*53ee8cc1Swenshuai.xi                 return 41;//
2736*53ee8cc1Swenshuai.xi             else// if (u16NoisePower>=0xF93F)//SNR<16.4dB
2737*53ee8cc1Swenshuai.xi                 return 40;//
2738*53ee8cc1Swenshuai.xi         }
2739*53ee8cc1Swenshuai.xi         else //64QAM//SNR=10*log10((2688<<10)/noisepower)
2740*53ee8cc1Swenshuai.xi         {
2741*53ee8cc1Swenshuai.xi             if (!_HAL_INTERN_ATSC_QAM_Main_Lock())
2742*53ee8cc1Swenshuai.xi                 return 0;//SNR=0;
2743*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0113)//SNR>=40dB
2744*53ee8cc1Swenshuai.xi                 return 100;//
2745*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x012E)//SNR>=39.6dB
2746*53ee8cc1Swenshuai.xi                 return 99;//
2747*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x014B)//SNR>=39.2dB
2748*53ee8cc1Swenshuai.xi                 return 98;//
2749*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x016B)//SNR>=38.8dB
2750*53ee8cc1Swenshuai.xi                 return 97;//
2751*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x018E)//SNR>=38.4dB
2752*53ee8cc1Swenshuai.xi                 return 96;//
2753*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x01B4)//SNR>=38.0dB
2754*53ee8cc1Swenshuai.xi                 return 95;//
2755*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x01DE)//SNR>=37.6dB
2756*53ee8cc1Swenshuai.xi                 return 94;//
2757*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x020C)//SNR>=37.2dB
2758*53ee8cc1Swenshuai.xi                 return 93;//
2759*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x023F)//SNR>=36.8dB
2760*53ee8cc1Swenshuai.xi                 return 92;//
2761*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0277)//SNR>=36.4dB
2762*53ee8cc1Swenshuai.xi                 return 91;//
2763*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x02B3)//SNR>=36.0dB
2764*53ee8cc1Swenshuai.xi                 return 90;//
2765*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x02F6)//SNR>=35.6dB
2766*53ee8cc1Swenshuai.xi                 return 89;//
2767*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x033F)//SNR>=35.2dB
2768*53ee8cc1Swenshuai.xi                 return 88;//
2769*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x038F)//SNR>=34.8dB
2770*53ee8cc1Swenshuai.xi                 return 87;//
2771*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x03E7)//SNR>=34.4dB
2772*53ee8cc1Swenshuai.xi                 return 86;//
2773*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0448)//SNR>=34.0dB
2774*53ee8cc1Swenshuai.xi                 return 85;//
2775*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x04B2)//SNR>=33.6dB
2776*53ee8cc1Swenshuai.xi                 return 84;//
2777*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0525)//SNR>=33.2dB
2778*53ee8cc1Swenshuai.xi                 return 83;//
2779*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x05A5)//SNR>=32.8dB
2780*53ee8cc1Swenshuai.xi                 return 82;//
2781*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0630)//SNR>=32.4dB
2782*53ee8cc1Swenshuai.xi                 return 81;//
2783*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x06C9)//SNR>=32.0dB
2784*53ee8cc1Swenshuai.xi                 return 80;//
2785*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0770)//SNR>=31.6dB
2786*53ee8cc1Swenshuai.xi                 return 79;//
2787*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0828)//SNR>=31.2dB
2788*53ee8cc1Swenshuai.xi                 return 78;//
2789*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x08F1)//SNR>=30.8dB
2790*53ee8cc1Swenshuai.xi                 return 77;//
2791*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x09CE)//SNR>=30.4dB
2792*53ee8cc1Swenshuai.xi                 return 76;//
2793*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0AC1)//SNR>=30.0dB
2794*53ee8cc1Swenshuai.xi                 return 75;//
2795*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0BCA)//SNR>=29.6dB
2796*53ee8cc1Swenshuai.xi                 return 74;//
2797*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0CED)//SNR>=29.2dB
2798*53ee8cc1Swenshuai.xi                 return 73;//
2799*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0E2D)//SNR>=28.8dB
2800*53ee8cc1Swenshuai.xi                 return 72;//
2801*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x0F8B)//SNR>=28.4dB
2802*53ee8cc1Swenshuai.xi                 return 71;//
2803*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x110A)//SNR>=28.0dB
2804*53ee8cc1Swenshuai.xi                 return 70;//
2805*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x12AF)//SNR>=27.6dB
2806*53ee8cc1Swenshuai.xi                 return 69;//
2807*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x147D)//SNR>=27.2dB
2808*53ee8cc1Swenshuai.xi                 return 68;//
2809*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x1677)//SNR>=26.8dB
2810*53ee8cc1Swenshuai.xi                 return 67;//
2811*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x18A2)//SNR>=26.4dB
2812*53ee8cc1Swenshuai.xi                 return 66;//
2813*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x1B02)//SNR>=26.0dB
2814*53ee8cc1Swenshuai.xi                 return 65;//
2815*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x1D9D)//SNR>=25.6dB
2816*53ee8cc1Swenshuai.xi                 return 64;//
2817*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2078)//SNR>=25.2dB
2818*53ee8cc1Swenshuai.xi                 return 63;//
2819*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x239A)//SNR>=24.8dB
2820*53ee8cc1Swenshuai.xi                 return 62;//
2821*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x270A)//SNR>=24.4dB
2822*53ee8cc1Swenshuai.xi                 return 61;//
2823*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2ACE)//SNR>=24.0dB
2824*53ee8cc1Swenshuai.xi                 return 60;//
2825*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x2EEF)//SNR>=23.6dB
2826*53ee8cc1Swenshuai.xi                 return 59;//
2827*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x3376)//SNR>=23.2dB
2828*53ee8cc1Swenshuai.xi                 return 58;//
2829*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x386D)//SNR>=22.8dB
2830*53ee8cc1Swenshuai.xi                 return 57;//
2831*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x3DDF)//SNR>=22.4dB
2832*53ee8cc1Swenshuai.xi                 return 56;//
2833*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x43D7)//SNR>=22.0dB
2834*53ee8cc1Swenshuai.xi                 return 55;//
2835*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x4A63)//SNR>=21.6dB
2836*53ee8cc1Swenshuai.xi                 return 54;//
2837*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x5190)//SNR>=21.2dB
2838*53ee8cc1Swenshuai.xi                 return 53;//
2839*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x596E)//SNR>=20.8dB
2840*53ee8cc1Swenshuai.xi                 return 52;//
2841*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x620F)//SNR>=20.4dB
2842*53ee8cc1Swenshuai.xi                 return 51;//
2843*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x6B85)//SNR>=20.0dB
2844*53ee8cc1Swenshuai.xi                 return 50;//
2845*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x75E5)//SNR>=19.6dB
2846*53ee8cc1Swenshuai.xi                 return 49;//
2847*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x8144)//SNR>=19.2dB
2848*53ee8cc1Swenshuai.xi                 return 48;//
2849*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x8DBD)//SNR>=18.8dB
2850*53ee8cc1Swenshuai.xi                 return 47;//
2851*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0x9B6A)//SNR>=18.4dB
2852*53ee8cc1Swenshuai.xi                 return 46;//
2853*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xAA68)//SNR>=18.0dB
2854*53ee8cc1Swenshuai.xi                 return 45;//
2855*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xBAD9)//SNR>=17.6dB
2856*53ee8cc1Swenshuai.xi                 return 44;//
2857*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xCCE0)//SNR>=17.2dB
2858*53ee8cc1Swenshuai.xi                 return 43;//
2859*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xE0A4)//SNR>=16.8dB
2860*53ee8cc1Swenshuai.xi                 return 42;//
2861*53ee8cc1Swenshuai.xi             else if (u16NoisePower<=0xF650)//SNR>=16.4dB
2862*53ee8cc1Swenshuai.xi                 return 41;//
2863*53ee8cc1Swenshuai.xi             else// if (u16NoisePower>=0xF650)//SNR<16.4dB
2864*53ee8cc1Swenshuai.xi                 return 40;//
2865*53ee8cc1Swenshuai.xi         }
2866*53ee8cc1Swenshuai.xi     }
2867*53ee8cc1Swenshuai.xi }
2868*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_GET_QAM_SNR(float * f_snr)2869*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_GET_QAM_SNR(float *f_snr)
2870*53ee8cc1Swenshuai.xi {
2871*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;
2872*53ee8cc1Swenshuai.xi     MS_U16 noisepower = 0;
2873*53ee8cc1Swenshuai.xi 
2874*53ee8cc1Swenshuai.xi     if (_HAL_INTERN_ATSC_QAM_Main_Lock())
2875*53ee8cc1Swenshuai.xi     {
2876*53ee8cc1Swenshuai.xi         // latch
2877*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x2905, 0x80);
2878*53ee8cc1Swenshuai.xi         // read noise power
2879*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2A45, &u8Data);
2880*53ee8cc1Swenshuai.xi         noisepower = u8Data;
2881*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2A44, &u8Data);
2882*53ee8cc1Swenshuai.xi         noisepower = (noisepower<<8)|u8Data;
2883*53ee8cc1Swenshuai.xi         // unlatch
2884*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x2905, 0x00);
2885*53ee8cc1Swenshuai.xi 
2886*53ee8cc1Swenshuai.xi         if (noisepower == 0x0000)
2887*53ee8cc1Swenshuai.xi             noisepower = 0x0001;
2888*53ee8cc1Swenshuai.xi 
2889*53ee8cc1Swenshuai.xi         #ifdef MSOS_TYPE_LINUX
2890*53ee8cc1Swenshuai.xi         *f_snr = 10.0f*log10f(65536.0f/(float)noisepower);
2891*53ee8cc1Swenshuai.xi         #else
2892*53ee8cc1Swenshuai.xi         *f_snr = 10.0f*Log10Approx(65536.0f/(float)noisepower);
2893*53ee8cc1Swenshuai.xi         #endif
2894*53ee8cc1Swenshuai.xi     }
2895*53ee8cc1Swenshuai.xi     else
2896*53ee8cc1Swenshuai.xi     {
2897*53ee8cc1Swenshuai.xi         *f_snr = 0.0f;
2898*53ee8cc1Swenshuai.xi     }
2899*53ee8cc1Swenshuai.xi 
2900*53ee8cc1Swenshuai.xi     return TRUE;
2901*53ee8cc1Swenshuai.xi }
2902*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_ReadPKTERR(void)2903*53ee8cc1Swenshuai.xi static MS_U16 _HAL_INTERN_ATSC_ReadPKTERR(void)
2904*53ee8cc1Swenshuai.xi {
2905*53ee8cc1Swenshuai.xi     MS_U16 data = 0;
2906*53ee8cc1Swenshuai.xi     DMD_ATSC_DEMOD_TYPE eMode;
2907*53ee8cc1Swenshuai.xi 
2908*53ee8cc1Swenshuai.xi     eMode = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
2909*53ee8cc1Swenshuai.xi 
2910*53ee8cc1Swenshuai.xi     if (eMode == DMD_ATSC_DEMOD_ATSC_VSB)
2911*53ee8cc1Swenshuai.xi     {
2912*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_Vsb_FEC_Lock()) data = 0;
2913*53ee8cc1Swenshuai.xi         else
2914*53ee8cc1Swenshuai.xi         {
2915*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2B20, ((MS_U8*)(&data))+1);
2916*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2B21,  (MS_U8*)(&data));
2917*53ee8cc1Swenshuai.xi         }
2918*53ee8cc1Swenshuai.xi     }
2919*53ee8cc1Swenshuai.xi     else
2920*53ee8cc1Swenshuai.xi     {
2921*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_QAM_Main_Lock()) data = 0;
2922*53ee8cc1Swenshuai.xi         else
2923*53ee8cc1Swenshuai.xi         {
2924*53ee8cc1Swenshuai.xi             #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2925*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F66, ((MS_U8*)(&data))+1);
2926*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F67,  (MS_U8*)(&data));
2927*53ee8cc1Swenshuai.xi             #else
2928*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2B20, ((MS_U8*)(&data))+1);
2929*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2B21,  (MS_U8*)(&data));
2930*53ee8cc1Swenshuai.xi             #endif
2931*53ee8cc1Swenshuai.xi         }
2932*53ee8cc1Swenshuai.xi     }
2933*53ee8cc1Swenshuai.xi 
2934*53ee8cc1Swenshuai.xi     return data;
2935*53ee8cc1Swenshuai.xi }
2936*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_ReadBER(float * pBer)2937*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_ReadBER(float *pBer)
2938*53ee8cc1Swenshuai.xi {
2939*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
2940*53ee8cc1Swenshuai.xi     MS_U8 reg = 0, reg_frz = 0;
2941*53ee8cc1Swenshuai.xi     MS_U16 BitErrPeriod;
2942*53ee8cc1Swenshuai.xi     MS_U32 BitErr;
2943*53ee8cc1Swenshuai.xi     DMD_ATSC_DEMOD_TYPE eMode;
2944*53ee8cc1Swenshuai.xi 
2945*53ee8cc1Swenshuai.xi     eMode = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
2946*53ee8cc1Swenshuai.xi 
2947*53ee8cc1Swenshuai.xi     if (eMode == DMD_ATSC_DEMOD_ATSC_VSB)
2948*53ee8cc1Swenshuai.xi     {
2949*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_Vsb_FEC_Lock()) *pBer = 0;
2950*53ee8cc1Swenshuai.xi         else
2951*53ee8cc1Swenshuai.xi         {
2952*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F03, &reg_frz);
2953*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x1F03, reg_frz|0x03);
2954*53ee8cc1Swenshuai.xi 
2955*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F47, &reg);
2956*53ee8cc1Swenshuai.xi             BitErrPeriod = reg;
2957*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F46, &reg);
2958*53ee8cc1Swenshuai.xi             BitErrPeriod = (BitErrPeriod << 8)|reg;
2959*53ee8cc1Swenshuai.xi 
2960*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6d, &reg);
2961*53ee8cc1Swenshuai.xi             BitErr = reg;
2962*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6c, &reg);
2963*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
2964*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6b, &reg);
2965*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
2966*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6a, &reg);
2967*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
2968*53ee8cc1Swenshuai.xi 
2969*53ee8cc1Swenshuai.xi             reg_frz=reg_frz&(~0x03);
2970*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x1F03, reg_frz);
2971*53ee8cc1Swenshuai.xi 
2972*53ee8cc1Swenshuai.xi             if (BitErrPeriod == 0 )    //protect 0
2973*53ee8cc1Swenshuai.xi                 BitErrPeriod = 1;
2974*53ee8cc1Swenshuai.xi             if (BitErr <=0 )
2975*53ee8cc1Swenshuai.xi                 *pBer = 0.5f / ((float)BitErrPeriod*8*187*128);
2976*53ee8cc1Swenshuai.xi             else
2977*53ee8cc1Swenshuai.xi                 *pBer = (float)BitErr / ((float)BitErrPeriod*8*187*128);
2978*53ee8cc1Swenshuai.xi         }
2979*53ee8cc1Swenshuai.xi     }
2980*53ee8cc1Swenshuai.xi     else
2981*53ee8cc1Swenshuai.xi     {
2982*53ee8cc1Swenshuai.xi         if (!_HAL_INTERN_ATSC_QAM_Main_Lock()) *pBer = 0;
2983*53ee8cc1Swenshuai.xi         else
2984*53ee8cc1Swenshuai.xi         {
2985*53ee8cc1Swenshuai.xi             #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
2986*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2103, &reg_frz);
2987*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x2103, reg_frz|0x03);
2988*53ee8cc1Swenshuai.xi 
2989*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2147, &reg);
2990*53ee8cc1Swenshuai.xi             BitErrPeriod = reg;
2991*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x2146, &reg);
2992*53ee8cc1Swenshuai.xi             BitErrPeriod = (BitErrPeriod << 8)|reg;
2993*53ee8cc1Swenshuai.xi 
2994*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x216d, &reg);
2995*53ee8cc1Swenshuai.xi             BitErr = reg;
2996*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x216c, &reg);
2997*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
2998*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x216b, &reg);
2999*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
3000*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x216a, &reg);
3001*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
3002*53ee8cc1Swenshuai.xi 
3003*53ee8cc1Swenshuai.xi             reg_frz=reg_frz&(~0x03);
3004*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x2103, reg_frz);
3005*53ee8cc1Swenshuai.xi 
3006*53ee8cc1Swenshuai.xi             if (BitErrPeriod == 0)    //protect 0
3007*53ee8cc1Swenshuai.xi                 BitErrPeriod = 1;
3008*53ee8cc1Swenshuai.xi             if (BitErr <=0)
3009*53ee8cc1Swenshuai.xi                 *pBer = 0.5f / ((float)BitErrPeriod*8*188*128);
3010*53ee8cc1Swenshuai.xi             else
3011*53ee8cc1Swenshuai.xi                 *pBer = (float)BitErr / ((float)BitErrPeriod*8*188*128);
3012*53ee8cc1Swenshuai.xi             #else
3013*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F03, &reg_frz);
3014*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x1F03, reg_frz|0x03);
3015*53ee8cc1Swenshuai.xi 
3016*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F47, &reg);
3017*53ee8cc1Swenshuai.xi             BitErrPeriod = reg;
3018*53ee8cc1Swenshuai.xi             _MBX_ReadReg(0x1F46, &reg);
3019*53ee8cc1Swenshuai.xi             BitErrPeriod = (BitErrPeriod << 8)|reg;
3020*53ee8cc1Swenshuai.xi 
3021*53ee8cc1Swenshuai.xi             BitErr = reg;
3022*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6c, &reg);
3023*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
3024*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6b, &reg);
3025*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
3026*53ee8cc1Swenshuai.xi             status &= _MBX_ReadReg(0x1F6a, &reg);
3027*53ee8cc1Swenshuai.xi             BitErr = (BitErr << 8)|reg;
3028*53ee8cc1Swenshuai.xi 
3029*53ee8cc1Swenshuai.xi             reg_frz=reg_frz&(~0x03);
3030*53ee8cc1Swenshuai.xi             _MBX_WriteReg(0x1F03, reg_frz);
3031*53ee8cc1Swenshuai.xi 
3032*53ee8cc1Swenshuai.xi             if (BitErrPeriod == 0 )    //protect 0
3033*53ee8cc1Swenshuai.xi                 BitErrPeriod = 1;
3034*53ee8cc1Swenshuai.xi             if (BitErr <=0 )
3035*53ee8cc1Swenshuai.xi                 *pBer = 0.5f / ((float)BitErrPeriod*7*122*128);
3036*53ee8cc1Swenshuai.xi             else
3037*53ee8cc1Swenshuai.xi                 *pBer = (float)BitErr / ((float)BitErrPeriod*7*122*128);
3038*53ee8cc1Swenshuai.xi             #endif
3039*53ee8cc1Swenshuai.xi         }
3040*53ee8cc1Swenshuai.xi     }
3041*53ee8cc1Swenshuai.xi 
3042*53ee8cc1Swenshuai.xi     return status;
3043*53ee8cc1Swenshuai.xi }
3044*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_ReadFrequencyOffset(void)3045*53ee8cc1Swenshuai.xi static MS_S16 _HAL_INTERN_ATSC_ReadFrequencyOffset(void)
3046*53ee8cc1Swenshuai.xi {
3047*53ee8cc1Swenshuai.xi     DMD_ATSC_DEMOD_TYPE eMode;
3048*53ee8cc1Swenshuai.xi     MS_U8 u8PTK_LOOP_FF_R3=0, u8PTK_LOOP_FF_R2=0;
3049*53ee8cc1Swenshuai.xi     MS_U8 u8PTK_RATE_2=0;
3050*53ee8cc1Swenshuai.xi     MS_U8 u8AD_CRL_LOOP_VALUE0=0, u8AD_CRL_LOOP_VALUE1=0;
3051*53ee8cc1Swenshuai.xi     MS_U8 u8MIX_RATE_0=0, u8MIX_RATE_1=0, u8MIX_RATE_2=0;
3052*53ee8cc1Swenshuai.xi     MS_S16 PTK_LOOP_FF;
3053*53ee8cc1Swenshuai.xi     MS_S16 AD_CRL_LOOP_VALUE;
3054*53ee8cc1Swenshuai.xi     MS_S16 MIX_RATE;
3055*53ee8cc1Swenshuai.xi     MS_S16 FreqOffset = 0; //kHz
3056*53ee8cc1Swenshuai.xi 
3057*53ee8cc1Swenshuai.xi     eMode = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
3058*53ee8cc1Swenshuai.xi 
3059*53ee8cc1Swenshuai.xi     if (eMode == DMD_ATSC_DEMOD_ATSC_VSB) //VSB mode//
3060*53ee8cc1Swenshuai.xi     {
3061*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x297E, 0x01);
3062*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x29E6, 0xff);
3063*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x297C, &u8PTK_LOOP_FF_R2);
3064*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x297D, &u8PTK_LOOP_FF_R3);
3065*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x297E, 0x00);
3066*53ee8cc1Swenshuai.xi         _MBX_WriteReg(0x29E6, 0xff);
3067*53ee8cc1Swenshuai.xi 
3068*53ee8cc1Swenshuai.xi         PTK_LOOP_FF = (u8PTK_LOOP_FF_R3<<8) | u8PTK_LOOP_FF_R2;
3069*53ee8cc1Swenshuai.xi         FreqOffset  = (float)(-PTK_LOOP_FF*0.04768);
3070*53ee8cc1Swenshuai.xi 
3071*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2982, &u8PTK_RATE_2);
3072*53ee8cc1Swenshuai.xi 
3073*53ee8cc1Swenshuai.xi         if (u8PTK_RATE_2 == 0x07)
3074*53ee8cc1Swenshuai.xi             FreqOffset = FreqOffset-100;
3075*53ee8cc1Swenshuai.xi         else if (u8PTK_RATE_2 == 0x08)
3076*53ee8cc1Swenshuai.xi             FreqOffset = FreqOffset-500;
3077*53ee8cc1Swenshuai.xi     }
3078*53ee8cc1Swenshuai.xi     else //QAM MODE
3079*53ee8cc1Swenshuai.xi     {
3080*53ee8cc1Swenshuai.xi         #if (DMD_ATSC_CHIP_VERSION >= DMD_ATSC_CHIP_K3)
3081*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2A40, &u8AD_CRL_LOOP_VALUE0);
3082*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2A41, &u8AD_CRL_LOOP_VALUE1);
3083*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2758, &u8MIX_RATE_0);
3084*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2759, &u8MIX_RATE_1);
3085*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x275A, &u8MIX_RATE_2);
3086*53ee8cc1Swenshuai.xi 
3087*53ee8cc1Swenshuai.xi         AD_CRL_LOOP_VALUE = (u8AD_CRL_LOOP_VALUE1 << 8) | u8AD_CRL_LOOP_VALUE0;
3088*53ee8cc1Swenshuai.xi         MIX_RATE = ((u8MIX_RATE_2 << 16) | (u8MIX_RATE_1 << 8) | u8MIX_RATE_0) >> 4;
3089*53ee8cc1Swenshuai.xi 
3090*53ee8cc1Swenshuai.xi         if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//
3091*53ee8cc1Swenshuai.xi         {
3092*53ee8cc1Swenshuai.xi             FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.0000199); //5.360537E6/2^28*1000
3093*53ee8cc1Swenshuai.xi         }
3094*53ee8cc1Swenshuai.xi         else if (eMode == DMD_ATSC_DEMOD_ATSC_64QAM)//64QAM//
3095*53ee8cc1Swenshuai.xi         {
3096*53ee8cc1Swenshuai.xi             FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.0000188); //5.056941E6/2^21*1000
3097*53ee8cc1Swenshuai.xi         }
3098*53ee8cc1Swenshuai.xi 
3099*53ee8cc1Swenshuai.xi         FreqOffset = FreqOffset+(float)(MIX_RATE-0x3A07)/330.13018; //(0.001/25.41*2^27/16)???
3100*53ee8cc1Swenshuai.xi         #else
3101*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2C04, &u8AD_CRL_LOOP_VALUE0);
3102*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2C05, &u8AD_CRL_LOOP_VALUE1);
3103*53ee8cc1Swenshuai.xi 
3104*53ee8cc1Swenshuai.xi         AD_CRL_LOOP_VALUE = (u8AD_CRL_LOOP_VALUE1<<8) | u8AD_CRL_LOOP_VALUE0;
3105*53ee8cc1Swenshuai.xi 
3106*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2904, &u8MIX_RATE_0);
3107*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2905, &u8MIX_RATE_1);
3108*53ee8cc1Swenshuai.xi         _MBX_ReadReg(0x2906, &u8MIX_RATE_2);
3109*53ee8cc1Swenshuai.xi 
3110*53ee8cc1Swenshuai.xi         MIX_RATE = (u8MIX_RATE_2<<12)|(u8MIX_RATE_1<<4)|(u8MIX_RATE_0>>4);
3111*53ee8cc1Swenshuai.xi 
3112*53ee8cc1Swenshuai.xi         if (eMode == DMD_ATSC_DEMOD_ATSC_256QAM) //256QAM//
3113*53ee8cc1Swenshuai.xi         {
3114*53ee8cc1Swenshuai.xi             FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.0025561); //5.360537E6/2^21*1000
3115*53ee8cc1Swenshuai.xi         }
3116*53ee8cc1Swenshuai.xi         else if (eMode == DMD_ATSC_DEMOD_ATSC_64QAM)//64QAM//
3117*53ee8cc1Swenshuai.xi         {
3118*53ee8cc1Swenshuai.xi             FreqOffset = (float)(AD_CRL_LOOP_VALUE*0.00241134); //5.056941E6/2^21*1000
3119*53ee8cc1Swenshuai.xi         }
3120*53ee8cc1Swenshuai.xi 
3121*53ee8cc1Swenshuai.xi         FreqOffset = FreqOffset+(float)(MIX_RATE-0x3D70)/2.62144; //(0.001/25*2^20/16)
3122*53ee8cc1Swenshuai.xi         #endif
3123*53ee8cc1Swenshuai.xi     }
3124*53ee8cc1Swenshuai.xi 
3125*53ee8cc1Swenshuai.xi     return FreqOffset;
3126*53ee8cc1Swenshuai.xi }
3127*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)3128*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
3129*53ee8cc1Swenshuai.xi {
3130*53ee8cc1Swenshuai.xi     return _MBX_ReadReg(u16Addr, pu8Data);
3131*53ee8cc1Swenshuai.xi }
3132*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ATSC_SetReg(MS_U16 u16Addr,MS_U8 u8Data)3133*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ATSC_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
3134*53ee8cc1Swenshuai.xi {
3135*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(u16Addr, u8Data);
3136*53ee8cc1Swenshuai.xi }
3137*53ee8cc1Swenshuai.xi 
3138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
3139*53ee8cc1Swenshuai.xi //  Global Functions
3140*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HAL_INTERN_ATSC_IOCTL_CMD(DMD_ATSC_HAL_COMMAND eCmd,void * pArgs)3141*53ee8cc1Swenshuai.xi MS_BOOL HAL_INTERN_ATSC_IOCTL_CMD(DMD_ATSC_HAL_COMMAND eCmd, void *pArgs)
3142*53ee8cc1Swenshuai.xi {
3143*53ee8cc1Swenshuai.xi     MS_BOOL bResult = TRUE;
3144*53ee8cc1Swenshuai.xi 
3145*53ee8cc1Swenshuai.xi     #if (DMD_ATSC_CHIP_VERSION == DMD_ATSC_CHIP_K3)
3146*53ee8cc1Swenshuai.xi     _SEL_DMD();
3147*53ee8cc1Swenshuai.xi     #endif
3148*53ee8cc1Swenshuai.xi 
3149*53ee8cc1Swenshuai.xi     switch(eCmd)
3150*53ee8cc1Swenshuai.xi     {
3151*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Exit:
3152*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Exit();
3153*53ee8cc1Swenshuai.xi         break;
3154*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_InitClk:
3155*53ee8cc1Swenshuai.xi         _HAL_INTERN_ATSC_InitClk(false);
3156*53ee8cc1Swenshuai.xi         break;
3157*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Download:
3158*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Download();
3159*53ee8cc1Swenshuai.xi         break;
3160*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_FWVERSION:
3161*53ee8cc1Swenshuai.xi         _HAL_INTERN_ATSC_FWVERSION();
3162*53ee8cc1Swenshuai.xi         break;
3163*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_SoftReset:
3164*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_SoftReset();
3165*53ee8cc1Swenshuai.xi         break;
3166*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_SetVsbMode:
3167*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_SetVsbMode();
3168*53ee8cc1Swenshuai.xi         break;
3169*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Set64QamMode:
3170*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Set64QamMode();
3171*53ee8cc1Swenshuai.xi         break;
3172*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Set256QamMode:
3173*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Set256QamMode();
3174*53ee8cc1Swenshuai.xi         break;
3175*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_SetModeClean:
3176*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_SetModeClean();
3177*53ee8cc1Swenshuai.xi         break;
3178*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Set_QAM_SR:
3179*53ee8cc1Swenshuai.xi         break;
3180*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Active:
3181*53ee8cc1Swenshuai.xi         break;
3182*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Check8VSB64_256QAM:
3183*53ee8cc1Swenshuai.xi         *((DMD_ATSC_DEMOD_TYPE *)pArgs) = _HAL_INTERN_ATSC_Check8VSB64_256QAM();
3184*53ee8cc1Swenshuai.xi         break;
3185*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_AGCLock:
3186*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Vsb_QAM_AGCLock();
3187*53ee8cc1Swenshuai.xi         break;
3188*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Vsb_PreLock:
3189*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Vsb_PreLock();
3190*53ee8cc1Swenshuai.xi         break;
3191*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Vsb_FSync_Lock:
3192*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Vsb_FSync_Lock();
3193*53ee8cc1Swenshuai.xi         break;
3194*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Vsb_CE_Lock:
3195*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Vsb_CE_Lock();
3196*53ee8cc1Swenshuai.xi         break;
3197*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_Vsb_FEC_Lock:
3198*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_Vsb_FEC_Lock();
3199*53ee8cc1Swenshuai.xi         break;
3200*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_QAM_PreLock:
3201*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_QAM_PreLock();
3202*53ee8cc1Swenshuai.xi         break;
3203*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_QAM_Main_Lock:
3204*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_QAM_Main_Lock();
3205*53ee8cc1Swenshuai.xi         break;
3206*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_ReadIFAGC:
3207*53ee8cc1Swenshuai.xi         *((MS_U16 *)pArgs) = _HAL_INTERN_ATSC_ReadIFAGC();
3208*53ee8cc1Swenshuai.xi         break;
3209*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_CheckSignalCondition:
3210*53ee8cc1Swenshuai.xi         _HAL_INTERN_ATSC_CheckSignalCondition((DMD_ATSC_SIGNAL_CONDITION *)pArgs);
3211*53ee8cc1Swenshuai.xi         break;
3212*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_ReadSNRPercentage:
3213*53ee8cc1Swenshuai.xi         *((MS_U8 *)pArgs) = _HAL_INTERN_ATSC_ReadSNRPercentage();
3214*53ee8cc1Swenshuai.xi         break;
3215*53ee8cc1Swenshuai.xi     case CMD_ATSC_HAL_CMD_GET_QAM_SNR:
3216*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_GET_QAM_SNR((float *)pArgs);
3217*53ee8cc1Swenshuai.xi         break;
3218*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_ReadPKTERR:
3219*53ee8cc1Swenshuai.xi         *((MS_U16 *)pArgs) = _HAL_INTERN_ATSC_ReadPKTERR();
3220*53ee8cc1Swenshuai.xi         break;
3221*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GetPreViterbiBer:
3222*53ee8cc1Swenshuai.xi         break;
3223*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GetPostViterbiBer:
3224*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_ReadBER((float *)pArgs);
3225*53ee8cc1Swenshuai.xi         break;
3226*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_ReadFrequencyOffset:
3227*53ee8cc1Swenshuai.xi         *((MS_S16 *)pArgs) = _HAL_INTERN_ATSC_ReadFrequencyOffset();
3228*53ee8cc1Swenshuai.xi         break;
3229*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_TS_INTERFACE_CONFIG:
3230*53ee8cc1Swenshuai.xi         break;
3231*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_IIC_Bypass_Mode:
3232*53ee8cc1Swenshuai.xi         break;
3233*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_SSPI_TO_GPIO:
3234*53ee8cc1Swenshuai.xi         break;
3235*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GPIO_GET_LEVEL:
3236*53ee8cc1Swenshuai.xi         break;
3237*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GPIO_SET_LEVEL:
3238*53ee8cc1Swenshuai.xi         break;
3239*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GPIO_OUT_ENABLE:
3240*53ee8cc1Swenshuai.xi         break;
3241*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_GET_REG:
3242*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_GetReg((*((DMD_ATSC_REG_DATA *)pArgs)).u16Addr, &((*((DMD_ATSC_REG_DATA *)pArgs)).u8Data));
3243*53ee8cc1Swenshuai.xi         break;
3244*53ee8cc1Swenshuai.xi     case DMD_ATSC_HAL_CMD_SET_REG:
3245*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ATSC_SetReg((*((DMD_ATSC_REG_DATA *)pArgs)).u16Addr, (*((DMD_ATSC_REG_DATA *)pArgs)).u8Data);
3246*53ee8cc1Swenshuai.xi         break;
3247*53ee8cc1Swenshuai.xi     default:
3248*53ee8cc1Swenshuai.xi         break;
3249*53ee8cc1Swenshuai.xi     }
3250*53ee8cc1Swenshuai.xi 
3251*53ee8cc1Swenshuai.xi     return bResult;
3252*53ee8cc1Swenshuai.xi }
3253*53ee8cc1Swenshuai.xi 
MDrv_DMD_ATSC_Initial_Hal_Interface(void)3254*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_ATSC_Initial_Hal_Interface(void)
3255*53ee8cc1Swenshuai.xi {
3256*53ee8cc1Swenshuai.xi     return TRUE;
3257*53ee8cc1Swenshuai.xi }
3258