xref: /utopia/UTPA2-700.0.x/modules/demodulator/drv/demod/drvDMD_INTERN_DVBC_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_DVBC_v2.h"
125*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBC.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 // share memory setting
147*53ee8cc1Swenshuai.xi typedef enum _DVBC_POOL_ID
148*53ee8cc1Swenshuai.xi {
149*53ee8cc1Swenshuai.xi     DVBC_POOL_ID_DMD0 = 0
150*53ee8cc1Swenshuai.xi } DVBC_POOL_ID;
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _DVBC_RESOURCE_PRIVATE
153*53ee8cc1Swenshuai.xi {
154*53ee8cc1Swenshuai.xi     DMD_DVBC_ResData sDMD_DVBC_ResData[DMD_DVBC_MAX_DEMOD_NUM];
155*53ee8cc1Swenshuai.xi } DVBC_RESOURCE_PRIVATE, *PDVBC_RESOURCE_PRIVATE;
156*53ee8cc1Swenshuai.xi // end share memory setting
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi DMD_DVBC_ResData *psDMD_DVBC_ResData;	// pointer to share memory
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi static EN_POWER_MODE _prev_u16PowerState = E_POWER_MECHANICAL;
161*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
162*53ee8cc1Swenshuai.xi //  Global Variables
163*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
164*53ee8cc1Swenshuai.xi #define DMD_LOCK()      \
165*53ee8cc1Swenshuai.xi     do{                         \
166*53ee8cc1Swenshuai.xi         MS_ASSERT(MsOS_In_Interrupt() == FALSE); \
167*53ee8cc1Swenshuai.xi         if (_s32DMD_DVBC_Mutex == -1) return FALSE; \
168*53ee8cc1Swenshuai.xi         if (_u8DMD_DVBC_DbgLevel == DMD_DVBC_DBGLV_DEBUG) ULOGD("DEMOD","%s lock mutex\n", __FUNCTION__);\
169*53ee8cc1Swenshuai.xi         MsOS_ObtainMutex(_s32DMD_DVBC_Mutex, MSOS_WAIT_FOREVER);\
170*53ee8cc1Swenshuai.xi         }while(0)
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi #define DMD_UNLOCK()      \
173*53ee8cc1Swenshuai.xi     do{                         \
174*53ee8cc1Swenshuai.xi         MsOS_ReleaseMutex(_s32DMD_DVBC_Mutex);\
175*53ee8cc1Swenshuai.xi         if (_u8DMD_DVBC_DbgLevel == DMD_DVBC_DBGLV_DEBUG) ULOGD("DEMOD","%s unlock mutex\n", __FUNCTION__); \
176*53ee8cc1Swenshuai.xi         }while(0)
177*53ee8cc1Swenshuai.xi #if 0
178*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_EN =0;
179*53ee8cc1Swenshuai.xi MS_U8		 DVBT_TS_PHASE_NUM = 0;
180*53ee8cc1Swenshuai.xi #endif
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
183*53ee8cc1Swenshuai.xi //  Local Variables
184*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi // YP mark
188*53ee8cc1Swenshuai.xi #if 0
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi #if 1
191*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version = {
192*53ee8cc1Swenshuai.xi     .MW = { DMD_DVBT_INTERN_VER, },
193*53ee8cc1Swenshuai.xi };
194*53ee8cc1Swenshuai.xi #else
195*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version;
196*53ee8cc1Swenshuai.xi #endif
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi static DMD_DVBT_InitData _sDMD_DVBT_InitData;
199*53ee8cc1Swenshuai.xi static DMD_DbgLv _u8DMDDbgLevel=DMD_DBGLV_NONE;
200*53ee8cc1Swenshuai.xi static MS_S32 _s32DMD_DVBT_Mutex=-1;
201*53ee8cc1Swenshuai.xi static DMD_DVBT_Info sDMD_DVBT_Info;
202*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBT_TPS_Timeout = 1500, u16DMD_DVBT_FEC_Timeout=6000;
203*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBT_IfFrequency = 36167L, u32DMD_DVBT_FsFrequency = 45474L;
204*53ee8cc1Swenshuai.xi static MS_U8 u8DMD_DVBT_IQSwap=0;
205*53ee8cc1Swenshuai.xi static DMD_RF_CHANNEL_BANDWIDTH eDMD_DVBT_BandWidth=E_DMD_RF_CH_BAND_8MHz;
206*53ee8cc1Swenshuai.xi #endif
207*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
208*53ee8cc1Swenshuai.xi //  Debug Functions
209*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
210*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
211*53ee8cc1Swenshuai.xi //  Local Functions
212*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_Dual_Individual_Init)(DMD_DVBC_InitData_Transform*pDMD_DVBC_InitData, MS_U32 u32InitDataLen);
215*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_Dual_Public_Init)(MS_U8 u8AGC_Tristate_Ctrl,MS_U8 u8Sar_Channel);
216*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_Init)(DMD_DVBC_InitData_Transform *pDMD_DVBC_InitData, MS_U32 u32InitDataLen);
217*53ee8cc1Swenshuai.xi typedef MS_BOOL			    (*IOCTL_DVBC_Exit)(void);
218*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_SetDbgLevel)(DMD_DVBC_DbgLv u8DbgLevel);
219*53ee8cc1Swenshuai.xi typedef const DMD_DVBC_Info* (*IOCTL_DVBC_GetInfo)(void);
220*53ee8cc1Swenshuai.xi typedef MS_BOOL 		    (*IOCTL_DVBC_GetLibVer)(const MSIF_Version **ppVersion);
221*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_GetFWVer)(MS_U16 *ver);
222*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_GetDSPReg)(MS_U16 u16Addr, MS_U8 *pu8Data);
223*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_SetDSPReg)(MS_U16 u16Addr, MS_U8 pu8Data);
224*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_GetReg)(MS_U16 u16Addr, MS_U8 *pu8Data);
225*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_SetReg)(MS_U16 u16Addr, MS_U8 u8Data);
226*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_SetSerialControl)(MS_BOOL bEnable);
227*53ee8cc1Swenshuai.xi typedef MS_BOOL                   (*IOCTL_DVBC_SetConfig_symbol_rate_list)(MS_U16 u16SymbolRate, DMD_DVBC_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num);
228*53ee8cc1Swenshuai.xi typedef MS_BOOL			     (*IOCTL_DVBC_SetActive)(MS_BOOL bEnable);
229*53ee8cc1Swenshuai.xi typedef MS_BOOL	          (*IOCTL_DVBC_GetLockWithRFPower)(DMD_DVBC_GETLOCK_TYPE eType, MS_U32 u32CurrRFPowerDbm, MS_U32 u32NoChannelRFPowerDbm, DMD_DVBC_LOCK_STATUS *eLockStatus);
230*53ee8cc1Swenshuai.xi //typedef MS_BOOL           (*IOCTL_DVBC_GetSignalStrengthWithRFPower)(MS_U16 *u16Strength);
231*53ee8cc1Swenshuai.xi //typedef MS_BOOL			      (*IOCTL_DVBC_GetSignalQualityWithRFPower)(MS_U16 *u16Quality);
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi typedef MS_BOOL			      (*IOCTL_DVBC_ActiveDmdSwitch)(MS_U8 demod_no);
234*53ee8cc1Swenshuai.xi 
235*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetSNR)(MS_U16 *snr_reg);
236*53ee8cc1Swenshuai.xi //waiting add
237*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetPostViterbiBer)(MS_U32 *BitErr_reg, MS_U16 *BitErrPeriod_reg);
238*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetIFAGC)(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err);
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetPacketErr)(MS_U16 *pktErr);
241*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetCellID)(MS_U16 *u16CellID);
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi typedef MS_BOOL                    (*IOCTL_DVBC_GetStatus)(DMD_DVBC_MODULATION_TYPE *pQAMMode, MS_U16 *u16SymbolRate, MS_U32 *config_Fc_reg, MS_U32 *Fc_over_Fs_reg, MS_U16 *Cfo_offset_reg);
244*53ee8cc1Swenshuai.xi //typedef MS_BOOL                     (*IOCTL_DVBC_GetStatus)(DMD_DVBC_MODULATION_TYPE *pQAMMode, MS_U16 *u16SymbolRate);
245*53ee8cc1Swenshuai.xi typedef MS_U32                       (*IOCTL_DVBC_SetPowerState)(EN_POWER_MODE u16PowerState);
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_DVBC_GET_AGC_INFO
248*53ee8cc1Swenshuai.xi typedef MS_BOOL 										(*IOCTL_DVBC_GetAGCInfo)(MS_U8 u8dbg_mode, MS_U16* pu16Data);
249*53ee8cc1Swenshuai.xi #endif
250*53ee8cc1Swenshuai.xi 
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi typedef struct DVBC_INSTANT_PRIVATE
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_Dual_Individual_Init 	fpDVBC_Dual_Individual_Init;
256*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_Dual_Public_Init 		fpDVBC_Dual_Public_Init;
257*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_Init					fpDVBC_Init;
258*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_Exit					fpDVBC_Exit;
259*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetDbgLevel			fpDVBC_SetDbgLevel;
260*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetInfo				fpDVBC_GetInfo;
261*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetLibVer			fpDVBC_GetLibVer;
262*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetFWVer			fpDVBC_GetFWVer;
263*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetDSPReg			fpDVBC_GetDSPReg;
264*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetDSPReg			fpDVBC_SetDSPReg;
265*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetReg				fpDVBC_GetReg;
266*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetReg				fpDVBC_SetReg;
267*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetSerialControl           fpDVBCSetSerialControl;
268*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetConfig_symbol_rate_list fpDVBC_SetConfig_symbol_rate_list;
269*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetActive				fpDVBC_SetActive;
270*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetLockWithRFPower	fpDVBC_GetLockWithRFPower;
271*53ee8cc1Swenshuai.xi 	//IOCTL_DVBC_GetSignalStrengthWithRFPower  fpDVBC_GetSignalStrengthWithRFPower;
272*53ee8cc1Swenshuai.xi 	//IOCTL_DVBC_GetSignalQualityWithRFPower    fpDVBC_GetSignalQualityWithRFPower;
273*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_ActiveDmdSwitch                      fpDVBC_ActiveDmdSwitch;
274*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetSNR					     fpDVBC_GetSNR;
275*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetPostViterbiBer			     fpDVBC_GetPostViterbiBer;
276*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetPacketErr				     fpDVBC_GetPacketErr;
277*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetCellID				     fpDVBC_GetCellID;
278*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetStatus				     fpDVBC_GetStatus;
279*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_SetPowerState			     fpDVBC_SetPowerState;
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi 	//waiting add
282*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetIFAGC    fpDVBC_GetIFAGC;
283*53ee8cc1Swenshuai.xi 
284*53ee8cc1Swenshuai.xi 	#ifdef UFO_DEMOD_DVBC_GET_AGC_INFO
285*53ee8cc1Swenshuai.xi 	IOCTL_DVBC_GetAGCInfo fpDVBC_GetAGCInfo;
286*53ee8cc1Swenshuai.xi 	#endif
287*53ee8cc1Swenshuai.xi 
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi } DVBC_INSTANT_PRIVATE;
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi MS_U8		 DVBC_TS_PHASE_EN =0;
293*53ee8cc1Swenshuai.xi MS_U8		 DVBC_TS_PHASE_NUM = 0;
294*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
295*53ee8cc1Swenshuai.xi //  Local Variables
296*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
297*53ee8cc1Swenshuai.xi #if 1
298*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbc_intern_version = {
299*53ee8cc1Swenshuai.xi     .MW = { DMD_DVBC_INTERN_VER, },
300*53ee8cc1Swenshuai.xi };
301*53ee8cc1Swenshuai.xi #else
302*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version;
303*53ee8cc1Swenshuai.xi #endif
304*53ee8cc1Swenshuai.xi 
305*53ee8cc1Swenshuai.xi static const char pDMD_DVBC_MutexString[]={"Mutex DMD DVBC"};
306*53ee8cc1Swenshuai.xi //bryan temp mark static DMD_DVBC_InitData _sDMD_DVBC_InitData;
307*53ee8cc1Swenshuai.xi static DMD_DVBC_InitData_Transform _sDMD_DVBC_InitData;
308*53ee8cc1Swenshuai.xi static DMD_DVBC_DbgLv _u8DMD_DVBC_DbgLevel=DMD_DVBC_DBGLV_NONE;
309*53ee8cc1Swenshuai.xi static MS_S32 _s32DMD_DVBC_Mutex=-1;
310*53ee8cc1Swenshuai.xi static DMD_DVBC_Info sDMD_DVBC_Info;
311*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBC_AutoSymbol_Timeout = 10000, u16DMD_DVBC_FixSymbol_AutoQam_Timeout=2000, u16DMD_DVBC_FixSymbol_FixQam_Timeout=1000;
312*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBC_PrevScanTime=0, u32DMD_DVBC_ScanCount=0;
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi #if defined(CHIP_KAISER)||defined(CHIP_K6LITE)
315*53ee8cc1Swenshuai.xi //for dual demod setting
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi //demod NO0
318*53ee8cc1Swenshuai.xi static DMD_DVBC_InitData_Transform _sDMD_DVBC_InitData_dmd0;
319*53ee8cc1Swenshuai.xi //static DMD_DVBC_DbgLv _u8DMD_DVBC_DbgLevel=DMD_DVBC_DBGLV_NONE;
320*53ee8cc1Swenshuai.xi //static MS_S32 _s32DMD_DVBC_Mutex=-1;
321*53ee8cc1Swenshuai.xi static DMD_DVBC_Info sDMD_DVBC_Info_dmd0;
322*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBC_AutoSymbol_Timeout_dmd0 = 10000, u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd0=2000, u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd0=1000;
323*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBC_PrevScanTime_dmd0=0, u32DMD_DVBC_ScanCount_dmd0=0;
324*53ee8cc1Swenshuai.xi 
325*53ee8cc1Swenshuai.xi //demod NO1
326*53ee8cc1Swenshuai.xi static DMD_DVBC_InitData_Transform _sDMD_DVBC_InitData_dmd1;
327*53ee8cc1Swenshuai.xi //static DMD_DVBC_DbgLv _u8DMD_DVBC_DbgLevel=DMD_DVBC_DBGLV_NONE;
328*53ee8cc1Swenshuai.xi //static MS_S32 _s32DMD_DVBC_Mutex=-1;
329*53ee8cc1Swenshuai.xi static DMD_DVBC_Info sDMD_DVBC_Info_dmd1;
330*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBC_AutoSymbol_Timeout_dmd1 = 10000, u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd1=2000, u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd1=1000;
331*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBC_PrevScanTime_dmd1=0, u32DMD_DVBC_ScanCount_dmd1=0;
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi static MS_U8 drv_demod_swtich_status=0xff;  //
334*53ee8cc1Swenshuai.xi #endif
335*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
336*53ee8cc1Swenshuai.xi //  Debug Functions
337*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
338*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
339*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          (x)
340*53ee8cc1Swenshuai.xi #else
341*53ee8cc1Swenshuai.xi #define DMD_DBG(x)          //(x)
342*53ee8cc1Swenshuai.xi #endif
343*53ee8cc1Swenshuai.xi 
344*53ee8cc1Swenshuai.xi #if defined(CHIP_KAISER)||defined(CHIP_K6LITE)
DMD_DVBC_Dual_Public_Init(MS_U8 u8AGC_Tristate_Ctrl,MS_U8 u8Sar_Channel)345*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_Dual_Public_Init(MS_U8 u8AGC_Tristate_Ctrl,MS_U8 u8Sar_Channel)
346*53ee8cc1Swenshuai.xi {
347*53ee8cc1Swenshuai.xi     char pDMD_DVBC_MutexString[16];
348*53ee8cc1Swenshuai.xi    // MS_U32 u32IfFrequency = 36167L, u32FsFrequency = 45474L;
349*53ee8cc1Swenshuai.xi    // MS_U8 u8IQSwap=0, u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
350*53ee8cc1Swenshuai.xi     MS_BOOL bRFAGCTristateEnable = 1;
351*53ee8cc1Swenshuai.xi     MS_BOOL bIFAGCTristateEnable = 0;
352*53ee8cc1Swenshuai.xi 
353*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBC_Mutex != -1)
354*53ee8cc1Swenshuai.xi     {
355*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init more than once\n"));
356*53ee8cc1Swenshuai.xi         return FALSE;
357*53ee8cc1Swenshuai.xi     }
358*53ee8cc1Swenshuai.xi 
359*53ee8cc1Swenshuai.xi     if (NULL == strncpy(pDMD_DVBC_MutexString,"Mutex DMD DVBC",16))
360*53ee8cc1Swenshuai.xi     {
361*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init strcpy Fail\n"));
362*53ee8cc1Swenshuai.xi         return FALSE;
363*53ee8cc1Swenshuai.xi     }
364*53ee8cc1Swenshuai.xi     _s32DMD_DVBC_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBC_MutexString, MSOS_PROCESS_SHARED);
365*53ee8cc1Swenshuai.xi     if ( _s32DMD_DVBC_Mutex == -1)
366*53ee8cc1Swenshuai.xi     {
367*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init Create Mutex Fail\n"));
368*53ee8cc1Swenshuai.xi         return FALSE;
369*53ee8cc1Swenshuai.xi     }
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
372*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
373*53ee8cc1Swenshuai.xi     {
374*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_Init\n");
375*53ee8cc1Swenshuai.xi     }
376*53ee8cc1Swenshuai.xi     #endif
377*53ee8cc1Swenshuai.xi 
378*53ee8cc1Swenshuai.xi     if (u8Sar_Channel != 0xFF)
379*53ee8cc1Swenshuai.xi     {
380*53ee8cc1Swenshuai.xi     	//bryan temp mark
381*53ee8cc1Swenshuai.xi       //  MDrv_SAR_Adc_Config(u8Sar_Channel, TRUE);
382*53ee8cc1Swenshuai.xi     }
383*53ee8cc1Swenshuai.xi     DMD_LOCK();
384*53ee8cc1Swenshuai.xi     //_u8DMD_DVBC_DbgLevel=DMD_DVBC_DBGLV_DEBUG;
385*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBC);
386*53ee8cc1Swenshuai.xi     HAL_DMD_RegInit();
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi      bRFAGCTristateEnable = (u8AGC_Tristate_Ctrl& (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
390*53ee8cc1Swenshuai.xi      bIFAGCTristateEnable = (u8AGC_Tristate_Ctrl & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
391*53ee8cc1Swenshuai.xi 
392*53ee8cc1Swenshuai.xi 
393*53ee8cc1Swenshuai.xi     if (bIFAGCTristateEnable)
394*53ee8cc1Swenshuai.xi     {
395*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
396*53ee8cc1Swenshuai.xi     }
397*53ee8cc1Swenshuai.xi     else
398*53ee8cc1Swenshuai.xi     {
399*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
400*53ee8cc1Swenshuai.xi     }
401*53ee8cc1Swenshuai.xi 
402*53ee8cc1Swenshuai.xi     INTERN_DVBC_InitClkgen(bRFAGCTristateEnable);  //RF_AGC control no use in initclkgen
403*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
404*53ee8cc1Swenshuai.xi 
405*53ee8cc1Swenshuai.xi     return TRUE;
406*53ee8cc1Swenshuai.xi }
407*53ee8cc1Swenshuai.xi 
408*53ee8cc1Swenshuai.xi 
DMD_DVBC_Dual_Individual_Init(DMD_DVBC_InitData_Transform * pDMD_DVBC_InitData,MS_U32 u32InitDataLen)409*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_Dual_Individual_Init(DMD_DVBC_InitData_Transform*pDMD_DVBC_InitData, MS_U32 u32InitDataLen)
410*53ee8cc1Swenshuai.xi {
411*53ee8cc1Swenshuai.xi      DMD_LOCK();
412*53ee8cc1Swenshuai.xi 
413*53ee8cc1Swenshuai.xi     if ( sizeof(_sDMD_DVBC_InitData) == u32InitDataLen)
414*53ee8cc1Swenshuai.xi     {
415*53ee8cc1Swenshuai.xi         memcpy(&_sDMD_DVBC_InitData, pDMD_DVBC_InitData, u32InitDataLen);
416*53ee8cc1Swenshuai.xi     }
417*53ee8cc1Swenshuai.xi     else
418*53ee8cc1Swenshuai.xi     {
419*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init input data structure incorrect\n"));
420*53ee8cc1Swenshuai.xi         return FALSE;
421*53ee8cc1Swenshuai.xi     }
422*53ee8cc1Swenshuai.xi 
423*53ee8cc1Swenshuai.xi     u16DMD_DVBC_AutoSymbol_Timeout = 10000;
424*53ee8cc1Swenshuai.xi     u16DMD_DVBC_FixSymbol_AutoQam_Timeout=2000;
425*53ee8cc1Swenshuai.xi     u16DMD_DVBC_FixSymbol_FixQam_Timeout=2000;
426*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
427*53ee8cc1Swenshuai.xi     {
428*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=4)
429*53ee8cc1Swenshuai.xi         {
430*53ee8cc1Swenshuai.xi             u16DMD_DVBC_AutoSymbol_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[3];
431*53ee8cc1Swenshuai.xi             u16DMD_DVBC_AutoSymbol_Timeout =  (u16DMD_DVBC_AutoSymbol_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[4];
432*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_AutoSymbol_Timeout < 5000) u16DMD_DVBC_AutoSymbol_Timeout=5000;
433*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_AutoSymbol_Timeout %d\n",u16DMD_DVBC_AutoSymbol_Timeout);
434*53ee8cc1Swenshuai.xi 
435*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_AutoQam_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[5];
436*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_AutoQam_Timeout =  (u16DMD_DVBC_FixSymbol_AutoQam_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[6];
437*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_FixSymbol_AutoQam_Timeout < 2000) u16DMD_DVBC_FixSymbol_AutoQam_Timeout=2000;
438*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_FixSymbol_AutoQam_Timeout %d\n",u16DMD_DVBC_FixSymbol_AutoQam_Timeout);
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_FixQam_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[7];
441*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_FixQam_Timeout =  (u16DMD_DVBC_FixSymbol_FixQam_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[8];
442*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_FixSymbol_FixQam_Timeout < 1000) u16DMD_DVBC_FixSymbol_FixQam_Timeout=1000;
443*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_FixSymbol_FixQam_Timeout %d\n",u16DMD_DVBC_FixSymbol_FixQam_Timeout);
444*53ee8cc1Swenshuai.xi         }
445*53ee8cc1Swenshuai.xi         else
446*53ee8cc1Swenshuai.xi         {
447*53ee8cc1Swenshuai.xi         }
448*53ee8cc1Swenshuai.xi     }
449*53ee8cc1Swenshuai.xi     else
450*53ee8cc1Swenshuai.xi     {
451*53ee8cc1Swenshuai.xi     }
452*53ee8cc1Swenshuai.xi 
453*53ee8cc1Swenshuai.xi 
454*53ee8cc1Swenshuai.xi 
455*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt != NULL)
456*53ee8cc1Swenshuai.xi     {
457*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt[0]>=1)
458*53ee8cc1Swenshuai.xi         {
459*53ee8cc1Swenshuai.xi             INTERN_DVBC_DMD51_Individual_Initialization(_sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt, _sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitSize);
460*53ee8cc1Swenshuai.xi         }
461*53ee8cc1Swenshuai.xi         else
462*53ee8cc1Swenshuai.xi         {
463*53ee8cc1Swenshuai.xi             ULOGD("DEMOD","u8DMD_DVBT_DSPRegInitExt Error\n");
464*53ee8cc1Swenshuai.xi         }
465*53ee8cc1Swenshuai.xi     }
466*53ee8cc1Swenshuai.xi     else
467*53ee8cc1Swenshuai.xi     {
468*53ee8cc1Swenshuai.xi         INTERN_DVBC_DMD51_Individual_Initialization(  NULL, 0);
469*53ee8cc1Swenshuai.xi     }
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi     INTERN_DVBC_Version(&sDMD_DVBC_Info.u16Version);
472*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
473*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
474*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBC_Info.u16Version);
475*53ee8cc1Swenshuai.xi     #endif
476*53ee8cc1Swenshuai.xi     return TRUE;
477*53ee8cc1Swenshuai.xi }
478*53ee8cc1Swenshuai.xi #else
DMD_DVBC_Dual_Individual_Init(DMD_DVBC_InitData_Transform * pDMD_DVBC_InitData,MS_U32 u32InitDataLen)479*53ee8cc1Swenshuai.xi 	MS_BOOL DMD_DVBC_Dual_Individual_Init(DMD_DVBC_InitData_Transform *pDMD_DVBC_InitData, MS_U32 u32InitDataLen)
480*53ee8cc1Swenshuai.xi 	{
481*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","Doesn't support DVBC_Dual_Individual_Init function!!!\n");
482*53ee8cc1Swenshuai.xi 				return false;
483*53ee8cc1Swenshuai.xi 	}
484*53ee8cc1Swenshuai.xi 
DMD_DVBC_Dual_Public_Init(MS_U8 u8AGC_Tristate_Ctrl,MS_U8 u8Sar_Channel)485*53ee8cc1Swenshuai.xi 	MS_BOOL DMD_DVBC_Dual_Public_Init(MS_U8 u8AGC_Tristate_Ctrl,MS_U8 u8Sar_Channel)
486*53ee8cc1Swenshuai.xi 	{
487*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","Doesn't support DVBC_Dual_Public_Init function!!!\n");
488*53ee8cc1Swenshuai.xi 				return false;
489*53ee8cc1Swenshuai.xi 	}
490*53ee8cc1Swenshuai.xi #endif
DMD_DVBC_Init(DMD_DVBC_InitData_Transform * pDMD_DVBC_InitData,MS_U32 u32InitDataLen)491*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_Init(DMD_DVBC_InitData_Transform *pDMD_DVBC_InitData, MS_U32 u32InitDataLen)
492*53ee8cc1Swenshuai.xi {
493*53ee8cc1Swenshuai.xi     char pDMD_DVBC_MutexString[16];
494*53ee8cc1Swenshuai.xi //    MS_U32 u32IfFrequency = 36167L, u32FsFrequency = 45474L;
495*53ee8cc1Swenshuai.xi     MS_U32 u32IfFrequency =5000L, u32FsFrequency = 48000L;
496*53ee8cc1Swenshuai.xi     MS_U8 u8IQSwap = 0, u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
497*53ee8cc1Swenshuai.xi     MS_BOOL bRFAGCTristateEnable = 1;
498*53ee8cc1Swenshuai.xi     MS_BOOL bIFAGCTristateEnable = 0;
499*53ee8cc1Swenshuai.xi 	DMD_DVBC_ResData *pRes = psDMD_DVBC_ResData;
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi 
502*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_Init\n"));
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi     if (_s32DMD_DVBC_Mutex != -1)
505*53ee8cc1Swenshuai.xi     {
506*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init more than once\n"));
507*53ee8cc1Swenshuai.xi         return FALSE;
508*53ee8cc1Swenshuai.xi     }
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi     if (NULL == strncpy(pDMD_DVBC_MutexString,"Mutex DMD DVBC",16))
511*53ee8cc1Swenshuai.xi     {
512*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init strcpy Fail\n"));
513*53ee8cc1Swenshuai.xi         return FALSE;
514*53ee8cc1Swenshuai.xi     }
515*53ee8cc1Swenshuai.xi     _s32DMD_DVBC_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBC_MutexString, MSOS_PROCESS_SHARED);
516*53ee8cc1Swenshuai.xi     if ( _s32DMD_DVBC_Mutex == -1)
517*53ee8cc1Swenshuai.xi     {
518*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBC_Init Create Mutex Fail\n"));
519*53ee8cc1Swenshuai.xi         return FALSE;
520*53ee8cc1Swenshuai.xi     }
521*53ee8cc1Swenshuai.xi 
522*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
523*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
524*53ee8cc1Swenshuai.xi     {
525*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_Init\n");
526*53ee8cc1Swenshuai.xi     }
527*53ee8cc1Swenshuai.xi     #endif
528*53ee8cc1Swenshuai.xi 
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi 	DMD_DBG(printf("[DEMOD][DMD_DVBC_INIT] _prev_u16PowerState is %d \n", _prev_u16PowerState));
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi 	if(E_POWER_MECHANICAL==_prev_u16PowerState)
534*53ee8cc1Swenshuai.xi 	{
535*53ee8cc1Swenshuai.xi 
536*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy(&(pRes->sDMD_DVBC_InitData_Transform) 1111 enter \n"));
537*53ee8cc1Swenshuai.xi 		memcpy(&(pRes->sDMD_DVBC_InitData_Transform), pDMD_DVBC_InitData, sizeof(DMD_DVBC_InitData_Transform));
538*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy(&(pRes->sDMD_DVBC_InitData_Transform) 2222 exit \n"));
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy(&_sDMD_DVBC_InitData, pDMD_DVBC_InitData, u32InitDataLen) 3333 enter \n"));
541*53ee8cc1Swenshuai.xi 		memcpy(&_sDMD_DVBC_InitData, pDMD_DVBC_InitData, sizeof(_sDMD_DVBC_InitData));
542*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy(&_sDMD_DVBC_InitData, pDMD_DVBC_InitData, u32InitDataLen) 4444 exit \n"));
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi 	}
545*53ee8cc1Swenshuai.xi 	else if(E_POWER_RESUME==_prev_u16PowerState)
546*53ee8cc1Swenshuai.xi 	{
547*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy E_POWER_RESUME Enter  \n"));
548*53ee8cc1Swenshuai.xi 		memcpy(&_sDMD_DVBC_InitData, &(pRes->sDMD_DVBC_InitData_Transform), sizeof(DMD_DVBC_InitData_Transform));
549*53ee8cc1Swenshuai.xi 		DMD_DBG(printf("memcpy E_POWER_RESUME Exit  \n"));
550*53ee8cc1Swenshuai.xi 	}
551*53ee8cc1Swenshuai.xi 	else
552*53ee8cc1Swenshuai.xi 	{
553*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][DMD_DVBC_Init][check !!!]\n");
554*53ee8cc1Swenshuai.xi 	}
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi 	pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat = 1;
558*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD","[DMD_DVBC_Init] b_IsInit_DVBCCreat = %d;\n", pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat);
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi 
561*53ee8cc1Swenshuai.xi 
562*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8SarChannel != 0xFF)
563*53ee8cc1Swenshuai.xi     {
564*53ee8cc1Swenshuai.xi     //bryan temp mark
565*53ee8cc1Swenshuai.xi      //   MDrv_SAR_Adc_Config(_sDMD_DVBC_InitData.u8SarChannel, TRUE);
566*53ee8cc1Swenshuai.xi     }
567*53ee8cc1Swenshuai.xi     DMD_LOCK();
568*53ee8cc1Swenshuai.xi     //_u8DMD_DVBC_DbgLevel=DMD_DVBC_DBGLV_DEBUG;
569*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBC);
570*53ee8cc1Swenshuai.xi     HAL_DMD_RegInit();
571*53ee8cc1Swenshuai.xi 
572*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
573*53ee8cc1Swenshuai.xi     {
574*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=2)
575*53ee8cc1Swenshuai.xi         {
576*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[3] & (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
577*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[3] & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
578*53ee8cc1Swenshuai.xi         }
579*53ee8cc1Swenshuai.xi         else
580*53ee8cc1Swenshuai.xi         {
581*53ee8cc1Swenshuai.xi             bRFAGCTristateEnable = 1;
582*53ee8cc1Swenshuai.xi             bIFAGCTristateEnable = 0;
583*53ee8cc1Swenshuai.xi         }
584*53ee8cc1Swenshuai.xi     }
585*53ee8cc1Swenshuai.xi     else
586*53ee8cc1Swenshuai.xi     {
587*53ee8cc1Swenshuai.xi         bRFAGCTristateEnable = 1;
588*53ee8cc1Swenshuai.xi         bIFAGCTristateEnable = 0;
589*53ee8cc1Swenshuai.xi     }
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
592*53ee8cc1Swenshuai.xi     {
593*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=3)
594*53ee8cc1Swenshuai.xi         {
595*53ee8cc1Swenshuai.xi             u32IfFrequency = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[4]; // IF frequency
596*53ee8cc1Swenshuai.xi             u32IfFrequency =  (u32IfFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[5]; // IF frequency
597*53ee8cc1Swenshuai.xi             u32IfFrequency =  (u32IfFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[6]; // IF frequency
598*53ee8cc1Swenshuai.xi             u32IfFrequency =  (u32IfFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[7]; // IF frequency
599*53ee8cc1Swenshuai.xi             u32FsFrequency = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[8]; // FS frequency
600*53ee8cc1Swenshuai.xi             u32FsFrequency =  (u32FsFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[9]; // FS frequency
601*53ee8cc1Swenshuai.xi             u32FsFrequency =  (u32FsFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[10]; // FS frequency
602*53ee8cc1Swenshuai.xi             u32FsFrequency =  (u32FsFrequency<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[11]; // FS frequency
603*53ee8cc1Swenshuai.xi             u8IQSwap = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[12]; // IQ Swap
604*53ee8cc1Swenshuai.xi 			u8IQSwap = u8IQSwap;
605*53ee8cc1Swenshuai.xi             u8ADCIQMode = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[13]; // u8ADCIQMode : 0=I path, 1=Q path, 2=both IQ
606*53ee8cc1Swenshuai.xi             u8PadSel = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[14]; // u8PadSel : 0=Normal, 1=analog pad
607*53ee8cc1Swenshuai.xi             bPGAEnable = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[15]; // bPGAEnable : 0=disable, 1=enable
608*53ee8cc1Swenshuai.xi             u8PGAGain = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[16]; // u8PGAGain : default 5
609*53ee8cc1Swenshuai.xi         }
610*53ee8cc1Swenshuai.xi         else
611*53ee8cc1Swenshuai.xi         {
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi         }
614*53ee8cc1Swenshuai.xi     }
615*53ee8cc1Swenshuai.xi     else
616*53ee8cc1Swenshuai.xi     {
617*53ee8cc1Swenshuai.xi 
618*53ee8cc1Swenshuai.xi     }
619*53ee8cc1Swenshuai.xi 
620*53ee8cc1Swenshuai.xi     u16DMD_DVBC_AutoSymbol_Timeout = 10000;
621*53ee8cc1Swenshuai.xi     u16DMD_DVBC_FixSymbol_AutoQam_Timeout=2000;
622*53ee8cc1Swenshuai.xi     u16DMD_DVBC_FixSymbol_FixQam_Timeout=2000;
623*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
624*53ee8cc1Swenshuai.xi     {
625*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=4)
626*53ee8cc1Swenshuai.xi         {
627*53ee8cc1Swenshuai.xi             u16DMD_DVBC_AutoSymbol_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[17];
628*53ee8cc1Swenshuai.xi             u16DMD_DVBC_AutoSymbol_Timeout =  (u16DMD_DVBC_AutoSymbol_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[18];
629*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_AutoSymbol_Timeout < 5000) u16DMD_DVBC_AutoSymbol_Timeout=5000;
630*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_AutoSymbol_Timeout %d\n",u16DMD_DVBC_AutoSymbol_Timeout);
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_AutoQam_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[19];
633*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_AutoQam_Timeout =  (u16DMD_DVBC_FixSymbol_AutoQam_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[20];
634*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_FixSymbol_AutoQam_Timeout < 2000) u16DMD_DVBC_FixSymbol_AutoQam_Timeout=2000;
635*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_FixSymbol_AutoQam_Timeout %d\n",u16DMD_DVBC_FixSymbol_AutoQam_Timeout);
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_FixQam_Timeout = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[21];
638*53ee8cc1Swenshuai.xi             u16DMD_DVBC_FixSymbol_FixQam_Timeout =  (u16DMD_DVBC_FixSymbol_FixQam_Timeout<<8)+_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[22];
639*53ee8cc1Swenshuai.xi             if (u16DMD_DVBC_FixSymbol_FixQam_Timeout < 1000) u16DMD_DVBC_FixSymbol_FixQam_Timeout=1000;
640*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD","u16DMD_DVBC_FixSymbol_FixQam_Timeout %d\n",u16DMD_DVBC_FixSymbol_FixQam_Timeout);
641*53ee8cc1Swenshuai.xi         }
642*53ee8cc1Swenshuai.xi         else
643*53ee8cc1Swenshuai.xi         {
644*53ee8cc1Swenshuai.xi         }
645*53ee8cc1Swenshuai.xi     }
646*53ee8cc1Swenshuai.xi     else
647*53ee8cc1Swenshuai.xi     {
648*53ee8cc1Swenshuai.xi     }
649*53ee8cc1Swenshuai.xi 
650*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
651*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32IfFrequency %ld\n",u32IfFrequency);
652*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u32FsFrequency %ld\n",u32FsFrequency);
653*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","u8IQSwap %d\n",u8IQSwap);
654*53ee8cc1Swenshuai.xi     #endif
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi     if (bIFAGCTristateEnable)
657*53ee8cc1Swenshuai.xi     {
658*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
659*53ee8cc1Swenshuai.xi     }
660*53ee8cc1Swenshuai.xi     else
661*53ee8cc1Swenshuai.xi     {
662*53ee8cc1Swenshuai.xi         MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
663*53ee8cc1Swenshuai.xi     }
664*53ee8cc1Swenshuai.xi 
665*53ee8cc1Swenshuai.xi 	// oga
666*53ee8cc1Swenshuai.xi 	 DVBC_TS_PHASE_EN = 0;
667*53ee8cc1Swenshuai.xi 	 DVBC_TS_PHASE_NUM = 0;
668*53ee8cc1Swenshuai.xi    if (0)//(_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
669*53ee8cc1Swenshuai.xi    {
670*53ee8cc1Swenshuai.xi    	if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=5)	// version bigger than 5, apply TS phase solution
671*53ee8cc1Swenshuai.xi    	{
672*53ee8cc1Swenshuai.xi 		 DVBC_TS_PHASE_EN = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[INDEX_C_TS_PHASE_EN];
673*53ee8cc1Swenshuai.xi 		 DVBC_TS_PHASE_NUM = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[INDEX_C_TS_PHASE_NUM];
674*53ee8cc1Swenshuai.xi 		 ULOGD("DEMOD","##DVBC: TS check: bTsPhaseEn = %d, u16TsPhaseNum = %d\n",DVBC_TS_PHASE_EN,DVBC_TS_PHASE_NUM);
675*53ee8cc1Swenshuai.xi    	}
676*53ee8cc1Swenshuai.xi 	else
677*53ee8cc1Swenshuai.xi 	{
678*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","##DVBC:TS Phase check !!, board version smaller than 4\n");
679*53ee8cc1Swenshuai.xi 	}
680*53ee8cc1Swenshuai.xi    }
681*53ee8cc1Swenshuai.xi    else	// if init board define is NULL TS phase needs check.
682*53ee8cc1Swenshuai.xi    {
683*53ee8cc1Swenshuai.xi    	ULOGD("DEMOD","##DVBC: TS Phase check !!\n");
684*53ee8cc1Swenshuai.xi    }
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi     if(0)// (_sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt != NULL)
687*53ee8cc1Swenshuai.xi     {
688*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt[0]>=1)
689*53ee8cc1Swenshuai.xi         {
690*53ee8cc1Swenshuai.xi             INTERN_DVBC_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, _sDMD_DVBC_InitData.u8DMD_DVBC_DSPRegInitExt, _sDMD_DVBC_InitData.u8DMD_DVBC_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 	ULOGD("DEMOD","[DMD_DVBC_Init]INTERN_DVBC_Power_On_Initialization Enter \n");
700*53ee8cc1Swenshuai.xi 	INTERN_DVBC_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain,  NULL, 0);
701*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD","[DMD_DVBC_Init]INTERN_DVBC_Power_On_Initialization exit \n");
702*53ee8cc1Swenshuai.xi     }
703*53ee8cc1Swenshuai.xi     INTERN_DVBC_Version(&sDMD_DVBC_Info.u16Version);
704*53ee8cc1Swenshuai.xi 	pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.u16Version = sDMD_DVBC_Info.u16Version;
705*53ee8cc1Swenshuai.xi 
706*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
707*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
708*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","firmware version: %x\n",sDMD_DVBC_Info.u16Version);
709*53ee8cc1Swenshuai.xi     #endif
710*53ee8cc1Swenshuai.xi     return TRUE;
711*53ee8cc1Swenshuai.xi }
712*53ee8cc1Swenshuai.xi 
DMD_DVBC_Exit(void)713*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_Exit(void)
714*53ee8cc1Swenshuai.xi {
715*53ee8cc1Swenshuai.xi 	 DMD_DVBC_ResData *pRes = psDMD_DVBC_ResData;
716*53ee8cc1Swenshuai.xi 	MS_BOOL bRet;
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
719*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
720*53ee8cc1Swenshuai.xi     {
721*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_Exit\n");
722*53ee8cc1Swenshuai.xi     }
723*53ee8cc1Swenshuai.xi     #endif
724*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_Exit\n"));
725*53ee8cc1Swenshuai.xi     pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat = 0;
726*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c] DVBCCreat = %d\n", pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat);
727*53ee8cc1Swenshuai.xi     DMD_LOCK();
728*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBC_Exit();
729*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
730*53ee8cc1Swenshuai.xi     MsOS_DeleteMutex(_s32DMD_DVBC_Mutex);
731*53ee8cc1Swenshuai.xi     _s32DMD_DVBC_Mutex= -1;
732*53ee8cc1Swenshuai.xi     return bRet;
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetDbgLevel(DMD_DVBC_DbgLv u8DbgLevel)735*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetDbgLevel(DMD_DVBC_DbgLv u8DbgLevel)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetDbgLevel\n"));
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi     DMD_LOCK();
740*53ee8cc1Swenshuai.xi     _u8DMD_DVBC_DbgLevel = u8DbgLevel;
741*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
742*53ee8cc1Swenshuai.xi     return TRUE;
743*53ee8cc1Swenshuai.xi }
744*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetInfo(void)745*53ee8cc1Swenshuai.xi const DMD_DVBC_Info* DMD_DVBC_GetInfo(void)
746*53ee8cc1Swenshuai.xi {
747*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
748*53ee8cc1Swenshuai.xi    MS_U8 state = 0;
749*53ee8cc1Swenshuai.xi #endif
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
752*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
753*53ee8cc1Swenshuai.xi     {
754*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetInfo\n");
755*53ee8cc1Swenshuai.xi     }
756*53ee8cc1Swenshuai.xi     #endif
757*53ee8cc1Swenshuai.xi //for DBG
758*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
759*53ee8cc1Swenshuai.xi 	MDrv_SYS_DMD_VD_MBX_ReadReg(FEC_REG_BASE + 0xE0, &state);
760*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD"," @INTERN_DVBC_GetLock FSM 0x%x\n",state);
761*53ee8cc1Swenshuai.xi         INTERN_DVBC_Show_AGC_Info();
762*53ee8cc1Swenshuai.xi 	INTERN_DVBC_info();
763*53ee8cc1Swenshuai.xi #endif
764*53ee8cc1Swenshuai.xi 
765*53ee8cc1Swenshuai.xi     return (const DMD_DVBC_Info*)&sDMD_DVBC_Info;
766*53ee8cc1Swenshuai.xi }
767*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetLibVer(const MSIF_Version ** ppVersion)768*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetLibVer(const MSIF_Version **ppVersion)
769*53ee8cc1Swenshuai.xi {
770*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
771*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
772*53ee8cc1Swenshuai.xi     {
773*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetLibVer\n");
774*53ee8cc1Swenshuai.xi     }
775*53ee8cc1Swenshuai.xi     #endif
776*53ee8cc1Swenshuai.xi     DMD_LOCK();
777*53ee8cc1Swenshuai.xi     if (!ppVersion)
778*53ee8cc1Swenshuai.xi     {
779*53ee8cc1Swenshuai.xi         return FALSE;
780*53ee8cc1Swenshuai.xi     }
781*53ee8cc1Swenshuai.xi 
782*53ee8cc1Swenshuai.xi     *ppVersion = &_drv_dmd_dvbc_intern_version;
783*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
784*53ee8cc1Swenshuai.xi     return TRUE;
785*53ee8cc1Swenshuai.xi }
786*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetFWVer(MS_U16 * ver)787*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetFWVer(MS_U16 *ver)
788*53ee8cc1Swenshuai.xi {
789*53ee8cc1Swenshuai.xi 
790*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetFWVer\n"));
793*53ee8cc1Swenshuai.xi 
794*53ee8cc1Swenshuai.xi     DMD_LOCK();
795*53ee8cc1Swenshuai.xi 
796*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBC_Version(ver);
797*53ee8cc1Swenshuai.xi     //ULOGD("DEMOD","MDrv_DMD_DVBC_GetFWVer %x\n", *ver);
798*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
799*53ee8cc1Swenshuai.xi 
800*53ee8cc1Swenshuai.xi     return bRet;
801*53ee8cc1Swenshuai.xi 
802*53ee8cc1Swenshuai.xi }
803*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetDSPReg(MS_U16 u16Addr,MS_U8 * pu8Data)804*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetDSPReg(MS_U16 u16Addr, MS_U8 *pu8Data)
805*53ee8cc1Swenshuai.xi {
806*53ee8cc1Swenshuai.xi #if defined(CHIP_K1)||defined(CHIP_KENYA)
807*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi     DMD_LOCK();
810*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_ReadDSPReg(u16Addr, pu8Data);
811*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
812*53ee8cc1Swenshuai.xi 
813*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
814*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
815*53ee8cc1Swenshuai.xi     {
816*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetDSPReg %x %x\n", u16Addr, *pu8Data);
817*53ee8cc1Swenshuai.xi     }
818*53ee8cc1Swenshuai.xi     #endif
819*53ee8cc1Swenshuai.xi 
820*53ee8cc1Swenshuai.xi     return bRet;
821*53ee8cc1Swenshuai.xi #else
822*53ee8cc1Swenshuai.xi   	ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBC_GetDSPReg\n");
823*53ee8cc1Swenshuai.xi 	return FALSE;
824*53ee8cc1Swenshuai.xi #endif
825*53ee8cc1Swenshuai.xi }
826*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetDSPReg(MS_U16 u16Addr,MS_U8 pu8Data)827*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetDSPReg(MS_U16 u16Addr, MS_U8 pu8Data)
828*53ee8cc1Swenshuai.xi {
829*53ee8cc1Swenshuai.xi #if defined(CHIP_K1)||defined(CHIP_KENYA)
830*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
831*53ee8cc1Swenshuai.xi 
832*53ee8cc1Swenshuai.xi     DMD_LOCK();
833*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_WriteDSPReg(u16Addr, pu8Data);
834*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
835*53ee8cc1Swenshuai.xi 
836*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
837*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
838*53ee8cc1Swenshuai.xi     {
839*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_SetDSPReg %x %x\n", u16Addr, pu8Data);
840*53ee8cc1Swenshuai.xi     }
841*53ee8cc1Swenshuai.xi     #endif
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi     return bRet;
844*53ee8cc1Swenshuai.xi #else
845*53ee8cc1Swenshuai.xi   	ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBC_SetDSPReg\n");
846*53ee8cc1Swenshuai.xi 	return FALSE;
847*53ee8cc1Swenshuai.xi #endif
848*53ee8cc1Swenshuai.xi }
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)851*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
852*53ee8cc1Swenshuai.xi {
853*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
854*53ee8cc1Swenshuai.xi 
855*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetReg\n"));
856*53ee8cc1Swenshuai.xi 
857*53ee8cc1Swenshuai.xi     DMD_LOCK();
858*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, pu8Data);
859*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
860*53ee8cc1Swenshuai.xi 
861*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
862*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
863*53ee8cc1Swenshuai.xi     {
864*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetReg %x %x\n", u16Addr, *pu8Data);
865*53ee8cc1Swenshuai.xi     }
866*53ee8cc1Swenshuai.xi     #endif
867*53ee8cc1Swenshuai.xi     return bRet;
868*53ee8cc1Swenshuai.xi }
869*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetReg(MS_U16 u16Addr,MS_U8 u8Data)870*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
871*53ee8cc1Swenshuai.xi {
872*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetReg\n"));
875*53ee8cc1Swenshuai.xi 
876*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
877*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
878*53ee8cc1Swenshuai.xi     {
879*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_SetReg %x %x\n", u16Addr, u8Data);
880*53ee8cc1Swenshuai.xi     }
881*53ee8cc1Swenshuai.xi     #endif
882*53ee8cc1Swenshuai.xi     DMD_LOCK();
883*53ee8cc1Swenshuai.xi     bRet=MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, u8Data);
884*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
885*53ee8cc1Swenshuai.xi     return bRet;
886*53ee8cc1Swenshuai.xi }
887*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetSerialControl(MS_BOOL bEnable)888*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetSerialControl(MS_BOOL bEnable)
889*53ee8cc1Swenshuai.xi {
890*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
891*53ee8cc1Swenshuai.xi     MS_U8 u8TSClk;
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetSerialControl\n"));
894*53ee8cc1Swenshuai.xi 
895*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
896*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
897*53ee8cc1Swenshuai.xi     {
898*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_SetSerialControl %d\n", bEnable);
899*53ee8cc1Swenshuai.xi     }
900*53ee8cc1Swenshuai.xi     #endif
901*53ee8cc1Swenshuai.xi 
902*53ee8cc1Swenshuai.xi     DMD_LOCK();
903*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
904*53ee8cc1Swenshuai.xi     {
905*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=1)
906*53ee8cc1Swenshuai.xi         {
907*53ee8cc1Swenshuai.xi             u8TSClk = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[2];
908*53ee8cc1Swenshuai.xi         }
909*53ee8cc1Swenshuai.xi         else
910*53ee8cc1Swenshuai.xi         {
911*53ee8cc1Swenshuai.xi             u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
912*53ee8cc1Swenshuai.xi         }
913*53ee8cc1Swenshuai.xi     }
914*53ee8cc1Swenshuai.xi     else
915*53ee8cc1Swenshuai.xi     {
916*53ee8cc1Swenshuai.xi         u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
917*53ee8cc1Swenshuai.xi     }
918*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_Serial_Control(bEnable, u8TSClk);
919*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
920*53ee8cc1Swenshuai.xi     return bRet;
921*53ee8cc1Swenshuai.xi }
922*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetConfig(MS_U16 u16SymbolRate,DMD_DVBC_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS)923*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetConfig(MS_U16 u16SymbolRate, DMD_DVBC_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS)
924*53ee8cc1Swenshuai.xi {
925*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetConfig\n"));
926*53ee8cc1Swenshuai.xi 
927*53ee8cc1Swenshuai.xi 		return MDrv_DMD_DVBC_SetConfig_symbol_rate_list(u16SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, NULL, 0);
928*53ee8cc1Swenshuai.xi 	}
929*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetConfig_symbol_rate_list(MS_U16 u16SymbolRate,DMD_DVBC_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)930*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetConfig_symbol_rate_list(MS_U16 u16SymbolRate, DMD_DVBC_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
931*53ee8cc1Swenshuai.xi {
932*53ee8cc1Swenshuai.xi 	MS_BOOL bRet;
933*53ee8cc1Swenshuai.xi 	MS_U8 u8TSClk;
934*53ee8cc1Swenshuai.xi 	DMD_DVBC_ResData *pRes = psDMD_DVBC_ResData;
935*53ee8cc1Swenshuai.xi 
936*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][_prev_u16PowerState = %d] DMD_DVBC_SetConfig_symbol_rate_list\n", _prev_u16PowerState);
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi 
939*53ee8cc1Swenshuai.xi 	if(E_POWER_MECHANICAL==_prev_u16PowerState)
940*53ee8cc1Swenshuai.xi 	{
941*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.u16SymbolRate = u16SymbolRate;
942*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.eQamMode = eQamMode;
943*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.u32IFFreq = u32IFFreq;
944*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.bSpecInv = bSpecInv;
945*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.bSerialTS = bSerialTS;
946*53ee8cc1Swenshuai.xi 
947*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][E_POWER_MECHANICAL]DMD_DVBC_SetConfig_symbol_rate_list\n");
948*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","SR = %d, QamMode = %d, IFFreq = %d, SpecInv = %d, SerialTS = %d\n",(int)u16SymbolRate, (int)eQamMode,(int) u32IFFreq, (int)bSpecInv, bSerialTS);
949*53ee8cc1Swenshuai.xi 	}
950*53ee8cc1Swenshuai.xi 	else if(E_POWER_RESUME==_prev_u16PowerState)
951*53ee8cc1Swenshuai.xi 	{
952*53ee8cc1Swenshuai.xi 		u16SymbolRate = pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.u16SymbolRate;
953*53ee8cc1Swenshuai.xi 		eQamMode = pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.eQamMode;
954*53ee8cc1Swenshuai.xi 		u32IFFreq = pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.u32IFFreq;
955*53ee8cc1Swenshuai.xi 		bSpecInv = pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.bSpecInv;
956*53ee8cc1Swenshuai.xi 		bSerialTS = pRes->sDMD_DVBC_SHARE_MEMORY_PreviousData.bSerialTS;
957*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][E_POWER_RESUME]DMD_DVBC_SetConfig_symbol_rate_list\n");
958*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","SR = %d, QamMode = %d, IFFreq = %d, SpecInv = %d, SerialTS = %d\n",(int)u16SymbolRate, (int)eQamMode, (int)u32IFFreq, (int)bSpecInv, (int)bSerialTS);
959*53ee8cc1Swenshuai.xi 	}
960*53ee8cc1Swenshuai.xi 	else
961*53ee8cc1Swenshuai.xi 	{
962*53ee8cc1Swenshuai.xi 			ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][check!!]DMD_DVBC_SetConfig_symbol_rate_list\n");
963*53ee8cc1Swenshuai.xi 	}
964*53ee8cc1Swenshuai.xi 
965*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
966*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
967*53ee8cc1Swenshuai.xi     {
968*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_SetConfig %d %d %ld %d %d\n", u16SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS);
969*53ee8cc1Swenshuai.xi     }
970*53ee8cc1Swenshuai.xi     #endif
971*53ee8cc1Swenshuai.xi 
972*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","bryan check QAM mode=%d in V2\n",eQamMode);
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi 
975*53ee8cc1Swenshuai.xi     DMD_LOCK();
976*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt != NULL)
977*53ee8cc1Swenshuai.xi     {
978*53ee8cc1Swenshuai.xi         if (_sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[0]>=1)
979*53ee8cc1Swenshuai.xi         {
980*53ee8cc1Swenshuai.xi             u8TSClk = _sDMD_DVBC_InitData.u8DMD_DVBC_InitExt[2];
981*53ee8cc1Swenshuai.xi         }
982*53ee8cc1Swenshuai.xi         else
983*53ee8cc1Swenshuai.xi         {
984*53ee8cc1Swenshuai.xi             u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
985*53ee8cc1Swenshuai.xi         }
986*53ee8cc1Swenshuai.xi     }
987*53ee8cc1Swenshuai.xi     else
988*53ee8cc1Swenshuai.xi     {
989*53ee8cc1Swenshuai.xi         u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
990*53ee8cc1Swenshuai.xi     }
991*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_Config(u16SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk, pu16_symbol_rate_list,u8_symbol_rate_list_num);
992*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.u16SymbolRate = u16SymbolRate;
993*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.eQamMode = eQamMode;
994*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.u32IFFreq = u32IFFreq;
995*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.bSpecInv = bSpecInv;
996*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.bSerialTS = bSerialTS;
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi 
999*53ee8cc1Swenshuai.xi 
1000*53ee8cc1Swenshuai.xi 
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1003*53ee8cc1Swenshuai.xi     return bRet;
1004*53ee8cc1Swenshuai.xi }
1005*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetActive(MS_BOOL bEnable)1006*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_SetActive(MS_BOOL bEnable)
1007*53ee8cc1Swenshuai.xi {
1008*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1009*53ee8cc1Swenshuai.xi 
1010*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetActive\n"));
1011*53ee8cc1Swenshuai.xi 
1012*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1013*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1014*53ee8cc1Swenshuai.xi     {
1015*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_SetActive %d\n", bEnable);
1016*53ee8cc1Swenshuai.xi     }
1017*53ee8cc1Swenshuai.xi     #endif
1018*53ee8cc1Swenshuai.xi 
1019*53ee8cc1Swenshuai.xi     DMD_LOCK();
1020*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_Active(bEnable);
1021*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.u32ChkScanTimeStart = MsOS_GetSystemTime();
1022*53ee8cc1Swenshuai.xi     u32DMD_DVBC_ScanCount=0;
1023*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1024*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1025*53ee8cc1Swenshuai.xi     {
1026*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","%s %ld\n", __FUNCTION__, sDMD_DVBC_Info.u32ChkScanTimeStart);
1027*53ee8cc1Swenshuai.xi     }
1028*53ee8cc1Swenshuai.xi     #endif
1029*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1030*53ee8cc1Swenshuai.xi     return bRet;
1031*53ee8cc1Swenshuai.xi }
1032*53ee8cc1Swenshuai.xi 
1033*53ee8cc1Swenshuai.xi 
1034*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetLockWithRFPower(DMD_DVBC_GETLOCK_TYPE eType,MS_U32 u32CurrRFPowerDbm,MS_U32 u32NoChannelRFPowerDbm,DMD_DVBC_LOCK_STATUS * eLockStatus)1035*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetLockWithRFPower(DMD_DVBC_GETLOCK_TYPE eType, MS_U32 u32CurrRFPowerDbm, MS_U32 u32NoChannelRFPowerDbm, DMD_DVBC_LOCK_STATUS *eLockStatus)
1036*53ee8cc1Swenshuai.xi {
1037*53ee8cc1Swenshuai.xi     MS_U32 u32CurrScanTime=0;
1038*53ee8cc1Swenshuai.xi     MS_BOOL bRet=FALSE;
1039*53ee8cc1Swenshuai.xi 
1040*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetLockWithRFPower\n"));
1041*53ee8cc1Swenshuai.xi 
1042*53ee8cc1Swenshuai.xi     DMD_LOCK();
1043*53ee8cc1Swenshuai.xi     if ( eType == DMD_DVBC_GETLOCK ) // for channel scan
1044*53ee8cc1Swenshuai.xi     {
1045*53ee8cc1Swenshuai.xi         if (INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_FEC_LOCK, 2000, -2000, 0))
1046*53ee8cc1Swenshuai.xi         {
1047*53ee8cc1Swenshuai.xi             *eLockStatus = DMD_DVBC_LOCK;
1048*53ee8cc1Swenshuai.xi         }
1049*53ee8cc1Swenshuai.xi         else
1050*53ee8cc1Swenshuai.xi         {
1051*53ee8cc1Swenshuai.xi             MS_U32 u32Timeout = 10000;//(sDMD_DVBC_Info.u16SymbolRate) ? 5000 : 15000;
1052*53ee8cc1Swenshuai.xi             if (sDMD_DVBC_Info.u16SymbolRate == 0)
1053*53ee8cc1Swenshuai.xi             {
1054*53ee8cc1Swenshuai.xi                 u32Timeout = u16DMD_DVBC_AutoSymbol_Timeout;
1055*53ee8cc1Swenshuai.xi             }
1056*53ee8cc1Swenshuai.xi             else
1057*53ee8cc1Swenshuai.xi             {
1058*53ee8cc1Swenshuai.xi                 u32Timeout = (sDMD_DVBC_Info.eQamMode == DMD_DVBC_QAMAUTO) ? u16DMD_DVBC_FixSymbol_AutoQam_Timeout : u16DMD_DVBC_FixSymbol_FixQam_Timeout;
1059*53ee8cc1Swenshuai.xi             }
1060*53ee8cc1Swenshuai.xi 
1061*53ee8cc1Swenshuai.xi             u32CurrScanTime=MsOS_GetSystemTime();
1062*53ee8cc1Swenshuai.xi             if (u32CurrScanTime - sDMD_DVBC_Info.u32ChkScanTimeStart < u32Timeout)
1063*53ee8cc1Swenshuai.xi             {
1064*53ee8cc1Swenshuai.xi                 if (u32DMD_DVBC_ScanCount==0)
1065*53ee8cc1Swenshuai.xi                 {
1066*53ee8cc1Swenshuai.xi                     u32DMD_DVBC_PrevScanTime=u32CurrScanTime;
1067*53ee8cc1Swenshuai.xi                     u32DMD_DVBC_ScanCount++;
1068*53ee8cc1Swenshuai.xi                 }
1069*53ee8cc1Swenshuai.xi 
1070*53ee8cc1Swenshuai.xi                 if (_sDMD_DVBC_InitData.u8SarChannel != 0xFF)
1071*53ee8cc1Swenshuai.xi                 {
1072*53ee8cc1Swenshuai.xi                 //bryan temp mark
1073*53ee8cc1Swenshuai.xi                  //   sDMD_DVBC_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBC_InitData.u8SarChannel);
1074*53ee8cc1Swenshuai.xi                 }
1075*53ee8cc1Swenshuai.xi                 else
1076*53ee8cc1Swenshuai.xi                 {
1077*53ee8cc1Swenshuai.xi                     sDMD_DVBC_Info.u8SarValue=0xFF;
1078*53ee8cc1Swenshuai.xi                 }
1079*53ee8cc1Swenshuai.xi 
1080*53ee8cc1Swenshuai.xi                 /*bRet=HAL_DMD_GetRFLevel(&fCurrRFPowerDbm, fCurrRFPowerDbm, sDMD_DVBC_Info.u8SarValue,
1081*53ee8cc1Swenshuai.xi                                                                             _sDMD_DVBC_InitData.pTuner_RfagcSsi, _sDMD_DVBC_InitData.u16Tuner_RfagcSsi_Size,
1082*53ee8cc1Swenshuai.xi                                                                             _sDMD_DVBC_InitData.pTuner_IfagcSsi_HiRef, _sDMD_DVBC_InitData.u16Tuner_IfagcSsi_HiRef_Size,
1083*53ee8cc1Swenshuai.xi                                                                             _sDMD_DVBC_InitData.pTuner_IfagcSsi_LoRef, _sDMD_DVBC_InitData.u16Tuner_IfagcSsi_LoRef_Size,
1084*53ee8cc1Swenshuai.xi                                                                             _sDMD_DVBC_InitData.pTuner_IfagcErr_HiRef, _sDMD_DVBC_InitData.u16Tuner_IfagcErr_HiRef_Size,
1085*53ee8cc1Swenshuai.xi                                                                             _sDMD_DVBC_InitData.pTuner_IfagcErr_LoRef, _sDMD_DVBC_InitData.u16Tuner_IfagcErr_LoRef_Size);
1086*53ee8cc1Swenshuai.xi 		*/
1087*53ee8cc1Swenshuai.xi                 //if (INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_NO_CHANNEL, u32CurrScanTime-u32DMD_DVBC_PrevScanTime))
1088*53ee8cc1Swenshuai.xi                 if (INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_NO_CHANNEL, u32CurrRFPowerDbm, u32NoChannelRFPowerDbm, u32CurrScanTime-u32DMD_DVBC_PrevScanTime))
1089*53ee8cc1Swenshuai.xi                 {
1090*53ee8cc1Swenshuai.xi                     #ifdef MS_DEBUG
1091*53ee8cc1Swenshuai.xi                     ULOGD("DEMOD","%s %ld UNLOCK:NO_CHANNEL\n", __FUNCTION__, u32CurrScanTime-sDMD_DVBC_Info.u32ChkScanTimeStart);
1092*53ee8cc1Swenshuai.xi                     #endif
1093*53ee8cc1Swenshuai.xi                     *eLockStatus = DMD_DVBC_UNLOCK;
1094*53ee8cc1Swenshuai.xi                 }
1095*53ee8cc1Swenshuai.xi                 else if (INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_ATV_DETECT, 2000, -2000, 0))
1096*53ee8cc1Swenshuai.xi                 {
1097*53ee8cc1Swenshuai.xi                     #ifdef MS_DEBUG
1098*53ee8cc1Swenshuai.xi                     ULOGD("DEMOD","%s %ld UNLOCK:ATV_DETECT\n", __FUNCTION__, u32CurrScanTime-sDMD_DVBC_Info.u32ChkScanTimeStart);
1099*53ee8cc1Swenshuai.xi                     #endif
1100*53ee8cc1Swenshuai.xi                     *eLockStatus = DMD_DVBC_UNLOCK;
1101*53ee8cc1Swenshuai.xi                 }
1102*53ee8cc1Swenshuai.xi #ifdef NEW_TR_MODULE
1103*53ee8cc1Swenshuai.xi                 else if ((INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_TR_EVER_LOCK,  2000, -2000, 0) == FALSE) && ((u32CurrScanTime - sDMD_DVBC_Info.u32ChkScanTimeStart) > 500))
1104*53ee8cc1Swenshuai.xi 
1105*53ee8cc1Swenshuai.xi #else
1106*53ee8cc1Swenshuai.xi                 else if ((INTERN_DVBC_GetLock(DMD_DVBC_GETLOCK_TR_EVER_LOCK,  2000, -2000, 0) == FALSE) && ((u32CurrScanTime - sDMD_DVBC_Info.u32ChkScanTimeStart) > 5000))
1107*53ee8cc1Swenshuai.xi #endif
1108*53ee8cc1Swenshuai.xi                 {
1109*53ee8cc1Swenshuai.xi                     #ifdef MS_DEBUG
1110*53ee8cc1Swenshuai.xi                     ULOGD("DEMOD","%s %ld UNLOCK:TR\n", __FUNCTION__, u32CurrScanTime-sDMD_DVBC_Info.u32ChkScanTimeStart);
1111*53ee8cc1Swenshuai.xi                     #endif
1112*53ee8cc1Swenshuai.xi                     *eLockStatus = DMD_DVBC_UNLOCK;
1113*53ee8cc1Swenshuai.xi                 }
1114*53ee8cc1Swenshuai.xi                 else
1115*53ee8cc1Swenshuai.xi                 {
1116*53ee8cc1Swenshuai.xi                     *eLockStatus = DMD_DVBC_CHECKING;
1117*53ee8cc1Swenshuai.xi                 }
1118*53ee8cc1Swenshuai.xi             }
1119*53ee8cc1Swenshuai.xi             else
1120*53ee8cc1Swenshuai.xi             {
1121*53ee8cc1Swenshuai.xi                 #ifdef MS_DEBUG
1122*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","%s %ld UNLOCK:TIMEOUT %ld\n", __FUNCTION__, MsOS_GetSystemTime(), u32Timeout);
1123*53ee8cc1Swenshuai.xi                 #endif
1124*53ee8cc1Swenshuai.xi                 *eLockStatus = DMD_DVBC_UNLOCK;
1125*53ee8cc1Swenshuai.xi             }
1126*53ee8cc1Swenshuai.xi             u32DMD_DVBC_PrevScanTime=u32CurrScanTime;
1127*53ee8cc1Swenshuai.xi         }
1128*53ee8cc1Swenshuai.xi         sDMD_DVBC_Info.eLockStatus = *eLockStatus;
1129*53ee8cc1Swenshuai.xi         #ifdef MS_DEBUG
1130*53ee8cc1Swenshuai.xi         if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1131*53ee8cc1Swenshuai.xi         {
1132*53ee8cc1Swenshuai.xi             ULOGD("DEMOD","%s %ld %d\n", __FUNCTION__, MsOS_GetSystemTime(), sDMD_DVBC_Info.eLockStatus);
1133*53ee8cc1Swenshuai.xi         }
1134*53ee8cc1Swenshuai.xi         #endif
1135*53ee8cc1Swenshuai.xi     }
1136*53ee8cc1Swenshuai.xi     else
1137*53ee8cc1Swenshuai.xi     {
1138*53ee8cc1Swenshuai.xi         if (INTERN_DVBC_GetLock(eType, 2000, -2000, 0) == TRUE)
1139*53ee8cc1Swenshuai.xi         {
1140*53ee8cc1Swenshuai.xi             *eLockStatus = DMD_DVBC_LOCK;
1141*53ee8cc1Swenshuai.xi         }
1142*53ee8cc1Swenshuai.xi         else
1143*53ee8cc1Swenshuai.xi         {
1144*53ee8cc1Swenshuai.xi             *eLockStatus = DMD_DVBC_UNLOCK;
1145*53ee8cc1Swenshuai.xi         }
1146*53ee8cc1Swenshuai.xi     }
1147*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1148*53ee8cc1Swenshuai.xi 
1149*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1150*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1151*53ee8cc1Swenshuai.xi     {
1152*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetLock %x %x\n", eType, *eLockStatus);
1153*53ee8cc1Swenshuai.xi     }
1154*53ee8cc1Swenshuai.xi     #endif
1155*53ee8cc1Swenshuai.xi     bRet=TRUE;
1156*53ee8cc1Swenshuai.xi 
1157*53ee8cc1Swenshuai.xi 
1158*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1159*53ee8cc1Swenshuai.xi 
1160*53ee8cc1Swenshuai.xi 	if(*eLockStatus ==DMD_DVBC_LOCK)
1161*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","check kernel driver DVBC locked!!\n");
1162*53ee8cc1Swenshuai.xi 	else
1163*53ee8cc1Swenshuai.xi     ULOGD("DEMOD","check kernel driver DVBC unlock!!\n");
1164*53ee8cc1Swenshuai.xi 	#endif
1165*53ee8cc1Swenshuai.xi 
1166*53ee8cc1Swenshuai.xi     return bRet;
1167*53ee8cc1Swenshuai.xi }
1168*53ee8cc1Swenshuai.xi 
1169*53ee8cc1Swenshuai.xi 
1170*53ee8cc1Swenshuai.xi /*
1171*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetSignalStrength(MS_U16 *u16Strength)
1172*53ee8cc1Swenshuai.xi {
1173*53ee8cc1Swenshuai.xi     return MDrv_DMD_DVBC_GetSignalStrengthWithRFPower(u16Strength);
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi 
1176*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetSignalStrengthWithRFPower(MS_U16 *u16Strength)
1177*53ee8cc1Swenshuai.xi {
1178*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1179*53ee8cc1Swenshuai.xi 
1180*53ee8cc1Swenshuai.xi     DMD_LOCK();
1181*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8SarChannel != 0xFF)
1182*53ee8cc1Swenshuai.xi     {
1183*53ee8cc1Swenshuai.xi         sDMD_DVBC_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBC_InitData.u8SarChannel);
1184*53ee8cc1Swenshuai.xi     }
1185*53ee8cc1Swenshuai.xi     else
1186*53ee8cc1Swenshuai.xi     {
1187*53ee8cc1Swenshuai.xi         sDMD_DVBC_Info.u8SarValue=0xFF;
1188*53ee8cc1Swenshuai.xi     }
1189*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetSignalStrength(u16Strength, (const DMD_DVBC_InitData *)(&_sDMD_DVBC_InitData), sDMD_DVBC_Info.u8SarValue);
1190*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.u16Strength=*u16Strength;
1191*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1192*53ee8cc1Swenshuai.xi 
1193*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1194*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1195*53ee8cc1Swenshuai.xi     {
1196*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetSignalStrength %d\n", *u16Strength);
1197*53ee8cc1Swenshuai.xi     }
1198*53ee8cc1Swenshuai.xi     #endif
1199*53ee8cc1Swenshuai.xi     return bRet;
1200*53ee8cc1Swenshuai.xi }
1201*53ee8cc1Swenshuai.xi 
1202*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetSignalQuality(MS_U16 *u16Quality)
1203*53ee8cc1Swenshuai.xi {
1204*53ee8cc1Swenshuai.xi     return MDrv_DMD_DVBC_GetSignalQualityWithRFPower(u16Quality);
1205*53ee8cc1Swenshuai.xi }
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetSignalQualityWithRFPower(MS_U16 *u16Quality)
1208*53ee8cc1Swenshuai.xi {
1209*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1210*53ee8cc1Swenshuai.xi 
1211*53ee8cc1Swenshuai.xi     DMD_LOCK();
1212*53ee8cc1Swenshuai.xi     if (_sDMD_DVBC_InitData.u8SarChannel != 0xFF)
1213*53ee8cc1Swenshuai.xi     {
1214*53ee8cc1Swenshuai.xi         sDMD_DVBC_Info.u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBC_InitData.u8SarChannel);
1215*53ee8cc1Swenshuai.xi     }
1216*53ee8cc1Swenshuai.xi     else
1217*53ee8cc1Swenshuai.xi     {
1218*53ee8cc1Swenshuai.xi         sDMD_DVBC_Info.u8SarValue=0xFF;
1219*53ee8cc1Swenshuai.xi     }
1220*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetSignalQuality(u16Quality, (const DMD_DVBC_InitData *)(&_sDMD_DVBC_InitData), sDMD_DVBC_Info.u8SarValue);
1221*53ee8cc1Swenshuai.xi     sDMD_DVBC_Info.u16Quality=*u16Quality;
1222*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1223*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1224*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1225*53ee8cc1Swenshuai.xi     {
1226*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","%s %d %d\n", __FUNCTION__, bRet, sDMD_DVBC_Info.u16Quality);
1227*53ee8cc1Swenshuai.xi     }
1228*53ee8cc1Swenshuai.xi     #endif
1229*53ee8cc1Swenshuai.xi 
1230*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1231*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1232*53ee8cc1Swenshuai.xi     {
1233*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetSignalQuality %d\n", *u16Quality);
1234*53ee8cc1Swenshuai.xi     }
1235*53ee8cc1Swenshuai.xi     #endif
1236*53ee8cc1Swenshuai.xi     return bRet;
1237*53ee8cc1Swenshuai.xi }
1238*53ee8cc1Swenshuai.xi */
1239*53ee8cc1Swenshuai.xi 
1240*53ee8cc1Swenshuai.xi #if defined(CHIP_KAISER)||defined(CHIP_K6LITE)
DMD_DVBC_ActiveDmdSwitch(MS_U8 demod_no)1241*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_ActiveDmdSwitch(MS_U8 demod_no)
1242*53ee8cc1Swenshuai.xi {
1243*53ee8cc1Swenshuai.xi     MS_BOOL bRet=TRUE;
1244*53ee8cc1Swenshuai.xi     DMD_LOCK();
1245*53ee8cc1Swenshuai.xi     if((demod_no==0)  &&(drv_demod_swtich_status!=0))
1246*53ee8cc1Swenshuai.xi     {
1247*53ee8cc1Swenshuai.xi     	//save the demod 1 parameter back
1248*53ee8cc1Swenshuai.xi     	_sDMD_DVBC_InitData_dmd1=_sDMD_DVBC_InitData;
1249*53ee8cc1Swenshuai.xi 	sDMD_DVBC_Info_dmd1=sDMD_DVBC_Info;
1250*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_AutoSymbol_Timeout_dmd1=u16DMD_DVBC_AutoSymbol_Timeout;
1251*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd1=u16DMD_DVBC_FixSymbol_AutoQam_Timeout;
1252*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd1=u16DMD_DVBC_FixSymbol_FixQam_Timeout;
1253*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_PrevScanTime_dmd1=u32DMD_DVBC_PrevScanTime;
1254*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_ScanCount_dmd1=u32DMD_DVBC_ScanCount;
1255*53ee8cc1Swenshuai.xi     }
1256*53ee8cc1Swenshuai.xi     else if((demod_no==1)  &&(drv_demod_swtich_status!=1))
1257*53ee8cc1Swenshuai.xi     {
1258*53ee8cc1Swenshuai.xi     	//save the demod 0 parameter back
1259*53ee8cc1Swenshuai.xi     	_sDMD_DVBC_InitData_dmd0=_sDMD_DVBC_InitData;
1260*53ee8cc1Swenshuai.xi 	sDMD_DVBC_Info_dmd0=sDMD_DVBC_Info;
1261*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_AutoSymbol_Timeout_dmd0=u16DMD_DVBC_AutoSymbol_Timeout;
1262*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd0=u16DMD_DVBC_FixSymbol_AutoQam_Timeout;
1263*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd0=u16DMD_DVBC_FixSymbol_FixQam_Timeout;
1264*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_PrevScanTime_dmd0=u32DMD_DVBC_PrevScanTime;
1265*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_ScanCount_dmd0=u32DMD_DVBC_ScanCount;
1266*53ee8cc1Swenshuai.xi     }
1267*53ee8cc1Swenshuai.xi 
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_ActiveDmdSwitch(demod_no);
1270*53ee8cc1Swenshuai.xi 
1271*53ee8cc1Swenshuai.xi     if((demod_no==0)  &&(drv_demod_swtich_status!=0))
1272*53ee8cc1Swenshuai.xi     {
1273*53ee8cc1Swenshuai.xi     	//insert the demod 0 parameter
1274*53ee8cc1Swenshuai.xi     	_sDMD_DVBC_InitData=_sDMD_DVBC_InitData_dmd0;
1275*53ee8cc1Swenshuai.xi 	sDMD_DVBC_Info=sDMD_DVBC_Info_dmd0;
1276*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_AutoSymbol_Timeout=u16DMD_DVBC_AutoSymbol_Timeout_dmd0;
1277*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_AutoQam_Timeout=u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd0;
1278*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_FixQam_Timeout=u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd0;
1279*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_PrevScanTime=u32DMD_DVBC_PrevScanTime_dmd0;
1280*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_ScanCount=u32DMD_DVBC_ScanCount_dmd0;
1281*53ee8cc1Swenshuai.xi     }
1282*53ee8cc1Swenshuai.xi     else if((demod_no==1)  &&(drv_demod_swtich_status!=1))
1283*53ee8cc1Swenshuai.xi     {
1284*53ee8cc1Swenshuai.xi     	//insert the demod 1 parameter
1285*53ee8cc1Swenshuai.xi     	_sDMD_DVBC_InitData=_sDMD_DVBC_InitData_dmd1;
1286*53ee8cc1Swenshuai.xi 	sDMD_DVBC_Info=sDMD_DVBC_Info_dmd1;
1287*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_AutoSymbol_Timeout=u16DMD_DVBC_AutoSymbol_Timeout_dmd1;
1288*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_AutoQam_Timeout=u16DMD_DVBC_FixSymbol_AutoQam_Timeout_dmd1;
1289*53ee8cc1Swenshuai.xi 	u16DMD_DVBC_FixSymbol_FixQam_Timeout=u16DMD_DVBC_FixSymbol_FixQam_Timeout_dmd1;
1290*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_PrevScanTime=u32DMD_DVBC_PrevScanTime_dmd1;
1291*53ee8cc1Swenshuai.xi 	u32DMD_DVBC_ScanCount=u32DMD_DVBC_ScanCount_dmd1;
1292*53ee8cc1Swenshuai.xi     }
1293*53ee8cc1Swenshuai.xi 
1294*53ee8cc1Swenshuai.xi     drv_demod_swtich_status=demod_no;
1295*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1296*53ee8cc1Swenshuai.xi     return bRet;
1297*53ee8cc1Swenshuai.xi }
1298*53ee8cc1Swenshuai.xi #else
DMD_DVBC_ActiveDmdSwitch(MS_U8 demod_no)1299*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_ActiveDmdSwitch(MS_U8 demod_no)
1300*53ee8cc1Swenshuai.xi {
1301*53ee8cc1Swenshuai.xi 	ULOGD("DEMOD","Doesn't support DVBC_ActiveDmdSwitch function!!!\n");
1302*53ee8cc1Swenshuai.xi 	return false;
1303*53ee8cc1Swenshuai.xi }
1304*53ee8cc1Swenshuai.xi #endif
1305*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetSNR(MS_U16 * snr_reg)1306*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetSNR(MS_U16 *snr_reg)
1307*53ee8cc1Swenshuai.xi {
1308*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1309*53ee8cc1Swenshuai.xi     DMD_LOCK();
1310*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetSNR(snr_reg);
1311*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1312*53ee8cc1Swenshuai.xi 
1313*53ee8cc1Swenshuai.xi     return bRet;
1314*53ee8cc1Swenshuai.xi }
1315*53ee8cc1Swenshuai.xi 
1316*53ee8cc1Swenshuai.xi //waiting add
DMD_DVBC_GetPostViterbiBer(MS_U32 * BitErr_reg,MS_U16 * BitErrPeriod_reg)1317*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetPostViterbiBer(MS_U32 *BitErr_reg, MS_U16 *BitErrPeriod_reg)
1318*53ee8cc1Swenshuai.xi {
1319*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1320*53ee8cc1Swenshuai.xi 
1321*53ee8cc1Swenshuai.xi     DMD_LOCK();
1322*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetPostViterbiBer(BitErr_reg, BitErrPeriod_reg);
1323*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1324*53ee8cc1Swenshuai.xi 
1325*53ee8cc1Swenshuai.xi 	  return bRet;
1326*53ee8cc1Swenshuai.xi }
1327*53ee8cc1Swenshuai.xi 
1328*53ee8cc1Swenshuai.xi 
1329*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_DVBC_GET_AGC_INFO
DMD_DVBC_GetAGCInfo(MS_U8 u8dbg_mode,MS_U16 * pu16Data)1330*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetAGCInfo(MS_U8 u8dbg_mode, MS_U16 *pu16Data)
1331*53ee8cc1Swenshuai.xi {
1332*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1333*53ee8cc1Swenshuai.xi     DMD_LOCK();
1334*53ee8cc1Swenshuai.xi     bRet = INTERN_DVBC_AGC_Info(u8dbg_mode, pu16Data);
1335*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1336*53ee8cc1Swenshuai.xi     return bRet;
1337*53ee8cc1Swenshuai.xi }
1338*53ee8cc1Swenshuai.xi #endif
1339*53ee8cc1Swenshuai.xi 
1340*53ee8cc1Swenshuai.xi //waiting add
DMD_DVBC_GetIFAGC(MS_U8 * ifagc_reg,MS_U8 * ifagc_reg_lsb,MS_U16 * ifagc_err)1341*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetIFAGC(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err)
1342*53ee8cc1Swenshuai.xi {
1343*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi     DMD_LOCK();
1346*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetIFAGC(ifagc_reg, ifagc_reg_lsb, ifagc_err);
1347*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi 	  return bRet;
1350*53ee8cc1Swenshuai.xi }
1351*53ee8cc1Swenshuai.xi 
1352*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetPacketErr(MS_U16 * pktErr)1353*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetPacketErr(MS_U16 *pktErr)
1354*53ee8cc1Swenshuai.xi {
1355*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetPacketErr\n"));
1358*53ee8cc1Swenshuai.xi 
1359*53ee8cc1Swenshuai.xi     DMD_LOCK();
1360*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_GetPacketErr(pktErr);
1361*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1362*53ee8cc1Swenshuai.xi 
1363*53ee8cc1Swenshuai.xi 	  return bRet;
1364*53ee8cc1Swenshuai.xi }
1365*53ee8cc1Swenshuai.xi 
DMD_DVBC_GetCellID(MS_U16 * u16CellID)1366*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetCellID(MS_U16 *u16CellID)
1367*53ee8cc1Swenshuai.xi {
1368*53ee8cc1Swenshuai.xi     MS_BOOL bRet;
1369*53ee8cc1Swenshuai.xi 
1370*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetCellID\n"));
1371*53ee8cc1Swenshuai.xi 
1372*53ee8cc1Swenshuai.xi     DMD_LOCK();
1373*53ee8cc1Swenshuai.xi     bRet=INTERN_DVBC_Get_CELL_ID(u16CellID);
1374*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1375*53ee8cc1Swenshuai.xi 
1376*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1377*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1378*53ee8cc1Swenshuai.xi     {
1379*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","MDrv_DMD_DVBC_GetCellID %x\n", *u16CellID);
1380*53ee8cc1Swenshuai.xi     }
1381*53ee8cc1Swenshuai.xi     #endif
1382*53ee8cc1Swenshuai.xi     return bRet;
1383*53ee8cc1Swenshuai.xi }
1384*53ee8cc1Swenshuai.xi 
1385*53ee8cc1Swenshuai.xi 
1386*53ee8cc1Swenshuai.xi //bryan temp mark
1387*53ee8cc1Swenshuai.xi #if(1)
DMD_DVBC_GetStatus(DMD_DVBC_MODULATION_TYPE * pQAMMode,MS_U16 * u16SymbolRate,MS_U32 * config_Fc_reg,MS_U32 * Fc_over_Fs_reg,MS_U16 * Cfo_offset_reg)1388*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetStatus(DMD_DVBC_MODULATION_TYPE *pQAMMode, MS_U16 *u16SymbolRate, MS_U32 *config_Fc_reg, MS_U32 *Fc_over_Fs_reg, MS_U16 *Cfo_offset_reg)
1389*53ee8cc1Swenshuai.xi {
1390*53ee8cc1Swenshuai.xi     MS_BOOL bRet=TRUE;
1391*53ee8cc1Swenshuai.xi 
1392*53ee8cc1Swenshuai.xi     DMD_LOCK();
1393*53ee8cc1Swenshuai.xi     INTERN_DVBC_GetCurrentModulationType(pQAMMode);
1394*53ee8cc1Swenshuai.xi     INTERN_DVBC_GetCurrentSymbolRate(u16SymbolRate);
1395*53ee8cc1Swenshuai.xi     INTERN_DVBC_Get_FreqOffset(config_Fc_reg, Fc_over_Fs_reg, Cfo_offset_reg, 8);
1396*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1397*53ee8cc1Swenshuai.xi 
1398*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1399*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1400*53ee8cc1Swenshuai.xi     {
1401*53ee8cc1Swenshuai.xi         //ULOGD("DEMOD","MDrv_DMD_DVBC_GetStatus %d %d\n", *pQAMMode, *u16SymbolRate, *pFreqOff_reg);
1402*53ee8cc1Swenshuai.xi     }
1403*53ee8cc1Swenshuai.xi     #endif
1404*53ee8cc1Swenshuai.xi     return bRet;
1405*53ee8cc1Swenshuai.xi }
1406*53ee8cc1Swenshuai.xi #else
DMD_DVBC_GetStatus(DMD_DVBC_MODULATION_TYPE * pQAMMode,MS_U16 * u16SymbolRate)1407*53ee8cc1Swenshuai.xi MS_BOOL DMD_DVBC_GetStatus(DMD_DVBC_MODULATION_TYPE *pQAMMode, MS_U16 *u16SymbolRate)
1408*53ee8cc1Swenshuai.xi {
1409*53ee8cc1Swenshuai.xi     MS_BOOL bRet=TRUE;
1410*53ee8cc1Swenshuai.xi 
1411*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_GetStatus\n"));
1412*53ee8cc1Swenshuai.xi 
1413*53ee8cc1Swenshuai.xi     DMD_LOCK();
1414*53ee8cc1Swenshuai.xi     INTERN_DVBC_GetCurrentModulationType(pQAMMode);
1415*53ee8cc1Swenshuai.xi     INTERN_DVBC_GetCurrentSymbolRate(u16SymbolRate);
1416*53ee8cc1Swenshuai.xi    // INTERN_DVBC_Get_FreqOffset(pFreqOff,8);
1417*53ee8cc1Swenshuai.xi     DMD_UNLOCK();
1418*53ee8cc1Swenshuai.xi     //ULOGD("DEMOD","bryan get status QAM mode=%d in V2\n",*pQAMMode);
1419*53ee8cc1Swenshuai.xi     #ifdef MS_DEBUG
1420*53ee8cc1Swenshuai.xi     if (_u8DMD_DVBC_DbgLevel >= DMD_DVBC_DBGLV_INFO)
1421*53ee8cc1Swenshuai.xi     {
1422*53ee8cc1Swenshuai.xi      //   ULOGD("DEMOD","MDrv_DMD_DVBC_GetStatus %d %d %f\n", *pQAMMode, *u16SymbolRate, *pFreqOff);
1423*53ee8cc1Swenshuai.xi     }
1424*53ee8cc1Swenshuai.xi     #endif
1425*53ee8cc1Swenshuai.xi     return bRet;
1426*53ee8cc1Swenshuai.xi }
1427*53ee8cc1Swenshuai.xi #endif
1428*53ee8cc1Swenshuai.xi 
DMD_DVBC_SetPowerState(EN_POWER_MODE u16PowerState)1429*53ee8cc1Swenshuai.xi MS_U32 DMD_DVBC_SetPowerState(EN_POWER_MODE u16PowerState)
1430*53ee8cc1Swenshuai.xi {
1431*53ee8cc1Swenshuai.xi 
1432*53ee8cc1Swenshuai.xi 	MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1433*53ee8cc1Swenshuai.xi 	DMD_DVBC_ResData *pRes = psDMD_DVBC_ResData;
1434*53ee8cc1Swenshuai.xi 
1435*53ee8cc1Swenshuai.xi 
1436*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DMD_DVBC_SetPowerState\n"));
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi     u32Return = u32Return;
1439*53ee8cc1Swenshuai.xi 
1440*53ee8cc1Swenshuai.xi 	if (u16PowerState == E_POWER_SUSPEND)
1441*53ee8cc1Swenshuai.xi 	{
1442*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_DCOFF_IsDVBC = pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat;
1443*53ee8cc1Swenshuai.xi 		pRes->sDMD_DVBC_SHARE_MEMORY_InitData.eLastState  = u16PowerState;
1444*53ee8cc1Swenshuai.xi 		_prev_u16PowerState = u16PowerState;
1445*53ee8cc1Swenshuai.xi 
1446*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","[E_POWER_SUSPEND] DVBCCreat =%d \n",pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat);
1447*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","[E_POWER_SUSPEND] b_DCOFF_IsDVBC =%d \n",pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_DCOFF_IsDVBC);
1448*53ee8cc1Swenshuai.xi 		if(pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_IsInit_DVBCCreat)
1449*53ee8cc1Swenshuai.xi 		{
1450*53ee8cc1Swenshuai.xi 			DMD_DVBC_Exit();
1451*53ee8cc1Swenshuai.xi 		}
1452*53ee8cc1Swenshuai.xi 		else
1453*53ee8cc1Swenshuai.xi 		{
1454*53ee8cc1Swenshuai.xi 		}
1455*53ee8cc1Swenshuai.xi 
1456*53ee8cc1Swenshuai.xi 
1457*53ee8cc1Swenshuai.xi 
1458*53ee8cc1Swenshuai.xi 	    u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1459*53ee8cc1Swenshuai.xi 	}
1460*53ee8cc1Swenshuai.xi         else if (u16PowerState == E_POWER_RESUME)
1461*53ee8cc1Swenshuai.xi         {
1462*53ee8cc1Swenshuai.xi             if (_prev_u16PowerState == E_POWER_SUSPEND)
1463*53ee8cc1Swenshuai.xi             {
1464*53ee8cc1Swenshuai.xi 			_prev_u16PowerState = u16PowerState;
1465*53ee8cc1Swenshuai.xi 			pRes->sDMD_DVBC_SHARE_MEMORY_InitData.eLastState  = u16PowerState;
1466*53ee8cc1Swenshuai.xi 			ULOGD("DEMOD","[E_POWER_RESUME + E_POWER_SUSPEND] b_DCOFF_IsDVBC = %d \n",pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_DCOFF_IsDVBC);
1467*53ee8cc1Swenshuai.xi 			if(pRes->sDMD_DVBC_SHARE_MEMORY_InitData.b_DCOFF_IsDVBC)
1468*53ee8cc1Swenshuai.xi 			{
1469*53ee8cc1Swenshuai.xi 
1470*53ee8cc1Swenshuai.xi 				DMD_DVBC_Init(&_sDMD_DVBC_InitData, sizeof(_sDMD_DVBC_InitData));
1471*53ee8cc1Swenshuai.xi 				DMD_DVBC_SetConfig_symbol_rate_list(1,2,3,0,0,NULL,0);
1472*53ee8cc1Swenshuai.xi 				DMD_DVBC_SetActive(1);
1473*53ee8cc1Swenshuai.xi 			}
1474*53ee8cc1Swenshuai.xi 			else
1475*53ee8cc1Swenshuai.xi 			{
1476*53ee8cc1Swenshuai.xi 			}
1477*53ee8cc1Swenshuai.xi 
1478*53ee8cc1Swenshuai.xi 			u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1479*53ee8cc1Swenshuai.xi             }
1480*53ee8cc1Swenshuai.xi             else
1481*53ee8cc1Swenshuai.xi             {
1482*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
1483*53ee8cc1Swenshuai.xi                 u32Return = UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
1484*53ee8cc1Swenshuai.xi             }
1485*53ee8cc1Swenshuai.xi         }
1486*53ee8cc1Swenshuai.xi     else
1487*53ee8cc1Swenshuai.xi     {
1488*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","\r\n ====== DVBC doesn't need to Suspend/Resume at Non-DVBC mode ====== \r\n");
1489*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_FAIL;
1490*53ee8cc1Swenshuai.xi     }
1491*53ee8cc1Swenshuai.xi 
1492*53ee8cc1Swenshuai.xi     return u32Return;
1493*53ee8cc1Swenshuai.xi }
1494*53ee8cc1Swenshuai.xi 
1495*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1496*53ee8cc1Swenshuai.xi //  Global Functions
1497*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
DVBCOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)1498*53ee8cc1Swenshuai.xi MS_U32 DVBCOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
1499*53ee8cc1Swenshuai.xi {
1500*53ee8cc1Swenshuai.xi 
1501*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCOpen\n"));
1502*53ee8cc1Swenshuai.xi 
1503*53ee8cc1Swenshuai.xi     DVBC_INSTANT_PRIVATE *pDvbcPri= NULL;
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi     UtopiaInstanceCreate(sizeof(DVBC_INSTANT_PRIVATE), ppInstance);
1506*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(*ppInstance, (void*)&pDvbcPri);
1507*53ee8cc1Swenshuai.xi 
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_Init=DMD_DVBC_Init;
1510*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_Dual_Individual_Init=DMD_DVBC_Dual_Individual_Init;
1511*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_Dual_Public_Init=DMD_DVBC_Dual_Public_Init;
1512*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_Exit=DMD_DVBC_Exit;
1513*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetDbgLevel=DMD_DVBC_SetDbgLevel;
1514*53ee8cc1Swenshuai.xi 
1515*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetInfo=DMD_DVBC_GetInfo;
1516*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetLibVer=DMD_DVBC_GetLibVer;
1517*53ee8cc1Swenshuai.xi 
1518*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetFWVer=DMD_DVBC_GetFWVer;
1519*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetDSPReg=DMD_DVBC_GetDSPReg;
1520*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetDSPReg=DMD_DVBC_SetDSPReg;
1521*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetReg=DMD_DVBC_GetReg;
1522*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetReg=DMD_DVBC_SetReg;
1523*53ee8cc1Swenshuai.xi 
1524*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBCSetSerialControl=DMD_DVBC_SetSerialControl;
1525*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetConfig_symbol_rate_list=DMD_DVBC_SetConfig_symbol_rate_list;
1526*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetActive=DMD_DVBC_SetActive;
1527*53ee8cc1Swenshuai.xi 
1528*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetLockWithRFPower=DMD_DVBC_GetLockWithRFPower;
1529*53ee8cc1Swenshuai.xi 
1530*53ee8cc1Swenshuai.xi 	//pDvbcPri->fpDVBC_GetSignalStrengthWithRFPower=DMD_DVBC_GetSignalStrengthWithRFPower;
1531*53ee8cc1Swenshuai.xi 	//pDvbcPri->fpDVBC_GetSignalQualityWithRFPower=DMD_DVBC_GetSignalQualityWithRFPower;
1532*53ee8cc1Swenshuai.xi 
1533*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_ActiveDmdSwitch=DMD_DVBC_ActiveDmdSwitch;
1534*53ee8cc1Swenshuai.xi 
1535*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetSNR=DMD_DVBC_GetSNR;
1536*53ee8cc1Swenshuai.xi   pDvbcPri->fpDVBC_GetPostViterbiBer=DMD_DVBC_GetPostViterbiBer;
1537*53ee8cc1Swenshuai.xi 
1538*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetPacketErr=DMD_DVBC_GetPacketErr;
1539*53ee8cc1Swenshuai.xi 
1540*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetCellID=DMD_DVBC_GetCellID;
1541*53ee8cc1Swenshuai.xi 	//bryan temp mark pDvbcPri->fpDVBC_GetStatus=DMD_DVBC_GetStatus;
1542*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetStatus=DMD_DVBC_GetStatus;
1543*53ee8cc1Swenshuai.xi 
1544*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_SetPowerState=DMD_DVBC_SetPowerState;
1545*53ee8cc1Swenshuai.xi 
1546*53ee8cc1Swenshuai.xi 	//waiting add
1547*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetIFAGC=DMD_DVBC_GetIFAGC;
1548*53ee8cc1Swenshuai.xi 
1549*53ee8cc1Swenshuai.xi 	#ifdef UFO_DEMOD_DVBC_GET_AGC_INFO
1550*53ee8cc1Swenshuai.xi 	pDvbcPri->fpDVBC_GetAGCInfo=DMD_DVBC_GetAGCInfo;
1551*53ee8cc1Swenshuai.xi 	#endif
1552*53ee8cc1Swenshuai.xi 
1553*53ee8cc1Swenshuai.xi     //return TRUE;
1554*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
1555*53ee8cc1Swenshuai.xi }
1556*53ee8cc1Swenshuai.xi 
DVBCIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)1557*53ee8cc1Swenshuai.xi MS_U32 DVBCIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi     //ULOGD("DEMOD","\n[drvDMD_INTERN_DVBC_v2.c][DVBC INFO] DVBC Ioctl \n");
1560*53ee8cc1Swenshuai.xi     void* pModule = NULL;
1561*53ee8cc1Swenshuai.xi     UtopiaInstanceGetModule(pInstance, &pModule);
1562*53ee8cc1Swenshuai.xi 
1563*53ee8cc1Swenshuai.xi     void* pResource = NULL;
1564*53ee8cc1Swenshuai.xi     DVBC_RESOURCE_PRIVATE* psDVBCResPri = NULL;
1565*53ee8cc1Swenshuai.xi     DVBC_INSTANT_PRIVATE* psDVBCInstPri = NULL;
1566*53ee8cc1Swenshuai.xi     void* psDVBCInstPriVoid = NULL;
1567*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psDVBCInstPriVoid);
1568*53ee8cc1Swenshuai.xi     psDVBCInstPri = (DVBC_INSTANT_PRIVATE*)psDVBCInstPriVoid;
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1571*53ee8cc1Swenshuai.xi 
1572*53ee8cc1Swenshuai.xi     if (UtopiaResourceObtain(pModule, DVBC_POOL_ID_DMD0, &pResource) != 0)
1573*53ee8cc1Swenshuai.xi     {
1574*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","UtopiaResourceObtainToInstant fail\n"));
1575*53ee8cc1Swenshuai.xi 	    return UTOPIA_STATUS_ERR_RESOURCE;
1576*53ee8cc1Swenshuai.xi     }
1577*53ee8cc1Swenshuai.xi 
1578*53ee8cc1Swenshuai.xi     if(UtopiaResourceGetPrivate(pResource,(void*)&psDVBCResPri) != 0)
1579*53ee8cc1Swenshuai.xi     {
1580*53ee8cc1Swenshuai.xi         printf("UtopiaResourceGetPrivate fail\n");
1581*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_FAIL;
1582*53ee8cc1Swenshuai.xi     }
1583*53ee8cc1Swenshuai.xi 
1584*53ee8cc1Swenshuai.xi 
1585*53ee8cc1Swenshuai.xi 	psDMD_DVBC_ResData = ((PDVBC_RESOURCE_PRIVATE)psDVBCResPri)->sDMD_DVBC_ResData;
1586*53ee8cc1Swenshuai.xi 
1587*53ee8cc1Swenshuai.xi     switch (u32Cmd)
1588*53ee8cc1Swenshuai.xi     {
1589*53ee8cc1Swenshuai.xi #if defined(CHIP_KAISER)||defined(CHIP_K6LITE)
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi 	case DMD_DVBC_DRV_CMD_Dual_Public_Init:
1592*53ee8cc1Swenshuai.xi               DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - u8AGC_Tristate_Ctrl\n"));
1593*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_Dual_Public_Init(((PDVBC_Dual_Public_Init_PARAM)pArgs)->u8AGC_Tristate_Ctrl,
1594*53ee8cc1Swenshuai.xi 		((PDVBC_Dual_Public_Init_PARAM)pArgs)->u8Sar_Channel);
1595*53ee8cc1Swenshuai.xi 
1596*53ee8cc1Swenshuai.xi 		((PDVBC_Dual_Public_Init_PARAM)pArgs)->ret=bRet;
1597*53ee8cc1Swenshuai.xi 	break;
1598*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_Dual_Individual_Init:
1599*53ee8cc1Swenshuai.xi               DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - pDMD_DVBC_InitData\n"));
1600*53ee8cc1Swenshuai.xi         bRet=psDVBCInstPri->fpDVBC_Dual_Individual_Init(((PDVBC_Dual_Individual_Init_PARAM)pArgs)->pDMD_DVBC_InitData,
1601*53ee8cc1Swenshuai.xi         ((PDVBC_Dual_Individual_Init_PARAM)pArgs)->u32InitDataLen);
1602*53ee8cc1Swenshuai.xi 
1603*53ee8cc1Swenshuai.xi         ((PDVBC_Dual_Individual_Init_PARAM)pArgs)->ret=bRet;
1604*53ee8cc1Swenshuai.xi     	break;
1605*53ee8cc1Swenshuai.xi     	#endif
1606*53ee8cc1Swenshuai.xi 
1607*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_Init:
1608*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_Init\n"));
1609*53ee8cc1Swenshuai.xi  	     bRet = psDVBCInstPri->fpDVBC_Init( (((PDVBC_Init_PARAM)pArgs)->pDMD_DVBC_InitData), ((PDVBC_Init_PARAM)pArgs)->u32InitDataLen);
1610*53ee8cc1Swenshuai.xi  	     ((PDVBC_Init_PARAM)pArgs)->ret=bRet;
1611*53ee8cc1Swenshuai.xi             break;
1612*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_Exit:
1613*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_Exit\n"));
1614*53ee8cc1Swenshuai.xi 	     bRet= psDVBCInstPri->fpDVBC_Exit();
1615*53ee8cc1Swenshuai.xi 	     ((PDVBC_EXIT_PARAM_PARAM)pArgs)->ret=bRet;
1616*53ee8cc1Swenshuai.xi             break;
1617*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetDbgLevel:
1618*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetDbgLevel\n"));
1619*53ee8cc1Swenshuai.xi 	    bRet= psDVBCInstPri->fpDVBC_SetDbgLevel(((PDVBC_SetDbgLevel_PARAM)pArgs)->u8DbgLevel);
1620*53ee8cc1Swenshuai.xi 	    ((PDVBC_SetDbgLevel_PARAM)pArgs)->ret=bRet;
1621*53ee8cc1Swenshuai.xi             break;
1622*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetInfo:
1623*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetInfo\n"));
1624*53ee8cc1Swenshuai.xi 	    ((PDVBC_GetInfo_PARAM)pArgs)->ret_info=psDVBCInstPri->fpDVBC_GetInfo();
1625*53ee8cc1Swenshuai.xi             break;
1626*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetLibVer:
1627*53ee8cc1Swenshuai.xi             bRet=psDVBCInstPri->fpDVBC_GetLibVer(((PDVBC_GetLibVer_PARAM)pArgs)->ppVersion);
1628*53ee8cc1Swenshuai.xi             ((PDVBC_GetLibVer_PARAM)pArgs)->ret=bRet;
1629*53ee8cc1Swenshuai.xi             break;
1630*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetFWVer:
1631*53ee8cc1Swenshuai.xi               DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetFWVer\n"));
1632*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetFWVer(((PDVBC_GetFWVer_PARAM)pArgs)->ver);
1633*53ee8cc1Swenshuai.xi 	       ((PDVBC_GetFWVer_PARAM)pArgs)->ret=bRet;
1634*53ee8cc1Swenshuai.xi             break;
1635*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetDSPReg:
1636*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetDSPReg\n"));
1637*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetDSPReg(((PDVBC_GetDSPReg_PARAM)pArgs)->u16Addr,((PDVBC_GetDSPReg_PARAM)pArgs)->pu8Data);
1638*53ee8cc1Swenshuai.xi 		((PDVBC_GetDSPReg_PARAM)pArgs)->ret=bRet;
1639*53ee8cc1Swenshuai.xi         break;
1640*53ee8cc1Swenshuai.xi 
1641*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetDSPReg:
1642*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetDSPReg\n"));
1643*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_SetDSPReg(((PDVBC_SetDSPReg_PARAM)pArgs)->u16Addr,((PDVBC_SetDSPReg_PARAM)pArgs)->pu8Data);
1644*53ee8cc1Swenshuai.xi 		((PDVBC_SetDSPReg_PARAM)pArgs)->ret=bRet;
1645*53ee8cc1Swenshuai.xi         break;
1646*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetReg:
1647*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetReg\n"));
1648*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetReg(((PDVBC_GetReg_PARAM)pArgs)->u16Addr,((PDVBC_GetReg_PARAM)pArgs)->pu8Data);
1649*53ee8cc1Swenshuai.xi 		((PDVBC_GetReg_PARAM)pArgs)->ret=bRet;
1650*53ee8cc1Swenshuai.xi             break;
1651*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetReg:
1652*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetReg\n"));
1653*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_SetReg(((PDVBC_SetReg_PARAM)pArgs)->u16Addr,((PDVBC_SetReg_PARAM)pArgs)->u8Data);
1654*53ee8cc1Swenshuai.xi 		((PDVBC_SetReg_PARAM)pArgs)->ret=bRet;
1655*53ee8cc1Swenshuai.xi             break;
1656*53ee8cc1Swenshuai.xi 
1657*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetSerialControl:
1658*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetSerialControl\n"));
1659*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBCSetSerialControl(((PDVBC_SetSerialControl_PARAM)pArgs)->bEnable);
1660*53ee8cc1Swenshuai.xi 		((PDVBC_SetSerialControl_PARAM)pArgs)->ret=bRet;
1661*53ee8cc1Swenshuai.xi             break;
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetSetConfig_symbol_rate_list:
1664*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetSetConfig_symbol_rate_list\n"));
1665*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_SetConfig_symbol_rate_list(((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->u16SymbolRate,\
1666*53ee8cc1Swenshuai.xi 		((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->eQamMode,((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->u32IFFreq,\
1667*53ee8cc1Swenshuai.xi 		((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->bSpecInv,\
1668*53ee8cc1Swenshuai.xi 		((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->bSerialTS,((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->pu16_symbol_rate_list,\
1669*53ee8cc1Swenshuai.xi 		((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->u8_symbol_rate_list_num
1670*53ee8cc1Swenshuai.xi 		);
1671*53ee8cc1Swenshuai.xi 
1672*53ee8cc1Swenshuai.xi 		((PDVBC_SetConfig_Symbol_rate_list_PARAM)pArgs)->ret=bRet;
1673*53ee8cc1Swenshuai.xi 
1674*53ee8cc1Swenshuai.xi             break;
1675*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_SetActive:
1676*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetActive\n"));
1677*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_SetActive(((PDVBC_SetActive_PARAM)pArgs)->bEnable);
1678*53ee8cc1Swenshuai.xi 		((PDVBC_SetActive_PARAM)pArgs)->ret=bRet;
1679*53ee8cc1Swenshuai.xi             break;
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi 
1682*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetLockWithRFPower:
1683*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetLockWithRFPower\n"));
1684*53ee8cc1Swenshuai.xi 
1685*53ee8cc1Swenshuai.xi 		//ULOGD("DEMOD","bryan check DVBC in V2 layer DMD_DVBC_DRV_CMD_GetLockWithRFPower\n");
1686*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetLockWithRFPower(((PDVBC_GetLockWithRFPower)pArgs)->eType,\
1687*53ee8cc1Swenshuai.xi 		((PDVBC_GetLockWithRFPower)pArgs)->u32CurrRFPowerDbm,\
1688*53ee8cc1Swenshuai.xi 		((PDVBC_GetLockWithRFPower)pArgs)->u32NoChannelRFPowerDbm,\
1689*53ee8cc1Swenshuai.xi 		((PDVBC_GetLockWithRFPower)pArgs)->eLockStatus);
1690*53ee8cc1Swenshuai.xi 		((PDVBC_GetLockWithRFPower)pArgs)->ret=bRet;
1691*53ee8cc1Swenshuai.xi 
1692*53ee8cc1Swenshuai.xi             break;
1693*53ee8cc1Swenshuai.xi /*
1694*53ee8cc1Swenshuai.xi         case DMD_DVBC_DRV_CMD_GetSignalStrengthWithRFPower:
1695*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetSignalStrengthWithRFPower(((PDVBC_GetSignalStrengthWithRFPower_PARAM)pArgs)->u16Strength);
1696*53ee8cc1Swenshuai.xi 		((PDVBC_GetSignalStrengthWithRFPower_PARAM)pArgs)->ret=bRet;
1697*53ee8cc1Swenshuai.xi             break;
1698*53ee8cc1Swenshuai.xi 
1699*53ee8cc1Swenshuai.xi 	case DMD_DVBC_DRV_CMD_GetSignalQualityWithRFPower:
1700*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetSignalQualityWithRFPower((PDVBC_GetSignalStrengthWithRFPower_PARAM)pArgs->u16Strength);
1701*53ee8cc1Swenshuai.xi 		(PDVBC_GetSignalStrengthWithRFPower_PARAM)pArgs->ret=bRet;
1702*53ee8cc1Swenshuai.xi 	     break;
1703*53ee8cc1Swenshuai.xi 	#endif
1704*53ee8cc1Swenshuai.xi */
1705*53ee8cc1Swenshuai.xi 
1706*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_ActiveDmdSwitch:
1707*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_ActiveDmdSwitch\n"));
1708*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_ActiveDmdSwitch(((PDVBC_ActiveDmdSwitch_PARAM)pArgs)->demod_no);
1709*53ee8cc1Swenshuai.xi 		((PDVBC_ActiveDmdSwitch_PARAM)pArgs)->ret=bRet;
1710*53ee8cc1Swenshuai.xi        	break;
1711*53ee8cc1Swenshuai.xi 
1712*53ee8cc1Swenshuai.xi 
1713*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_GetSNR:
1714*53ee8cc1Swenshuai.xi        	bRet=psDVBCInstPri->fpDVBC_GetSNR(((PDVBC_GetSNR_PARAM)pArgs)->snr_reg);
1715*53ee8cc1Swenshuai.xi        	((PDVBC_GetSNR_PARAM)pArgs)->ret=bRet;
1716*53ee8cc1Swenshuai.xi        	break;
1717*53ee8cc1Swenshuai.xi 
1718*53ee8cc1Swenshuai.xi        // waiting add
1719*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_GetPostViterbiBer:
1720*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetPostViterbiBer(((PDVBC_GetPostViterbiBer_PARAM)pArgs)->BitErr_reg,\
1721*53ee8cc1Swenshuai.xi 		((PDVBC_GetPostViterbiBer_PARAM)pArgs)->BitErrPeriod_reg);
1722*53ee8cc1Swenshuai.xi 		((PDVBC_GetPostViterbiBer_PARAM)pArgs)->ret=bRet;
1723*53ee8cc1Swenshuai.xi            break;
1724*53ee8cc1Swenshuai.xi 
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_GetPacketErr:
1727*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetPacketErr\n"));
1728*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetPacketErr(((PDVBC_GetPacketErr_PARAM)pArgs)->pktErr);
1729*53ee8cc1Swenshuai.xi 		((PDVBC_GetPacketErr_PARAM)pArgs)->ret=bRet;
1730*53ee8cc1Swenshuai.xi            break;
1731*53ee8cc1Swenshuai.xi 
1732*53ee8cc1Swenshuai.xi 	case DMD_DVBC_DRV_CMD_GetCellID:
1733*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetCellID\n"));
1734*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetCellID(((PDVBC_GetCellID_PARAM)pArgs)->u16CellID);
1735*53ee8cc1Swenshuai.xi 		((PDVBC_GetCellID_PARAM)pArgs)->ret=bRet;
1736*53ee8cc1Swenshuai.xi 		break;
1737*53ee8cc1Swenshuai.xi 
1738*53ee8cc1Swenshuai.xi 	case DMD_DVBC_DRV_CMD_GetStatus:
1739*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetStatus\n"));
1740*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetStatus(((PDVBC_GetStatus_PARAM)pArgs)->pQAMMode,((PDVBC_GetStatus_PARAM)pArgs)->u16SymbolRate,\
1741*53ee8cc1Swenshuai.xi 		((PDVBC_GetStatus_PARAM)pArgs)->config_Fc_reg,\
1742*53ee8cc1Swenshuai.xi 		((PDVBC_GetStatus_PARAM)pArgs)->Fc_over_Fs_reg,\
1743*53ee8cc1Swenshuai.xi 		((PDVBC_GetStatus_PARAM)pArgs)->Cfo_offset_reg);
1744*53ee8cc1Swenshuai.xi 		((PDVBC_GetStatus_PARAM)pArgs)->ret=bRet;
1745*53ee8cc1Swenshuai.xi 		break;
1746*53ee8cc1Swenshuai.xi 
1747*53ee8cc1Swenshuai.xi 
1748*53ee8cc1Swenshuai.xi 	case DMD_DVBC_DRV_CMD_SetPowerState:
1749*53ee8cc1Swenshuai.xi             DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_SetPowerState\n"));
1750*53ee8cc1Swenshuai.xi 		((PDVBC_SetPowerState_PARAM)pArgs)->ret_U32=psDVBCInstPri->fpDVBC_SetPowerState(((PDVBC_SetPowerState_PARAM)pArgs)->u16PowerState);
1751*53ee8cc1Swenshuai.xi 
1752*53ee8cc1Swenshuai.xi 		break;
1753*53ee8cc1Swenshuai.xi 
1754*53ee8cc1Swenshuai.xi 
1755*53ee8cc1Swenshuai.xi 		// waiting add
1756*53ee8cc1Swenshuai.xi        case DMD_DVBC_DRV_CMD_GetIFAGC:
1757*53ee8cc1Swenshuai.xi        	DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetIFAGC\n"));
1758*53ee8cc1Swenshuai.xi 		bRet=psDVBCInstPri->fpDVBC_GetIFAGC(((PDVBC_GetIFAGC_PARAM)pArgs)->ifagc_reg,\
1759*53ee8cc1Swenshuai.xi 		((PDVBC_GetIFAGC_PARAM)pArgs)->ifagc_reg_lsb,\
1760*53ee8cc1Swenshuai.xi 		((PDVBC_GetIFAGC_PARAM)pArgs)->ifagc_err_reg);
1761*53ee8cc1Swenshuai.xi 		((PDVBC_GetIFAGC_PARAM)pArgs)->ret=bRet;
1762*53ee8cc1Swenshuai.xi            break;
1763*53ee8cc1Swenshuai.xi 
1764*53ee8cc1Swenshuai.xi       #ifdef UFO_DEMOD_DVBC_GET_AGC_INFO
1765*53ee8cc1Swenshuai.xi       case DMD_DVBC_DRV_CMD_GetAGCInfo:
1766*53ee8cc1Swenshuai.xi       DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCIoctl - MDrv_DMD_DVBC_GetAGCInfo\n"));
1767*53ee8cc1Swenshuai.xi       bRet=psDVBCInstPri->fpDVBC_GetAGCInfo(((PDVBC_GetAGCInfo_PARAM)pArgs)->u8dbg_mode,\
1768*53ee8cc1Swenshuai.xi 		((PDVBC_GetAGCInfo_PARAM)pArgs)->pu16Data);
1769*53ee8cc1Swenshuai.xi 		((PDVBC_GetAGCInfo_PARAM)pArgs)->ret=bRet;
1770*53ee8cc1Swenshuai.xi       break;
1771*53ee8cc1Swenshuai.xi       #endif
1772*53ee8cc1Swenshuai.xi 
1773*53ee8cc1Swenshuai.xi          default:
1774*53ee8cc1Swenshuai.xi             break;
1775*53ee8cc1Swenshuai.xi     }
1776*53ee8cc1Swenshuai.xi 
1777*53ee8cc1Swenshuai.xi     //jway suggest UtopiaResourceRelease(pResource);
1778*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pResource);
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     return (bRet ? UTOPIA_STATUS_SUCCESS : UTOPIA_STATUS_FAIL);
1781*53ee8cc1Swenshuai.xi }
1782*53ee8cc1Swenshuai.xi 
DVBCClose(void * pInstance)1783*53ee8cc1Swenshuai.xi MS_U32 DVBCClose(void* pInstance)
1784*53ee8cc1Swenshuai.xi {
1785*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCClose\n"));
1786*53ee8cc1Swenshuai.xi 
1787*53ee8cc1Swenshuai.xi     UtopiaInstanceDelete(pInstance);
1788*53ee8cc1Swenshuai.xi 
1789*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
1790*53ee8cc1Swenshuai.xi }
1791*53ee8cc1Swenshuai.xi 
DVBCStr(MS_U32 u32PowerState,void * pModule)1792*53ee8cc1Swenshuai.xi MS_U32 DVBCStr(MS_U32 u32PowerState, void* pModule)
1793*53ee8cc1Swenshuai.xi {
1794*53ee8cc1Swenshuai.xi     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1795*53ee8cc1Swenshuai.xi     MS_U32 u32Ret = 0;
1796*53ee8cc1Swenshuai.xi 
1797*53ee8cc1Swenshuai.xi 	void* pResource = NULL;
1798*53ee8cc1Swenshuai.xi 	DVBC_RESOURCE_PRIVATE* psDVBCResPri = NULL;
1799*53ee8cc1Swenshuai.xi 
1800*53ee8cc1Swenshuai.xi 
1801*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCStr\n"));
1802*53ee8cc1Swenshuai.xi 
1803*53ee8cc1Swenshuai.xi     //UtopiaModuleGetSTRPrivate(pModule, (void**));
1804*53ee8cc1Swenshuai.xi 
1805*53ee8cc1Swenshuai.xi 	if (UtopiaResourceObtain(pModule, DVBC_POOL_ID_DMD0, &pResource) != 0)
1806*53ee8cc1Swenshuai.xi     {
1807*53ee8cc1Swenshuai.xi         printf("DVBC - UtopiaResourceObtainToInstant fail\n");
1808*53ee8cc1Swenshuai.xi 	    return UTOPIA_STATUS_ERR_RESOURCE;
1809*53ee8cc1Swenshuai.xi     }
1810*53ee8cc1Swenshuai.xi 
1811*53ee8cc1Swenshuai.xi     if(UtopiaResourceGetPrivate(pResource,(void*)&psDVBCResPri) != 0)
1812*53ee8cc1Swenshuai.xi     {
1813*53ee8cc1Swenshuai.xi         printf("DVBC - UtopiaResourceGetPrivate fail\n");
1814*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_FAIL;
1815*53ee8cc1Swenshuai.xi     }
1816*53ee8cc1Swenshuai.xi 
1817*53ee8cc1Swenshuai.xi     psDMD_DVBC_ResData = ((PDVBC_RESOURCE_PRIVATE)psDVBCResPri)->sDMD_DVBC_ResData;
1818*53ee8cc1Swenshuai.xi 
1819*53ee8cc1Swenshuai.xi 
1820*53ee8cc1Swenshuai.xi 
1821*53ee8cc1Swenshuai.xi     if (u32PowerState == E_POWER_SUSPEND)
1822*53ee8cc1Swenshuai.xi     {
1823*53ee8cc1Swenshuai.xi         /* Please Implement Module Suspend Flow Here. */
1824*53ee8cc1Swenshuai.xi         u32Ret = DMD_DVBC_SetPowerState(E_POWER_SUSPEND);
1825*53ee8cc1Swenshuai.xi 
1826*53ee8cc1Swenshuai.xi         if(u32Ret == TRUE)
1827*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1828*53ee8cc1Swenshuai.xi         else
1829*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_FAIL;
1830*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][DVBCStr] SUSPEND !\n"));
1831*53ee8cc1Swenshuai.xi     }
1832*53ee8cc1Swenshuai.xi     else if (u32PowerState == E_POWER_RESUME)
1833*53ee8cc1Swenshuai.xi     {
1834*53ee8cc1Swenshuai.xi         /* Please Implement Module Resume Flow Here. */
1835*53ee8cc1Swenshuai.xi         u32Ret = DMD_DVBC_SetPowerState(E_POWER_RESUME);
1836*53ee8cc1Swenshuai.xi 
1837*53ee8cc1Swenshuai.xi         if(u32Ret == TRUE)
1838*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1839*53ee8cc1Swenshuai.xi         else
1840*53ee8cc1Swenshuai.xi           u32Return = UTOPIA_STATUS_FAIL;
1841*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][DVBCStr] RESUME !\n"));
1842*53ee8cc1Swenshuai.xi     }
1843*53ee8cc1Swenshuai.xi     else
1844*53ee8cc1Swenshuai.xi     {
1845*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_FAIL;
1846*53ee8cc1Swenshuai.xi         DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][DVBCStr] OTHERS !\n"));
1847*53ee8cc1Swenshuai.xi     }
1848*53ee8cc1Swenshuai.xi 
1849*53ee8cc1Swenshuai.xi 	   UtopiaResourceRelease(pResource);
1850*53ee8cc1Swenshuai.xi 
1851*53ee8cc1Swenshuai.xi     return u32Return;// for success
1852*53ee8cc1Swenshuai.xi }
1853*53ee8cc1Swenshuai.xi 
DVBCRegisterToUtopia(void)1854*53ee8cc1Swenshuai.xi void DVBCRegisterToUtopia(void)
1855*53ee8cc1Swenshuai.xi {
1856*53ee8cc1Swenshuai.xi     // 1. deal with module
1857*53ee8cc1Swenshuai.xi 
1858*53ee8cc1Swenshuai.xi     void* pUtopiaModule = NULL;
1859*53ee8cc1Swenshuai.xi //    UtopiaModuleCreate(MODULE_DVBT, 8, &pUtopiaModule);
1860*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c]DVBCRegisterToUtopia\n"));
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     UtopiaModuleCreate(MODULE_DVBC, 8, &pUtopiaModule);
1863*53ee8cc1Swenshuai.xi     UtopiaModuleRegister(pUtopiaModule);
1864*53ee8cc1Swenshuai.xi     UtopiaModuleSetupFunctionPtr(pUtopiaModule, (FUtopiaOpen)DVBCOpen, (FUtopiaClose)DVBCClose, (FUtopiaIOctl)DVBCIoctl);
1865*53ee8cc1Swenshuai.xi 
1866*53ee8cc1Swenshuai.xi    // Utopia2K STR
1867*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
1868*53ee8cc1Swenshuai.xi     DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBC_v2.c][DVBCRegisterToUtopia] KERNEL DVBCStr!\n"));
1869*53ee8cc1Swenshuai.xi     UtopiaModuleSetupSTRFunctionPtr(pUtopiaModule,(FUtopiaSTR)DVBCStr);
1870*53ee8cc1Swenshuai.xi #endif
1871*53ee8cc1Swenshuai.xi 
1872*53ee8cc1Swenshuai.xi 	// 20160107 oga. add share memory to control DC ON/OFF variable
1873*53ee8cc1Swenshuai.xi 
1874*53ee8cc1Swenshuai.xi     // 2. deal with resource
1875*53ee8cc1Swenshuai.xi     void* psResource = NULL;
1876*53ee8cc1Swenshuai.xi     // start func to add res, call once will create 2 access in resource. Also can declare BDMA_POOL_ID_BDMA1 for another channel depend on driver owner.
1877*53ee8cc1Swenshuai.xi 	UtopiaModuleAddResourceStart(pUtopiaModule, DVBC_POOL_ID_DMD0);
1878*53ee8cc1Swenshuai.xi     // resource can alloc private for internal use, ex, BDMA_RESOURCE_PRIVATE
1879*53ee8cc1Swenshuai.xi     UtopiaResourceCreate("dvbc0", sizeof(DVBC_RESOURCE_PRIVATE), &psResource);
1880*53ee8cc1Swenshuai.xi     // func to reg res
1881*53ee8cc1Swenshuai.xi     UtopiaResourceRegister(pUtopiaModule, psResource, DVBC_POOL_ID_DMD0);
1882*53ee8cc1Swenshuai.xi     // end function to add res
1883*53ee8cc1Swenshuai.xi 	UtopiaModuleAddResourceEnd(pUtopiaModule, DVBC_POOL_ID_DMD0);
1884*53ee8cc1Swenshuai.xi 
1885*53ee8cc1Swenshuai.xi 
1886*53ee8cc1Swenshuai.xi }
1887*53ee8cc1Swenshuai.xi 
1888*53ee8cc1Swenshuai.xi 
1889