xref: /utopia/UTPA2-700.0.x/modules/xc/hal/k6/xc/mhal_adc.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi #define MHAL_ADC_C
95*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
96*53ee8cc1Swenshuai.xi //  Include Files
97*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
98*53ee8cc1Swenshuai.xi // Common Definition
99*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
100*53ee8cc1Swenshuai.xi #include <linux/delay.h>
101*53ee8cc1Swenshuai.xi #endif
102*53ee8cc1Swenshuai.xi #include "MsCommon.h"
103*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
104*53ee8cc1Swenshuai.xi #include "MsOS.h"
105*53ee8cc1Swenshuai.xi #include "mhal_xc_chip_config.h"
106*53ee8cc1Swenshuai.xi #if 0
107*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
108*53ee8cc1Swenshuai.xi #include "xc_Analog_Reg.h"
109*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi #include "apiXC.h"
112*53ee8cc1Swenshuai.xi #include "apiXC_Adc.h"
113*53ee8cc1Swenshuai.xi #include "apiXC_Auto.h"
114*53ee8cc1Swenshuai.xi #include "drvXC_ADC_Internal.h"
115*53ee8cc1Swenshuai.xi #endif
MDrv_XC_ADC_Set_Freerun(void * pInstance,MS_BOOL bEnable)116*53ee8cc1Swenshuai.xi void MDrv_XC_ADC_Set_Freerun(void *pInstance, MS_BOOL bEnable)
117*53ee8cc1Swenshuai.xi {
118*53ee8cc1Swenshuai.xi     //do nothing
119*53ee8cc1Swenshuai.xi     return;
120*53ee8cc1Swenshuai.xi }
121*53ee8cc1Swenshuai.xi 
Hal_ADC_SourceSwitch(void * pInstance,MS_BOOL bSwitch)122*53ee8cc1Swenshuai.xi void Hal_ADC_SourceSwitch(void *pInstance, MS_BOOL bSwitch)
123*53ee8cc1Swenshuai.xi {
124*53ee8cc1Swenshuai.xi }
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi #if 0
127*53ee8cc1Swenshuai.xi 
128*53ee8cc1Swenshuai.xi // Internal Definition
129*53ee8cc1Swenshuai.xi #include "drvXC_IOPort.h"
130*53ee8cc1Swenshuai.xi #include "xc_Analog_Reg.h"
131*53ee8cc1Swenshuai.xi #include "xc_hwreg_utility2.h"
132*53ee8cc1Swenshuai.xi #include "hwreg_adc_atop.h"
133*53ee8cc1Swenshuai.xi #include "hwreg_adc_dtop.h"
134*53ee8cc1Swenshuai.xi #include "apiXC.h"
135*53ee8cc1Swenshuai.xi #include "apiXC_Adc.h"
136*53ee8cc1Swenshuai.xi #include "drvXC_ADC_Internal.h"
137*53ee8cc1Swenshuai.xi #include "mhal_adc.h"
138*53ee8cc1Swenshuai.xi #include "mhal_ip.h"
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
141*53ee8cc1Swenshuai.xi //  Driver Compiler Options
142*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi //  Local Defines
147*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
151*53ee8cc1Swenshuai.xi //  Local Structures
152*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
153*53ee8cc1Swenshuai.xi typedef struct
154*53ee8cc1Swenshuai.xi {
155*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_00;
156*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_01;
157*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_03;
158*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_0C;
159*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_2C;
160*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkAtop_1F;
161*53ee8cc1Swenshuai.xi     MS_U8  u8H_BkAtop_2D;
162*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkDtop_06;
163*53ee8cc1Swenshuai.xi     MS_U8  u8H_BkChipTop_1F;
164*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkChipTop_55;
165*53ee8cc1Swenshuai.xi     MS_U8  u8L_BkIpMux_1;
166*53ee8cc1Swenshuai.xi     MS_U8  u8L_SC_BK1_21;
167*53ee8cc1Swenshuai.xi     MS_U8  u8L_SC_BK10_19;
168*53ee8cc1Swenshuai.xi     MS_U16 u16L_BkAtop_05;
169*53ee8cc1Swenshuai.xi     MS_U16 u16L_BkAtop_5E;
170*53ee8cc1Swenshuai.xi     MS_U16 u16BkAtop_1C;
171*53ee8cc1Swenshuai.xi     MS_U16 u16BkAtop_05;
172*53ee8cc1Swenshuai.xi     MS_U16 u16BkAtop_06;
173*53ee8cc1Swenshuai.xi     MS_U16 u16BkDtop_01;
174*53ee8cc1Swenshuai.xi     MS_U16 u16BkDtop_02;
175*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_02;
176*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_03;
177*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_04;
178*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_05;
179*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_06;
180*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_07;
181*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK1_0E;
182*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_01;
183*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_03;
184*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_04;
185*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_0E;
186*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_0F;
187*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_16;
188*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_17;
189*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_10;
190*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_12;
191*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_14;
192*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_07;
193*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_08;
194*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_0A;
195*53ee8cc1Swenshuai.xi     MS_U32 u32SC_BK12_0C;
196*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK02_04;
197*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK02_05;
198*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK02_08;
199*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK02_09;
200*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK23_07;
201*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK23_08;
202*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK23_09;
203*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK23_0A;
204*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_1A;
205*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_1B;
206*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK06_01;
207*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK06_21;
208*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_44;
209*53ee8cc1Swenshuai.xi     MS_U16 u16SC_BK12_47;
210*53ee8cc1Swenshuai.xi } XC_Adc_BackupSetting;
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi 
213*53ee8cc1Swenshuai.xi typedef struct
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_04L;
216*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_04H;
217*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_05L;
218*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_06L;
219*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_06H;
220*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_60L;
221*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_60H;
222*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_69L;
223*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_69H;
224*53ee8cc1Swenshuai.xi     MS_U8 u8ADC_Power_40L;
225*53ee8cc1Swenshuai.xi }ADC_ATOP_POWERON_TBL_t;
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
228*53ee8cc1Swenshuai.xi //  Global Variables
229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi MS_U8 MST_ADCSetModeRGB_SOG_TBL[][REG_ADDR_SIZE+REG_MASK_SIZE+ADC_TABLE_SetMode_NUMS*REG_DATA_SIZE]=
232*53ee8cc1Swenshuai.xi {                 // Reg           Mask Ignore Value
233*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_34_L), 0x0F, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
234*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION2*/,
235*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION3*/,
236*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION4*/,
237*53ee8cc1Swenshuai.xi                                          0x00, 0x05/*ADC_TABLE_FREQ_SECTION5*/,
238*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION6*/,
239*53ee8cc1Swenshuai.xi                                          0x00, 0x07/*ADC_TABLE_FREQ_SECTION7*/,
240*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION8*/,
241*53ee8cc1Swenshuai.xi                                          0x00, 0x09/*ADC_TABLE_FREQ_SECTION9*/,
242*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION10*/,
243*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION11*/,
244*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION12*/,
245*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION13*/,
246*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION14*/,
247*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION15*/,
248*53ee8cc1Swenshuai.xi                                          0x00, 0x0D/*ADC_TABLE_FREQ_SECTION16*/,
249*53ee8cc1Swenshuai.xi                                          0x00, 0x0E/*ADC_TABLE_FREQ_SECTION17*/,},
250*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_34_L), 0xF0, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
251*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION2*/,
252*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION3*/,
253*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION4*/,
254*53ee8cc1Swenshuai.xi                                          0x00, 0x50/*ADC_TABLE_FREQ_SECTION5*/,
255*53ee8cc1Swenshuai.xi                                          0x00, 0x60/*ADC_TABLE_FREQ_SECTION6*/,
256*53ee8cc1Swenshuai.xi                                          0x00, 0x70/*ADC_TABLE_FREQ_SECTION7*/,
257*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION8*/,
258*53ee8cc1Swenshuai.xi                                          0x00, 0x90/*ADC_TABLE_FREQ_SECTION9*/,
259*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION10*/,
260*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION11*/,
261*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION12*/,
262*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION13*/,
263*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION14*/,
264*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION15*/,
265*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION16*/,
266*53ee8cc1Swenshuai.xi                                          0x00, 0xE0/*ADC_TABLE_FREQ_SECTION17*/,},
267*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_34_H), 0x0F, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
268*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION2*/,
269*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION3*/,
270*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION4*/,
271*53ee8cc1Swenshuai.xi                                          0x00, 0x05/*ADC_TABLE_FREQ_SECTION5*/,
272*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION6*/,
273*53ee8cc1Swenshuai.xi                                          0x00, 0x07/*ADC_TABLE_FREQ_SECTION7*/,
274*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION8*/,
275*53ee8cc1Swenshuai.xi                                          0x00, 0x09/*ADC_TABLE_FREQ_SECTION9*/,
276*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION10*/,
277*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION11*/,
278*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION12*/,
279*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION13*/,
280*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION14*/,
281*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION15*/,
282*53ee8cc1Swenshuai.xi                                          0x00, 0x0D/*ADC_TABLE_FREQ_SECTION16*/,
283*53ee8cc1Swenshuai.xi                                          0x00, 0x0E/*ADC_TABLE_FREQ_SECTION17*/,},
284*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_34_H), 0xF0, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
285*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION2*/,
286*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION3*/,
287*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION4*/,
288*53ee8cc1Swenshuai.xi                                          0x00, 0x50/*ADC_TABLE_FREQ_SECTION5*/,
289*53ee8cc1Swenshuai.xi                                          0x00, 0x60/*ADC_TABLE_FREQ_SECTION6*/,
290*53ee8cc1Swenshuai.xi                                          0x00, 0x70/*ADC_TABLE_FREQ_SECTION7*/,
291*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION8*/,
292*53ee8cc1Swenshuai.xi                                          0x00, 0x90/*ADC_TABLE_FREQ_SECTION9*/,
293*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION10*/,
294*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION11*/,
295*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION12*/,
296*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION13*/,
297*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION14*/,
298*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION15*/,
299*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION16*/,
300*53ee8cc1Swenshuai.xi                                          0x00, 0xE0/*ADC_TABLE_FREQ_SECTION17*/,},
301*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_35_L), 0x0F, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
302*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION2*/,
303*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION3*/,
304*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION4*/,
305*53ee8cc1Swenshuai.xi                                          0x00, 0x05/*ADC_TABLE_FREQ_SECTION5*/,
306*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION6*/,
307*53ee8cc1Swenshuai.xi                                          0x00, 0x07/*ADC_TABLE_FREQ_SECTION7*/,
308*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION8*/,
309*53ee8cc1Swenshuai.xi                                          0x00, 0x09/*ADC_TABLE_FREQ_SECTION9*/,
310*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION10*/,
311*53ee8cc1Swenshuai.xi                                          0x00, 0x0A/*ADC_TABLE_FREQ_SECTION11*/,
312*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION12*/,
313*53ee8cc1Swenshuai.xi                                          0x00, 0x0B/*ADC_TABLE_FREQ_SECTION13*/,
314*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION14*/,
315*53ee8cc1Swenshuai.xi                                          0x00, 0x0C/*ADC_TABLE_FREQ_SECTION15*/,
316*53ee8cc1Swenshuai.xi                                          0x00, 0x0D/*ADC_TABLE_FREQ_SECTION16*/,
317*53ee8cc1Swenshuai.xi                                          0x00, 0x0E/*ADC_TABLE_FREQ_SECTION17*/,},
318*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_35_L), 0xF0, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
319*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION2*/,
320*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION3*/,
321*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION4*/,
322*53ee8cc1Swenshuai.xi                                          0x00, 0x50/*ADC_TABLE_FREQ_SECTION5*/,
323*53ee8cc1Swenshuai.xi                                          0x00, 0x60/*ADC_TABLE_FREQ_SECTION6*/,
324*53ee8cc1Swenshuai.xi                                          0x00, 0x70/*ADC_TABLE_FREQ_SECTION7*/,
325*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION8*/,
326*53ee8cc1Swenshuai.xi                                          0x00, 0x90/*ADC_TABLE_FREQ_SECTION9*/,
327*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION10*/,
328*53ee8cc1Swenshuai.xi                                          0x00, 0xA0/*ADC_TABLE_FREQ_SECTION11*/,
329*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION12*/,
330*53ee8cc1Swenshuai.xi                                          0x00, 0xB0/*ADC_TABLE_FREQ_SECTION13*/,
331*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION14*/,
332*53ee8cc1Swenshuai.xi                                          0x00, 0xC0/*ADC_TABLE_FREQ_SECTION15*/,
333*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION16*/,
334*53ee8cc1Swenshuai.xi                                          0x00, 0xE0/*ADC_TABLE_FREQ_SECTION17*/,},
335*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_DTOP_17_H), 0x0F, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
336*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION2*/,
337*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION3*/,
338*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION4*/,
339*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION5*/,
340*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
341*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
342*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION8*/,
343*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION9*/,
344*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION10*/,
345*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION11*/,
346*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
347*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
348*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
349*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION15*/,
350*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION16*/,
351*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION17*/,},
352*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_DTOP_17_L), 0xFF, 0x00, 0xF0/*ADC_TABLE_FREQ_SECTION1*/,
353*53ee8cc1Swenshuai.xi                                          0x00, 0xF0/*ADC_TABLE_FREQ_SECTION2*/,
354*53ee8cc1Swenshuai.xi                                          0x00, 0xF0/*ADC_TABLE_FREQ_SECTION3*/,
355*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION4*/,
356*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION5*/,
357*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION6*/,
358*53ee8cc1Swenshuai.xi                                          0x00, 0xD0/*ADC_TABLE_FREQ_SECTION7*/,
359*53ee8cc1Swenshuai.xi                                          0x00, 0x95/*ADC_TABLE_FREQ_SECTION8*/,
360*53ee8cc1Swenshuai.xi                                          0x00, 0x95/*ADC_TABLE_FREQ_SECTION9*/,
361*53ee8cc1Swenshuai.xi                                          0x00, 0x88/*ADC_TABLE_FREQ_SECTION10*/,
362*53ee8cc1Swenshuai.xi                                          0x00, 0x88/*ADC_TABLE_FREQ_SECTION11*/,
363*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION12*/,
364*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION13*/,
365*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION14*/,
366*53ee8cc1Swenshuai.xi                                          0x00, 0x60/*ADC_TABLE_FREQ_SECTION15*/,
367*53ee8cc1Swenshuai.xi                                          0x00, 0x30/*ADC_TABLE_FREQ_SECTION16*/,
368*53ee8cc1Swenshuai.xi                                          0x00, 0x30/*ADC_TABLE_FREQ_SECTION17*/,},
369*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_DTOP_18_L), 0xFF, 0x00, 0x80/*ADC_TABLE_FREQ_SECTION1*/,
370*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION2*/,
371*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION3*/,
372*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION4*/,
373*53ee8cc1Swenshuai.xi                                          0x00, 0x80/*ADC_TABLE_FREQ_SECTION5*/,
374*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION6*/,
375*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION7*/,
376*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION8*/,
377*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION9*/,
378*53ee8cc1Swenshuai.xi                                          0x00, 0x30/*ADC_TABLE_FREQ_SECTION10*/,
379*53ee8cc1Swenshuai.xi                                          0x00, 0x30/*ADC_TABLE_FREQ_SECTION11*/,
380*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION12*/,
381*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION13*/,
382*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION14*/,
383*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION15*/,
384*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION16*/,
385*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION17*/,},
386*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_DTOP_19_H), 0x60, 0x00, 0x40/*ADC_TABLE_FREQ_SECTION1*/,
387*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION2*/,
388*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION3*/,
389*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION4*/,
390*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION5*/,
391*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION6*/,
392*53ee8cc1Swenshuai.xi                                          0x00, 0x40/*ADC_TABLE_FREQ_SECTION7*/,
393*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION8*/,
394*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION9*/,
395*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION10*/,
396*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION11*/,
397*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
398*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
399*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
400*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION15*/,
401*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION16*/,
402*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION17*/,},
403*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_0D_L), 0x10, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
404*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION2*/,
405*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION3*/,
406*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION4*/,
407*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION5*/,
408*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
409*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
410*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION8*/,
411*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION9*/,
412*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION10*/,
413*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION11*/,
414*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
415*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
416*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
417*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION15*/,
418*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION16*/,
419*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION17*/,},
420*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_0C_L), 0x07, 0x00, 0x01/*ADC_TABLE_FREQ_SECTION1*/,
421*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION2*/,
422*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION3*/,
423*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION4*/,
424*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION5*/,
425*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
426*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
427*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION8*/,
428*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION9*/,
429*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION10*/,
430*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION11*/,
431*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
432*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
433*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
434*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION15*/,
435*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION16*/,
436*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION17*/,},
437*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_09_H), 0x18, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
438*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION2*/,
439*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION3*/,
440*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION4*/,
441*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION5*/,
442*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
443*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
444*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION8*/,
445*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION9*/,
446*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION10*/,
447*53ee8cc1Swenshuai.xi                                          0x00, 0x08/*ADC_TABLE_FREQ_SECTION11*/,
448*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION12*/,
449*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION13*/,
450*53ee8cc1Swenshuai.xi                                          0x00, 0x10/*ADC_TABLE_FREQ_SECTION14*/,
451*53ee8cc1Swenshuai.xi                                          0x00, 0x18/*ADC_TABLE_FREQ_SECTION15*/,
452*53ee8cc1Swenshuai.xi                                          0x00, 0x18/*ADC_TABLE_FREQ_SECTION16*/,
453*53ee8cc1Swenshuai.xi                                          0x00, 0x18/*ADC_TABLE_FREQ_SECTION17*/,},
454*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_0A_L), 0x04, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
455*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION2*/,
456*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION3*/,
457*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION4*/,
458*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION5*/,
459*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
460*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
461*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION8*/,
462*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION9*/,
463*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION10*/,
464*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION11*/,
465*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
466*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
467*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
468*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION15*/,
469*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION16*/,
470*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION17*/,},
471*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_61_H), 0x60, 0x00, 0x00/*ADC_TABLE_FREQ_SECTION1*/,
472*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION2*/,
473*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION3*/,
474*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION4*/,
475*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION5*/,
476*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION6*/,
477*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION7*/,
478*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION8*/,
479*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION9*/,
480*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION10*/,
481*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION11*/,
482*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION12*/,
483*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION13*/,
484*53ee8cc1Swenshuai.xi                                          0x00, 0x00/*ADC_TABLE_FREQ_SECTION14*/,
485*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION15*/,
486*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION16*/,
487*53ee8cc1Swenshuai.xi                                          0x00, 0x20/*ADC_TABLE_FREQ_SECTION17*/,},
488*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_ADC_ATOP_09_H), 0x07, 0x00, 0x02/*ADC_TABLE_FREQ_SECTION1*/,
489*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION2*/,
490*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION3*/,
491*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION4*/,
492*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION5*/,
493*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION6*/,
494*53ee8cc1Swenshuai.xi                                          0x00, 0x01/*ADC_TABLE_FREQ_SECTION7*/,
495*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION8*/,
496*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION9*/,
497*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION10*/,
498*53ee8cc1Swenshuai.xi                                          0x00, 0x02/*ADC_TABLE_FREQ_SECTION11*/,
499*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION12*/,
500*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION13*/,
501*53ee8cc1Swenshuai.xi                                          0x00, 0x04/*ADC_TABLE_FREQ_SECTION14*/,
502*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION15*/,
503*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION16*/,
504*53ee8cc1Swenshuai.xi                                          0x00, 0x06/*ADC_TABLE_FREQ_SECTION17*/,},
505*53ee8cc1Swenshuai.xi  { DRV_ADC_REG(REG_TABLE_END), 0x00, 0x00, 0x00 }
506*53ee8cc1Swenshuai.xi };
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi 
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi 
511*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
512*53ee8cc1Swenshuai.xi //  Local Variables
513*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
514*53ee8cc1Swenshuai.xi static XC_Adc_BackupSetting _stAutoAdcSetting;
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
517*53ee8cc1Swenshuai.xi //  Debug Functions
518*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
522*53ee8cc1Swenshuai.xi //  Local Functions
523*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
524*53ee8cc1Swenshuai.xi 
525*53ee8cc1Swenshuai.xi 
526*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
527*53ee8cc1Swenshuai.xi //  Global Functions
528*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi /******************************************************************************/
531*53ee8cc1Swenshuai.xi ///ADC soft reset
532*53ee8cc1Swenshuai.xi /******************************************************************************/
533*53ee8cc1Swenshuai.xi void Hal_ADC_reset(MS_U16 u16Reset)
534*53ee8cc1Swenshuai.xi {
535*53ee8cc1Swenshuai.xi 
536*53ee8cc1Swenshuai.xi     // Remove ADC reset after T3
537*53ee8cc1Swenshuai.xi     /*
538*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_ATOP_07_L, u16Reset);
539*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_ATOP_07_L, 0x0000);
540*53ee8cc1Swenshuai.xi     */
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi 
543*53ee8cc1Swenshuai.xi /******************************************************************************/
544*53ee8cc1Swenshuai.xi ///This function will set ADC registers for different port
545*53ee8cc1Swenshuai.xi ///@param enInputSourceType \b IN: source type
546*53ee8cc1Swenshuai.xi ///@param u8InputClock \b IN: pixel clock
547*53ee8cc1Swenshuai.xi /******************************************************************************/
548*53ee8cc1Swenshuai.xi //=========================================================//
549*53ee8cc1Swenshuai.xi // Function : Hal_ADC_ext_clk_en
550*53ee8cc1Swenshuai.xi // Description:
551*53ee8cc1Swenshuai.xi //=========================================================//
552*53ee8cc1Swenshuai.xi void Hal_ADC_ext_clk_en(MS_BOOL benable)
553*53ee8cc1Swenshuai.xi {
554*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_58_L, (benable ? BIT(7):0), BIT(7));
555*53ee8cc1Swenshuai.xi }
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi //=========================================================//
558*53ee8cc1Swenshuai.xi // Function : Hal_ADC_hdmi_vco_ctrl
559*53ee8cc1Swenshuai.xi // Description:
560*53ee8cc1Swenshuai.xi //=========================================================//
561*53ee8cc1Swenshuai.xi void Hal_ADC_hdmi_vco_ctrl(MS_U16 u16InputClock)
562*53ee8cc1Swenshuai.xi {
563*53ee8cc1Swenshuai.xi     if (u16InputClock > 108)
564*53ee8cc1Swenshuai.xi     {
565*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_4C_L, (0x02<<8), HBMASK);
566*53ee8cc1Swenshuai.xi     }
567*53ee8cc1Swenshuai.xi     else
568*53ee8cc1Swenshuai.xi     {
569*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_4C_L, (0x0E<<8), HBMASK);
570*53ee8cc1Swenshuai.xi     }
571*53ee8cc1Swenshuai.xi 
572*53ee8cc1Swenshuai.xi }
573*53ee8cc1Swenshuai.xi //=========================================================//
574*53ee8cc1Swenshuai.xi // Function : Hal_ADC_vco_ctrl
575*53ee8cc1Swenshuai.xi // Description:
576*53ee8cc1Swenshuai.xi //=========================================================//
577*53ee8cc1Swenshuai.xi void Hal_ADC_vco_ctrl(MS_U16 u16InputClock)
578*53ee8cc1Swenshuai.xi {
579*53ee8cc1Swenshuai.xi     MS_U8 u8Value;
580*53ee8cc1Swenshuai.xi 
581*53ee8cc1Swenshuai.xi     // VCO range/Settling time
582*53ee8cc1Swenshuai.xi     if (u16InputClock > 150)
583*53ee8cc1Swenshuai.xi     {
584*53ee8cc1Swenshuai.xi         // high
585*53ee8cc1Swenshuai.xi         u8Value = 0x02;
586*53ee8cc1Swenshuai.xi     }
587*53ee8cc1Swenshuai.xi     else if (u16InputClock > 20)
588*53ee8cc1Swenshuai.xi     {
589*53ee8cc1Swenshuai.xi         // middle
590*53ee8cc1Swenshuai.xi         u8Value = 0x01;
591*53ee8cc1Swenshuai.xi     }
592*53ee8cc1Swenshuai.xi     else
593*53ee8cc1Swenshuai.xi     {
594*53ee8cc1Swenshuai.xi         // low
595*53ee8cc1Swenshuai.xi         u8Value = 0x00;
596*53ee8cc1Swenshuai.xi      }
597*53ee8cc1Swenshuai.xi     // set multiplier of ADC PLL clock
598*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_0C_L, u8Value, (BIT(2)|BIT(1)|BIT(0)));
599*53ee8cc1Swenshuai.xi }
600*53ee8cc1Swenshuai.xi 
601*53ee8cc1Swenshuai.xi void Hal_ADC_set_vco_ctrl(MS_BOOL bIsDVIPort, MS_U16 u16InputClock)
602*53ee8cc1Swenshuai.xi {
603*53ee8cc1Swenshuai.xi     // enable external clock
604*53ee8cc1Swenshuai.xi     Hal_ADC_ext_clk_en(ENABLE);
605*53ee8cc1Swenshuai.xi 
606*53ee8cc1Swenshuai.xi     if ( bIsDVIPort )
607*53ee8cc1Swenshuai.xi     {
608*53ee8cc1Swenshuai.xi         Hal_ADC_hdmi_vco_ctrl(u16InputClock);
609*53ee8cc1Swenshuai.xi     }
610*53ee8cc1Swenshuai.xi     else
611*53ee8cc1Swenshuai.xi     {
612*53ee8cc1Swenshuai.xi         Hal_ADC_vco_ctrl(u16InputClock);
613*53ee8cc1Swenshuai.xi     }
614*53ee8cc1Swenshuai.xi 
615*53ee8cc1Swenshuai.xi     // disable external clock
616*53ee8cc1Swenshuai.xi     Hal_ADC_ext_clk_en(DISABLE);
617*53ee8cc1Swenshuai.xi }
618*53ee8cc1Swenshuai.xi 
619*53ee8cc1Swenshuai.xi /******************************************************************************/
620*53ee8cc1Swenshuai.xi ///This function sets PLL clock divider ratio
621*53ee8cc1Swenshuai.xi ///@param u16Value \b IN: PLL clock divider ratio
622*53ee8cc1Swenshuai.xi /******************************************************************************/
623*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_clk_setting ( MS_U16 u16Value )
624*53ee8cc1Swenshuai.xi {
625*53ee8cc1Swenshuai.xi     // limit set ADC PLL
626*53ee8cc1Swenshuai.xi     if((u16Value > 3) && (u16Value < ADC_MAX_CLK))
627*53ee8cc1Swenshuai.xi     {
628*53ee8cc1Swenshuai.xi         u16Value -= 3; // actual - 3
629*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_00_L, u16Value);
630*53ee8cc1Swenshuai.xi     }
631*53ee8cc1Swenshuai.xi }
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi /******************************************************************************/
634*53ee8cc1Swenshuai.xi ///This function return phase steps of current chip
635*53ee8cc1Swenshuai.xi ///@param u8Value \b IN: phase steps
636*53ee8cc1Swenshuai.xi /******************************************************************************/
637*53ee8cc1Swenshuai.xi MS_U16 Hal_ADC_get_phase_range(void)
638*53ee8cc1Swenshuai.xi {
639*53ee8cc1Swenshuai.xi 	return 128;
640*53ee8cc1Swenshuai.xi }
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi MS_U8 Hal_ADC_get_phase(void)
643*53ee8cc1Swenshuai.xi {
644*53ee8cc1Swenshuai.xi    return ( (MS_U8) R2BYTEMSK(REG_ADC_DTOP_03_L,LBMASK) ) ;
645*53ee8cc1Swenshuai.xi }
646*53ee8cc1Swenshuai.xi 
647*53ee8cc1Swenshuai.xi MS_U16 Hal_ADC_get_phaseEx(void)
648*53ee8cc1Swenshuai.xi {
649*53ee8cc1Swenshuai.xi    return ( (MS_U16) R2BYTEMSK(REG_ADC_DTOP_03_L,LBMASK) ) ;
650*53ee8cc1Swenshuai.xi }
651*53ee8cc1Swenshuai.xi 
652*53ee8cc1Swenshuai.xi /******************************************************************************/
653*53ee8cc1Swenshuai.xi ///This function sets PLL phase
654*53ee8cc1Swenshuai.xi ///@param u8Value \b IN: PLL phase divider ratio
655*53ee8cc1Swenshuai.xi /******************************************************************************/
656*53ee8cc1Swenshuai.xi void Hal_ADC_set_phase( MS_U8 u8Value )
657*53ee8cc1Swenshuai.xi {
658*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_03_L, u8Value, LBMASK);
659*53ee8cc1Swenshuai.xi }
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi void Hal_ADC_set_phaseEx( MS_U16 u16Value )
662*53ee8cc1Swenshuai.xi {
663*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_03_L, u16Value, LBMASK);
664*53ee8cc1Swenshuai.xi }
665*53ee8cc1Swenshuai.xi 
666*53ee8cc1Swenshuai.xi /******************************************************************************/
667*53ee8cc1Swenshuai.xi ///This function sets ADC offset
668*53ee8cc1Swenshuai.xi ///@param *pstADCSetting \b IN: pointer to ADC settings
669*53ee8cc1Swenshuai.xi /******************************************************************************/
670*53ee8cc1Swenshuai.xi void Hal_ADC_offset_setting ( XC_AdcGainOffsetSetting *pstADCSetting  )
671*53ee8cc1Swenshuai.xi {
672*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_08_L, (~(pstADCSetting->u16RedOffset))<<8, HBMASK);
673*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_09_L, (~(pstADCSetting->u16GreenOffset))<<8, HBMASK);
674*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0A_L, (~(pstADCSetting->u16BlueOffset))<<8, HBMASK);
675*53ee8cc1Swenshuai.xi }
676*53ee8cc1Swenshuai.xi 
677*53ee8cc1Swenshuai.xi /******************************************************************************/
678*53ee8cc1Swenshuai.xi ///This function sets ADC gain
679*53ee8cc1Swenshuai.xi ///@param *pstADCSetting \b IN: pointer to ADC settings
680*53ee8cc1Swenshuai.xi /******************************************************************************/
681*53ee8cc1Swenshuai.xi void Hal_ADC_gain_setting ( XC_AdcGainOffsetSetting *pstADCSetting  )
682*53ee8cc1Swenshuai.xi {
683*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_08_L, ~(pstADCSetting->u16RedGain), LBMASK);
684*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_09_L, ~(pstADCSetting->u16GreenGain), LBMASK);
685*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0A_L, ~(pstADCSetting->u16BlueGain), LBMASK);
686*53ee8cc1Swenshuai.xi }
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi /******************************************************************************/
689*53ee8cc1Swenshuai.xi ///This function enable/disable output double buffer
690*53ee8cc1Swenshuai.xi ///@param bEnable \b IN:
691*53ee8cc1Swenshuai.xi ///- Enable: Turn on ADC double buffer
692*53ee8cc1Swenshuai.xi ///- Disable: Turn off ADC double buffer
693*53ee8cc1Swenshuai.xi /******************************************************************************/
694*53ee8cc1Swenshuai.xi void Hal_ADC_doublebuffer_setting(MS_BOOL bEnable)
695*53ee8cc1Swenshuai.xi {
696*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_07_L, (bEnable ? BIT(0):0), BIT(0));
697*53ee8cc1Swenshuai.xi }
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi /******************************************************************************/
700*53ee8cc1Swenshuai.xi ///This function recalibrates ADC offset. This function should be called
701*53ee8cc1Swenshuai.xi ///after mode changed.
702*53ee8cc1Swenshuai.xi ///@param bFlag \b IN:
703*53ee8cc1Swenshuai.xi ///- 0: Turn on
704*53ee8cc1Swenshuai.xi ///- 1: Turn off
705*53ee8cc1Swenshuai.xi /******************************************************************************/
706*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_calibration_target_setting(MS_BOOL bIsYPbPrFlag)
707*53ee8cc1Swenshuai.xi {
708*53ee8cc1Swenshuai.xi     if(bIsYPbPrFlag)
709*53ee8cc1Swenshuai.xi     {
710*53ee8cc1Swenshuai.xi         // Use code 16 as offset CAL target
711*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_DTOP_10_L, BIT(15), BIT(15));
712*53ee8cc1Swenshuai.xi     }
713*53ee8cc1Swenshuai.xi     else
714*53ee8cc1Swenshuai.xi     {
715*53ee8cc1Swenshuai.xi         // Use code 0 as offset CAL target
716*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_DTOP_10_L, 0, BIT(15));
717*53ee8cc1Swenshuai.xi     }
718*53ee8cc1Swenshuai.xi }
719*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_sw_mode_setting(MS_BOOL bEnable, MS_BOOL bIsAutoSWMode)
720*53ee8cc1Swenshuai.xi {
721*53ee8cc1Swenshuai.xi     if(bEnable)
722*53ee8cc1Swenshuai.xi     {
723*53ee8cc1Swenshuai.xi         if (bIsAutoSWMode)      //normal procedure
724*53ee8cc1Swenshuai.xi         {
725*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_10_L, 0x00, 0xF3);
726*53ee8cc1Swenshuai.xi         }
727*53ee8cc1Swenshuai.xi         else
728*53ee8cc1Swenshuai.xi         {
729*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_10_L, 0x50, 0xF3);
730*53ee8cc1Swenshuai.xi         }
731*53ee8cc1Swenshuai.xi 
732*53ee8cc1Swenshuai.xi     }
733*53ee8cc1Swenshuai.xi     else            //used when doing YPbPr calibration with software mode
734*53ee8cc1Swenshuai.xi     {
735*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_DTOP_10_L, 0x00, 0xF3);
736*53ee8cc1Swenshuai.xi     }
737*53ee8cc1Swenshuai.xi }
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi void Hal_ADC_Set_Source_Calibration(ADC_INPUTSOURCE_TYPE enADC_SourceType)
740*53ee8cc1Swenshuai.xi {
741*53ee8cc1Swenshuai.xi     return;
742*53ee8cc1Swenshuai.xi }
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi /******************************************************************************/
745*53ee8cc1Swenshuai.xi ///This function sets clamp placement
746*53ee8cc1Swenshuai.xi ///@param u8Value \b IN:
747*53ee8cc1Swenshuai.xi /******************************************************************************/
748*53ee8cc1Swenshuai.xi void Hal_ADC_clamp_placement_setting(MS_U16 u16InputClockMHz)
749*53ee8cc1Swenshuai.xi {
750*53ee8cc1Swenshuai.xi     if(u16InputClockMHz>= 40)
751*53ee8cc1Swenshuai.xi     {
752*53ee8cc1Swenshuai.xi         /* Vclamp_dly */
753*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_DTOP_0B_L, 0x38, LBMASK);
754*53ee8cc1Swenshuai.xi     }
755*53ee8cc1Swenshuai.xi     else
756*53ee8cc1Swenshuai.xi     {
757*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_DTOP_0B_L, 0x08, LBMASK);
758*53ee8cc1Swenshuai.xi     }
759*53ee8cc1Swenshuai.xi }
760*53ee8cc1Swenshuai.xi 
761*53ee8cc1Swenshuai.xi 
762*53ee8cc1Swenshuai.xi void Hal_XC_ADC_Set_VClamp_level(ADC_VClamp_Level_Type type)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi     MS_U16 VClampSetting=E_ADC_VClamp_0_85V;
765*53ee8cc1Swenshuai.xi     switch(type)
766*53ee8cc1Swenshuai.xi     {
767*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_0_85V:
768*53ee8cc1Swenshuai.xi             VClampSetting = 0x2;
769*53ee8cc1Swenshuai.xi             break;
770*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_0_9V:
771*53ee8cc1Swenshuai.xi             VClampSetting = 0x3;
772*53ee8cc1Swenshuai.xi             break;
773*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_0_95V:
774*53ee8cc1Swenshuai.xi             VClampSetting = 0x4;
775*53ee8cc1Swenshuai.xi             break;
776*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_1_0V:
777*53ee8cc1Swenshuai.xi             VClampSetting = 0x5;
778*53ee8cc1Swenshuai.xi             break;
779*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_1_05V:
780*53ee8cc1Swenshuai.xi             VClampSetting = 0x6;
781*53ee8cc1Swenshuai.xi             break;
782*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_1_2V:
783*53ee8cc1Swenshuai.xi             VClampSetting = 0x1;
784*53ee8cc1Swenshuai.xi             break;
785*53ee8cc1Swenshuai.xi         case E_ADC_VClamp_1_5V:
786*53ee8cc1Swenshuai.xi             VClampSetting = 0x8;
787*53ee8cc1Swenshuai.xi             break;
788*53ee8cc1Swenshuai.xi     }
789*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_2D_L, VClampSetting << 8, HBMASK);
790*53ee8cc1Swenshuai.xi }
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi /******************************************************************************/
793*53ee8cc1Swenshuai.xi ///This function sets input HSync polarity
794*53ee8cc1Swenshuai.xi ///@param u8Value \b IN:
795*53ee8cc1Swenshuai.xi /******************************************************************************/
796*53ee8cc1Swenshuai.xi void Hal_ADC_hpolarity_setting(MS_BOOL bHightActive)
797*53ee8cc1Swenshuai.xi {
798*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_07_L, (bHightActive ? BIT(7):0), BIT(7));
799*53ee8cc1Swenshuai.xi }
800*53ee8cc1Swenshuai.xi 
801*53ee8cc1Swenshuai.xi /******************************************************************************/
802*53ee8cc1Swenshuai.xi ///This function power off ADC
803*53ee8cc1Swenshuai.xi /******************************************************************************/
804*53ee8cc1Swenshuai.xi void Hal_ADC_poweroff(void)
805*53ee8cc1Swenshuai.xi {
806*53ee8cc1Swenshuai.xi //    W2BYTE(REG_ADC_ATOP_04_L, 0xFFFE);         // Bit-0 is relative to DRAM.
807*53ee8cc1Swenshuai.xi //    W2BYTEMSK(REG_ADC_ATOP_05_L, 0xFF, LBMASK);
808*53ee8cc1Swenshuai.xi     W2BYTE(REG_ADC_ATOP_06_L, 0xFFFF);
809*53ee8cc1Swenshuai.xi //    W2BYTE(REG_ADC_ATOP_60_L, 0xFFFF);         // Bit-4 is relative to DRAM
810*53ee8cc1Swenshuai.xi //    W2BYTE(REG_ADC_ATOP_69_L, 0xFFFF);         // Bit-4 is relative to DRAM
811*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_70_L, 0x0F, LBMASK); // reg_cvbso1_pd
812*53ee8cc1Swenshuai.xi 
813*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_4C_L, BIT(5), BIT(5));
814*53ee8cc1Swenshuai.xi //    W2BYTEMSK(REG_ADC_ATOP_40_L, BIT(6), BIT(6));
815*53ee8cc1Swenshuai.xi }
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
818*53ee8cc1Swenshuai.xi //
819*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
820*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_internaldc_setting(ADC_Internal_Voltage InternalVoltage)
821*53ee8cc1Swenshuai.xi {
822*53ee8cc1Swenshuai.xi     MS_U16 u16regvalue = 0;
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi     switch ( InternalVoltage )
825*53ee8cc1Swenshuai.xi     {
826*53ee8cc1Swenshuai.xi         case E_ADC_Internal_0V:
827*53ee8cc1Swenshuai.xi              u16regvalue = 0x00;
828*53ee8cc1Swenshuai.xi         break;
829*53ee8cc1Swenshuai.xi         case E_ADC_Internal_0_1V:
830*53ee8cc1Swenshuai.xi              u16regvalue = 0x20;
831*53ee8cc1Swenshuai.xi         break;
832*53ee8cc1Swenshuai.xi         case E_ADC_Internal_0_6V:
833*53ee8cc1Swenshuai.xi              u16regvalue = 0x30; //switch internal to 0.6V
834*53ee8cc1Swenshuai.xi         break;
835*53ee8cc1Swenshuai.xi         default:
836*53ee8cc1Swenshuai.xi               u16regvalue = 0x00;
837*53ee8cc1Swenshuai.xi         break;
838*53ee8cc1Swenshuai.xi     }
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_13_L, InternalVoltage, 0x30);
841*53ee8cc1Swenshuai.xi }
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi void Hal_ADC_ExitExternalCalibration(ADC_INPUTSOURCE_TYPE eADC_Source,XC_AdcGainOffsetSetting* InitialGainOffset)
844*53ee8cc1Swenshuai.xi {
845*53ee8cc1Swenshuai.xi     if ( eADC_Source == ADC_INPUTSOURCE_ONLY_RGB)
846*53ee8cc1Swenshuai.xi     {
847*53ee8cc1Swenshuai.xi 
848*53ee8cc1Swenshuai.xi     }
849*53ee8cc1Swenshuai.xi 	else if ( eADC_Source == ADC_INPUTSOURCE_ONLY_YPBPR)
850*53ee8cc1Swenshuai.xi 	{
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi 	}
854*53ee8cc1Swenshuai.xi     else if (eADC_Source == ADC_INPUTSOURCE_ONLY_SCART )
855*53ee8cc1Swenshuai.xi     {
856*53ee8cc1Swenshuai.xi 		W2BYTEMSK(REG_ADC_ATOP_42_L, BIT(5) , BIT(5));
857*53ee8cc1Swenshuai.xi     }
858*53ee8cc1Swenshuai.xi     else
859*53ee8cc1Swenshuai.xi     {
860*53ee8cc1Swenshuai.xi         // Undefined.
861*53ee8cc1Swenshuai.xi     }
862*53ee8cc1Swenshuai.xi 
863*53ee8cc1Swenshuai.xi }
864*53ee8cc1Swenshuai.xi 
865*53ee8cc1Swenshuai.xi #endif
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi // If define this function to false, driver layer will cause dead_error_condition (if condition always be false)
868*53ee8cc1Swenshuai.xi // So we need implement this function
Hal_ADC_InitExternalCalibration(void * pInstance,MS_U32 enAdcSource)869*53ee8cc1Swenshuai.xi MS_BOOL Hal_ADC_InitExternalCalibration(void *pInstance, MS_U32 enAdcSource)
870*53ee8cc1Swenshuai.xi {
871*53ee8cc1Swenshuai.xi     return FALSE;
872*53ee8cc1Swenshuai.xi }
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi #if 0
875*53ee8cc1Swenshuai.xi void Hal_ADC_InitInternalCalibration(SCALER_WIN eWindow)
876*53ee8cc1Swenshuai.xi {
877*53ee8cc1Swenshuai.xi     XC_AdcGainOffsetSetting gain_offset_setting;
878*53ee8cc1Swenshuai.xi 
879*53ee8cc1Swenshuai.xi     MS_U8 u8Bank;
880*53ee8cc1Swenshuai.xi     u8Bank = MDrv_ReadByte(BK_SELECT_00);
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
883*53ee8cc1Swenshuai.xi     {
884*53ee8cc1Swenshuai.xi         // 444 format
885*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_SCMI);
886*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x41), TRUE, BIT(5));
887*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x43), FALSE, BIT(4));
888*53ee8cc1Swenshuai.xi         //MDrv_WriteRegBit(H_BK_SCMI(0x43), 0x0, (BIT(4)|BIT(5)));//disable mirror
889*53ee8cc1Swenshuai.xi 
890*53ee8cc1Swenshuai.xi         // 10-bit
891*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_SCMI);
892*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(H_BK_SCMI(0x41), 0x01, BIT(0)|BIT(1)|BIT(2));
893*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(H_BK_SCMI(0x41), 0x00, BIT(4)|BIT(5)|BIT(6));
894*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x44), TRUE, BIT(1));
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_IP1F1 );
897*53ee8cc1Swenshuai.xi         MDrv_WriteByte(L_BK_IP1F1(0x0E), 0x11); // enable auto gain function
898*53ee8cc1Swenshuai.xi 
899*53ee8cc1Swenshuai.xi         // Disable NR
900*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK06_21_L, 0, BIT(1)|BIT(0));
901*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK06_01_L, 0, BIT(1)|BIT(0));
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi         //framebuffer number
904*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK12_04_L, 0, BIT(6)|BIT(7));
905*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK12_07_L, 0, BIT(13));
906*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK12_44_L, 0, BIT(6)|BIT(7));
907*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK12_47_L, 0, BIT(13));
908*53ee8cc1Swenshuai.xi     }
909*53ee8cc1Swenshuai.xi     else
910*53ee8cc1Swenshuai.xi     {
911*53ee8cc1Swenshuai.xi         // 444 format
912*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_SCMI);
913*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x01), TRUE, BIT(5));
914*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x03), FALSE, BIT(4));
915*53ee8cc1Swenshuai.xi         //MDrv_WriteRegBit(H_BK_SCMI(0x03), 0x0, (BIT(4)|BIT(5)));//disable mirror
916*53ee8cc1Swenshuai.xi 
917*53ee8cc1Swenshuai.xi         // 10-bit
918*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_SCMI);
919*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(H_BK_SCMI(0x01), 0x01, BIT(0)|BIT(1)|BIT(2));
920*53ee8cc1Swenshuai.xi         MDrv_WriteByteMask(H_BK_SCMI(0x01), 0x00, BIT(4)|BIT(5)|BIT(6));
921*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(L_BK_SCMI(0x04), TRUE, BIT(1));
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi         MDrv_WriteByte( BK_SELECT_00, REG_BANK_IP1F2 );
924*53ee8cc1Swenshuai.xi         MDrv_WriteByte(L_BK_IP1F2(0x0E), 0x11); // enable auto gain function
925*53ee8cc1Swenshuai.xi 
926*53ee8cc1Swenshuai.xi         // Disable NR
927*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK06_21_L, 0, BIT(1)|BIT(0));
928*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK06_01_L, 0, BIT(1)|BIT(0));
929*53ee8cc1Swenshuai.xi 
930*53ee8cc1Swenshuai.xi         //framebuffer number
931*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK12_04_L, 0, BIT(6)|BIT(7));
932*53ee8cc1Swenshuai.xi         SC_W2BYTEMSK(REG_SC_BK12_07_L, 0, BIT(13));
933*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK12_44_L, 0, BIT(6)|BIT(7));
934*53ee8cc1Swenshuai.xi         //SC_W2BYTEMSK(REG_SC_BK12_47_L, 0, BIT(13));
935*53ee8cc1Swenshuai.xi     }
936*53ee8cc1Swenshuai.xi 
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi     // Set gain offset as middle core.
939*53ee8cc1Swenshuai.xi     gain_offset_setting.u16BlueGain = gain_offset_setting.u16GreenGain =
940*53ee8cc1Swenshuai.xi     gain_offset_setting.u16RedGain = 0x80;
941*53ee8cc1Swenshuai.xi 
942*53ee8cc1Swenshuai.xi     gain_offset_setting.u16BlueOffset = gain_offset_setting.u16GreenOffset =
943*53ee8cc1Swenshuai.xi     gain_offset_setting.u16RedOffset = 0x80;
944*53ee8cc1Swenshuai.xi 
945*53ee8cc1Swenshuai.xi     Hal_ADC_offset_setting(&gain_offset_setting);
946*53ee8cc1Swenshuai.xi     Hal_ADC_gain_setting(&gain_offset_setting);
947*53ee8cc1Swenshuai.xi 
948*53ee8cc1Swenshuai.xi 
949*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_00_L ,0x0001 );
950*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_04_L ,0xFE00 );
951*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L ,0x009B );
952*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_06_L ,0xEBF0);
953*53ee8cc1Swenshuai.xi 
954*53ee8cc1Swenshuai.xi     W2BYTEMSK( L_BK_IPMUX(0x01) , 0xF0, 0xF0 );  //select pattern generator source
955*53ee8cc1Swenshuai.xi     if(eADC_Source == ADC_INPUTSOURCE_ONLY_SCART )
956*53ee8cc1Swenshuai.xi     {
957*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADC_ATOP_03_L ,0x0000 );
958*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(REG_ADC_ATOP_5E_L ,0x0200);
959*53ee8cc1Swenshuai.xi         MDrv_WriteByte(L_BK_CHIPTOP(0x55),0x00);
960*53ee8cc1Swenshuai.xi     }
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_1C_H, 0xF8);   // Turn on SOG input low bandwidth filter
963*53ee8cc1Swenshuai.xi 
964*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);
965*53ee8cc1Swenshuai.xi 
966*53ee8cc1Swenshuai.xi }
967*53ee8cc1Swenshuai.xi 
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi void Hal_ADC_clk_gen_setting(ADC_Gen_Clock_Type clocktype)
970*53ee8cc1Swenshuai.xi {
971*53ee8cc1Swenshuai.xi 
972*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_01_L, 0x0f, 0x0f );
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_1C_L, BIT(5), BIT(5) );  /// turn off ADC a SoG comparator
975*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_1F_L, BIT(5), BIT(5) );  /// turn off ADC a SoG comparator
976*53ee8cc1Swenshuai.xi 
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi     switch(clocktype)
979*53ee8cc1Swenshuai.xi     {
980*53ee8cc1Swenshuai.xi     case E_ADC_Gen_480P_Clk:
981*53ee8cc1Swenshuai.xi     default:
982*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x00, 0x07 );
983*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_01_L, 0x0040);
984*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_02_L, 0x0000);
985*53ee8cc1Swenshuai.xi         break;
986*53ee8cc1Swenshuai.xi     case E_ADC_Gen_720P_Clk:
987*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x01, 0x07 );
988*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_01_L, 0xB82E);
989*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_02_L, 0x0052);
990*53ee8cc1Swenshuai.xi         break;
991*53ee8cc1Swenshuai.xi     case E_ADC_Gen_1080P_Clk:
992*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x10, 0x07 );
993*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_01_L, 0x0723);
994*53ee8cc1Swenshuai.xi         W2BYTE(REG_ADC_DTOP_02_L, 0x0086);
995*53ee8cc1Swenshuai.xi         break;
996*53ee8cc1Swenshuai.xi     }
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_06_L, 0x80, 0x80);
999*53ee8cc1Swenshuai.xi }
1000*53ee8cc1Swenshuai.xi 
1001*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
1002*53ee8cc1Swenshuai.xi //  RGB Gain setting
1003*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
1004*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_gain_r_setting(MS_U16 u16value)
1005*53ee8cc1Swenshuai.xi {
1006*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_08_L, u16value, LBMASK);
1007*53ee8cc1Swenshuai.xi }
1008*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_gain_g_setting(MS_U16 u16value)
1009*53ee8cc1Swenshuai.xi {
1010*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_09_L, u16value, LBMASK);
1011*53ee8cc1Swenshuai.xi }
1012*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_gain_b_setting(MS_U16 u16value)
1013*53ee8cc1Swenshuai.xi {
1014*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0A_L, u16value, LBMASK);
1015*53ee8cc1Swenshuai.xi }
1016*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
1017*53ee8cc1Swenshuai.xi //  RGB Offset setting
1018*53ee8cc1Swenshuai.xi //----------------------------------------------------------------------
1019*53ee8cc1Swenshuai.xi //    MDrv_WriteByte( H_BK_ADC_DTOP(0x08),DcOffset_R);
1020*53ee8cc1Swenshuai.xi //    MDrv_WriteByte( H_BK_ADC_DTOP(0x09),DcOffset_G);
1021*53ee8cc1Swenshuai.xi //    MDrv_WriteByte( H_BK_ADC_DTOP(0x0A),DcOffset_B);
1022*53ee8cc1Swenshuai.xi 
1023*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_offset_r_setting(MS_U16 u16value)
1024*53ee8cc1Swenshuai.xi {
1025*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_08_L, u16value<<8, HBMASK);
1026*53ee8cc1Swenshuai.xi }
1027*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_offset_g_setting(MS_U16 u16value)
1028*53ee8cc1Swenshuai.xi {
1029*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_09_L, u16value<<8, HBMASK);
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_offset_b_setting(MS_U16 u16value)
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0A_L, u16value<<8, HBMASK);
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi #endif
1037*53ee8cc1Swenshuai.xi 
1038*53ee8cc1Swenshuai.xi /******************************************************************************/
1039*53ee8cc1Swenshuai.xi /// Power
1040*53ee8cc1Swenshuai.xi /******************************************************************************/
1041*53ee8cc1Swenshuai.xi /******************************************************************************/
1042*53ee8cc1Swenshuai.xi ///Initialize ADC
1043*53ee8cc1Swenshuai.xi /******************************************************************************/
Hal_ADC_init(void * pInstance,MS_U16 u16XTAL_CLK,MS_BOOL IsShareGrd,MS_U16 eScartIDPortSelection)1044*53ee8cc1Swenshuai.xi void Hal_ADC_init(void *pInstance, MS_U16 u16XTAL_CLK,MS_BOOL IsShareGrd,  MS_U16 eScartIDPortSelection)
1045*53ee8cc1Swenshuai.xi {
1046*53ee8cc1Swenshuai.xi     return;
1047*53ee8cc1Swenshuai.xi 
1048*53ee8cc1Swenshuai.xi /*
1049*53ee8cc1Swenshuai.xi     MS_U8 u8MPLL_LOOP_2nd_DIVIDER;
1050*53ee8cc1Swenshuai.xi 
1051*53ee8cc1Swenshuai.xi     // ShareGrd setting only for T3.
1052*53ee8cc1Swenshuai.xi     UNUSED(IsShareGrd);
1053*53ee8cc1Swenshuai.xi     UNUSED(eScartIDPortSelection);
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_04_L, 0x00, HBMASK);    //
1056*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_05_L, 0x00, LBMASK);   //
1057*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_0B_L, 0x00, LBMASK);
1058*53ee8cc1Swenshuai.xi 
1059*53ee8cc1Swenshuai.xi     // PLL
1060*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x01, LBMASK);    // VCO
1061*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_12_L, 0x01, LBMASK);    // ADC_B VCO S3 may not need to programming this because S3 only has one ADC
1062*53ee8cc1Swenshuai.xi 
1063*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_1C_L, 0x10, LBMASK);    // SOG trigger lenel
1064*53ee8cc1Swenshuai.xi 
1065*53ee8cc1Swenshuai.xi     // enhance SOG performance
1066*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_21_L, 0x40<<8, HBMASK);    // To increse hysteresis
1067*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_22_L, 0x30, LBMASK);    // To increse SOG clamping ability
1068*53ee8cc1Swenshuai.xi 
1069*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_46_L, 0x80, LBMASK);    // DAC gain, 0x20
1070*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_46_L, 0x10<<8, HBMASK);    // LVDS/RSDS/TTL output logic regulator voltage contrl
1071*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_2E_L, 0x00, LBMASK);    // I-clamp setting
1072*53ee8cc1Swenshuai.xi 
1073*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_60_L, 0x00, LBMASK);    //DVI  //HDMI Port A/B
1074*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_60_L, 0x00, HBMASK);
1075*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_69_L, 0x00, LBMASK);    //DVI2 //HDMI Port C
1076*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_69_L, 0x00, HBMASK);
1077*53ee8cc1Swenshuai.xi 
1078*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_0B_L, 0x00, LBMASK);
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_01_L, 0x81, LBMASK);    // PLL loop filer control
1081*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_01_L, 0x09<<8, HBMASK);    // PLL loop filer control
1082*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_02_L, 0x03, LBMASK);    // PLL loop filer control
1083*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_04_L, 0x05, LBMASK);    // setting time
1084*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_04_L, 0x95<<8, HBMASK);    // PLL control for composite sync input
1085*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0B_L, 0x10, LBMASK);    // clamp placement
1086*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0B_L, 0x08<<8, HBMASK);    // clamp duration
1087*53ee8cc1Swenshuai.xi 
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi     u8MPLL_LOOP_2nd_DIVIDER = (MS_U8)((215000UL*2 + (u16XTAL_CLK/2)) / u16XTAL_CLK );
1090*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_0A_L, u8MPLL_LOOP_2nd_DIVIDER, LBMASK);
1091*53ee8cc1Swenshuai.xi     */
1092*53ee8cc1Swenshuai.xi }
1093*53ee8cc1Swenshuai.xi 
1094*53ee8cc1Swenshuai.xi #if 0
1095*53ee8cc1Swenshuai.xi void Hal_XC_ADC_poweron_source(ADC_INPUTSOURCE_TYPE enADC_SourceType)
1096*53ee8cc1Swenshuai.xi {
1097*53ee8cc1Swenshuai.xi     ADC_ATOP_POWERON_TBL_t adc_tbl;
1098*53ee8cc1Swenshuai.xi     MS_ADC_POWER_ON_TYPE enADCPowerType = MS_ADC_POWER_ALL_OFF;
1099*53ee8cc1Swenshuai.xi     MS_U8 u8Src_En = 0;
1100*53ee8cc1Swenshuai.xi 
1101*53ee8cc1Swenshuai.xi     switch (enADC_SourceType)
1102*53ee8cc1Swenshuai.xi     {
1103*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_DVI:
1104*53ee8cc1Swenshuai.xi 
1105*53ee8cc1Swenshuai.xi             u8Src_En |= En_DVI;
1106*53ee8cc1Swenshuai.xi             enADCPowerType = MS_DVI_POWER_ON;
1107*53ee8cc1Swenshuai.xi             break;
1108*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_RGB:
1109*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_YPBPR:
1110*53ee8cc1Swenshuai.xi             u8Src_En |= (En_ADC_A | En_ADC_AMUX);
1111*53ee8cc1Swenshuai.xi             enADCPowerType = MS_ADC_A_POWER_ON;
1112*53ee8cc1Swenshuai.xi             break;
1113*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_SCART:
1114*53ee8cc1Swenshuai.xi             u8Src_En |= (En_VD|En_FB_RGB|EN_ADC_FB);
1115*53ee8cc1Swenshuai.xi             enADCPowerType = MS_VDA_FBLANK_POWER_ON;
1116*53ee8cc1Swenshuai.xi             break;
1117*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_SVIDEO:
1118*53ee8cc1Swenshuai.xi             u8Src_En |= En_VD|En_VD_YC|En_FB_RGB;
1119*53ee8cc1Swenshuai.xi             u8Src_En &= ~En_ADC_AMUX;
1120*53ee8cc1Swenshuai.xi             enADCPowerType = MS_VDA_SV_POWER_ON;
1121*53ee8cc1Swenshuai.xi             break;
1122*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_CVBS:
1123*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_MVOP:
1124*53ee8cc1Swenshuai.xi             u8Src_En |= En_VD;
1125*53ee8cc1Swenshuai.xi             u8Src_En &= ~En_ADC_AMUX;
1126*53ee8cc1Swenshuai.xi             enADCPowerType = MS_VDA_CVBS_POWER_ON;
1127*53ee8cc1Swenshuai.xi             break;
1128*53ee8cc1Swenshuai.xi         default:
1129*53ee8cc1Swenshuai.xi             u8Src_En |= En_VD;
1130*53ee8cc1Swenshuai.xi             u8Src_En &= ~En_ADC_AMUX;
1131*53ee8cc1Swenshuai.xi             enADCPowerType = MS_VDA_CVBS_POWER_ON;
1132*53ee8cc1Swenshuai.xi             break;
1133*53ee8cc1Swenshuai.xi     }
1134*53ee8cc1Swenshuai.xi 
1135*53ee8cc1Swenshuai.xi     // Enable ADC source
1136*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_00_L, u8Src_En, 0x00FF);
1137*53ee8cc1Swenshuai.xi 
1138*53ee8cc1Swenshuai.xi     // Source Power On
1139*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04L = (BIT(7) | BIT(6) | BIT(0));
1140*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04H = (BIT(0));
1141*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_05L = (BIT(6) | BIT(5) | BIT(2));
1142*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_06L = (BIT(0));
1143*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_06H = (BIT(4) | BIT(2));
1144*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_60L = (BIT(6) | BIT(4));
1145*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_60H = (0x00);
1146*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_69L = (BIT(6) | BIT(4));
1147*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_69H = (0x00);
1148*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_40L = BIT(6);
1149*53ee8cc1Swenshuai.xi 
1150*53ee8cc1Swenshuai.xi     switch (enADCPowerType)
1151*53ee8cc1Swenshuai.xi     {
1152*53ee8cc1Swenshuai.xi     case MS_ADC_A_POWER_ON:
1153*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04L |= (BIT(5)|BIT(4)|BIT(3)|BIT(2)|BIT(1));
1154*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06L |= (BIT(3)|BIT(2)|BIT(1));
1155*53ee8cc1Swenshuai.xi         break;
1156*53ee8cc1Swenshuai.xi 
1157*53ee8cc1Swenshuai.xi     case MS_VDA_CVBS_POWER_ON:
1158*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04H |= (BIT(7)|BIT(4)|BIT(1));
1159*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_05L |= (BIT(4)|BIT(3)|BIT(1));
1160*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06L |= (BIT(7)|BIT(6));
1161*53ee8cc1Swenshuai.xi         break;
1162*53ee8cc1Swenshuai.xi 
1163*53ee8cc1Swenshuai.xi     case MS_VDA_SV_POWER_ON:
1164*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04L |= (BIT(5));
1165*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04H |= (BIT(7)|BIT(6)|BIT(4)|BIT(1));
1166*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_05L |= (BIT(4)|BIT(3)|BIT(1)|BIT(0));
1167*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06L |= (BIT(7)|BIT(6));
1168*53ee8cc1Swenshuai.xi         break;
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi     case MS_VDA_FBLANK_POWER_ON:
1171*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04L |= (BIT(5)|BIT(4)|BIT(3)|BIT(2)|BIT(1));
1172*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04H |= (BIT(7)|BIT(4)|BIT(1));
1173*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_05L |= (BIT(4)|BIT(3)|BIT(1));
1174*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06L |= (BIT(7)|BIT(6)|BIT(3)|BIT(2)|BIT(1));
1175*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06H |= (BIT(6));
1176*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_40L = 0;
1177*53ee8cc1Swenshuai.xi         break;
1178*53ee8cc1Swenshuai.xi 
1179*53ee8cc1Swenshuai.xi     case MS_DVI_POWER_ON:
1180*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06H |= (BIT(7)|BIT(5)|BIT(3)|BIT(1)|BIT(0));
1181*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_60L |= (BIT(7)|BIT(5)|BIT(3)|BIT(2)|BIT(1)|BIT(0));
1182*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_60H |= (BIT(6)|BIT(5)|BIT(4)|BIT(3)|BIT(2)|BIT(1)|BIT(0));
1183*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_69L |= (BIT(7)|BIT(5)|BIT(3)|BIT(2)|BIT(1)|BIT(0));
1184*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_69H |= (BIT(6)|BIT(5)|BIT(4)|BIT(3)|BIT(2)|BIT(1)|BIT(0));
1185*53ee8cc1Swenshuai.xi         break;
1186*53ee8cc1Swenshuai.xi     /*
1187*53ee8cc1Swenshuai.xi     case MS_ADC_VD_BLEND_POWER_ON:
1188*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04L |= (BIT(5)|BIT(4)|BIT(3)|BIT(2)|BIT(1));
1189*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_04H |= (BIT(7)|BIT(4)|BIT(1));
1190*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_05L |= (BIT(4)|BIT(3)|BIT(1));
1191*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06L |= (BIT(7)|BIT(6)|BIT(3)|BIT(2)|BIT(1));
1192*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_06H |= (BIT(6));
1193*53ee8cc1Swenshuai.xi         adc_tbl.u8ADC_Power_40L = 0;
1194*53ee8cc1Swenshuai.xi         break;
1195*53ee8cc1Swenshuai.xi     */
1196*53ee8cc1Swenshuai.xi      default:
1197*53ee8cc1Swenshuai.xi         break;
1198*53ee8cc1Swenshuai.xi     }
1199*53ee8cc1Swenshuai.xi 
1200*53ee8cc1Swenshuai.xi     // Always turn DVI/HDCP clk on for all source.
1201*53ee8cc1Swenshuai.xi     // Blue-ray BD1400 will stop playing if power off DVI/HDCP clk and HDMI cable plug-in.
1202*53ee8cc1Swenshuai.xi     // This will cause component video still.
1203*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_06H |= (BIT(1));
1204*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_60L |= (BIT(7)|BIT(5));
1205*53ee8cc1Swenshuai.xi     //////////////////////////////////////////////////////
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04L &= ~(BIT(5) | BIT(4) | BIT(3));
1208*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04L |= ~(R2BYTEMSK(REG_ADC_ATOP_04_L, LBMASK));
1209*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04H &= ~BIT(4);
1210*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_04H |= ~(R2BYTEMSK(REG_ADC_ATOP_04_L, HBMASK));
1211*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_05L &= ~(BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0));
1212*53ee8cc1Swenshuai.xi     adc_tbl.u8ADC_Power_05L |= ~(R2BYTEMSK(REG_ADC_ATOP_05_L, LBMASK));
1213*53ee8cc1Swenshuai.xi     //adc_tbl.u8ADC_Power_40L = (R2BYTEMSK(REG_ADC_ATOP_40_L, LBMASK) & 0x40;
1214*53ee8cc1Swenshuai.xi 
1215*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_04_L, (0xFF & ~(adc_tbl.u8ADC_Power_04L)), LBMASK);
1216*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_04_L, (0xFF & ~(adc_tbl.u8ADC_Power_04H))<<8, HBMASK);
1217*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_05_L, (0xFF & ~(adc_tbl.u8ADC_Power_05L)), LBMASK);
1218*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_06_L, (0xFF & ~(adc_tbl.u8ADC_Power_06L)), LBMASK);
1219*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_06_L, (0xFF & ~(adc_tbl.u8ADC_Power_06H))<<8, HBMASK);
1220*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_60_L, (0xFF & ~(adc_tbl.u8ADC_Power_60L)), LBMASK);
1221*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_60_L, (0xFF & ~(adc_tbl.u8ADC_Power_60H))<<8, HBMASK);
1222*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_69_L, (0xFF & ~(adc_tbl.u8ADC_Power_69L)), LBMASK);
1223*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_69_L, (0xFF & ~(adc_tbl.u8ADC_Power_69H))<<8, HBMASK);
1224*53ee8cc1Swenshuai.xi     //W2BYTEMSK(REG_ADC_ATOP_40_L, adc_tbl.u8ADC_Power_40L  , BIT(6));
1225*53ee8cc1Swenshuai.xi }
1226*53ee8cc1Swenshuai.xi 
1227*53ee8cc1Swenshuai.xi void Hal_ADC_Set_Source(ADC_INPUTSOURCE_TYPE enADC_SourceType, E_MUX_INPUTPORT* enInputPortType, MS_U8 u8PortCount)
1228*53ee8cc1Swenshuai.xi {
1229*53ee8cc1Swenshuai.xi     switch(enADC_SourceType)
1230*53ee8cc1Swenshuai.xi     {
1231*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_RGB:
1232*53ee8cc1Swenshuai.xi 
1233*53ee8cc1Swenshuai.xi             /* Vclamp */
1234*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_2C_L, 0x00, (BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0))); // G clamp to VP3
1235*53ee8cc1Swenshuai.xi             /* clamp placement */ /* clamp duration */
1236*53ee8cc1Swenshuai.xi             W2BYTE(REG_ADC_DTOP_0B_L, 0x810);
1237*53ee8cc1Swenshuai.xi 
1238*53ee8cc1Swenshuai.xi             /* PLL multiplier */
1239*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x01, (BIT(2) | BIT(1) | BIT(0)));
1240*53ee8cc1Swenshuai.xi             /* PLL phase setting time */
1241*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_04_L, 0x05, (BIT(3) | BIT(2) | BIT(1) | BIT(0)));
1242*53ee8cc1Swenshuai.xi             /* SOG level */
1243*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_1C_L, 0x25, (BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0)));
1244*53ee8cc1Swenshuai.xi             /* ADC GenCtrl */
1245*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_07_L, 0x02, LBMASK);
1246*53ee8cc1Swenshuai.xi             break;
1247*53ee8cc1Swenshuai.xi 
1248*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_YPBPR:
1249*53ee8cc1Swenshuai.xi 
1250*53ee8cc1Swenshuai.xi             /* New mid-clamp */
1251*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_2C_L, 0x77, (BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0))); //0x77 2007-12-4
1252*53ee8cc1Swenshuai.xi             /* clamp placement */ /* clamp duration */
1253*53ee8cc1Swenshuai.xi             W2BYTE(REG_ADC_DTOP_0B_L, 0x530);
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi             /* PLL multiplier */
1256*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x00, (BIT(2) | BIT(1) | BIT(0)));
1257*53ee8cc1Swenshuai.xi             /* PLL phase setting time */
1258*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_04_L, 0x08, (BIT(3) | BIT(2) | BIT(1) | BIT(0)));
1259*53ee8cc1Swenshuai.xi             /* SOG level */
1260*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_1C_L, 0x05, (BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0)));
1261*53ee8cc1Swenshuai.xi             /* ADC GenCtrl */
1262*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_07_L, 0x6A, LBMASK);
1263*53ee8cc1Swenshuai.xi             break;
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi          case ADC_INPUTSOURCE_ONLY_DVI:
1266*53ee8cc1Swenshuai.xi 
1267*53ee8cc1Swenshuai.xi              W2BYTEMSK(REG_ADC_ATOP_2C_L, 0x00, (BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0))); // G clamp to VP3
1268*53ee8cc1Swenshuai.xi              Hal_ADC_reset(REST_ADC|REST_DVI|REST_HDCP);
1269*53ee8cc1Swenshuai.xi              break;
1270*53ee8cc1Swenshuai.xi 
1271*53ee8cc1Swenshuai.xi          case ADC_INPUTSOURCE_ONLY_SVIDEO:
1272*53ee8cc1Swenshuai.xi          case ADC_INPUTSOURCE_ONLY_SCART:
1273*53ee8cc1Swenshuai.xi          case ADC_INPUTSOURCE_ONLY_CVBS:
1274*53ee8cc1Swenshuai.xi 
1275*53ee8cc1Swenshuai.xi             /* Vclamp */
1276*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_2C_L, 0x00, (BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0))); // G clamp to VP3
1277*53ee8cc1Swenshuai.xi             /* PLL multiplier */
1278*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_0C_L, 0x01, LBMASK);
1279*53ee8cc1Swenshuai.xi             /* PLL phase setting time */
1280*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_DTOP_04_L, 0x05, LBMASK);
1281*53ee8cc1Swenshuai.xi             /* SOG level */
1282*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_1C_L, 0x05, (BIT(5) | BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0)));
1283*53ee8cc1Swenshuai.xi             break;
1284*53ee8cc1Swenshuai.xi          default:
1285*53ee8cc1Swenshuai.xi             break;
1286*53ee8cc1Swenshuai.xi     }
1287*53ee8cc1Swenshuai.xi 
1288*53ee8cc1Swenshuai.xi     //U3 first version need ADC to turn off its jitter-finetune function for VD case.
1289*53ee8cc1Swenshuai.xi     if(enADC_SourceType &
1290*53ee8cc1Swenshuai.xi         ( ADC_INPUTSOURCE_ONLY_CVBS   | ADC_INPUTSOURCE_ONLY_SCART
1291*53ee8cc1Swenshuai.xi         | ADC_INPUTSOURCE_ONLY_SVIDEO | ADC_INPUTSOURCE_ONLY_ATV ))
1292*53ee8cc1Swenshuai.xi     {
1293*53ee8cc1Swenshuai.xi          W2BYTEMSK(REG_ADC_ATOP_13_L, BIT(6), BIT(6));
1294*53ee8cc1Swenshuai.xi     }
1295*53ee8cc1Swenshuai.xi     else
1296*53ee8cc1Swenshuai.xi     {
1297*53ee8cc1Swenshuai.xi          W2BYTEMSK(REG_ADC_ATOP_13_L, 0, BIT(6));
1298*53ee8cc1Swenshuai.xi     }
1299*53ee8cc1Swenshuai.xi 
1300*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
1301*53ee8cc1Swenshuai.xi     mdelay(2);
1302*53ee8cc1Swenshuai.xi #else
1303*53ee8cc1Swenshuai.xi     MsOS_DelayTask(2);
1304*53ee8cc1Swenshuai.xi #endif
1305*53ee8cc1Swenshuai.xi 
1306*53ee8cc1Swenshuai.xi }
1307*53ee8cc1Swenshuai.xi 
1308*53ee8cc1Swenshuai.xi // Only support input port is CVBS or DAC
1309*53ee8cc1Swenshuai.xi 
1310*53ee8cc1Swenshuai.xi 
1311*53ee8cc1Swenshuai.xi //MS_BOOL bEnable,MS_BOOL bIsSvideoSource, MS_BOOL bIsDACSource, E_MUX_INPUTPORT* enPorts, MS_U8 u8Port_Count)
1312*53ee8cc1Swenshuai.xi 
1313*53ee8cc1Swenshuai.xi void Hal_ADC_set_cvbs_out(E_ADC_CVBSOUT_TYPE e_cvbs_out_type)
1314*53ee8cc1Swenshuai.xi {
1315*53ee8cc1Swenshuai.xi     MS_U16 u16channel = 0xF , u16clamp = 0 , u16test = 0 ;
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi     if ( e_cvbs_out_type != ADC_CVBSOUT_DISABLE_1 || e_cvbs_out_type != ADC_CVBSOUT_DISABLE_2)
1318*53ee8cc1Swenshuai.xi     {
1319*53ee8cc1Swenshuai.xi         // Need refine.
1320*53ee8cc1Swenshuai.xi         // It should not read mux from hardware and set.
1321*53ee8cc1Swenshuai.xi         if ( e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_1 || e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_2 ||
1322*53ee8cc1Swenshuai.xi              e_cvbs_out_type == ADC_CVBSOUT_VIF_VIF_1 || e_cvbs_out_type == ADC_CVBSOUT_VIF_VIF_2)
1323*53ee8cc1Swenshuai.xi         {
1324*53ee8cc1Swenshuai.xi             u16channel = 0x5C;
1325*53ee8cc1Swenshuai.xi         }
1326*53ee8cc1Swenshuai.xi         else if ( e_cvbs_out_type == ADC_CVBSOUT_SV_ON_1 || e_cvbs_out_type == ADC_CVBSOUT_SV_OFF_1 ||
1327*53ee8cc1Swenshuai.xi                   e_cvbs_out_type == ADC_CVBSOUT_SV_ON_2 || e_cvbs_out_type == ADC_CVBSOUT_SV_OFF_2
1328*53ee8cc1Swenshuai.xi                 )
1329*53ee8cc1Swenshuai.xi         {
1330*53ee8cc1Swenshuai.xi             u16channel = 0x5C;
1331*53ee8cc1Swenshuai.xi         }
1332*53ee8cc1Swenshuai.xi         else if ( e_cvbs_out_type == ADC_CVBSOUT_CVBS_ON_1 || e_cvbs_out_type == ADC_CVBSOUT_CVBS_OFF_1 ||
1333*53ee8cc1Swenshuai.xi                   e_cvbs_out_type == ADC_CVBSOUT_CVBS_ON_2 || e_cvbs_out_type == ADC_CVBSOUT_CVBS_OFF_2
1334*53ee8cc1Swenshuai.xi                 )
1335*53ee8cc1Swenshuai.xi         {
1336*53ee8cc1Swenshuai.xi             u16channel = 0x14;
1337*53ee8cc1Swenshuai.xi             u16clamp   = 0x03;
1338*53ee8cc1Swenshuai.xi             u16test    = 0x0A;
1339*53ee8cc1Swenshuai.xi         }
1340*53ee8cc1Swenshuai.xi         else
1341*53ee8cc1Swenshuai.xi         {
1342*53ee8cc1Swenshuai.xi             // Undefined
1343*53ee8cc1Swenshuai.xi         }
1344*53ee8cc1Swenshuai.xi     }
1345*53ee8cc1Swenshuai.xi     else
1346*53ee8cc1Swenshuai.xi     {
1347*53ee8cc1Swenshuai.xi         // Turn off cvbs out.
1348*53ee8cc1Swenshuai.xi         u16channel = 0x0F;
1349*53ee8cc1Swenshuai.xi     }
1350*53ee8cc1Swenshuai.xi 
1351*53ee8cc1Swenshuai.xi     if ( e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_1 || e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_2)
1352*53ee8cc1Swenshuai.xi     {
1353*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(REG_ADC_ATOP_46_L,DISABLE,BIT(6));
1354*53ee8cc1Swenshuai.xi     }
1355*53ee8cc1Swenshuai.xi     else
1356*53ee8cc1Swenshuai.xi     {
1357*53ee8cc1Swenshuai.xi         MDrv_WriteRegBit(REG_ADC_ATOP_46_L,ENABLE,BIT(6));
1358*53ee8cc1Swenshuai.xi     }
1359*53ee8cc1Swenshuai.xi 
1360*53ee8cc1Swenshuai.xi     // For channel 1
1361*53ee8cc1Swenshuai.xi     if ( e_cvbs_out_type >= ADC_CVBSOUT_DISABLE_1 &&  e_cvbs_out_type <= ADC_CVBSOUT_VIF_VIF_1 )
1362*53ee8cc1Swenshuai.xi     {
1363*53ee8cc1Swenshuai.xi 
1364*53ee8cc1Swenshuai.xi         if (e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_1 || e_cvbs_out_type == ADC_CVBSOUT_VIF_VIF_1 )
1365*53ee8cc1Swenshuai.xi         {
1366*53ee8cc1Swenshuai.xi             W2BYTE(REG_ADC_ATOP_39_L, 0x0B0B );
1367*53ee8cc1Swenshuai.xi         }
1368*53ee8cc1Swenshuai.xi 
1369*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_38_L, u16channel & 0xFF, LBMASK);
1370*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_3A_L, u16clamp & 0xFF, LBMASK);
1371*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_3B_L, u16test<<8, HBMASK);
1372*53ee8cc1Swenshuai.xi     }
1373*53ee8cc1Swenshuai.xi     else // For channel 2
1374*53ee8cc1Swenshuai.xi     {
1375*53ee8cc1Swenshuai.xi 
1376*53ee8cc1Swenshuai.xi         if (e_cvbs_out_type == ADC_CVBSOUT_VIF_VE_2 || e_cvbs_out_type == ADC_CVBSOUT_VIF_VIF_2 )
1377*53ee8cc1Swenshuai.xi         {
1378*53ee8cc1Swenshuai.xi             W2BYTE(REG_ADC_ATOP_3D_L, 0x0B0B );
1379*53ee8cc1Swenshuai.xi         }
1380*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_3C_L, u16channel & 0xFF, LBMASK);
1381*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_3E_L, u16clamp & 0xFF, LBMASK);
1382*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_3F_L, u16test<<8, HBMASK);
1383*53ee8cc1Swenshuai.xi     }
1384*53ee8cc1Swenshuai.xi 
1385*53ee8cc1Swenshuai.xi }
1386*53ee8cc1Swenshuai.xi 
1387*53ee8cc1Swenshuai.xi /*
1388*53ee8cc1Swenshuai.xi // Define the ADC filter BW table
1389*53ee8cc1Swenshuai.xi // Table rule :
1390*53ee8cc1Swenshuai.xi // Bandwidth frequency from small to large
1391*53ee8cc1Swenshuai.xi */
1392*53ee8cc1Swenshuai.xi MS_U16 tAdcFilterBW[17][2] = // {MHz, Reg.Value},
1393*53ee8cc1Swenshuai.xi {
1394*53ee8cc1Swenshuai.xi     {  7, 0x0F},
1395*53ee8cc1Swenshuai.xi     { 15, 0x0E},
1396*53ee8cc1Swenshuai.xi     { 16, 0x0D},
1397*53ee8cc1Swenshuai.xi     { 17, 0x0C},
1398*53ee8cc1Swenshuai.xi     { 18, 0x0B},
1399*53ee8cc1Swenshuai.xi     { 20, 0x0A},
1400*53ee8cc1Swenshuai.xi     { 22, 0x09},
1401*53ee8cc1Swenshuai.xi     { 24, 0x08},
1402*53ee8cc1Swenshuai.xi     { 26, 0x07},
1403*53ee8cc1Swenshuai.xi     { 28, 0x06},
1404*53ee8cc1Swenshuai.xi     { 30, 0x05},
1405*53ee8cc1Swenshuai.xi     { 60, 0x04},
1406*53ee8cc1Swenshuai.xi     {125, 0x03},
1407*53ee8cc1Swenshuai.xi     {150, 0x02},
1408*53ee8cc1Swenshuai.xi     {190, 0x01},
1409*53ee8cc1Swenshuai.xi     {250, 0x00},
1410*53ee8cc1Swenshuai.xi     {0xFFFF, 0x00},
1411*53ee8cc1Swenshuai.xi };
1412*53ee8cc1Swenshuai.xi 
1413*53ee8cc1Swenshuai.xi void Hal_ADC_set_mode(ADC_INPUTSOURCE_TYPE enADCInput, MS_U16 u16PixelClockPerSecond, MS_U16 u16HorizontalTotal, MS_U16 u16SamplingRatio)
1414*53ee8cc1Swenshuai.xi {
1415*53ee8cc1Swenshuai.xi     MS_U8 u8Loop;
1416*53ee8cc1Swenshuai.xi 
1417*53ee8cc1Swenshuai.xi     u16PixelClockPerSecond = ADC_FILTER_BW_DCLK(((enADCInput & ADC_INPUTSOURCE_ONLY_RGB)!= 0)?TRUE:FALSE, u16PixelClockPerSecond);
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi     //MDrv_ADC_pll_setting
1420*53ee8cc1Swenshuai.xi     for(u8Loop = 0 ; u8Loop < sizeof(tAdcFilterBW)/(sizeof(MS_U16)*2); u8Loop++)
1421*53ee8cc1Swenshuai.xi     {
1422*53ee8cc1Swenshuai.xi         if(tAdcFilterBW[u8Loop][0] > u16PixelClockPerSecond)
1423*53ee8cc1Swenshuai.xi         {
1424*53ee8cc1Swenshuai.xi             W2BYTEMSK(REG_ADC_ATOP_1C_L, (((tAdcFilterBW[u8Loop][1])<<4)<<8), 0xF000);
1425*53ee8cc1Swenshuai.xi             break;
1426*53ee8cc1Swenshuai.xi         }
1427*53ee8cc1Swenshuai.xi     }
1428*53ee8cc1Swenshuai.xi 
1429*53ee8cc1Swenshuai.xi     /* MDrv_ADC_sog_filter_setting */
1430*53ee8cc1Swenshuai.xi     if (u16PixelClockPerSecond > ADC_SOG_FILTER_THRSHLD)
1431*53ee8cc1Swenshuai.xi     {
1432*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_1C_L, 0 , BIT(11));
1433*53ee8cc1Swenshuai.xi     }
1434*53ee8cc1Swenshuai.xi     else
1435*53ee8cc1Swenshuai.xi     {
1436*53ee8cc1Swenshuai.xi         W2BYTEMSK(REG_ADC_ATOP_1C_L, BIT(11) , BIT(11));
1437*53ee8cc1Swenshuai.xi     }
1438*53ee8cc1Swenshuai.xi 
1439*53ee8cc1Swenshuai.xi     Hal_ADC_dtop_clk_setting (u16HorizontalTotal * u16SamplingRatio);
1440*53ee8cc1Swenshuai.xi 
1441*53ee8cc1Swenshuai.xi     //Hal_ADC_clamp_duration_setting( u16HorizontalTotal/50 );
1442*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_0B_L, (u16HorizontalTotal/50)<<8, HBMASK);
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi }
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi void Hal_ADC_get_default_gain_offset(ADC_INPUTSOURCE_TYPE adc_src,XC_AdcGainOffsetSetting* ADCSetting)
1447*53ee8cc1Swenshuai.xi {
1448*53ee8cc1Swenshuai.xi     switch(adc_src)
1449*53ee8cc1Swenshuai.xi     {
1450*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_RGB:      // RGB source
1451*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_YPBPR:
1452*53ee8cc1Swenshuai.xi         case ADC_INPUTSOURCE_ONLY_SCART:
1453*53ee8cc1Swenshuai.xi         default:
1454*53ee8cc1Swenshuai.xi             ADCSetting->u16RedGain = ADCSetting->u16GreenGain = ADCSetting->u16BlueGain = 0x80;
1455*53ee8cc1Swenshuai.xi             ADCSetting->u16RedOffset = ADCSetting->u16GreenOffset = ADCSetting->u16BlueOffset = 0x80;
1456*53ee8cc1Swenshuai.xi             break;
1457*53ee8cc1Swenshuai.xi     }
1458*53ee8cc1Swenshuai.xi 
1459*53ee8cc1Swenshuai.xi }
1460*53ee8cc1Swenshuai.xi 
1461*53ee8cc1Swenshuai.xi 
1462*53ee8cc1Swenshuai.xi MS_U16 Hal_ADC_get_center_gain(void)
1463*53ee8cc1Swenshuai.xi {
1464*53ee8cc1Swenshuai.xi     return 0x0080;
1465*53ee8cc1Swenshuai.xi }
1466*53ee8cc1Swenshuai.xi 
1467*53ee8cc1Swenshuai.xi MS_U16 Hal_ADC_get_center_offset(void)
1468*53ee8cc1Swenshuai.xi {
1469*53ee8cc1Swenshuai.xi     return 0x0080;
1470*53ee8cc1Swenshuai.xi }
1471*53ee8cc1Swenshuai.xi 
1472*53ee8cc1Swenshuai.xi MS_U8 Hal_ADC_get_offset_bit_cnt(void)
1473*53ee8cc1Swenshuai.xi {
1474*53ee8cc1Swenshuai.xi     return 8;
1475*53ee8cc1Swenshuai.xi }
1476*53ee8cc1Swenshuai.xi 
1477*53ee8cc1Swenshuai.xi MS_U8 Hal_ADC_get_gain_bit_cnt(void)
1478*53ee8cc1Swenshuai.xi {
1479*53ee8cc1Swenshuai.xi     return 8;
1480*53ee8cc1Swenshuai.xi }
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi void Hal_ADC_auto_adc_backup(SCALER_WIN eWindow)
1483*53ee8cc1Swenshuai.xi {
1484*53ee8cc1Swenshuai.xi     MS_U8 u8Bank;
1485*53ee8cc1Swenshuai.xi 
1486*53ee8cc1Swenshuai.xi     u8Bank = MDrv_ReadByte(BK_SELECT_00);
1487*53ee8cc1Swenshuai.xi 
1488*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1489*53ee8cc1Swenshuai.xi     {
1490*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
1491*53ee8cc1Swenshuai.xi     }
1492*53ee8cc1Swenshuai.xi     else
1493*53ee8cc1Swenshuai.xi     {
1494*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
1495*53ee8cc1Swenshuai.xi     }
1496*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_00    = MDrv_ReadByte(REG_ADC_ATOP_00_L );
1497*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_01    = MDrv_ReadByte(REG_ADC_ATOP_01_L );
1498*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_0C    = MDrv_ReadByte(REG_ADC_ATOP_0C_L );
1499*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_2C    = MDrv_ReadByte(REG_ADC_ATOP_2C_L );
1500*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_1F    = MDrv_ReadByte(REG_ADC_ATOP_1F_L );
1501*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8H_BkAtop_2D    = MDrv_ReadByte(REG_ADC_ATOP_2D_H );
1502*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkDtop_06    = MDrv_ReadByte(REG_ADC_DTOP_06_L );
1503*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkAtop_03    = MDrv_ReadByte(REG_ADC_ATOP_03_L );
1504*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16L_BkAtop_05   = MDrv_Read2Byte(REG_ADC_ATOP_05_L );
1505*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16L_BkAtop_5E   = MDrv_Read2Byte(REG_ADC_ATOP_5E_L );
1506*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8H_BkChipTop_1F = MDrv_ReadByte(H_BK_CHIPTOP(0x1f));
1507*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkChipTop_55 = MDrv_ReadByte(L_BK_CHIPTOP(0x55));
1508*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_BkIpMux_1    = MDrv_ReadByte(L_BK_IPMUX(0x01) );
1509*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1510*53ee8cc1Swenshuai.xi     {
1511*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u8L_SC_BK1_21    = MDrv_ReadByte(L_BK_IP1F1(0x21) );
1512*53ee8cc1Swenshuai.xi     }
1513*53ee8cc1Swenshuai.xi     else
1514*53ee8cc1Swenshuai.xi     {
1515*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u8L_SC_BK1_21    = MDrv_ReadByte(L_BK_IP1F2(0x21) );
1516*53ee8cc1Swenshuai.xi     }
1517*53ee8cc1Swenshuai.xi 
1518*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16BkAtop_1C     = MDrv_Read2Byte(REG_ADC_ATOP_1C_L );
1519*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16BkAtop_05     = MDrv_Read2Byte(REG_ADC_ATOP_05_L);
1520*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16BkAtop_06     = MDrv_Read2Byte(REG_ADC_ATOP_06_L );
1521*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16BkDtop_01     = MDrv_Read2Byte(REG_ADC_DTOP_01_L );
1522*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u16BkDtop_02     = MDrv_Read2Byte(REG_ADC_DTOP_02_L );
1523*53ee8cc1Swenshuai.xi 
1524*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1525*53ee8cc1Swenshuai.xi     {
1526*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_02     = SC_R2BYTE(REG_SC_BK03_02_L);
1527*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_03     = SC_R2BYTE(REG_SC_BK03_03_L);
1528*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_04     = SC_R2BYTE(REG_SC_BK03_04_L);
1529*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_05     = SC_R2BYTE(REG_SC_BK03_05_L);
1530*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_06     = SC_R2BYTE(REG_SC_BK03_06_L);
1531*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_07     = SC_R2BYTE(REG_SC_BK03_07_L);
1532*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_0E     = SC_R2BYTE(REG_SC_BK03_0E_L);
1533*53ee8cc1Swenshuai.xi 
1534*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_01    = SC_R2BYTE(REG_SC_BK12_41_L);
1535*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_03    = SC_R2BYTE(REG_SC_BK12_43_L);
1536*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_04    = SC_R2BYTE(REG_SC_BK12_44_L);
1537*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_0E    = SC_R2BYTE(REG_SC_BK12_4E_L);
1538*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_0F    = SC_R2BYTE(REG_SC_BK12_4F_L);
1539*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_16    = SC_R2BYTE(REG_SC_BK12_56_L);
1540*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_17    = SC_R2BYTE(REG_SC_BK12_57_L);
1541*53ee8cc1Swenshuai.xi 
1542*53ee8cc1Swenshuai.xi         //scaling
1543*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_04    = SC_R2BYTE(REG_SC_BK04_04_L);
1544*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_05    = SC_R2BYTE(REG_SC_BK04_05_L);
1545*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_08    = SC_R2BYTE(REG_SC_BK04_08_L);
1546*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_09    = SC_R2BYTE(REG_SC_BK04_09_L);
1547*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_07    = SC_R2BYTE(REG_SC_BK23_27_L);
1548*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_08    = SC_R2BYTE(REG_SC_BK23_28_L);
1549*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_09    = SC_R2BYTE(REG_SC_BK23_29_L);
1550*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_0A    = SC_R2BYTE(REG_SC_BK23_2A_L);
1551*53ee8cc1Swenshuai.xi 
1552*53ee8cc1Swenshuai.xi         //DNR base
1553*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_08    = SC_R4BYTE(REG_SC_BK12_48_L);
1554*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_0A    = SC_R4BYTE(REG_SC_BK12_4A_L);
1555*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_0C    = SC_R4BYTE(REG_SC_BK12_4C_L);
1556*53ee8cc1Swenshuai.xi         //OPM Base
1557*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_10    = SC_R4BYTE(REG_SC_BK12_50_L);
1558*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_12    = SC_R4BYTE(REG_SC_BK12_52_L);
1559*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_14    = SC_R4BYTE(REG_SC_BK12_54_L);
1560*53ee8cc1Swenshuai.xi 
1561*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK06_01    = SC_R2BYTE(REG_SC_BK06_01_L);
1562*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK06_21    = SC_R2BYTE(REG_SC_BK06_21_L);
1563*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_07    = SC_R2BYTE(REG_SC_BK12_07_L);
1564*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_44    = SC_R2BYTE(REG_SC_BK12_44_L);
1565*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_47    = SC_R2BYTE(REG_SC_BK12_47_L);
1566*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_1A     = SC_R2BYTE(REG_SC_BK12_5A_L);
1567*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_1B     = SC_R2BYTE(REG_SC_BK12_5B_L);
1568*53ee8cc1Swenshuai.xi     }
1569*53ee8cc1Swenshuai.xi     else
1570*53ee8cc1Swenshuai.xi     {
1571*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_02     = SC_R2BYTE(REG_SC_BK01_02_L);
1572*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_03     = SC_R2BYTE(REG_SC_BK01_03_L);
1573*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_04     = SC_R2BYTE(REG_SC_BK01_04_L);
1574*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_05     = SC_R2BYTE(REG_SC_BK01_05_L);
1575*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_06     = SC_R2BYTE(REG_SC_BK01_06_L);
1576*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_07     = SC_R2BYTE(REG_SC_BK01_07_L);
1577*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK1_0E     = SC_R2BYTE(REG_SC_BK01_0E_L);
1578*53ee8cc1Swenshuai.xi 
1579*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_01    = SC_R2BYTE(REG_SC_BK12_01_L);
1580*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_03    = SC_R2BYTE(REG_SC_BK12_03_L);
1581*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_04    = SC_R2BYTE(REG_SC_BK12_04_L);
1582*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_0E    = SC_R2BYTE(REG_SC_BK12_0E_L);
1583*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_0F    = SC_R2BYTE(REG_SC_BK12_0F_L);
1584*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_16    = SC_R2BYTE(REG_SC_BK12_16_L);
1585*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_17    = SC_R2BYTE(REG_SC_BK12_17_L);
1586*53ee8cc1Swenshuai.xi 
1587*53ee8cc1Swenshuai.xi         //scaling
1588*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_04    = SC_R2BYTE(REG_SC_BK02_04_L);
1589*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_05    = SC_R2BYTE(REG_SC_BK02_05_L);
1590*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_08    = SC_R2BYTE(REG_SC_BK02_08_L);
1591*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK02_09    = SC_R2BYTE(REG_SC_BK02_09_L);
1592*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_07    = SC_R2BYTE(REG_SC_BK23_07_L);
1593*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_08    = SC_R2BYTE(REG_SC_BK23_08_L);
1594*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_09    = SC_R2BYTE(REG_SC_BK23_09_L);
1595*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK23_0A    = SC_R2BYTE(REG_SC_BK23_0A_L);
1596*53ee8cc1Swenshuai.xi 
1597*53ee8cc1Swenshuai.xi         //DNR base
1598*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_08    = SC_R4BYTE(REG_SC_BK12_08_L);
1599*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_0A    = SC_R4BYTE(REG_SC_BK12_0A_L);
1600*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_0C    = SC_R4BYTE(REG_SC_BK12_0C_L);
1601*53ee8cc1Swenshuai.xi         //OPM Base
1602*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_10    = SC_R4BYTE(REG_SC_BK12_10_L);
1603*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_12    = SC_R4BYTE(REG_SC_BK12_12_L);
1604*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u32SC_BK12_14    = SC_R4BYTE(REG_SC_BK12_14_L);
1605*53ee8cc1Swenshuai.xi 
1606*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK06_01    = SC_R2BYTE(REG_SC_BK06_01_L);
1607*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK06_21    = SC_R2BYTE(REG_SC_BK06_21_L);
1608*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_07    = SC_R2BYTE(REG_SC_BK12_07_L);
1609*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_44    = SC_R2BYTE(REG_SC_BK12_44_L);
1610*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_47    = SC_R2BYTE(REG_SC_BK12_47_L);
1611*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_1A     = SC_R2BYTE(REG_SC_BK12_1A_L);
1612*53ee8cc1Swenshuai.xi         _stAutoAdcSetting.u16SC_BK12_1B     = SC_R2BYTE(REG_SC_BK12_1B_L);
1613*53ee8cc1Swenshuai.xi     }
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
1616*53ee8cc1Swenshuai.xi     _stAutoAdcSetting.u8L_SC_BK10_19   = MDrv_ReadByte(L_BK_VOP(0x19) );
1617*53ee8cc1Swenshuai.xi 
1618*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_ADC_ATOP_5C_L, 0x30,0x30);  //ldo
1619*53ee8cc1Swenshuai.xi 
1620*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);
1621*53ee8cc1Swenshuai.xi }
1622*53ee8cc1Swenshuai.xi 
1623*53ee8cc1Swenshuai.xi void Hal_ADC_auto_adc_restore(void)
1624*53ee8cc1Swenshuai.xi {
1625*53ee8cc1Swenshuai.xi     MS_U8 u8Bank;
1626*53ee8cc1Swenshuai.xi 
1627*53ee8cc1Swenshuai.xi     u8Bank = MDrv_ReadByte(BK_SELECT_00);
1628*53ee8cc1Swenshuai.xi 
1629*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1630*53ee8cc1Swenshuai.xi     {
1631*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F1);
1632*53ee8cc1Swenshuai.xi     }
1633*53ee8cc1Swenshuai.xi     else
1634*53ee8cc1Swenshuai.xi     {
1635*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_IP1F2);
1636*53ee8cc1Swenshuai.xi     }
1637*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_00_L, _stAutoAdcSetting.u8L_BkAtop_00);
1638*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_01_L, _stAutoAdcSetting.u8L_BkAtop_01);
1639*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_0C_L, _stAutoAdcSetting.u8L_BkAtop_0C);
1640*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_2C_L, _stAutoAdcSetting.u8L_BkAtop_2C);
1641*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_1F_L, _stAutoAdcSetting.u8L_BkAtop_1F);
1642*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_2D_H, _stAutoAdcSetting.u8H_BkAtop_2D);
1643*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_ATOP_03_L, _stAutoAdcSetting.u8L_BkAtop_03);
1644*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L, _stAutoAdcSetting.u16L_BkAtop_05);
1645*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_5E_L, _stAutoAdcSetting.u16L_BkAtop_5E);
1646*53ee8cc1Swenshuai.xi     MDrv_WriteByte(REG_ADC_DTOP_06_L, _stAutoAdcSetting.u8L_BkDtop_06);
1647*53ee8cc1Swenshuai.xi     MDrv_WriteByte(H_BK_CHIPTOP(0x1f), _stAutoAdcSetting.u8H_BkChipTop_1F);
1648*53ee8cc1Swenshuai.xi     MDrv_WriteByte(L_BK_CHIPTOP(0x55), _stAutoAdcSetting.u8L_BkChipTop_55);
1649*53ee8cc1Swenshuai.xi     MDrv_WriteByte(L_BK_IPMUX(0x01), _stAutoAdcSetting.u8L_BkIpMux_1);
1650*53ee8cc1Swenshuai.xi 
1651*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1652*53ee8cc1Swenshuai.xi     {
1653*53ee8cc1Swenshuai.xi         MDrv_WriteByte(L_BK_IP1F1(0x21), _stAutoAdcSetting.u8L_SC_BK1_21);
1654*53ee8cc1Swenshuai.xi     }
1655*53ee8cc1Swenshuai.xi     else
1656*53ee8cc1Swenshuai.xi     {
1657*53ee8cc1Swenshuai.xi         MDrv_WriteByte(L_BK_IP1F2(0x21), _stAutoAdcSetting.u8L_SC_BK1_21);
1658*53ee8cc1Swenshuai.xi     }
1659*53ee8cc1Swenshuai.xi 
1660*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_1C_L, _stAutoAdcSetting.u16BkAtop_1C);
1661*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_05_L, _stAutoAdcSetting.u16BkAtop_05);
1662*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_ATOP_06_L, _stAutoAdcSetting.u16BkAtop_06);
1663*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_DTOP_01_L, _stAutoAdcSetting.u16BkDtop_01);
1664*53ee8cc1Swenshuai.xi     MDrv_Write2Byte(REG_ADC_DTOP_02_L, _stAutoAdcSetting.u16BkDtop_02);
1665*53ee8cc1Swenshuai.xi 
1666*53ee8cc1Swenshuai.xi     if(eWindow == SUB_WINDOW)
1667*53ee8cc1Swenshuai.xi     {
1668*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x02), _stAutoAdcSetting.u16SC_BK1_02);
1669*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x03), _stAutoAdcSetting.u16SC_BK1_03);
1670*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x04), _stAutoAdcSetting.u16SC_BK1_04);
1671*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x05), _stAutoAdcSetting.u16SC_BK1_05);
1672*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x06), _stAutoAdcSetting.u16SC_BK1_06);
1673*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1Fr(0x07), _stAutoAdcSetting.u16SC_BK1_07);
1674*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F1(0x0E), _stAutoAdcSetting.u16SC_BK1_0E);
1675*53ee8cc1Swenshuai.xi 
1676*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_SCMI);
1677*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x41), _stAutoAdcSetting.u16SC_BK12_01);
1678*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x43), _stAutoAdcSetting.u16SC_BK12_03);
1679*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x44), _stAutoAdcSetting.u16SC_BK12_04);
1680*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x4E), _stAutoAdcSetting.u16SC_BK12_0E);
1681*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x4F), _stAutoAdcSetting.u16SC_BK12_0F);
1682*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x56), _stAutoAdcSetting.u16SC_BK12_16);
1683*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x57), _stAutoAdcSetting.u16SC_BK12_17);
1684*53ee8cc1Swenshuai.xi 
1685*53ee8cc1Swenshuai.xi         //scaling
1686*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK04_04_L, _stAutoAdcSetting.u16SC_BK02_04);
1687*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK04_05_L, _stAutoAdcSetting.u16SC_BK02_05);
1688*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK04_08_L, _stAutoAdcSetting.u16SC_BK02_08);
1689*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK04_09_L, _stAutoAdcSetting.u16SC_BK02_09);
1690*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_27_L, _stAutoAdcSetting.u16SC_BK23_07);
1691*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_28_L, _stAutoAdcSetting.u16SC_BK23_08);
1692*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_29_L, _stAutoAdcSetting.u16SC_BK23_09);
1693*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_2A_L, _stAutoAdcSetting.u16SC_BK23_0A);
1694*53ee8cc1Swenshuai.xi 
1695*53ee8cc1Swenshuai.xi         //DNR,OPM Base
1696*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_48_L, _stAutoAdcSetting.u32SC_BK12_08);
1697*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_4A_L, _stAutoAdcSetting.u32SC_BK12_0A);
1698*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_4C_L, _stAutoAdcSetting.u32SC_BK12_0C);
1699*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_50_L, _stAutoAdcSetting.u32SC_BK12_10);
1700*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_52_L, _stAutoAdcSetting.u32SC_BK12_12);
1701*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_54_L, _stAutoAdcSetting.u32SC_BK12_14);
1702*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_5A_L, _stAutoAdcSetting.u16SC_BK12_1A);
1703*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_5B_L, _stAutoAdcSetting.u16SC_BK12_1B);
1704*53ee8cc1Swenshuai.xi 
1705*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK06_01_L, _stAutoAdcSetting.u16SC_BK06_01);
1706*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK06_21_L, _stAutoAdcSetting.u16SC_BK06_21);
1707*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_07_L, _stAutoAdcSetting.u16SC_BK12_07);
1708*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_44_L, _stAutoAdcSetting.u16SC_BK12_44);
1709*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_47_L, _stAutoAdcSetting.u16SC_BK12_47);
1710*53ee8cc1Swenshuai.xi     }
1711*53ee8cc1Swenshuai.xi     else
1712*53ee8cc1Swenshuai.xi     {
1713*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x02), _stAutoAdcSetting.u16SC_BK1_02);
1714*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x03), _stAutoAdcSetting.u16SC_BK1_03);
1715*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x04), _stAutoAdcSetting.u16SC_BK1_04);
1716*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x05), _stAutoAdcSetting.u16SC_BK1_05);
1717*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x06), _stAutoAdcSetting.u16SC_BK1_06);
1718*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x07), _stAutoAdcSetting.u16SC_BK1_07);
1719*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_IP1F2(0x0E), _stAutoAdcSetting.u16SC_BK1_0E);
1720*53ee8cc1Swenshuai.xi 
1721*53ee8cc1Swenshuai.xi         MDrv_WriteByte(BK_SELECT_00, REG_BANK_SCMI);
1722*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x01), _stAutoAdcSetting.u16SC_BK12_01);
1723*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x03), _stAutoAdcSetting.u16SC_BK12_03);
1724*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x04), _stAutoAdcSetting.u16SC_BK12_04);
1725*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x0E), _stAutoAdcSetting.u16SC_BK12_0E);
1726*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x0F), _stAutoAdcSetting.u16SC_BK12_0F);
1727*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x16), _stAutoAdcSetting.u16SC_BK12_16);
1728*53ee8cc1Swenshuai.xi         MDrv_Write2Byte(L_BK_SCMI(0x17), _stAutoAdcSetting.u16SC_BK12_17);
1729*53ee8cc1Swenshuai.xi 
1730*53ee8cc1Swenshuai.xi         //scaling
1731*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK02_04_L, _stAutoAdcSetting.u16SC_BK02_04);
1732*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK02_05_L, _stAutoAdcSetting.u16SC_BK02_05);
1733*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK02_08_L, _stAutoAdcSetting.u16SC_BK02_08);
1734*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK02_09_L, _stAutoAdcSetting.u16SC_BK02_09);
1735*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_07_L, _stAutoAdcSetting.u16SC_BK23_07);
1736*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_08_L, _stAutoAdcSetting.u16SC_BK23_08);
1737*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_09_L, _stAutoAdcSetting.u16SC_BK23_09);
1738*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK23_0A_L, _stAutoAdcSetting.u16SC_BK23_0A);
1739*53ee8cc1Swenshuai.xi 
1740*53ee8cc1Swenshuai.xi         //DNR,OPM Base
1741*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_08_L, _stAutoAdcSetting.u32SC_BK12_08);
1742*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_0A_L, _stAutoAdcSetting.u32SC_BK12_0A);
1743*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_0C_L, _stAutoAdcSetting.u32SC_BK12_0C);
1744*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_10_L, _stAutoAdcSetting.u32SC_BK12_10);
1745*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_12_L, _stAutoAdcSetting.u32SC_BK12_12);
1746*53ee8cc1Swenshuai.xi         SC_W4BYTE(REG_SC_BK12_14_L, _stAutoAdcSetting.u32SC_BK12_14);
1747*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_1A_L, _stAutoAdcSetting.u16SC_BK12_1A);
1748*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_1B_L, _stAutoAdcSetting.u16SC_BK12_1B);
1749*53ee8cc1Swenshuai.xi 
1750*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK06_01_L, _stAutoAdcSetting.u16SC_BK06_01);
1751*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK06_21_L, _stAutoAdcSetting.u16SC_BK06_21);
1752*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_07_L, _stAutoAdcSetting.u16SC_BK12_07);
1753*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_44_L, _stAutoAdcSetting.u16SC_BK12_44);
1754*53ee8cc1Swenshuai.xi         SC_W2BYTE(REG_SC_BK12_47_L, _stAutoAdcSetting.u16SC_BK12_47);
1755*53ee8cc1Swenshuai.xi     }
1756*53ee8cc1Swenshuai.xi 
1757*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_ADC_ATOP_5C_L, 0x00,0x70);
1758*53ee8cc1Swenshuai.xi 
1759*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, REG_BANK_VOP);
1760*53ee8cc1Swenshuai.xi     MDrv_WriteByte(L_BK_VOP(0x19),_stAutoAdcSetting.u8L_SC_BK10_19  );
1761*53ee8cc1Swenshuai.xi 
1762*53ee8cc1Swenshuai.xi     MDrv_WriteByte(BK_SELECT_00, u8Bank);
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi 
1765*53ee8cc1Swenshuai.xi MS_BOOL Hal_ADC_is_scart_rgb(void)
1766*53ee8cc1Swenshuai.xi {
1767*53ee8cc1Swenshuai.xi     MS_BOOL bRGB;
1768*53ee8cc1Swenshuai.xi     MS_U8 u8Flag;
1769*53ee8cc1Swenshuai.xi 
1770*53ee8cc1Swenshuai.xi     u8Flag = MDrv_ReadByte(REG_ADC_ATOP_45_H);
1771*53ee8cc1Swenshuai.xi 
1772*53ee8cc1Swenshuai.xi     if((u8Flag & 0x50) == 0x10)
1773*53ee8cc1Swenshuai.xi         bRGB = TRUE;
1774*53ee8cc1Swenshuai.xi     else
1775*53ee8cc1Swenshuai.xi         bRGB = FALSE;
1776*53ee8cc1Swenshuai.xi 
1777*53ee8cc1Swenshuai.xi     MDrv_WriteByteMask(REG_ADC_ATOP_45_H, 0x20, 0x20);
1778*53ee8cc1Swenshuai.xi 
1779*53ee8cc1Swenshuai.xi     return bRGB;
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi 
1782*53ee8cc1Swenshuai.xi MS_U16 Hal_ADC_get_clk (void)
1783*53ee8cc1Swenshuai.xi {
1784*53ee8cc1Swenshuai.xi     //u16Value -= 3; // actual - 3
1785*53ee8cc1Swenshuai.xi  //ADC PLL divider ratio (htotal-3), (write sequence LSB -> MSB)
1786*53ee8cc1Swenshuai.xi     return (R2BYTEMSK(REG_ADC_DTOP_00_L, 0xFFFF)+3);//(REG_ADC_DTOP_00_L, u16Value);
1787*53ee8cc1Swenshuai.xi }
1788*53ee8cc1Swenshuai.xi 
1789*53ee8cc1Swenshuai.xi MS_BOOL Hal_ADC_set_SoG_Calibration(void)
1790*53ee8cc1Swenshuai.xi {
1791*53ee8cc1Swenshuai.xi     // Reset SoG Online/Offline calibration depend on chip
1792*53ee8cc1Swenshuai.xi     return TRUE;
1793*53ee8cc1Swenshuai.xi }
1794*53ee8cc1Swenshuai.xi 
1795*53ee8cc1Swenshuai.xi /******************************************************************************/
1796*53ee8cc1Swenshuai.xi ///This function return SOG level range
1797*53ee8cc1Swenshuai.xi ///@param u32Min \b OUT: min of SOG level
1798*53ee8cc1Swenshuai.xi ///@param u32Max \b OUT: max of SOG level
1799*53ee8cc1Swenshuai.xi ///@param u32Recommend_value \b OUT: recommend value
1800*53ee8cc1Swenshuai.xi /******************************************************************************/
1801*53ee8cc1Swenshuai.xi void Hal_ADC_get_SoG_LevelRange(MS_U32 *u32Min, MS_U32 *u32Max, MS_U32 *u32Recommend_value)
1802*53ee8cc1Swenshuai.xi {
1803*53ee8cc1Swenshuai.xi     *u32Min = 0;
1804*53ee8cc1Swenshuai.xi     *u32Max = 0;
1805*53ee8cc1Swenshuai.xi     *u32Recommend_value = 0;
1806*53ee8cc1Swenshuai.xi }
1807*53ee8cc1Swenshuai.xi 
1808*53ee8cc1Swenshuai.xi /******************************************************************************/
1809*53ee8cc1Swenshuai.xi ///This function Set SOG Level
1810*53ee8cc1Swenshuai.xi ///@param u32Value \b IN: set SOG value
1811*53ee8cc1Swenshuai.xi /******************************************************************************/
1812*53ee8cc1Swenshuai.xi void Hal_ADC_set_SoG_Level(MS_U32 u32Value)
1813*53ee8cc1Swenshuai.xi {
1814*53ee8cc1Swenshuai.xi     UNUSED(u32Value);
1815*53ee8cc1Swenshuai.xi }
1816*53ee8cc1Swenshuai.xi 
1817*53ee8cc1Swenshuai.xi /******************************************************************************/
1818*53ee8cc1Swenshuai.xi ///select RGB input pipe delay, this reg will decide the H start of SCART RGB
1819*53ee8cc1Swenshuai.xi ///@param u32Value \b IN: set PIPE Delay value
1820*53ee8cc1Swenshuai.xi /******************************************************************************/
1821*53ee8cc1Swenshuai.xi void Hal_ADC_set_RGB_PIPE_Delay(MS_U8 u8Value)
1822*53ee8cc1Swenshuai.xi {
1823*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_ATOP_43_L, (u8Value<<8), 0x7F00);
1824*53ee8cc1Swenshuai.xi }
1825*53ee8cc1Swenshuai.xi 
1826*53ee8cc1Swenshuai.xi /******************************************************************************/
1827*53ee8cc1Swenshuai.xi ///This function set Scart RGB Sync on Green clamp delay.
1828*53ee8cc1Swenshuai.xi ///@param u16Value \b IN: set clamp delay value
1829*53ee8cc1Swenshuai.xi /******************************************************************************/
1830*53ee8cc1Swenshuai.xi void Hal_ADC_set_ScartRGB_SOG_ClampDelay(MS_U16 u16Clpdly, MS_U16 u16Caldur)
1831*53ee8cc1Swenshuai.xi {
1832*53ee8cc1Swenshuai.xi     return;
1833*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_17_L, u16Clpdly, 0x0FFF);
1834*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_18_L, u16Caldur, 0x00FF);
1835*53ee8cc1Swenshuai.xi }
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi /******************************************************************************/
1838*53ee8cc1Swenshuai.xi ///This function set YPbPr Loose LPF.
1839*53ee8cc1Swenshuai.xi ///@param benable \b IN: enable or disable
1840*53ee8cc1Swenshuai.xi /******************************************************************************/
1841*53ee8cc1Swenshuai.xi void Hal_ADC_set_YPbPrLooseLPF(MS_BOOL benable)
1842*53ee8cc1Swenshuai.xi {
1843*53ee8cc1Swenshuai.xi     //Obsolate in u4
1844*53ee8cc1Swenshuai.xi }
1845*53ee8cc1Swenshuai.xi 
1846*53ee8cc1Swenshuai.xi /******************************************************************************/
1847*53ee8cc1Swenshuai.xi ///This function set SOG BW
1848*53ee8cc1Swenshuai.xi ///@param u16value \b IN: value of SOG BW
1849*53ee8cc1Swenshuai.xi /******************************************************************************/
1850*53ee8cc1Swenshuai.xi void Hal_ADC_Set_SOGBW(MS_U16 u16value)
1851*53ee8cc1Swenshuai.xi {
1852*53ee8cc1Swenshuai.xi     u16value = u16value;
1853*53ee8cc1Swenshuai.xi }
1854*53ee8cc1Swenshuai.xi 
1855*53ee8cc1Swenshuai.xi /******************************************************************************/
1856*53ee8cc1Swenshuai.xi ///Set negative clamping duration..
1857*53ee8cc1Swenshuai.xi ///@param u16Value \b IN: set clamp delay value
1858*53ee8cc1Swenshuai.xi /******************************************************************************/
1859*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_iClampDuration_setting(MS_U16 u16value)
1860*53ee8cc1Swenshuai.xi {
1861*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_18_L, u16value, LBMASK);
1862*53ee8cc1Swenshuai.xi }
1863*53ee8cc1Swenshuai.xi 
1864*53ee8cc1Swenshuai.xi /******************************************************************************/
1865*53ee8cc1Swenshuai.xi ///Set postive clamping duration..
1866*53ee8cc1Swenshuai.xi ///@param u16Value \b IN: set clamp delay value
1867*53ee8cc1Swenshuai.xi /******************************************************************************/
1868*53ee8cc1Swenshuai.xi void Hal_ADC_dtop_vClampDuration_setting(MS_U16 u16value)
1869*53ee8cc1Swenshuai.xi {
1870*53ee8cc1Swenshuai.xi     W2BYTEMSK(REG_ADC_DTOP_08_L, u16value, LBMASK);
1871*53ee8cc1Swenshuai.xi }
1872*53ee8cc1Swenshuai.xi #endif
1873*53ee8cc1Swenshuai.xi 
1874*53ee8cc1Swenshuai.xi #undef MHAL_ADC_C
1875*53ee8cc1Swenshuai.xi 
1876