xref: /utopia/UTPA2-700.0.x/modules/demodulator/drv/demod/drvDMD_INTERN_DVBT_v2.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 
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// file    drvAVD.c
98*53ee8cc1Swenshuai.xi /// @brief  AVD Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
104*53ee8cc1Swenshuai.xi //  Include Files
105*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi // Common Definition
107*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
108*53ee8cc1Swenshuai.xi #include <linux/string.h>
109*53ee8cc1Swenshuai.xi #else
110*53ee8cc1Swenshuai.xi #include <string.h>
111*53ee8cc1Swenshuai.xi #include <stdio.h>
112*53ee8cc1Swenshuai.xi #include <math.h>
113*53ee8cc1Swenshuai.xi #endif
114*53ee8cc1Swenshuai.xi #include "MsCommon.h"
115*53ee8cc1Swenshuai.xi #include "MsVersion.h"
116*53ee8cc1Swenshuai.xi #include "MsOS.h"
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi // Internal Definition
119*53ee8cc1Swenshuai.xi //#include "regCHIP.h"
120*53ee8cc1Swenshuai.xi //#include "regAVD.h"
121*53ee8cc1Swenshuai.xi //#include "mapi_tuner.h"
122*53ee8cc1Swenshuai.xi #include "drvSYS.h"
123*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
124*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBT_v2.h"
125*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBT.h"
126*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
127*53ee8cc1Swenshuai.xi #include "drvSAR.h"  // for Utopia2
128*53ee8cc1Swenshuai.xi #include "utopia.h"
129*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
130*53ee8cc1Swenshuai.xi #include "../../utopia_core/utopia_driver_id.h"
131*53ee8cc1Swenshuai.xi #include "ULog.h"
132*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
133*53ee8cc1Swenshuai.xi //  Driver Compiler Options
134*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
138*53ee8cc1Swenshuai.xi //  Local Defines
139*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi //  Local Structurs
144*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
148*53ee8cc1Swenshuai.xi //  Global Variables
149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi #define DMD_LOCK()      \
151*53ee8cc1Swenshuai.xi     do{                         \
152*53ee8cc1Swenshuai.xi         MS_ASSERT(MsOS_In_Interrupt() == FALSE); \
153*53ee8cc1Swenshuai.xi         if (_s32DMD_DVBT_Mutex == -1) return FALSE; \
154*53ee8cc1Swenshuai.xi         if (_u8DMDDbgLevel == DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s lock mutex\n", __FUNCTION__);\
155*53ee8cc1Swenshuai.xi         MsOS_ObtainMutex(_s32DMD_DVBT_Mutex, MSOS_WAIT_FOREVER);\
156*53ee8cc1Swenshuai.xi         }while(0)
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi #define DMD_UNLOCK()      \
159*53ee8cc1Swenshuai.xi     do{                         \
160*53ee8cc1Swenshuai.xi         MsOS_ReleaseMutex(_s32DMD_DVBT_Mutex);\
161*53ee8cc1Swenshuai.xi         if (_u8DMDDbgLevel == DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s unlock mutex\n", __FUNCTION__); \
162*53ee8cc1Swenshuai.xi         }while(0)
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi #if 0
165*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_EN =0;
166*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_NUM = 0;
167*53ee8cc1Swenshuai.xi #endif
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
170*53ee8cc1Swenshuai.xi //  Local Variables
171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
172*53ee8cc1Swenshuai.xi MS_BOOL bIsDVBT = FALSE;       // Usage for STR
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi // YP mark
175*53ee8cc1Swenshuai.xi #if 0
176*53ee8cc1Swenshuai.xi 
177*53ee8cc1Swenshuai.xi #if 1
178*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version = {
179*53ee8cc1Swenshuai.xi     .MW = { DMD_DVBT_INTERN_VER, },
180*53ee8cc1Swenshuai.xi };
181*53ee8cc1Swenshuai.xi #else
182*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version;
183*53ee8cc1Swenshuai.xi #endif
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi static DMD_DVBT_InitData _sDMD_DVBT_InitData;
186*53ee8cc1Swenshuai.xi static DMD_DbgLv _u8DMDDbgLevel=DMD_DBGLV_NONE;
187*53ee8cc1Swenshuai.xi static MS_S32 _s32DMD_DVBT_Mutex=-1;
188*53ee8cc1Swenshuai.xi static DMD_DVBT_Info sDMD_DVBT_Info;
189*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBT_TPS_Timeout = 1500, u16DMD_DVBT_FEC_Timeout=6000;
190*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBT_IfFrequency = 36167L, u32DMD_DVBT_FsFrequency = 45474L;
191*53ee8cc1Swenshuai.xi static MS_U8 u8DMD_DVBT_IQSwap=0;
192*53ee8cc1Swenshuai.xi static DMD_RF_CHANNEL_BANDWIDTH eDMD_DVBT_BandWidth=E_DMD_RF_CH_BAND_8MHz;
193*53ee8cc1Swenshuai.xi #endif
194*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
195*53ee8cc1Swenshuai.xi //  Debug Functions
196*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
197*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
198*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          (x)
199*53ee8cc1Swenshuai.xi #else
200*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          // (x)
201*53ee8cc1Swenshuai.xi #endif
202*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
203*53ee8cc1Swenshuai.xi //  Local Functions
204*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
205*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_Init)(DMD_DVBT_InitData_Transform*, MS_U32);
206*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_Exit)(void);
207*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetDbgLevel)(DMD_DbgLv);
208*53ee8cc1Swenshuai.xi //typedef DMD_DVBT_Info*       (*IOCTL_DVBT_GetInfo)(DMD_DVBT_INFO_TYPE);
209*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetLibVer)(const MSIF_Version **);
210*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetFWVer)(MS_U16 *);
211*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetReg)(MS_U16, MS_U8 *);
212*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetReg)(MS_U16, MS_U8);
213*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetSerialControl)(MS_BOOL);
214*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetConfig)(DMD_RF_CHANNEL_BANDWIDTH, MS_BOOL, MS_BOOL);
215*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetConfigHPLP)(DMD_RF_CHANNEL_BANDWIDTH, MS_BOOL, MS_BOOL, MS_BOOL);
216*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetConfigHPLPSetIF)(DMD_RF_CHANNEL_BANDWIDTH, MS_BOOL, MS_BOOL, MS_BOOL, MS_U32, MS_U32, MS_U8);
217*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_SetActive)(MS_BOOL);
218*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetLock)(DMD_DVBT_GETLOCK_TYPE, DMD_LOCK_STATUS *);
219*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetSignalStrength)(MS_U16 *);
220*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetSignalStrengthWithRFPower)(MS_U16 *, float);
221*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetSignalQuality)(MS_U16 *);
222*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetSignalQualityWithRFPower)(MS_U16 *, float);
223*53ee8cc1Swenshuai.xi //arthur
224*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetSNR)(MS_U32 *);
225*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetPostViterbiBer)(MS_U16 *,MS_U32 *,MS_U16 *);
226*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBT_GetIFAGC)(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err);
227*53ee8cc1Swenshuai.xi 
228*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetPreViterbiBer)(float *);
229*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetPacketErr)(MS_U16 *);
230*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetTPSInfo)(MS_U16 *);
231*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBT_GetCellID)(MS_U16 *);
232*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_GetFreqOffset)(float *);
233*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_NORDIGSSITableWrite)(DMD_CONSTEL, DMD_CODERATE, float);
234*53ee8cc1Swenshuai.xi //typedef MS_BOOL                   (*IOCTL_DVBT_NORDIGSSITableRead)(DMD_CONSTEL, DMD_CODERATE, float*);
235*53ee8cc1Swenshuai.xi typedef MS_U32                     (*IOCTL_DVBT_SetPowerState)(EN_POWER_MODE);
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi typedef struct DVBT_INSTANT_PRIVATE
238*53ee8cc1Swenshuai.xi {
239*53ee8cc1Swenshuai.xi     IOCTL_DVBT_Init                 fpDVBTInit;
240*53ee8cc1Swenshuai.xi     IOCTL_DVBT_Exit                  fpDVBTExit;
241*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetDbgLevel     fpDVBTSetDbgLevel;
242*53ee8cc1Swenshuai.xi     //IOCTL_DVBT_GetInfo              fpDVBTGetInfo;
243*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetLibVer               fpDVBTGetLibVer;
244*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetFWVer                fpDVBTGetFWVer;
245*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetReg               fpDVBTGetReg;
246*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetReg                fpDVBTSetReg;
247*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetSerialControl      fpDVBTSetSerialControl;
248*53ee8cc1Swenshuai.xi   //  IOCTL_DVBT_SetConfig                fpDVBTSetConfig;
249*53ee8cc1Swenshuai.xi   //  IOCTL_DVBT_SetConfigHPLP         fpDVBTSetConfigHPLP;
250*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetConfigHPLPSetIF    fpDVBTSetConfigHPLPSetIF;
251*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetActive    fpDVBTSetActive;
252*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetLock    fpDVBTGetLock;
253*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetSignalStrength    fpDVBTGetSignalStrength;
254*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetSignalStrengthWithRFPower     fpDVBTGetSignalStrengthWithRFPower;
255*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetSignalQuality    fpDVBTGetSignalQuality;
256*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetSignalQualityWithRFPower    fpDVBTGetSignalQualityWithRFPower;
257*53ee8cc1Swenshuai.xi //arthur
258*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetIFAGC    fpDVBT_GetIFAGC;
259*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetSNR    fpDVBTGetSNR;
260*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetPostViterbiBer    fpDVBTGetPostViterbiBer;
261*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetPreViterbiBer    fpDVBTGetPreViterbiBer;
262*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetPacketErr    fpDVBTGetPacketErr;
263*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetTPSInfo    fpDVBTGetTPSInfo;
264*53ee8cc1Swenshuai.xi     IOCTL_DVBT_GetCellID    fpDVBTGetCellID;
265*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_GetFreqOffset    fpDVBTGetFreqOffset;
266*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_NORDIGSSITableWrite    fpDVBTNORDIGSSITableWrite;
267*53ee8cc1Swenshuai.xi //    IOCTL_DVBT_NORDIGSSITableRead    fpDVBTNORDIGSSITableRead;
268*53ee8cc1Swenshuai.xi     IOCTL_DVBT_SetPowerState        fpDVBTSetPowerState;
269*53ee8cc1Swenshuai.xi } DVBT_INSTANT_PRIVATE;
270*53ee8cc1Swenshuai.xi 
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi /***********************************
273*53ee8cc1Swenshuai.xi original driver code define
274*53ee8cc1Swenshuai.xi ************************************/
275*53ee8cc1Swenshuai.xi #define DMD_LOCK()      \
276*53ee8cc1Swenshuai.xi     do{                         \
277*53ee8cc1Swenshuai.xi         MS_ASSERT(MsOS_In_Interrupt() == FALSE); \
278*53ee8cc1Swenshuai.xi         if (_s32DMD_DVBT_Mutex == -1) return FALSE; \
279*53ee8cc1Swenshuai.xi         if (_u8DMDDbgLevel == DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s lock mutex\n", __FUNCTION__);\
280*53ee8cc1Swenshuai.xi         MsOS_ObtainMutex(_s32DMD_DVBT_Mutex, MSOS_WAIT_FOREVER);\
281*53ee8cc1Swenshuai.xi         }while(0)
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi #define DMD_UNLOCK()      \
284*53ee8cc1Swenshuai.xi     do{                         \
285*53ee8cc1Swenshuai.xi         MsOS_ReleaseMutex(_s32DMD_DVBT_Mutex);\
286*53ee8cc1Swenshuai.xi         if (_u8DMDDbgLevel == DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s unlock mutex\n", __FUNCTION__); \
287*53ee8cc1Swenshuai.xi         }while(0)
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_EN =0;
290*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_NUM = 0;
291*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
292*53ee8cc1Swenshuai.xi //  Local Variables
293*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
294*53ee8cc1Swenshuai.xi #if 1
295*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version = {
296*53ee8cc1Swenshuai.xi     .MW = { DMD_DVBT_INTERN_VER, },
297*53ee8cc1Swenshuai.xi };
298*53ee8cc1Swenshuai.xi #else
299*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version;
300*53ee8cc1Swenshuai.xi #endif
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi //bryan temp mark
303*53ee8cc1Swenshuai.xi #if(0)
304*53ee8cc1Swenshuai.xi static DMD_DVBT_InitData _sDMD_DVBT_InitData;
305*53ee8cc1Swenshuai.xi #else
306*53ee8cc1Swenshuai.xi static DMD_DVBT_InitData_Transform _sDMD_DVBT_InitData;
307*53ee8cc1Swenshuai.xi #endif
308*53ee8cc1Swenshuai.xi static DMD_DbgLv _u8DMDDbgLevel=DMD_DBGLV_NONE;
309*53ee8cc1Swenshuai.xi static MS_S32 _s32DMD_DVBT_Mutex=-1;
310*53ee8cc1Swenshuai.xi static DMD_DVBT_Info sDMD_DVBT_Info;
311*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBT_TPS_Timeout = 1500, u16DMD_DVBT_FEC_Timeout=6000;
312*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBT_IfFrequency = 36167L, u32DMD_DVBT_FsFrequency = 45474L;
313*53ee8cc1Swenshuai.xi static MS_U8 u8DMD_DVBT_IQSwap=0;
314*53ee8cc1Swenshuai.xi static DMD_RF_CHANNEL_BANDWIDTH eDMD_DVBT_BandWidth=E_DMD_RF_CH_BAND_8MHz;
315*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
316*53ee8cc1Swenshuai.xi //  Debug Functions
317*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
318*53ee8cc1Swenshuai.xi #if(0)
319*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
320*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          (x)
321*53ee8cc1Swenshuai.xi #else
322*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          //(x)
323*53ee8cc1Swenshuai.xi #endif
324*53ee8cc1Swenshuai.xi #endif
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi 
327*53ee8cc1Swenshuai.xi /* bryan temp mark*/
328*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_Init(DMD_DVBT_InitData * pDMD_DVBT_InitData,MS_U32 u32InitDataLen)329*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_Init(DMD_DVBT_InitData *pDMD_DVBT_InitData, MS_U32 u32InitDataLen)
330*53ee8cc1Swenshuai.xi {
331*53ee8cc1Swenshuai.xi     char pDMD_DVBT_MutexString[16];
332*53ee8cc1Swenshuai.xi     MS_U8 u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
333*53ee8cc1Swenshuai.xi     MS_BOOL bRFAGCTristateEnable = 1;
334*53ee8cc1Swenshuai.xi     MS_BOOL bIFAGCTristateEnable = 0;
335*53ee8cc1Swenshuai.xi 
336*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBT_Mutex != -1)
337*53ee8cc1Swenshuai.xi     {
338*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init more than once\n"));
339*53ee8cc1Swenshuai.xi         return FALSE;
340*53ee8cc1Swenshuai.xi     }
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi     if (NULL == strncpy(pDMD_DVBT_MutexString,"Mutex DMD DVBT",16))
343*53ee8cc1Swenshuai.xi     {
344*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init strcpy Fail\n"));
345*53ee8cc1Swenshuai.xi         return FALSE;
346*53ee8cc1Swenshuai.xi     }
347*53ee8cc1Swenshuai.xi     _s32DMD_DVBT_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBT_MutexString, MSOS_PROCESS_SHARED);
348*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBT_Mutex == -1)
349*53ee8cc1Swenshuai.xi     {
350*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init Create Mutex Fail\n"));
351*53ee8cc1Swenshuai.xi         return FALSE;
352*53ee8cc1Swenshuai.xi     }
353*53ee8cc1Swenshuai.xi     //_u8DMDDbgLevel = DMD_DBGLV_DEBUG;
354*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
355*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_INFO)
356*53ee8cc1Swenshuai.xi     {
357*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_Init\n");
358*53ee8cc1Swenshuai.xi     }
359*53ee8cc1Swenshuai.xi     #endif
360*53ee8cc1Swenshuai.xi 
361*53ee8cc1Swenshuai.xi     if ( sizeof(_sDMD_DVBT_InitData) == u32InitDataLen)
362*53ee8cc1Swenshuai.xi     {
363*53ee8cc1Swenshuai.xi         memcpy(&_sDMD_DVBT_InitData, pDMD_DVBT_InitData, u32InitDataLen);
364*53ee8cc1Swenshuai.xi     }
365*53ee8cc1Swenshuai.xi     else
366*53ee8cc1Swenshuai.xi     {
367*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init input data structure incorrect\n"));
368*53ee8cc1Swenshuai.xi         return FALSE;
369*53ee8cc1Swenshuai.xi     }
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8SarChannel != 0xFF)
372*53ee8cc1Swenshuai.xi     {
373*53ee8cc1Swenshuai.xi         MDrv_SAR_Adc_Config(_sDMD_DVBT_InitData.u8SarChannel, TRUE);
374*53ee8cc1Swenshuai.xi     }
375*53ee8cc1Swenshuai.xi 
376*53ee8cc1Swenshuai.xi     DMD_LOCK();
377*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBT);
378*53ee8cc1Swenshuai.xi     HAL_DMD_RegInit();
379*53ee8cc1Swenshuai.xi 
380*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
381*53ee8cc1Swenshuai.xi     {
382*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=2)
383*53ee8cc1Swenshuai.xi         {
384*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3] & (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
385*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3] & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
386*53ee8cc1Swenshuai.xi         }
387*53ee8cc1Swenshuai.xi         else
388*53ee8cc1Swenshuai.xi         {
389*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = 1;
390*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = 0;
391*53ee8cc1Swenshuai.xi         }
392*53ee8cc1Swenshuai.xi     }
393*53ee8cc1Swenshuai.xi     else
394*53ee8cc1Swenshuai.xi     {
395*53ee8cc1Swenshuai.xi         bRFAGCTristateEnable = 1;
396*53ee8cc1Swenshuai.xi         bIFAGCTristateEnable = 0;
397*53ee8cc1Swenshuai.xi     }
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
400*53ee8cc1Swenshuai.xi     {
401*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=3)
402*53ee8cc1Swenshuai.xi         {
403*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[4]; // IF frequency
404*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[5]; // IF frequency
405*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[6]; // IF frequency
406*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[7]; // IF frequency
407*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[8]; // FS frequency
408*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[9]; // FS frequency
409*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[10]; // FS frequency
410*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[11]; // FS frequency
411*53ee8cc1Swenshuai.xi             u8DMD_DVBT_IQSwap = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[12]; // IQ Swap
412*53ee8cc1Swenshuai.xi 
413*53ee8cc1Swenshuai.xi             u8ADCIQMode = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[13]; // u8ADCIQMode : 0=I path, 1=Q path, 2=both IQ
414*53ee8cc1Swenshuai.xi             u8PadSel = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[14]; // u8PadSel : 0=Normal, 1=analog pad
415*53ee8cc1Swenshuai.xi             bPGAEnable = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[15]; // bPGAEnable : 0=disable, 1=enable
416*53ee8cc1Swenshuai.xi             u8PGAGain = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[16]; // u8PGAGain : default 5
417*53ee8cc1Swenshuai.xi         }
418*53ee8cc1Swenshuai.xi         else
419*53ee8cc1Swenshuai.xi         {
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi         }
422*53ee8cc1Swenshuai.xi     }
423*53ee8cc1Swenshuai.xi     else
424*53ee8cc1Swenshuai.xi     {
425*53ee8cc1Swenshuai.xi 
426*53ee8cc1Swenshuai.xi     }
427*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
428*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32DMD_DVBT_IfFrequency %ld\n",u32DMD_DVBT_IfFrequency);
429*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32DMD_DVBT_FsFrequency %ld\n",u32DMD_DVBT_FsFrequency);
430*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u8DMD_DVBT_IQSwap %d\n",u8DMD_DVBT_IQSwap);
431*53ee8cc1Swenshuai.xi     #endif
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi     u16DMD_DVBT_TPS_Timeout = 1500;
434*53ee8cc1Swenshuai.xi     u16DMD_DVBT_FEC_Timeout = 6000;
435*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
436*53ee8cc1Swenshuai.xi     {
437*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=4)
438*53ee8cc1Swenshuai.xi         {
439*53ee8cc1Swenshuai.xi             u16DMD_DVBT_TPS_Timeout = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[17]; // TPS timeout in ms
440*53ee8cc1Swenshuai.xi             u16DMD_DVBT_TPS_Timeout =  (u16DMD_DVBT_TPS_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[18];
441*53ee8cc1Swenshuai.xi             if (u16DMD_DVBT_TPS_Timeout < 700) u16DMD_DVBT_TPS_Timeout=700;
442*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBT_TPS_Timeout %d\n",u16DMD_DVBT_TPS_Timeout);
443*53ee8cc1Swenshuai.xi 
444*53ee8cc1Swenshuai.xi             u16DMD_DVBT_FEC_Timeout = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[19]; // FEC timeout in ms
445*53ee8cc1Swenshuai.xi             u16DMD_DVBT_FEC_Timeout =  (u16DMD_DVBT_FEC_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[20];
446*53ee8cc1Swenshuai.xi             if (u16DMD_DVBT_FEC_Timeout < 2500) u16DMD_DVBT_FEC_Timeout=2500;
447*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBT_FEC_Timeout %d\n",u16DMD_DVBT_FEC_Timeout);
448*53ee8cc1Swenshuai.xi         }
449*53ee8cc1Swenshuai.xi         else
450*53ee8cc1Swenshuai.xi         {
451*53ee8cc1Swenshuai.xi         }
452*53ee8cc1Swenshuai.xi     }
453*53ee8cc1Swenshuai.xi     else
454*53ee8cc1Swenshuai.xi     {
455*53ee8cc1Swenshuai.xi     }
456*53ee8cc1Swenshuai.xi 
457*53ee8cc1Swenshuai.xi     if (bIFAGCTristateEnable)
458*53ee8cc1Swenshuai.xi     {
459*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
460*53ee8cc1Swenshuai.xi     }
461*53ee8cc1Swenshuai.xi     else
462*53ee8cc1Swenshuai.xi     {
463*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
464*53ee8cc1Swenshuai.xi     }
465*53ee8cc1Swenshuai.xi 
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi 	// oga
468*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_EN =0;
469*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_NUM = 0;
470*53ee8cc1Swenshuai.xi    if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
471*53ee8cc1Swenshuai.xi    {
472*53ee8cc1Swenshuai.xi /*
473*53ee8cc1Swenshuai.xi    	if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=5)	// version bigger than 5, apply TS phase solution
474*53ee8cc1Swenshuai.xi    	{
475*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_EN = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_EN];
476*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_NUM = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_NUM];
477*53ee8cc1Swenshuai.xi 		 ULOGD("DEMOD","##DVBT:TS check: bTsPhaseEn = %d, u16TsPhaseNum = %d\n",DVBT_TS_PHASE_EN,DVBT_TS_PHASE_NUM);
478*53ee8cc1Swenshuai.xi    	}
479*53ee8cc1Swenshuai.xi 	else
480*53ee8cc1Swenshuai.xi 	{
481*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","##DVBT:TS Phase check !!, board version smaller than 4\n");
482*53ee8cc1Swenshuai.xi 	}
483*53ee8cc1Swenshuai.xi */
484*53ee8cc1Swenshuai.xi  }
485*53ee8cc1Swenshuai.xi    else	// if init board define is NULL TS phase needs check.
486*53ee8cc1Swenshuai.xi    {
487*53ee8cc1Swenshuai.xi    	ULOGD("DEMOD","##DVBT:TS Phase check !!\n");
488*53ee8cc1Swenshuai.xi    }
489*53ee8cc1Swenshuai.xi 
490*53ee8cc1Swenshuai.xi 
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt != NULL)
493*53ee8cc1Swenshuai.xi     {
494*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt[0]>=1)
495*53ee8cc1Swenshuai.xi         {
496*53ee8cc1Swenshuai.xi             INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, _sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt, _sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitSize);
497*53ee8cc1Swenshuai.xi         }
498*53ee8cc1Swenshuai.xi         else
499*53ee8cc1Swenshuai.xi         {
500*53ee8cc1Swenshuai.xi             ULOGD("DEMOD","u8DMD_DVBT_DSPRegInitExt Error\n");
501*53ee8cc1Swenshuai.xi         }
502*53ee8cc1Swenshuai.xi     }
503*53ee8cc1Swenshuai.xi     else
504*53ee8cc1Swenshuai.xi     {
505*53ee8cc1Swenshuai.xi         INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain,  NULL, 0);
506*53ee8cc1Swenshuai.xi     }
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi     INTERN_DVBT_Version(&sDMD_DVBT_Info.u16Version);
509*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
510*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
511*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBT_Info.u16Version);
512*53ee8cc1Swenshuai.xi     #endif
513*53ee8cc1Swenshuai.xi     return TRUE;
514*53ee8cc1Swenshuai.xi }
515*53ee8cc1Swenshuai.xi #else
DMD_DVBT_Init(DMD_DVBT_InitData_Transform * pDMD_DVBT_InitData,MS_U32 u32InitDataLen)516*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_Init(DMD_DVBT_InitData_Transform *pDMD_DVBT_InitData, MS_U32 u32InitDataLen)
517*53ee8cc1Swenshuai.xi {
518*53ee8cc1Swenshuai.xi     char pDMD_DVBT_MutexString[16];
519*53ee8cc1Swenshuai.xi     MS_U8 u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
520*53ee8cc1Swenshuai.xi     MS_BOOL bRFAGCTristateEnable = 1;
521*53ee8cc1Swenshuai.xi     MS_BOOL bIFAGCTristateEnable = 0;
522*53ee8cc1Swenshuai.xi 
523*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_Init\n"));
524*53ee8cc1Swenshuai.xi 
525*53ee8cc1Swenshuai.xi     bIsDVBT = TRUE;
526*53ee8cc1Swenshuai.xi 
527*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBT_Mutex != -1)
528*53ee8cc1Swenshuai.xi     {
529*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init more than once\n"));
530*53ee8cc1Swenshuai.xi         return FALSE;
531*53ee8cc1Swenshuai.xi     }
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi     if (NULL == strncpy(pDMD_DVBT_MutexString,"Mutex DMD DVBT",16))
534*53ee8cc1Swenshuai.xi     {
535*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init strcpy Fail\n"));
536*53ee8cc1Swenshuai.xi         return FALSE;
537*53ee8cc1Swenshuai.xi     }
538*53ee8cc1Swenshuai.xi     _s32DMD_DVBT_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBT_MutexString, MSOS_PROCESS_SHARED);
539*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBT_Mutex == -1)
540*53ee8cc1Swenshuai.xi     {
541*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init Create Mutex Fail\n"));
542*53ee8cc1Swenshuai.xi         return FALSE;
543*53ee8cc1Swenshuai.xi     }
544*53ee8cc1Swenshuai.xi     //_u8DMDDbgLevel = DMD_DBGLV_DEBUG;
545*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
546*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_INFO)
547*53ee8cc1Swenshuai.xi     {
548*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_Init\n");
549*53ee8cc1Swenshuai.xi     }
550*53ee8cc1Swenshuai.xi     #endif
551*53ee8cc1Swenshuai.xi 		u32InitDataLen=sizeof(_sDMD_DVBT_InitData);
552*53ee8cc1Swenshuai.xi     //if ( sizeof(_sDMD_DVBT_InitData) == u32InitDataLen)
553*53ee8cc1Swenshuai.xi     //bryan temp test
554*53ee8cc1Swenshuai.xi     if(1)
555*53ee8cc1Swenshuai.xi     {
556*53ee8cc1Swenshuai.xi         memcpy(&_sDMD_DVBT_InitData, pDMD_DVBT_InitData, u32InitDataLen);
557*53ee8cc1Swenshuai.xi     }
558*53ee8cc1Swenshuai.xi     else
559*53ee8cc1Swenshuai.xi     {
560*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init input data structure incorrect\n"));
561*53ee8cc1Swenshuai.xi         return FALSE;
562*53ee8cc1Swenshuai.xi     }
563*53ee8cc1Swenshuai.xi 
564*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8SarChannel != 0xFF)
565*53ee8cc1Swenshuai.xi     {
566*53ee8cc1Swenshuai.xi       //bryan temp mark
567*53ee8cc1Swenshuai.xi       //  MDrv_SAR_Adc_Config(_sDMD_DVBT_InitData.u8SarChannel, TRUE);
568*53ee8cc1Swenshuai.xi     }
569*53ee8cc1Swenshuai.xi 
570*53ee8cc1Swenshuai.xi     DMD_LOCK();
571*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBT);
572*53ee8cc1Swenshuai.xi     HAL_DMD_RegInit();
573*53ee8cc1Swenshuai.xi 
574*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
575*53ee8cc1Swenshuai.xi     {
576*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=2)
577*53ee8cc1Swenshuai.xi         {
578*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3] & (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
579*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3] & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
580*53ee8cc1Swenshuai.xi         }
581*53ee8cc1Swenshuai.xi         else
582*53ee8cc1Swenshuai.xi         {
583*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = 1;
584*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = 0;
585*53ee8cc1Swenshuai.xi         }
586*53ee8cc1Swenshuai.xi     }
587*53ee8cc1Swenshuai.xi     else
588*53ee8cc1Swenshuai.xi     {
589*53ee8cc1Swenshuai.xi         bRFAGCTristateEnable = 1;
590*53ee8cc1Swenshuai.xi         bIFAGCTristateEnable = 0;
591*53ee8cc1Swenshuai.xi     }
592*53ee8cc1Swenshuai.xi 
593*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
594*53ee8cc1Swenshuai.xi     {
595*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=3)
596*53ee8cc1Swenshuai.xi         {
597*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[4]; // IF frequency
598*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[5]; // IF frequency
599*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[6]; // IF frequency
600*53ee8cc1Swenshuai.xi             u32DMD_DVBT_IfFrequency =  (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[7]; // IF frequency
601*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[8]; // FS frequency
602*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[9]; // FS frequency
603*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[10]; // FS frequency
604*53ee8cc1Swenshuai.xi             u32DMD_DVBT_FsFrequency =  (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[11]; // FS frequency
605*53ee8cc1Swenshuai.xi             u8DMD_DVBT_IQSwap = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[12]; // IQ Swap
606*53ee8cc1Swenshuai.xi 
607*53ee8cc1Swenshuai.xi             u8ADCIQMode = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[13]; // u8ADCIQMode : 0=I path, 1=Q path, 2=both IQ
608*53ee8cc1Swenshuai.xi             u8PadSel = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[14]; // u8PadSel : 0=Normal, 1=analog pad
609*53ee8cc1Swenshuai.xi             bPGAEnable = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[15]; // bPGAEnable : 0=disable, 1=enable
610*53ee8cc1Swenshuai.xi             u8PGAGain = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[16]; // u8PGAGain : default 5
611*53ee8cc1Swenshuai.xi         }
612*53ee8cc1Swenshuai.xi         else
613*53ee8cc1Swenshuai.xi         {
614*53ee8cc1Swenshuai.xi 
615*53ee8cc1Swenshuai.xi         }
616*53ee8cc1Swenshuai.xi     }
617*53ee8cc1Swenshuai.xi     else
618*53ee8cc1Swenshuai.xi     {
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     }
621*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
622*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32DMD_DVBT_IfFrequency %ld\n",u32DMD_DVBT_IfFrequency);
623*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32DMD_DVBT_FsFrequency %ld\n",u32DMD_DVBT_FsFrequency);
624*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u8DMD_DVBT_IQSwap %d\n",u8DMD_DVBT_IQSwap);
625*53ee8cc1Swenshuai.xi     #endif
626*53ee8cc1Swenshuai.xi 
627*53ee8cc1Swenshuai.xi     u16DMD_DVBT_TPS_Timeout = 1500;
628*53ee8cc1Swenshuai.xi     u16DMD_DVBT_FEC_Timeout = 6000;
629*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
630*53ee8cc1Swenshuai.xi     {
631*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=4)
632*53ee8cc1Swenshuai.xi         {
633*53ee8cc1Swenshuai.xi             u16DMD_DVBT_TPS_Timeout = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[17]; // TPS timeout in ms
634*53ee8cc1Swenshuai.xi             u16DMD_DVBT_TPS_Timeout =  (u16DMD_DVBT_TPS_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[18];
635*53ee8cc1Swenshuai.xi             if (u16DMD_DVBT_TPS_Timeout < 700) u16DMD_DVBT_TPS_Timeout=700;
636*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBT_TPS_Timeout %d\n",u16DMD_DVBT_TPS_Timeout);
637*53ee8cc1Swenshuai.xi 
638*53ee8cc1Swenshuai.xi             u16DMD_DVBT_FEC_Timeout = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[19]; // FEC timeout in ms
639*53ee8cc1Swenshuai.xi             u16DMD_DVBT_FEC_Timeout =  (u16DMD_DVBT_FEC_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[20];
640*53ee8cc1Swenshuai.xi             if (u16DMD_DVBT_FEC_Timeout < 2500) u16DMD_DVBT_FEC_Timeout=2500;
641*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBT_FEC_Timeout %d\n",u16DMD_DVBT_FEC_Timeout);
642*53ee8cc1Swenshuai.xi         }
643*53ee8cc1Swenshuai.xi         else
644*53ee8cc1Swenshuai.xi         {
645*53ee8cc1Swenshuai.xi         }
646*53ee8cc1Swenshuai.xi     }
647*53ee8cc1Swenshuai.xi     else
648*53ee8cc1Swenshuai.xi     {
649*53ee8cc1Swenshuai.xi     }
650*53ee8cc1Swenshuai.xi 
651*53ee8cc1Swenshuai.xi     if (bIFAGCTristateEnable)
652*53ee8cc1Swenshuai.xi     {
653*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
654*53ee8cc1Swenshuai.xi     }
655*53ee8cc1Swenshuai.xi     else
656*53ee8cc1Swenshuai.xi     {
657*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
658*53ee8cc1Swenshuai.xi     }
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi 	// oga
662*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_EN =0;
663*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_NUM = 0;
664*53ee8cc1Swenshuai.xi    if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
665*53ee8cc1Swenshuai.xi    {
666*53ee8cc1Swenshuai.xi /*
667*53ee8cc1Swenshuai.xi    	if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=5)	// version bigger than 5, apply TS phase solution
668*53ee8cc1Swenshuai.xi    	{
669*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_EN = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_EN];
670*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_NUM = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_NUM];
671*53ee8cc1Swenshuai.xi 		 ULOGD("DEMOD","##DVBT:TS check: bTsPhaseEn = %d, u16TsPhaseNum = %d\n",DVBT_TS_PHASE_EN,DVBT_TS_PHASE_NUM);
672*53ee8cc1Swenshuai.xi    	}
673*53ee8cc1Swenshuai.xi 	else
674*53ee8cc1Swenshuai.xi 	{
675*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","##DVBT:TS Phase check !!, board version smaller than 4\n");
676*53ee8cc1Swenshuai.xi 	}
677*53ee8cc1Swenshuai.xi */
678*53ee8cc1Swenshuai.xi  }
679*53ee8cc1Swenshuai.xi    else	// if init board define is NULL TS phase needs check.
680*53ee8cc1Swenshuai.xi    {
681*53ee8cc1Swenshuai.xi    	ULOGD("DEMOD","##DVBT:TS Phase check !!\n");
682*53ee8cc1Swenshuai.xi    }
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt != NULL)
687*53ee8cc1Swenshuai.xi     {
688*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt[0]>=1)
689*53ee8cc1Swenshuai.xi         {
690*53ee8cc1Swenshuai.xi             INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, _sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt, _sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitSize);
691*53ee8cc1Swenshuai.xi         }
692*53ee8cc1Swenshuai.xi         else
693*53ee8cc1Swenshuai.xi         {
694*53ee8cc1Swenshuai.xi             ULOGD("DEMOD","u8DMD_DVBT_DSPRegInitExt Error\n");
695*53ee8cc1Swenshuai.xi         }
696*53ee8cc1Swenshuai.xi     }
697*53ee8cc1Swenshuai.xi     else
698*53ee8cc1Swenshuai.xi     {
699*53ee8cc1Swenshuai.xi         INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain,  NULL, 0);
700*53ee8cc1Swenshuai.xi     }
701*53ee8cc1Swenshuai.xi 
702*53ee8cc1Swenshuai.xi     INTERN_DVBT_Version(&sDMD_DVBT_Info.u16Version);
703*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
704*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
705*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBT_Info.u16Version);
706*53ee8cc1Swenshuai.xi     #endif
707*53ee8cc1Swenshuai.xi     return TRUE;
708*53ee8cc1Swenshuai.xi }
709*53ee8cc1Swenshuai.xi #endif
710*53ee8cc1Swenshuai.xi 
DMD_DVBT_Exit(void)711*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_Exit(void)
712*53ee8cc1Swenshuai.xi {
713*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
716*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
717*53ee8cc1Swenshuai.xi     {
718*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_Exit\n");
719*53ee8cc1Swenshuai.xi     }
720*53ee8cc1Swenshuai.xi     #endif
721*53ee8cc1Swenshuai.xi 
722*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_Exit\n"));
723*53ee8cc1Swenshuai.xi     bIsDVBT = FALSE;
724*53ee8cc1Swenshuai.xi 
725*53ee8cc1Swenshuai.xi     DMD_LOCK();
726*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBT_Exit();
727*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
728*53ee8cc1Swenshuai.xi     MsOS_DeleteMutex(_s32DMD_DVBT_Mutex);
729*53ee8cc1Swenshuai.xi     _s32DMD_DVBT_Mutex= -1;
730*53ee8cc1Swenshuai.xi     return bRet;
731*53ee8cc1Swenshuai.xi }
732*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetDbgLevel(DMD_DbgLv u8DbgLevel)733*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetDbgLevel(DMD_DbgLv u8DbgLevel)
734*53ee8cc1Swenshuai.xi {
735*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetDbgLevel\n"));
736*53ee8cc1Swenshuai.xi 
737*53ee8cc1Swenshuai.xi     DMD_LOCK();
738*53ee8cc1Swenshuai.xi     _u8DMDDbgLevel = u8DbgLevel;
739*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
740*53ee8cc1Swenshuai.xi     return TRUE;
741*53ee8cc1Swenshuai.xi }
742*53ee8cc1Swenshuai.xi 
743*53ee8cc1Swenshuai.xi /*bryan temp mark*/
744*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_GetInfo(DMD_DVBT_INFO_TYPE eInfoType)745*53ee8cc1Swenshuai.xi DMD_DVBT_Info* DMD_DVBT_GetInfo(DMD_DVBT_INFO_TYPE eInfoType)
746*53ee8cc1Swenshuai.xi {
747*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetInfo\n"));
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi     DMD_LOCK();
750*53ee8cc1Swenshuai.xi     switch (eInfoType)
751*53ee8cc1Swenshuai.xi     {
752*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_MODULATION_INFO:
753*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_Modulation_info();
754*53ee8cc1Swenshuai.xi             break;
755*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_DEMOD_INFO:
756*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_Demod_Info();
757*53ee8cc1Swenshuai.xi             break;
758*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_LOCK_INFO:
759*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_Lock_Info();
760*53ee8cc1Swenshuai.xi             break;
761*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_PRESFO_INFO:
762*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_PRESFO_Info();
763*53ee8cc1Swenshuai.xi             break;
764*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_LOCK_TIME_INFO:
765*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_Lock_Time_Info();
766*53ee8cc1Swenshuai.xi             break;
767*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_BER_INFO:
768*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_BER_Info();
769*53ee8cc1Swenshuai.xi             break;
770*53ee8cc1Swenshuai.xi         case E_DMD_DVBT_AGC_INFO:
771*53ee8cc1Swenshuai.xi             INTERN_DVBT_Show_AGC_Info();
772*53ee8cc1Swenshuai.xi             break;
773*53ee8cc1Swenshuai.xi         default:
774*53ee8cc1Swenshuai.xi             #ifdef MS_DEBUG
775*53ee8cc1Swenshuai.xi             ULOGD("DEMOD","MDrv_DMD_DVBT_GetInfo %d Error\n", eInfoType);
776*53ee8cc1Swenshuai.xi             #endif
777*53ee8cc1Swenshuai.xi             break;
778*53ee8cc1Swenshuai.xi     }
779*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
780*53ee8cc1Swenshuai.xi     return &sDMD_DVBT_Info;
781*53ee8cc1Swenshuai.xi }
782*53ee8cc1Swenshuai.xi #endif
783*53ee8cc1Swenshuai.xi 
784*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetLibVer(const MSIF_Version ** ppVersion)785*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetLibVer(const MSIF_Version **ppVersion)
786*53ee8cc1Swenshuai.xi {
787*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetLibVer\n"));
788*53ee8cc1Swenshuai.xi 
789*53ee8cc1Swenshuai.xi     DMD_LOCK();
790*53ee8cc1Swenshuai.xi     if (!ppVersion)
791*53ee8cc1Swenshuai.xi     {
792*53ee8cc1Swenshuai.xi         return FALSE;
793*53ee8cc1Swenshuai.xi     }
794*53ee8cc1Swenshuai.xi 
795*53ee8cc1Swenshuai.xi     *ppVersion = &_drv_dmd_dvbt_intern_version;
796*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
797*53ee8cc1Swenshuai.xi     return TRUE;
798*53ee8cc1Swenshuai.xi }
799*53ee8cc1Swenshuai.xi 
DMD_DVBTGetFWVer(MS_U16 * ver)800*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBTGetFWVer(MS_U16 *ver)
801*53ee8cc1Swenshuai.xi {
802*53ee8cc1Swenshuai.xi 
803*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
804*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBTGetFWVer\n"));
805*53ee8cc1Swenshuai.xi 
806*53ee8cc1Swenshuai.xi     DMD_LOCK();
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBT_Version(ver);
809*53ee8cc1Swenshuai.xi     //ULOGD("DEMOD","MDrv_DMD_DVBT_GetFWVer %x\n",*ver);
810*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
811*53ee8cc1Swenshuai.xi 
812*53ee8cc1Swenshuai.xi     return bRet;
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi }
815*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)816*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
817*53ee8cc1Swenshuai.xi {
818*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
819*53ee8cc1Swenshuai.xi 
820*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetReg\n"));
821*53ee8cc1Swenshuai.xi 
822*53ee8cc1Swenshuai.xi     DMD_LOCK();
823*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, pu8Data);
824*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
827*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
828*53ee8cc1Swenshuai.xi     {
829*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetReg %x %x\n", u16Addr, *pu8Data);
830*53ee8cc1Swenshuai.xi     }
831*53ee8cc1Swenshuai.xi     #endif
832*53ee8cc1Swenshuai.xi 
833*53ee8cc1Swenshuai.xi     return bRet;
834*53ee8cc1Swenshuai.xi }
835*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetReg(MS_U16 u16Addr,MS_U8 u8Data)836*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
837*53ee8cc1Swenshuai.xi {
838*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
839*53ee8cc1Swenshuai.xi 
840*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetReg\n"));
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
843*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
844*53ee8cc1Swenshuai.xi     {
845*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_SetReg %x %x\n", u16Addr, u8Data);
846*53ee8cc1Swenshuai.xi     }
847*53ee8cc1Swenshuai.xi     #endif
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi     DMD_LOCK();
850*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, u8Data);
851*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
852*53ee8cc1Swenshuai.xi     return bRet;
853*53ee8cc1Swenshuai.xi }
854*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetSerialControl(MS_BOOL bEnable)855*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetSerialControl(MS_BOOL bEnable)
856*53ee8cc1Swenshuai.xi {
857*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
858*53ee8cc1Swenshuai.xi     MS_U8 u8TSClk;
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetSerialControl\n"));
861*53ee8cc1Swenshuai.xi 
862*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
863*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
864*53ee8cc1Swenshuai.xi     {
865*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_SetSerialControl %x\n", bEnable);
866*53ee8cc1Swenshuai.xi     }
867*53ee8cc1Swenshuai.xi     #endif
868*53ee8cc1Swenshuai.xi 
869*53ee8cc1Swenshuai.xi     DMD_LOCK();
870*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
871*53ee8cc1Swenshuai.xi     {
872*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=1)
873*53ee8cc1Swenshuai.xi         {
874*53ee8cc1Swenshuai.xi             u8TSClk = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[2]; // TS_CLK
875*53ee8cc1Swenshuai.xi         }
876*53ee8cc1Swenshuai.xi         else
877*53ee8cc1Swenshuai.xi         {
878*53ee8cc1Swenshuai.xi             u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
879*53ee8cc1Swenshuai.xi         }
880*53ee8cc1Swenshuai.xi     }
881*53ee8cc1Swenshuai.xi     else
882*53ee8cc1Swenshuai.xi     {
883*53ee8cc1Swenshuai.xi         u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
884*53ee8cc1Swenshuai.xi     }
885*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Serial_Control(bEnable, u8TSClk);
886*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
887*53ee8cc1Swenshuai.xi     return bRet;
888*53ee8cc1Swenshuai.xi }
889*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetConfig(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG)890*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetConfig(DMD_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS, MS_BOOL bPalBG)
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetConfig\n"));
893*53ee8cc1Swenshuai.xi 
894*53ee8cc1Swenshuai.xi     return MDrv_DMD_DVBT_SetConfigHPLPSetIF(BW, bSerialTS, bPalBG, 0, u32DMD_DVBT_IfFrequency, u32DMD_DVBT_FsFrequency, u8DMD_DVBT_IQSwap);
895*53ee8cc1Swenshuai.xi }
896*53ee8cc1Swenshuai.xi 
897*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetConfigHPLP(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG,MS_BOOL bLPSel)898*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetConfigHPLP(DMD_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS, MS_BOOL bPalBG, MS_BOOL bLPSel)
899*53ee8cc1Swenshuai.xi {
900*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetConfigHPLP\n"));
901*53ee8cc1Swenshuai.xi 
902*53ee8cc1Swenshuai.xi     return MDrv_DMD_DVBT_SetConfigHPLPSetIF(BW, bSerialTS, bPalBG, bLPSel, u32DMD_DVBT_IfFrequency, u32DMD_DVBT_FsFrequency, u8DMD_DVBT_IQSwap);
903*53ee8cc1Swenshuai.xi }
904*53ee8cc1Swenshuai.xi 
905*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetConfigHPLPSetIF(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG,MS_BOOL bLPSel,MS_U32 u32IFFreq,MS_U32 u32FSFreq,MS_U8 u8IQSwap)906*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetConfigHPLPSetIF(DMD_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS, MS_BOOL bPalBG, MS_BOOL bLPSel, MS_U32 u32IFFreq, MS_U32 u32FSFreq, MS_U8 u8IQSwap)
907*53ee8cc1Swenshuai.xi {
908*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
909*53ee8cc1Swenshuai.xi     MS_U8 u8TSClk;
910*53ee8cc1Swenshuai.xi 
911*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetConfigHPLPSetIF\n"));
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
914*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
915*53ee8cc1Swenshuai.xi     {
916*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_SetConfigHPLPSetIF %d %d %d %d %ld %ld %d\n", BW, bSerialTS, bPalBG, bLPSel, u32IFFreq, u32FSFreq, u8IQSwap);
917*53ee8cc1Swenshuai.xi     }
918*53ee8cc1Swenshuai.xi     #endif
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi     DMD_LOCK();
921*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt != NULL)
922*53ee8cc1Swenshuai.xi     {
923*53ee8cc1Swenshuai.xi         if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=1)
924*53ee8cc1Swenshuai.xi         {
925*53ee8cc1Swenshuai.xi             u8TSClk = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[2]; // TS_CLK
926*53ee8cc1Swenshuai.xi         }
927*53ee8cc1Swenshuai.xi         else
928*53ee8cc1Swenshuai.xi         {
929*53ee8cc1Swenshuai.xi             u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
930*53ee8cc1Swenshuai.xi         }
931*53ee8cc1Swenshuai.xi     }
932*53ee8cc1Swenshuai.xi     else
933*53ee8cc1Swenshuai.xi     {
934*53ee8cc1Swenshuai.xi         u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
935*53ee8cc1Swenshuai.xi     }
936*53ee8cc1Swenshuai.xi 
937*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Config(BW, bSerialTS, bPalBG, bLPSel, u8TSClk, u32IFFreq, u32FSFreq, u8IQSwap);
938*53ee8cc1Swenshuai.xi     eDMD_DVBT_BandWidth=BW;
939*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
940*53ee8cc1Swenshuai.xi     return bRet;
941*53ee8cc1Swenshuai.xi }
942*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetActive(MS_BOOL bEnable)943*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_SetActive(MS_BOOL bEnable)
944*53ee8cc1Swenshuai.xi {
945*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
946*53ee8cc1Swenshuai.xi 
947*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetActive\n"));
948*53ee8cc1Swenshuai.xi 
949*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
950*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
951*53ee8cc1Swenshuai.xi     {
952*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_SetActive %d\n", bEnable);
953*53ee8cc1Swenshuai.xi     }
954*53ee8cc1Swenshuai.xi     #endif
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi     DMD_LOCK();
957*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Active(bEnable);
958*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
959*53ee8cc1Swenshuai.xi     return bRet;
960*53ee8cc1Swenshuai.xi }
961*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetLock(DMD_DVBT_GETLOCK_TYPE eType,DMD_LOCK_STATUS * eLockStatus)962*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetLock(DMD_DVBT_GETLOCK_TYPE eType, DMD_LOCK_STATUS *eLockStatus)
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi     MS_BOOL bRet=TRUE;
965*53ee8cc1Swenshuai.xi     DMD_LOCK();
966*53ee8cc1Swenshuai.xi 
967*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetLock\n"));
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi     if ( eType == E_DMD_DMD_DVBT_GETLOCK ) // for channel scan
970*53ee8cc1Swenshuai.xi     {
971*53ee8cc1Swenshuai.xi         *eLockStatus = INTERN_DVBT_Lock(u16DMD_DVBT_TPS_Timeout, u16DMD_DVBT_FEC_Timeout);
972*53ee8cc1Swenshuai.xi     }
973*53ee8cc1Swenshuai.xi     else
974*53ee8cc1Swenshuai.xi     {
975*53ee8cc1Swenshuai.xi         if (INTERN_DVBT_GetLock(eType) == TRUE)
976*53ee8cc1Swenshuai.xi         {
977*53ee8cc1Swenshuai.xi             *eLockStatus = E_DMD_LOCK;
978*53ee8cc1Swenshuai.xi         }
979*53ee8cc1Swenshuai.xi         else
980*53ee8cc1Swenshuai.xi         {
981*53ee8cc1Swenshuai.xi             *eLockStatus = E_DMD_UNLOCK;
982*53ee8cc1Swenshuai.xi         }
983*53ee8cc1Swenshuai.xi     }
984*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
985*53ee8cc1Swenshuai.xi 
986*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
987*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
988*53ee8cc1Swenshuai.xi     {
989*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetLock %d\n", bRet);
990*53ee8cc1Swenshuai.xi     }
991*53ee8cc1Swenshuai.xi     #endif
992*53ee8cc1Swenshuai.xi     return bRet;
993*53ee8cc1Swenshuai.xi }
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi 
996*53ee8cc1Swenshuai.xi /*bryan temp mark*/
997*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_GetSignalStrengthWithRFPower(MS_U16 * u16Strength,float fRFPowerDbm)998*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetSignalStrengthWithRFPower(MS_U16 *u16Strength, float fRFPowerDbm)
999*53ee8cc1Swenshuai.xi {
1000*53ee8cc1Swenshuai.xi     MS_U8 u8SarValue;
1001*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1002*53ee8cc1Swenshuai.xi 
1003*53ee8cc1Swenshuai.xi     DMD_LOCK();
1004*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8SarChannel != 0xFF)
1005*53ee8cc1Swenshuai.xi     {
1006*53ee8cc1Swenshuai.xi         u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBT_InitData.u8SarChannel);
1007*53ee8cc1Swenshuai.xi     }
1008*53ee8cc1Swenshuai.xi     else
1009*53ee8cc1Swenshuai.xi     {
1010*53ee8cc1Swenshuai.xi         u8SarValue=0xFF;
1011*53ee8cc1Swenshuai.xi     }
1012*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_GetSignalStrength(u16Strength, (const DMD_DVBT_InitData *)(&_sDMD_DVBT_InitData), u8SarValue, fRFPowerDbm);
1013*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1014*53ee8cc1Swenshuai.xi 
1015*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1016*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
1017*53ee8cc1Swenshuai.xi     {
1018*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetSignalStrength %d\n", *u16Strength);
1019*53ee8cc1Swenshuai.xi     }
1020*53ee8cc1Swenshuai.xi     #endif
1021*53ee8cc1Swenshuai.xi     return bRet;
1022*53ee8cc1Swenshuai.xi }
1023*53ee8cc1Swenshuai.xi #endif
1024*53ee8cc1Swenshuai.xi 
1025*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_GetSignalQualityWithRFPower(MS_U16 * u16Quality,float fRFPowerDbm)1026*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetSignalQualityWithRFPower(MS_U16 *u16Quality, float fRFPowerDbm)
1027*53ee8cc1Swenshuai.xi {
1028*53ee8cc1Swenshuai.xi     MS_U8 u8SarValue=0;
1029*53ee8cc1Swenshuai.xi     MS_BOOL bRet=0;
1030*53ee8cc1Swenshuai.xi 
1031*53ee8cc1Swenshuai.xi     DMD_LOCK();
1032*53ee8cc1Swenshuai.xi     if (_sDMD_DVBT_InitData.u8SarChannel != 0xFF)
1033*53ee8cc1Swenshuai.xi     {
1034*53ee8cc1Swenshuai.xi         u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBT_InitData.u8SarChannel);
1035*53ee8cc1Swenshuai.xi     }
1036*53ee8cc1Swenshuai.xi     else
1037*53ee8cc1Swenshuai.xi     {
1038*53ee8cc1Swenshuai.xi         u8SarValue=0xFF;
1039*53ee8cc1Swenshuai.xi     }
1040*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_GetSignalQuality(u16Quality, (const DMD_DVBT_InitData *)(&_sDMD_DVBT_InitData), u8SarValue, fRFPowerDbm);
1041*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1042*53ee8cc1Swenshuai.xi 
1043*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1044*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
1045*53ee8cc1Swenshuai.xi     {
1046*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetSignalQuality %d\n", *u16Quality);
1047*53ee8cc1Swenshuai.xi     }
1048*53ee8cc1Swenshuai.xi     #endif
1049*53ee8cc1Swenshuai.xi     return bRet;
1050*53ee8cc1Swenshuai.xi }
1051*53ee8cc1Swenshuai.xi #endif
1052*53ee8cc1Swenshuai.xi 
1053*53ee8cc1Swenshuai.xi //arthur
DMD_DVBT_GetIFAGC(MS_U8 * ifagc_reg,MS_U8 * ifagc_reg_lsb,MS_U16 * ifagc_err)1054*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetIFAGC(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err)
1055*53ee8cc1Swenshuai.xi {
1056*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1057*53ee8cc1Swenshuai.xi 
1058*53ee8cc1Swenshuai.xi     DMD_LOCK();
1059*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_GetIFAGC(ifagc_reg, ifagc_reg_lsb, ifagc_err);
1060*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1061*53ee8cc1Swenshuai.xi 
1062*53ee8cc1Swenshuai.xi 	  return bRet;
1063*53ee8cc1Swenshuai.xi }
1064*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetSNR(MS_U32 * noise_power_reg)1065*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetSNR(MS_U32 *noise_power_reg)
1066*53ee8cc1Swenshuai.xi {
1067*53ee8cc1Swenshuai.xi     DMD_LOCK();
1068*53ee8cc1Swenshuai.xi     INTERN_DVBT_GetSNR(noise_power_reg);
1069*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1070*53ee8cc1Swenshuai.xi 
1071*53ee8cc1Swenshuai.xi     return TRUE;
1072*53ee8cc1Swenshuai.xi }
1073*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetPostViterbiBer(MS_U16 * BitErrPeriod_reg,MS_U32 * BitErr_reg,MS_U16 * PktErr_reg)1074*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetPostViterbiBer(MS_U16 *BitErrPeriod_reg, MS_U32 *BitErr_reg, MS_U16 *PktErr_reg)
1075*53ee8cc1Swenshuai.xi {
1076*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1077*53ee8cc1Swenshuai.xi 
1078*53ee8cc1Swenshuai.xi     DMD_LOCK();
1079*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBT_GetPostViterbiBer(BitErrPeriod_reg, BitErr_reg, PktErr_reg);
1080*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1081*53ee8cc1Swenshuai.xi 
1082*53ee8cc1Swenshuai.xi     return bRet;
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_GetPreViterbiBer(float * ber)1085*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetPreViterbiBer(float *ber)
1086*53ee8cc1Swenshuai.xi {
1087*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1088*53ee8cc1Swenshuai.xi 
1089*53ee8cc1Swenshuai.xi     DMD_LOCK();
1090*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_GetPreViterbiBer(ber);
1091*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1092*53ee8cc1Swenshuai.xi 
1093*53ee8cc1Swenshuai.xi     return bRet;
1094*53ee8cc1Swenshuai.xi }
1095*53ee8cc1Swenshuai.xi #endif
1096*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetPacketErr(MS_U16 * pktErr)1097*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetPacketErr(MS_U16 *pktErr)
1098*53ee8cc1Swenshuai.xi {
1099*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1100*53ee8cc1Swenshuai.xi    // float   fBER;
1101*53ee8cc1Swenshuai.xi    DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetPacketErr\n"));
1102*53ee8cc1Swenshuai.xi 
1103*53ee8cc1Swenshuai.xi     DMD_LOCK();
1104*53ee8cc1Swenshuai.xi     //bryan temp mark
1105*53ee8cc1Swenshuai.xi     //INTERN_DVBT_GetPostViterbiBer(&fBER);
1106*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_GetPacketErr(pktErr);
1107*53ee8cc1Swenshuai.xi 
1108*53ee8cc1Swenshuai.xi     //bryan temp mark
1109*53ee8cc1Swenshuai.xi     //if ((*pktErr ==1) && (fBER<= 0.000001)) // for no signal case, from Oga
1110*53ee8cc1Swenshuai.xi     if ((*pktErr ==1) )
1111*53ee8cc1Swenshuai.xi     {
1112*53ee8cc1Swenshuai.xi         *pktErr = 0x3FF;
1113*53ee8cc1Swenshuai.xi     }
1114*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1115*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
1116*53ee8cc1Swenshuai.xi     {
1117*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetPacketErr %d\n", *pktErr);
1118*53ee8cc1Swenshuai.xi     }
1119*53ee8cc1Swenshuai.xi     #endif
1120*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1121*53ee8cc1Swenshuai.xi 
1122*53ee8cc1Swenshuai.xi     return bRet;
1123*53ee8cc1Swenshuai.xi }
1124*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetTPSInfo(MS_U16 * u16Info)1125*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetTPSInfo(MS_U16 *u16Info)
1126*53ee8cc1Swenshuai.xi {
1127*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1128*53ee8cc1Swenshuai.xi 
1129*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetTPSInfo\n"));
1130*53ee8cc1Swenshuai.xi 
1131*53ee8cc1Swenshuai.xi     DMD_LOCK();
1132*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Get_TPS_Info(u16Info);
1133*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1134*53ee8cc1Swenshuai.xi 
1135*53ee8cc1Swenshuai.xi     return bRet;
1136*53ee8cc1Swenshuai.xi }
1137*53ee8cc1Swenshuai.xi 
DMD_DVBT_GetCellID(MS_U16 * u16CellID)1138*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetCellID(MS_U16 *u16CellID)
1139*53ee8cc1Swenshuai.xi {
1140*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1141*53ee8cc1Swenshuai.xi 
1142*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_GetCellID\n"));
1143*53ee8cc1Swenshuai.xi 
1144*53ee8cc1Swenshuai.xi     DMD_LOCK();
1145*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Get_CELL_ID(u16CellID);
1146*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1147*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1148*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
1149*53ee8cc1Swenshuai.xi     {
1150*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetCellID %d\n", *u16CellID);
1151*53ee8cc1Swenshuai.xi     }
1152*53ee8cc1Swenshuai.xi     #endif
1153*53ee8cc1Swenshuai.xi     return bRet;
1154*53ee8cc1Swenshuai.xi }
1155*53ee8cc1Swenshuai.xi 
1156*53ee8cc1Swenshuai.xi /*bryan temp mark*/
1157*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_GetFreqOffset(float * pFreqOff)1158*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_GetFreqOffset(float *pFreqOff)
1159*53ee8cc1Swenshuai.xi {
1160*53ee8cc1Swenshuai.xi     MS_BOOL bRet=TRUE;
1161*53ee8cc1Swenshuai.xi     MS_U8 u8BW=8;
1162*53ee8cc1Swenshuai.xi 
1163*53ee8cc1Swenshuai.xi     DMD_LOCK();
1164*53ee8cc1Swenshuai.xi     switch (eDMD_DVBT_BandWidth)
1165*53ee8cc1Swenshuai.xi     {
1166*53ee8cc1Swenshuai.xi         case E_DMD_RF_CH_BAND_6MHz:
1167*53ee8cc1Swenshuai.xi             u8BW=6;
1168*53ee8cc1Swenshuai.xi             break;
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi         case E_DMD_RF_CH_BAND_7MHz:
1171*53ee8cc1Swenshuai.xi             u8BW=7;
1172*53ee8cc1Swenshuai.xi             break;
1173*53ee8cc1Swenshuai.xi 
1174*53ee8cc1Swenshuai.xi         case E_DMD_RF_CH_BAND_8MHz:
1175*53ee8cc1Swenshuai.xi         default:
1176*53ee8cc1Swenshuai.xi             u8BW=8;
1177*53ee8cc1Swenshuai.xi             break;
1178*53ee8cc1Swenshuai.xi     }
1179*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBT_Get_FreqOffset(pFreqOff, u8BW);
1180*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1181*53ee8cc1Swenshuai.xi 
1182*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1183*53ee8cc1Swenshuai.xi     if (_u8DMDDbgLevel >= DMD_DBGLV_DEBUG)
1184*53ee8cc1Swenshuai.xi     {
1185*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBT_GetStatus %d %f\n", u8BW, *pFreqOff);
1186*53ee8cc1Swenshuai.xi     }
1187*53ee8cc1Swenshuai.xi     #endif
1188*53ee8cc1Swenshuai.xi     return bRet;
1189*53ee8cc1Swenshuai.xi }
1190*53ee8cc1Swenshuai.xi #endif
1191*53ee8cc1Swenshuai.xi 
1192*53ee8cc1Swenshuai.xi /*bryan temp mark*/
1193*53ee8cc1Swenshuai.xi #if(0)
DMD_DVBT_NORDIG_SSI_Table_Write(DMD_CONSTEL constel,DMD_CODERATE code_rate,float write_value)1194*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_NORDIG_SSI_Table_Write(DMD_CONSTEL constel, DMD_CODERATE code_rate, float write_value)
1195*53ee8cc1Swenshuai.xi {
1196*53ee8cc1Swenshuai.xi     return INTERN_DVBT_NORDIG_SSI_Table_Write(constel, code_rate, write_value);
1197*53ee8cc1Swenshuai.xi }
1198*53ee8cc1Swenshuai.xi 
DMD_DVBT_NORDIG_SSI_Table_Read(DMD_CONSTEL constel,DMD_CODERATE code_rate,float * read_value)1199*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBT_NORDIG_SSI_Table_Read(DMD_CONSTEL constel, DMD_CODERATE code_rate, float *read_value)
1200*53ee8cc1Swenshuai.xi {
1201*53ee8cc1Swenshuai.xi     return INTERN_DVBT_NORDIG_SSI_Table_Read(constel, code_rate, read_value);
1202*53ee8cc1Swenshuai.xi }
1203*53ee8cc1Swenshuai.xi #endif
1204*53ee8cc1Swenshuai.xi 
DMD_DVBT_SetPowerState(EN_POWER_MODE u16PowerState)1205*53ee8cc1Swenshuai.xi MS_U32 DMD_DVBT_SetPowerState(EN_POWER_MODE u16PowerState)
1206*53ee8cc1Swenshuai.xi {
1207*53ee8cc1Swenshuai.xi     static EN_POWER_MODE _prev_u16PowerState = E_POWER_MECHANICAL;
1208*53ee8cc1Swenshuai.xi     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1209*53ee8cc1Swenshuai.xi 
1210*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DMD_DVBT_SetPowerState\n"));
1211*53ee8cc1Swenshuai.xi 
1212*53ee8cc1Swenshuai.xi     u32Return = u32Return;
1213*53ee8cc1Swenshuai.xi 
1214*53ee8cc1Swenshuai.xi     if(bIsDVBT == TRUE)
1215*53ee8cc1Swenshuai.xi     {
1216*53ee8cc1Swenshuai.xi         if (u16PowerState == E_POWER_SUSPEND)
1217*53ee8cc1Swenshuai.xi     	{
1218*53ee8cc1Swenshuai.xi     //        MDrv_DMD_DVBT_Exit();
1219*53ee8cc1Swenshuai.xi             DMD_DVBT_Exit();
1220*53ee8cc1Swenshuai.xi             _prev_u16PowerState = u16PowerState;
1221*53ee8cc1Swenshuai.xi             u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1222*53ee8cc1Swenshuai.xi         }
1223*53ee8cc1Swenshuai.xi         else if (u16PowerState == E_POWER_RESUME)
1224*53ee8cc1Swenshuai.xi         {
1225*53ee8cc1Swenshuai.xi             if (_prev_u16PowerState == E_POWER_SUSPEND)
1226*53ee8cc1Swenshuai.xi             {
1227*53ee8cc1Swenshuai.xi                 DMD_DVBT_Init(&_sDMD_DVBT_InitData, sizeof(_sDMD_DVBT_InitData));
1228*53ee8cc1Swenshuai.xi                 _prev_u16PowerState = u16PowerState;
1229*53ee8cc1Swenshuai.xi                 u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1230*53ee8cc1Swenshuai.xi             }
1231*53ee8cc1Swenshuai.xi             else
1232*53ee8cc1Swenshuai.xi             {
1233*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
1234*53ee8cc1Swenshuai.xi                 u32Return = UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
1235*53ee8cc1Swenshuai.xi             }
1236*53ee8cc1Swenshuai.xi         }
1237*53ee8cc1Swenshuai.xi         else
1238*53ee8cc1Swenshuai.xi         {
1239*53ee8cc1Swenshuai.xi         	ULOGD("DEMOD","[%s,%5d]Do Nothing: %d\n",__FUNCTION__,__LINE__,u16PowerState);
1240*53ee8cc1Swenshuai.xi         	u32Return = FALSE;
1241*53ee8cc1Swenshuai.xi         }
1242*53ee8cc1Swenshuai.xi     }
1243*53ee8cc1Swenshuai.xi     else
1244*53ee8cc1Swenshuai.xi     {
1245*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","\r\n ====== DVBT doesn't need to Suspend/Resume at Non-DVBT mode ====== \r\n");
1246*53ee8cc1Swenshuai.xi         u32Return = FALSE;
1247*53ee8cc1Swenshuai.xi     }
1248*53ee8cc1Swenshuai.xi //    return UTOPIA_STATUS_SUCCESS;
1249*53ee8cc1Swenshuai.xi     return u32Return;
1250*53ee8cc1Swenshuai.xi }
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi 
1253*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1254*53ee8cc1Swenshuai.xi //  Global Functions
1255*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
DVBTOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)1256*53ee8cc1Swenshuai.xi MS_U32 DVBTOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
1257*53ee8cc1Swenshuai.xi {
1258*53ee8cc1Swenshuai.xi 
1259*53ee8cc1Swenshuai.xi     DVBT_INSTANT_PRIVATE *pDvbtPri= NULL;
1260*53ee8cc1Swenshuai.xi 
1261*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTOpen\n"));
1262*53ee8cc1Swenshuai.xi 
1263*53ee8cc1Swenshuai.xi // void *pDvbtPriVoid = NULL;
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi     UtopiaInstanceCreate(sizeof(DVBT_INSTANT_PRIVATE), ppInstance);
1266*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(*ppInstance, (void*)&pDvbtPri);
1267*53ee8cc1Swenshuai.xi // pDvbtPri = (DVBT_INSTANT_PRIVATE*)pDvbtPriVoid;
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi 
1270*53ee8cc1Swenshuai.xi 
1271*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTInit = DMD_DVBT_Init;
1272*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTExit = DMD_DVBT_Exit;
1273*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetDbgLevel = DMD_DVBT_SetDbgLevel;
1274*53ee8cc1Swenshuai.xi /*bryan temp mark*/
1275*53ee8cc1Swenshuai.xi     #if(0)
1276*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetInfo = DMD_DVBT_GetInfo;
1277*53ee8cc1Swenshuai.xi     #endif
1278*53ee8cc1Swenshuai.xi 
1279*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetLibVer = DMD_DVBT_GetLibVer;
1280*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetFWVer = DMD_DVBTGetFWVer;
1281*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetReg = DMD_DVBT_GetReg;
1282*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetReg = DMD_DVBT_SetReg;
1283*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetSerialControl = DMD_DVBT_SetSerialControl;
1284*53ee8cc1Swenshuai.xi     //pDvbtPri->fpDVBTSetConfig = DMD_DVBT_SetConfig;
1285*53ee8cc1Swenshuai.xi     //pDvbtPri->fpDVBTSetConfigHPLP = MDrv_DMD_DVBT_SetConfigHPLP;
1286*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetConfigHPLPSetIF = DMD_DVBT_SetConfigHPLPSetIF;
1287*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetActive = DMD_DVBT_SetActive;
1288*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetLock = DMD_DVBT_GetLock;
1289*53ee8cc1Swenshuai.xi     //pDvbtPri->fpDVBTGetSignalStrength = MDrv_DMD_DVBT_GetSignalStrength;
1290*53ee8cc1Swenshuai.xi     /*bryan temp mark*/
1291*53ee8cc1Swenshuai.xi     #if(0)
1292*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetSignalStrengthWithRFPower = DMD_DVBT_GetSignalStrengthWithRFPower;
1293*53ee8cc1Swenshuai.xi     #endif
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi     //pDvbtPri->fpDVBTGetSignalQuality = MDrv_DMD_DVBT_GetSignalQuality;
1296*53ee8cc1Swenshuai.xi     #if(0)
1297*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetSignalQualityWithRFPower = DMD_DVBT_GetSignalQualityWithRFPower;
1298*53ee8cc1Swenshuai.xi     #endif
1299*53ee8cc1Swenshuai.xi 
1300*53ee8cc1Swenshuai.xi     //arthur
1301*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetSNR = DMD_DVBT_GetSNR;
1302*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetPostViterbiBer =DMD_DVBT_GetPostViterbiBer;
1303*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBT_GetIFAGC=DMD_DVBT_GetIFAGC;
1304*53ee8cc1Swenshuai.xi 
1305*53ee8cc1Swenshuai.xi 	  #if 0
1306*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetPreViterbiBer = DMD_DVBT_GetPreViterbiBer;
1307*53ee8cc1Swenshuai.xi     #endif
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetPacketErr = DMD_DVBT_GetPacketErr;
1310*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetTPSInfo = DMD_DVBT_GetTPSInfo;
1311*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetCellID = DMD_DVBT_GetCellID;
1312*53ee8cc1Swenshuai.xi 
1313*53ee8cc1Swenshuai.xi     #if(0)
1314*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTGetFreqOffset = DMD_DVBT_GetFreqOffset;
1315*53ee8cc1Swenshuai.xi     #endif
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi     #if(0)
1318*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTNORDIGSSITableWrite = DMD_DVBT_NORDIG_SSI_Table_Write;
1319*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTNORDIGSSITableRead = DMD_DVBT_NORDIG_SSI_Table_Read;
1320*53ee8cc1Swenshuai.xi     #endif
1321*53ee8cc1Swenshuai.xi 
1322*53ee8cc1Swenshuai.xi     pDvbtPri->fpDVBTSetPowerState = DMD_DVBT_SetPowerState;
1323*53ee8cc1Swenshuai.xi 
1324*53ee8cc1Swenshuai.xi     //return TRUE;
1325*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
1326*53ee8cc1Swenshuai.xi }
1327*53ee8cc1Swenshuai.xi 
DVBTIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)1328*53ee8cc1Swenshuai.xi MS_U32 DVBTIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
1329*53ee8cc1Swenshuai.xi {
1330*53ee8cc1Swenshuai.xi 
1331*53ee8cc1Swenshuai.xi     void* pModule = NULL;
1332*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
1333*53ee8cc1Swenshuai.xi 
1334*53ee8cc1Swenshuai.xi     //void* pResource = NULL;
1335*53ee8cc1Swenshuai.xi 
1336*53ee8cc1Swenshuai.xi     DVBT_INSTANT_PRIVATE* psDVBTInstPri = NULL;
1337*53ee8cc1Swenshuai.xi     void* psDVBTInstPriVoid = NULL;
1338*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psDVBTInstPriVoid);
1339*53ee8cc1Swenshuai.xi     psDVBTInstPri = (DVBT_INSTANT_PRIVATE*)psDVBTInstPriVoid;
1340*53ee8cc1Swenshuai.xi 
1341*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1342*53ee8cc1Swenshuai.xi 
1343*53ee8cc1Swenshuai.xi #if 0
1344*53ee8cc1Swenshuai.xi     if (UtopiaResourceObtain(pModule, DVBT_POOL_ID_DMD0, &pResource) != 0)
1345*53ee8cc1Swenshuai.xi     {
1346*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","UtopiaResourceObtainToInstant fail\n"));
1347*53ee8cc1Swenshuai.xi 	    return UTOPIA_STATUS_ERR_RESOURCE;
1348*53ee8cc1Swenshuai.xi     }
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi     psDMD_DVBT_ResData = ((PDVBT_RESOURCE_PRIVATE)pResource)->sDMD_DVBT_ResData;
1351*53ee8cc1Swenshuai.xi #endif
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi 
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi     switch (u32Cmd)
1356*53ee8cc1Swenshuai.xi     {
1357*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_Init:
1358*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_Init\n"));
1359*53ee8cc1Swenshuai.xi 	     //bryan test
1360*53ee8cc1Swenshuai.xi 	     #if(0)
1361*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTInit( &(((PDVBT_INIT_PARAM)pArgs)->DMD_DVBT_InitData), ((PDVBT_INIT_PARAM)pArgs)->u32InitDataLen);
1362*53ee8cc1Swenshuai.xi             #else
1363*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTInit( (((PDVBT_INIT_PARAM)pArgs)->DMD_DVBT_InitData), ((PDVBT_INIT_PARAM)pArgs)->u32InitDataLen);
1364*53ee8cc1Swenshuai.xi             #endif
1365*53ee8cc1Swenshuai.xi 	     ((PDVBT_INIT_PARAM)pArgs)->ret=bRet;
1366*53ee8cc1Swenshuai.xi             break;
1367*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_Exit:
1368*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_Exit\n"));
1369*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTExit();
1370*53ee8cc1Swenshuai.xi             ((PDVBT_EXIT_PARAM)pArgs)->ret=bRet;
1371*53ee8cc1Swenshuai.xi             break;
1372*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetDbgLeve:
1373*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetDbgLevel\n"));
1374*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetDbgLevel(((PDVBT_SETDBG_LEVEL_PARAM)pArgs)->u8DbgLevel);
1375*53ee8cc1Swenshuai.xi 	     ((PDVBT_SETDBG_LEVEL_PARAM)pArgs)->ret=bRet;
1376*53ee8cc1Swenshuai.xi             break;
1377*53ee8cc1Swenshuai.xi         /*bryan temp mark*/
1378*53ee8cc1Swenshuai.xi         #if(0)
1379*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetInfo:
1380*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetInfo\n"));
1381*53ee8cc1Swenshuai.xi             ((PDVBT_GETINFO_PARAM)pArgs)->pInfo = psDVBTInstPri->fpDVBTGetInfo(((PDVBT_GETINFO_PARAM)pArgs)->eInfoType);
1382*53ee8cc1Swenshuai.xi             bRet = TRUE;
1383*53ee8cc1Swenshuai.xi 	    ((PDVBT_GETINFO_PARAM)pArgs)->ret=bRet;
1384*53ee8cc1Swenshuai.xi             break;
1385*53ee8cc1Swenshuai.xi          #endif
1386*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetLibVer:
1387*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetLibVer\n"));
1388*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetLibVer(((PDVBT_GETLIBVER_PARAM)pArgs)->ppVersion);
1389*53ee8cc1Swenshuai.xi 	     ((PDVBT_GETLIBVER_PARAM)pArgs)->ret=bRet;
1390*53ee8cc1Swenshuai.xi             break;
1391*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetFWVer:
1392*53ee8cc1Swenshuai.xi //	     ULOGD("DEMOD","bryan debug check demod GetFWVer DVBT!!\n");
1393*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBTGetFWVer\n"));
1394*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetFWVer(((PDVBT_GETFWVER_PARAM)pArgs)->ver);
1395*53ee8cc1Swenshuai.xi 	    ((PDVBT_GETFWVER_PARAM)pArgs)->ret=bRet;
1396*53ee8cc1Swenshuai.xi             break;
1397*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetReg:
1398*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetReg\n"));
1399*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetReg( ((PDVBT_GETREG_PARAM)pArgs)->u16Addr, ((PDVBT_GETREG_PARAM)pArgs)->pu8Data);
1400*53ee8cc1Swenshuai.xi 	     ((PDVBT_GETREG_PARAM)pArgs)->ret=bRet;
1401*53ee8cc1Swenshuai.xi             break;
1402*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetReg:
1403*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetReg\n"));
1404*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetReg( ((PDVBT_SETREG_PARAM)pArgs)->u16Addr, ((PDVBT_SETREG_PARAM)pArgs)->u8Data);
1405*53ee8cc1Swenshuai.xi 	     ((PDVBT_SETREG_PARAM)pArgs)->ret=bRet;
1406*53ee8cc1Swenshuai.xi             break;
1407*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetSerialControl:
1408*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetSerialControl\n"));
1409*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetSerialControl( ((PDVBT_SetSerialControl_PARAM)pArgs)->bEnable);
1410*53ee8cc1Swenshuai.xi 	     ((PDVBT_SetSerialControl_PARAM)pArgs)->ret=bRet;
1411*53ee8cc1Swenshuai.xi             break;
1412*53ee8cc1Swenshuai.xi /*
1413*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetConfig:
1414*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_SetConfig\n"));
1415*53ee8cc1Swenshuai.xi             u32Ret = psDVBTInstPri->fpDVBTSetConfig( ((PDVBT_SetConfig_PARAM)pArgs)->BW, ((PDVBT_SetConfig_PARAM)pArgs)->bSerialTS,  ((PDVBT_SetConfig_PARAM)pArgs)->bPalBG);
1416*53ee8cc1Swenshuai.xi             break;
1417*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetConfigHPLP:
1418*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_SetConfigHPLP\n"));
1419*53ee8cc1Swenshuai.xi             u32Ret = psDVBTInstPri->fpDVBTSetConfigHPLP(((PDVBT_SetConfigHPLP_PARAM)pArgs)->BW, ((PDVBT_SetConfigHPLP_PARAM)pArgs)->bSerialTS,  ((PDVBT_SetConfigHPLP_PARAM)pArgs)->bPalBG,  ((PDVBT_SetConfigHPLP_PARAM)pArgs)->bLPSel);
1420*53ee8cc1Swenshuai.xi            break;
1421*53ee8cc1Swenshuai.xi  */
1422*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetConfigHPLPSetIF:
1423*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetConfigHPLPSetIF\n"));
1424*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetConfigHPLPSetIF(((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->BW, ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->bSerialTS,  ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->bPalBG,  ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->bLPSel, ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->u32IFFreq,  ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->u32FSFreq,  ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->u8IQSwap);
1425*53ee8cc1Swenshuai.xi 	    ((PDVBT_SetConfigHPLPSetIF_PARAM)pArgs)->ret=bRet;
1426*53ee8cc1Swenshuai.xi             break;
1427*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetActive:
1428*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetActive\n"));
1429*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetActive(((PDVBT_SetActive_PARAM)pArgs)->bEnable);
1430*53ee8cc1Swenshuai.xi 	    ((PDVBT_SetActive_PARAM)pArgs)->ret=bRet;
1431*53ee8cc1Swenshuai.xi             break;
1432*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetLock:
1433*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetLock\n"));
1434*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetLock(((PDVBT_GetLock_PARAM)pArgs)->eType, ((PDVBT_GetLock_PARAM)pArgs)->eLockStatus);
1435*53ee8cc1Swenshuai.xi 	    ((PDVBT_GetLock_PARAM)pArgs)->ret=bRet;
1436*53ee8cc1Swenshuai.xi             break;
1437*53ee8cc1Swenshuai.xi /*
1438*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetSignalStrength:
1439*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetSignalStrength\n"));
1440*53ee8cc1Swenshuai.xi             u32Ret = psDVBTInstPri->fpDVBTGetSignalStrength(((PDVBT_GetSignalStrength_PARAM)pArgs)->u16Strength);
1441*53ee8cc1Swenshuai.xi             break;
1442*53ee8cc1Swenshuai.xi */
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi /*
1445*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetSignalStrengthWithRFPower:
1446*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetSignalStrengthWithRFPower\n"));
1447*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetSignalStrengthWithRFPower(((PDVBT_GetSignalStrengthWithRFPower_PARAM)pArgs)->u16Strength, ((PDVBT_GetSignalStrengthWithRFPower_PARAM)pArgs)->fRFPowerDbm);
1448*53ee8cc1Swenshuai.xi 	     ((PDVBT_GetSignalStrengthWithRFPower_PARAM)pArgs)->ret=bRet;
1449*53ee8cc1Swenshuai.xi             break;
1450*53ee8cc1Swenshuai.xi */
1451*53ee8cc1Swenshuai.xi 
1452*53ee8cc1Swenshuai.xi /*
1453*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetSignalQuality:
1454*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetSignalQuality\n"));
1455*53ee8cc1Swenshuai.xi             u32Ret = psDVBTInstPri->fpDVBTGetSignalQuality(((PDVBT_GetSignalQuality_PARAM)pArgs)->u16Quality);
1456*53ee8cc1Swenshuai.xi             break;
1457*53ee8cc1Swenshuai.xi */
1458*53ee8cc1Swenshuai.xi 
1459*53ee8cc1Swenshuai.xi /*
1460*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetSignalQualityWithRFPower:
1461*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetSignalQualityWithRFPower\n"));
1462*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetSignalQualityWithRFPower(((PDVBT_GetSignalQualityWithRFPower_PARAM)pArgs)->u16Quality, ((PDVBT_GetSignalQualityWithRFPower_PARAM)pArgs)->fRFPowerDbm);
1463*53ee8cc1Swenshuai.xi 	     ((PDVBT_GetSignalQualityWithRFPower_PARAM)pArgs)->ret=bRet;
1464*53ee8cc1Swenshuai.xi             break;
1465*53ee8cc1Swenshuai.xi */
1466*53ee8cc1Swenshuai.xi          /* bryan temp mark*/
1467*53ee8cc1Swenshuai.xi          // arthur
1468*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetSNR:
1469*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetSNR\n"));
1470*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetSNR(((PDVBT_GetSNR_PARAM)pArgs)->noise_power_reg);
1471*53ee8cc1Swenshuai.xi 	          ((PDVBT_GetSNR_PARAM)pArgs)->ret=bRet;
1472*53ee8cc1Swenshuai.xi             break;
1473*53ee8cc1Swenshuai.xi 
1474*53ee8cc1Swenshuai.xi        case DMD_DVBT_DRV_CMD_GetIFAGC:
1475*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetIFAGC\n"));
1476*53ee8cc1Swenshuai.xi 		        bRet=psDVBTInstPri->fpDVBT_GetIFAGC(((PDVBT_GetIFAGC_PARAM)pArgs)->ifagc_reg,\
1477*53ee8cc1Swenshuai.xi 		        ((PDVBT_GetIFAGC_PARAM)pArgs)->ifagc_reg_lsb,\
1478*53ee8cc1Swenshuai.xi 		        ((PDVBT_GetIFAGC_PARAM)pArgs)->ifagc_err_reg);
1479*53ee8cc1Swenshuai.xi 		        ((PDVBT_GetIFAGC_PARAM)pArgs)->ret=bRet;
1480*53ee8cc1Swenshuai.xi             break;
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi          /*bryan temp mark */
1483*53ee8cc1Swenshuai.xi 
1484*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetPostViterbiBer:
1485*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetPostViterbiBer\n"));
1486*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetPostViterbiBer(((PDVBT_GetPostViterbiBer_PARAM)pArgs)->BitErrPeriod_reg, ((PDVBT_GetPostViterbiBer_PARAM)pArgs)->BitErr_reg, ((PDVBT_GetPostViterbiBer_PARAM)pArgs)->PktErr_reg);
1487*53ee8cc1Swenshuai.xi 	          ((PDVBT_GetPostViterbiBer_PARAM)pArgs)->ret=bRet;
1488*53ee8cc1Swenshuai.xi             break;
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi 	/*bryan temp mark */
1491*53ee8cc1Swenshuai.xi         #if(0)
1492*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetPreViterbiBer:
1493*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetPreViterbiBer\n"));
1494*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetPreViterbiBer(((PDVBT_GetPreViterbiBer_PARAM)pArgs)->ber);
1495*53ee8cc1Swenshuai.xi 	      ((PDVBT_GetPreViterbiBer_PARAM)pArgs)->ret=bRet;
1496*53ee8cc1Swenshuai.xi             break;
1497*53ee8cc1Swenshuai.xi          #endif
1498*53ee8cc1Swenshuai.xi 
1499*53ee8cc1Swenshuai.xi             case DMD_DVBT_DRV_CMD_GetPacketErr:
1500*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetPacketErr\n"));
1501*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetPacketErr(((PDVBT_GetPacketErr_PARAM)pArgs)->pktErr);
1502*53ee8cc1Swenshuai.xi 	     ((PDVBT_GetPacketErr_PARAM)pArgs)->ret=bRet;
1503*53ee8cc1Swenshuai.xi             break;
1504*53ee8cc1Swenshuai.xi             case DMD_DVBT_DRV_CMD_GetTPSInfo:
1505*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBToctl - MDrv_DMD_DVBT_GetTPSInfo\n"));
1506*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetTPSInfo(((PDVBT_GetTPSInfo_PARAM)pArgs)->u16Info);
1507*53ee8cc1Swenshuai.xi 	     ((PDVBT_GetTPSInfo_PARAM)pArgs)->ret=bRet;
1508*53ee8cc1Swenshuai.xi             break;
1509*53ee8cc1Swenshuai.xi             case DMD_DVBT_DRV_CMD_GetCellID:
1510*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_GetCellID\n"));
1511*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetCellID(((PDVBT_GetCellID_PARAM)pArgs)->u16CellID);
1512*53ee8cc1Swenshuai.xi 	      ((PDVBT_GetCellID_PARAM)pArgs)->ret=bRet;
1513*53ee8cc1Swenshuai.xi             break;
1514*53ee8cc1Swenshuai.xi 
1515*53ee8cc1Swenshuai.xi         /*bryan temp mark*/
1516*53ee8cc1Swenshuai.xi         #if(0)
1517*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_GetFreqOffset:
1518*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_GetFreqOffset\n"));
1519*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTGetFreqOffset(((PDVBT_GetFreqOffset_PARAM)pArgs)->pFreqOff);
1520*53ee8cc1Swenshuai.xi 	      ((PDVBT_GetFreqOffset_PARAM)pArgs)->ret=bRet;
1521*53ee8cc1Swenshuai.xi             break;
1522*53ee8cc1Swenshuai.xi          #endif
1523*53ee8cc1Swenshuai.xi         /*bryan temp mark*/
1524*53ee8cc1Swenshuai.xi         #if(0)
1525*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_NORDIGSSITableWrite:
1526*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_NORDIG_SSI_Table_Write\n"));
1527*53ee8cc1Swenshuai.xi            bRet = psDVBTInstPri->fpDVBTNORDIGSSITableWrite(((PDVBT_NORDIGSSITableWrite_PARAM)pArgs)->constel, ((PDVBT_NORDIGSSITableWrite_PARAM)pArgs)->code_rate, ((PDVBT_NORDIGSSITableWrite_PARAM)pArgs)->write_value);
1528*53ee8cc1Swenshuai.xi             ((PDVBT_NORDIGSSITableWrite_PARAM)pArgs)->ret=bRet;
1529*53ee8cc1Swenshuai.xi            break;
1530*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_NORDIGSSITableRead:
1531*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","DVBTIoctl - MDrv_DMD_DVBT_NORDIG_SSI_Table_Read\n"));
1532*53ee8cc1Swenshuai.xi            bRet = psDVBTInstPri->fpDVBTNORDIGSSITableRead(((PDVBT_NORDIGSSITableRead_PARAM)pArgs)->constel, ((PDVBT_NORDIGSSITableRead_PARAM)pArgs)->code_rate, ((PDVBT_NORDIGSSITableRead_PARAM)pArgs)->read_value);
1533*53ee8cc1Swenshuai.xi            ((PDVBT_NORDIGSSITableRead_PARAM)pArgs)->ret=bRet;
1534*53ee8cc1Swenshuai.xi            break;
1535*53ee8cc1Swenshuai.xi         #endif
1536*53ee8cc1Swenshuai.xi 
1537*53ee8cc1Swenshuai.xi         case DMD_DVBT_DRV_CMD_SetPowerState:
1538*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTIoctl - MDrv_DMD_DVBT_SetPowerState\n"));
1539*53ee8cc1Swenshuai.xi             bRet = psDVBTInstPri->fpDVBTSetPowerState(((PDVBT_SetPowerState_PARAM)pArgs)->u16PowerState);
1540*53ee8cc1Swenshuai.xi 	     ((PDVBT_SetPowerState_PARAM)pArgs)->ret=bRet;
1541*53ee8cc1Swenshuai.xi             break;
1542*53ee8cc1Swenshuai.xi          default:
1543*53ee8cc1Swenshuai.xi             break;
1544*53ee8cc1Swenshuai.xi     }
1545*53ee8cc1Swenshuai.xi 
1546*53ee8cc1Swenshuai.xi     //jway suggest UtopiaResourceRelease(pResource);
1547*53ee8cc1Swenshuai.xi 
1548*53ee8cc1Swenshuai.xi     return (bRet ? UTOPIA_STATUS_SUCCESS : UTOPIA_STATUS_FAIL);
1549*53ee8cc1Swenshuai.xi }
1550*53ee8cc1Swenshuai.xi 
DVBTClose(void * pInstance)1551*53ee8cc1Swenshuai.xi MS_U32 DVBTClose(void* pInstance)
1552*53ee8cc1Swenshuai.xi {
1553*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTClose\n"));
1554*53ee8cc1Swenshuai.xi 
1555*53ee8cc1Swenshuai.xi     UtopiaInstanceDelete(pInstance);
1556*53ee8cc1Swenshuai.xi 
1557*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
1558*53ee8cc1Swenshuai.xi }
1559*53ee8cc1Swenshuai.xi 
DVBTStr(MS_U32 u32PowerState,void * pModule)1560*53ee8cc1Swenshuai.xi MS_U32 DVBTStr(MS_U32 u32PowerState, void* pModule)
1561*53ee8cc1Swenshuai.xi {
1562*53ee8cc1Swenshuai.xi     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1563*53ee8cc1Swenshuai.xi     MS_U32 u32Ret = 0;
1564*53ee8cc1Swenshuai.xi 
1565*53ee8cc1Swenshuai.xi     //UtopiaModuleGetSTRPrivate(pModule, (void**));
1566*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTStr\n"));
1567*53ee8cc1Swenshuai.xi 
1568*53ee8cc1Swenshuai.xi     if (u32PowerState == E_POWER_SUSPEND)
1569*53ee8cc1Swenshuai.xi     {
1570*53ee8cc1Swenshuai.xi         /* Please Implement Module Suspend Flow Here. */
1571*53ee8cc1Swenshuai.xi         u32Ret = DMD_DVBT_SetPowerState(E_POWER_SUSPEND);
1572*53ee8cc1Swenshuai.xi 
1573*53ee8cc1Swenshuai.xi         if(u32Ret == TRUE)
1574*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1575*53ee8cc1Swenshuai.xi         else
1576*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_FAIL;
1577*53ee8cc1Swenshuai.xi 
1578*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c][DVBTStr] SUSPEND !\n"));
1579*53ee8cc1Swenshuai.xi     }
1580*53ee8cc1Swenshuai.xi     else if (u32PowerState == E_POWER_RESUME)
1581*53ee8cc1Swenshuai.xi     {
1582*53ee8cc1Swenshuai.xi         /* Please Implement Module Resume Flow Here. */
1583*53ee8cc1Swenshuai.xi         u32Ret = DMD_DVBT_SetPowerState(E_POWER_RESUME);
1584*53ee8cc1Swenshuai.xi 
1585*53ee8cc1Swenshuai.xi         if(u32Ret == TRUE)
1586*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1587*53ee8cc1Swenshuai.xi         else
1588*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_FAIL;
1589*53ee8cc1Swenshuai.xi 
1590*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c][DVBTStr] RESUME !\n"));
1591*53ee8cc1Swenshuai.xi     }
1592*53ee8cc1Swenshuai.xi     else
1593*53ee8cc1Swenshuai.xi     {
1594*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_FAIL;
1595*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c][DVBTStr] OTHERS !\n"));
1596*53ee8cc1Swenshuai.xi     }
1597*53ee8cc1Swenshuai.xi 
1598*53ee8cc1Swenshuai.xi     return u32Return;// for success
1599*53ee8cc1Swenshuai.xi }
1600*53ee8cc1Swenshuai.xi 
DVBTRegisterToUtopia(void)1601*53ee8cc1Swenshuai.xi void DVBTRegisterToUtopia(void)
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi     // 1. deal with module
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi     void* pUtopiaModule = NULL;
1606*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c]DVBTRegisterToUtopia\n"));
1607*53ee8cc1Swenshuai.xi //    UtopiaModuleCreate(MODULE_DVBT, 8, &pUtopiaModule);   //bryan: why this was taken out
1608*53ee8cc1Swenshuai.xi     UtopiaModuleCreate(MODULE_DVBT, 8, &pUtopiaModule);
1609*53ee8cc1Swenshuai.xi     UtopiaModuleRegister(pUtopiaModule);
1610*53ee8cc1Swenshuai.xi     UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)DVBTOpen, (FUtopiaClose)DVBTClose, (FUtopiaIOctl)DVBTIoctl);
1611*53ee8cc1Swenshuai.xi 
1612*53ee8cc1Swenshuai.xi    // Utopia2K STR
1613*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
1614*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT_v2.c][DVBTRegisterToUtopia] KERNEL DVBTStr!\n"));
1615*53ee8cc1Swenshuai.xi     UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule,(FUtopiaSTR)DVBTStr);
1616*53ee8cc1Swenshuai.xi #endif
1617*53ee8cc1Swenshuai.xi }
1618*53ee8cc1Swenshuai.xi 
1619*53ee8cc1Swenshuai.xi 
1620