xref: /utopia/UTPA2-700.0.x/modules/audio/hal/k6/audio/halSIF.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 //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi // Common Definition
100*53ee8cc1Swenshuai.xi #include "MsCommon.h"
101*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
102*53ee8cc1Swenshuai.xi #include "MsOS.h"
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi // Internal Definition
105*53ee8cc1Swenshuai.xi #include "regCHIP.h"
106*53ee8cc1Swenshuai.xi #include "drvAUDIO.h"
107*53ee8cc1Swenshuai.xi #include "regAUDIO.h"
108*53ee8cc1Swenshuai.xi #include "halAUDIO.h"
109*53ee8cc1Swenshuai.xi #include "halMAD.h"
110*53ee8cc1Swenshuai.xi #include "halMAD2.h"
111*53ee8cc1Swenshuai.xi #include "halSIF.h"
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi //  Driver Compiler Options
115*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
116*53ee8cc1Swenshuai.xi #define DBG_SIF(msg) //msg
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
119*53ee8cc1Swenshuai.xi //  Local Defines
120*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi #define HINIBBLE(u8Data)    ((u8Data) >> 4)
122*53ee8cc1Swenshuai.xi #define LONIBBLE(u8Data)    ((u8Data) << 4)
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
125*53ee8cc1Swenshuai.xi //  Local Structures
126*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
127*53ee8cc1Swenshuai.xi 
128*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
129*53ee8cc1Swenshuai.xi //  Global Variables
130*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
131*53ee8cc1Swenshuai.xi extern AUDIO_SHARED_VARS2 *g_AudioVars2;
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi //  Local Variables
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi static MS_BOOL bHiDev_Flag = FALSE;
137*53ee8cc1Swenshuai.xi static MS_BOOL bDetect_Main_Std_Only_Flag = FALSE;
138*53ee8cc1Swenshuai.xi static MS_U8   hidev_filter_bandwidth_level = 0x10;
139*53ee8cc1Swenshuai.xi static MS_BOOL gAutoMute = FALSE;
140*53ee8cc1Swenshuai.xi static MS_BOOL gAutoSoundmode = TRUE;
141*53ee8cc1Swenshuai.xi static MS_BOOL bADCFromVifPathSupported = TRUE, bADCFromVifPathEnabled = TRUE;   // for T3, default enable vif path.
142*53ee8cc1Swenshuai.xi static MS_BOOL beeper_enable = FALSE;
143*53ee8cc1Swenshuai.xi static MS_BOOL vif_patch_flag = TRUE; // If it's ture, chips need to be added vif patches for palsum vif 42M & 44M.
144*53ee8cc1Swenshuai.xi static AUDIO_DSP_CODE_TYPE   sifDspCodeType = AU_SIF_NONE;
145*53ee8cc1Swenshuai.xi static AU_SIF_CLOCK_Type  sif_clock = AUD_SIF_43M;
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi const MS_U16  PRESCALE_STEP_TBL[]=
148*53ee8cc1Swenshuai.xi {
149*53ee8cc1Swenshuai.xi     0x7E2B,       // -0.125dB
150*53ee8cc1Swenshuai.xi     0x7C5E,       // -0.25dB
151*53ee8cc1Swenshuai.xi     0x78D6,       // -0.5dB
152*53ee8cc1Swenshuai.xi     0x7214,       // -1dB
153*53ee8cc1Swenshuai.xi     0x65AC,       // -2dB
154*53ee8cc1Swenshuai.xi     0x50C3,       // -4dB
155*53ee8cc1Swenshuai.xi };
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi #if 0
158*53ee8cc1Swenshuai.xi // for DVB project threshold function..
159*53ee8cc1Swenshuai.xi const MS_U16 au_pal_sys_threshold[12]=
160*53ee8cc1Swenshuai.xi {
161*53ee8cc1Swenshuai.xi     M_A2_THRESHOLD_ADDR,
162*53ee8cc1Swenshuai.xi     BG_A2_THRESHOLD_ADDR,
163*53ee8cc1Swenshuai.xi     DK_A2_THRESHOLD_ADDR,
164*53ee8cc1Swenshuai.xi     I_FM_THRESHOLD_ADDR,
165*53ee8cc1Swenshuai.xi     L_AM_THRESHOLD_ADDR,
166*53ee8cc1Swenshuai.xi     NICAM_BGDKL_THRESHOLD_ADDR,
167*53ee8cc1Swenshuai.xi     NICAM_I_THRESHOLD_ADDR,
168*53ee8cc1Swenshuai.xi     HIDEV_M_THRESHOLD_ADDR,
169*53ee8cc1Swenshuai.xi     HIDEV_BG_THRESHOLD_ADDR,
170*53ee8cc1Swenshuai.xi     HIDEV_DK_THRESHOLD_ADDR,
171*53ee8cc1Swenshuai.xi     HIDEV_I_THRESHOLD_ADDR,
172*53ee8cc1Swenshuai.xi     BTSC_THRESHOLD_ADDR,
173*53ee8cc1Swenshuai.xi };
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi const MS_U16  SIF_PM_GAIN_TBL_PAL[6][2]=
176*53ee8cc1Swenshuai.xi {
177*53ee8cc1Swenshuai.xi    { A2_OUTPUT_GAIN_X_ADDR,  A2_OUTPUT_GAIN_X_ADDR+1},        //A2 / FM-MONO
178*53ee8cc1Swenshuai.xi    { NICAM_OUTPUT_GAIN_ADDR,  NICAM_OUTPUT_GAIN_ADDR+1},    //NICAM
179*53ee8cc1Swenshuai.xi    { AM_OUTPUT_GAIN_ADDR,  AM_OUTPUT_GAIN_ADDR+1},              //AM
180*53ee8cc1Swenshuai.xi    { A2_OUTPUT_GAIN_X_ADDR+2,  A2_OUTPUT_GAIN_X_ADDR+3},  //HIDEV
181*53ee8cc1Swenshuai.xi    { A2_OUTPUT_GAIN_M_ADDR,  A2_OUTPUT_GAIN_M_ADDR+1},  //FM-MONO M
182*53ee8cc1Swenshuai.xi    { A2_OUTPUT_GAIN_M_ADDR+2,  A2_OUTPUT_GAIN_M_ADDR+3},  //FM-MONO M HIDEV
183*53ee8cc1Swenshuai.xi };
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi const MS_U16  SIF_PM_GAIN_TBL_BTSC[4][2]=
186*53ee8cc1Swenshuai.xi {
187*53ee8cc1Swenshuai.xi    { BTSC_OUTPUT_GAIN_ADDR,  BTSC_OUTPUT_GAIN_ADDR+1},        // BTSC
188*53ee8cc1Swenshuai.xi    { BTSC_MTS_OUTPUT_GAIN,  BTSC_MTS_OUTPUT_GAIN+1},                    //BTSC Mono
189*53ee8cc1Swenshuai.xi    { BTSC_MTS_OUTPUT_GAIN+2,  BTSC_MTS_OUTPUT_GAIN+3},                    //BTSC Stereo
190*53ee8cc1Swenshuai.xi    { BTSC_MTS_OUTPUT_GAIN+4,  BTSC_MTS_OUTPUT_GAIN+5},                //BTSC SAP
191*53ee8cc1Swenshuai.xi };
192*53ee8cc1Swenshuai.xi #endif
193*53ee8cc1Swenshuai.xi 
194*53ee8cc1Swenshuai.xi //plz re-mapping xbox adrress for ATV if need
195*53ee8cc1Swenshuai.xi const MS_U16 au_pal_sys_threshold[12]=
196*53ee8cc1Swenshuai.xi {
197*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD,
198*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+1,
199*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+2,
200*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+3,
201*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+4,
202*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+5,
203*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+6,
204*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+7,
205*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+8,
206*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+9,
207*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+10,
208*53ee8cc1Swenshuai.xi     DSP2XboxAddr_AU_PAL_SYS_THRESHOLD+11,
209*53ee8cc1Swenshuai.xi };
210*53ee8cc1Swenshuai.xi 
211*53ee8cc1Swenshuai.xi const MS_U16  SIF_PM_GAIN_TBL_PAL[6][2]=
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+1},
214*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+2, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+3},
215*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+4, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+5},
216*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+6, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+7},
217*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+8, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+9},
218*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+10, DSP2XboxAddr_SIF_PM_GAIN_TBL_PAL+11},
219*53ee8cc1Swenshuai.xi };
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi const MS_U16  SIF_PM_GAIN_TBL_BTSC[4][2]=
222*53ee8cc1Swenshuai.xi {
223*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC, DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+1},
224*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+2, DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+3},
225*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+4, DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+5},
226*53ee8cc1Swenshuai.xi     { DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+6, DSP2XboxAddr_SIF_PM_GAIN_TBL_BTSC+7},
227*53ee8cc1Swenshuai.xi };
228*53ee8cc1Swenshuai.xi 
229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
230*53ee8cc1Swenshuai.xi //  Debug Functions
231*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
235*53ee8cc1Swenshuai.xi //  Local Functions
236*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
237*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
238*53ee8cc1Swenshuai.xi //  Global Functions
239*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
240*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
241*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SIF_Init()
242*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is the initialization for SIF
243*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
244*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
245*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
246*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
247*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_Init(void)248*53ee8cc1Swenshuai.xi void HAL_SIF_Init(void)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi     return;
251*53ee8cc1Swenshuai.xi }
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
254*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SIF_TriggerSifPLL()
255*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to initialize SIF analog part .
256*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Index   :
257*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
258*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U32    :
259*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
260*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_TriggerSifPLL(void)261*53ee8cc1Swenshuai.xi void HAL_SIF_TriggerSifPLL(void)
262*53ee8cc1Swenshuai.xi {
263*53ee8cc1Swenshuai.xi        MS_U8 u8MuxSelect;
264*53ee8cc1Swenshuai.xi        MS_U8 uStandard;
265*53ee8cc1Swenshuai.xi 
266*53ee8cc1Swenshuai.xi     if (bADCFromVifPathEnabled == TRUE) //enable VIF
267*53ee8cc1Swenshuai.xi     {
268*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112c02, 0x04, 0x04);
269*53ee8cc1Swenshuai.xi 
270*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC8, 0xFF, 0xe0);
271*53ee8cc1Swenshuai.xi         #if (SIF_DSP_TYPE == 0)
272*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0xFF, 0x1E); // Enable VIF
273*53ee8cc1Swenshuai.xi         #else
274*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0xFF, 0x3E); // Enable VIF
275*53ee8cc1Swenshuai.xi         #endif
276*53ee8cc1Swenshuai.xi     }
277*53ee8cc1Swenshuai.xi     else    //enable SIF
278*53ee8cc1Swenshuai.xi     {
279*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x000E61, 0x01, 0x00);
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x000E13, 0x04, 0x00);
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi         u8MuxSelect=HAL_AUDIO_AbsReadByte(0x101E39);         // Back up MUX setting
284*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x101E39, 0x03, 0x00);  // Mux switch for HK MCU access bank 0x1120 & 0x1128
285*53ee8cc1Swenshuai.xi 
286*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x103314, 0xFF, 0x00);
287*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x103315, 0xFF, 0x00);
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112002, 0xFF, 0x74);
290*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112003, 0xFF, 0x00);
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11208E, 0xFF, 0x00);
293*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11208F, 0xFF, 0x00);
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x100E13, 0x04, 0x00);
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112879, 0xF0, 0x00);
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112840, 0x10, 0x00);
300*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112834, 0x10, 0x10);
301*53ee8cc1Swenshuai.xi 
302*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112802, 0xFF, 0x20);
303*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112803, 0xFF, 0x02);
304*53ee8cc1Swenshuai.xi 
305*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112816, 0xFF, 0x05);
306*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112817, 0xFF, 0x05);
307*53ee8cc1Swenshuai.xi 
308*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11281E, 0xFF, 0x80);
309*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11281F, 0xFF, 0x00);
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112860, 0xFF, 0x00);
312*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112861, 0xFF, 0x10);
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112866, 0xFF, 0x01);
315*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112867, 0xFF, 0x12);
316*53ee8cc1Swenshuai.xi 
317*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286A, 0xFF, 0x83);
318*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286B, 0xFF, 0x00);
319*53ee8cc1Swenshuai.xi         AUDIO_DELAY1MS(1);
320*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286A, 0xFF, 0x03);
321*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286B, 0xFF, 0x00);
322*53ee8cc1Swenshuai.xi 
323*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286C, 0xFF, 0x00);
324*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x11286D, 0xFF, 0x00);
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112818, 0xFF, 0x00);
327*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112819, 0xFF, 0x00);
328*53ee8cc1Swenshuai.xi 
329*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x101E39, 0x03, u8MuxSelect);  // Revert MUX setting
330*53ee8cc1Swenshuai.xi 
331*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112c02, 0x04, 0x04);
332*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112cb0, 0x80, 0x80);
333*53ee8cc1Swenshuai.xi 
334*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC8, 0xFF, 0xe0);
335*53ee8cc1Swenshuai.xi 
336*53ee8cc1Swenshuai.xi         #if (SIF_DSP_TYPE == 0)
337*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0xFF, 0x0E); // Enable SIF
338*53ee8cc1Swenshuai.xi         #else
339*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0xFF, 0x2E); // Enable SIF
340*53ee8cc1Swenshuai.xi         #endif
341*53ee8cc1Swenshuai.xi     }
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi         uStandard = HAL_AUDIO_ReadByte(AU_CMD_STANDARD);
344*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0x00);
345*53ee8cc1Swenshuai.xi         AUDIO_DELAY1MS(10);
346*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0x20);
347*53ee8cc1Swenshuai.xi         AUDIO_DELAY1MS(10);
348*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteByte(AU_CMD_STANDARD, uStandard);
349*53ee8cc1Swenshuai.xi }
350*53ee8cc1Swenshuai.xi 
351*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
352*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SIF_GetDspType()
353*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to get the DSP(DSP_DEC or DSP_SE) which SIF module used.
354*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
355*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
356*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U8   : DSP which SIF modules (DSP_DEC or DSP_SE)
357*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
358*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_GetDspType(void)359*53ee8cc1Swenshuai.xi MS_U8 HAL_SIF_GetDspType(void)
360*53ee8cc1Swenshuai.xi {
361*53ee8cc1Swenshuai.xi     if (g_AudioVars2 == NULL)
362*53ee8cc1Swenshuai.xi     {
363*53ee8cc1Swenshuai.xi         DBG_SIF(printf("%s() : invalid g_AudioVars2!\n", __FUNCTION__));
364*53ee8cc1Swenshuai.xi #if (SIF_DSP_TYPE == 0)
365*53ee8cc1Swenshuai.xi         return DSP_DEC;
366*53ee8cc1Swenshuai.xi #else
367*53ee8cc1Swenshuai.xi         return DSP_SE;
368*53ee8cc1Swenshuai.xi #endif
369*53ee8cc1Swenshuai.xi     }
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi     return g_AudioVars2->g_u8SifDspType;
372*53ee8cc1Swenshuai.xi }
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
375*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SIF_SetDspCodeType()
376*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to set the DSP code type SIF module used.
377*53ee8cc1Swenshuai.xi /// @param <IN>        \b MS_U8: SIF DSP code type.
378*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
379*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
380*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
381*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_SetDspCodeType(AUDIO_DSP_CODE_TYPE dspCodeType)382*53ee8cc1Swenshuai.xi void HAL_SIF_SetDspCodeType(AUDIO_DSP_CODE_TYPE dspCodeType)
383*53ee8cc1Swenshuai.xi {
384*53ee8cc1Swenshuai.xi     if (g_AudioVars2 == NULL)
385*53ee8cc1Swenshuai.xi     {
386*53ee8cc1Swenshuai.xi         DBG_SIF(printf("%s() : invalid g_AudioVars2!\n", __FUNCTION__));
387*53ee8cc1Swenshuai.xi         return;
388*53ee8cc1Swenshuai.xi     }
389*53ee8cc1Swenshuai.xi 
390*53ee8cc1Swenshuai.xi #if (SIF_DSP_TYPE == 0)
391*53ee8cc1Swenshuai.xi     g_AudioVars2->g_DspCodeType = dspCodeType;
392*53ee8cc1Swenshuai.xi #else
393*53ee8cc1Swenshuai.xi     g_AudioVars2->g_Dsp2CodeType = dspCodeType;
394*53ee8cc1Swenshuai.xi #endif
395*53ee8cc1Swenshuai.xi 
396*53ee8cc1Swenshuai.xi     return;
397*53ee8cc1Swenshuai.xi }
398*53ee8cc1Swenshuai.xi 
399*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
400*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SIF_GetDspCodeType()
401*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  This function is used to set the DSP code type SIF module used.
402*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
403*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
404*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U8: SIF DSP code type.
405*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
406*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_GetDspCodeType(void)407*53ee8cc1Swenshuai.xi AUDIO_DSP_CODE_TYPE HAL_SIF_GetDspCodeType(void)
408*53ee8cc1Swenshuai.xi {
409*53ee8cc1Swenshuai.xi     if (g_AudioVars2 == NULL)
410*53ee8cc1Swenshuai.xi     {
411*53ee8cc1Swenshuai.xi         DBG_SIF(printf("%s() : invalid g_AudioVars2!\n", __FUNCTION__));
412*53ee8cc1Swenshuai.xi         return AU_DVB_STANDARD_INVALID;
413*53ee8cc1Swenshuai.xi     }
414*53ee8cc1Swenshuai.xi 
415*53ee8cc1Swenshuai.xi #if (SIF_DSP_TYPE == 0)
416*53ee8cc1Swenshuai.xi     return g_AudioVars2->g_DspCodeType;
417*53ee8cc1Swenshuai.xi #else
418*53ee8cc1Swenshuai.xi     return g_AudioVars2->g_Dsp2CodeType;
419*53ee8cc1Swenshuai.xi #endif
420*53ee8cc1Swenshuai.xi }
421*53ee8cc1Swenshuai.xi 
422*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
423*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name  : HAL_SIF_SetSoundMode
424*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : This routine is to set the sound mode for SIF module.
425*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Type  : u8Mode_u8Type
426*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
427*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
428*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
429*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_SetSoundMode(AUDIO_SIF_SOUND_MODE u8Mode_Type)430*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_SetSoundMode(AUDIO_SIF_SOUND_MODE u8Mode_Type)
431*53ee8cc1Swenshuai.xi {
432*53ee8cc1Swenshuai.xi     MS_U8 is_auto, is_auto_mute;
433*53ee8cc1Swenshuai.xi     DBG_SIF(printf("HAL_SIF_SetSoundMode(mode=%bx)\r\n", u8Mode_Type));
434*53ee8cc1Swenshuai.xi 
435*53ee8cc1Swenshuai.xi     if (gAutoMute==TRUE)
436*53ee8cc1Swenshuai.xi         is_auto_mute = 0x80;
437*53ee8cc1Swenshuai.xi     else
438*53ee8cc1Swenshuai.xi         is_auto_mute = 0x00;
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi     if (gAutoSoundmode==TRUE)
441*53ee8cc1Swenshuai.xi         is_auto = 0x80;
442*53ee8cc1Swenshuai.xi     else
443*53ee8cc1Swenshuai.xi         is_auto = 0x00;
444*53ee8cc1Swenshuai.xi 
445*53ee8cc1Swenshuai.xi     switch (u8Mode_Type)
446*53ee8cc1Swenshuai.xi     {
447*53ee8cc1Swenshuai.xi         case AU_MODE_MONO:
448*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_BTSC)
449*53ee8cc1Swenshuai.xi             {
450*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1, 0x00|is_auto_mute);
451*53ee8cc1Swenshuai.xi             }
452*53ee8cc1Swenshuai.xi             else if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
453*53ee8cc1Swenshuai.xi             {
454*53ee8cc1Swenshuai.xi                 if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_MONO)
455*53ee8cc1Swenshuai.xi                 {
456*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1, 0x00|is_auto_mute);
457*53ee8cc1Swenshuai.xi                 }
458*53ee8cc1Swenshuai.xi                 else if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2)
459*53ee8cc1Swenshuai.xi                 {
460*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1, 0x00|is_auto_mute);
461*53ee8cc1Swenshuai.xi                 }
462*53ee8cc1Swenshuai.xi                 else if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM)
463*53ee8cc1Swenshuai.xi                 {
464*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE2, 0x01);
465*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1, 0x00|is_auto_mute);
466*53ee8cc1Swenshuai.xi                 }
467*53ee8cc1Swenshuai.xi             }
468*53ee8cc1Swenshuai.xi             else if ((HAL_SIF_GetDspCodeType()) == AU_SIF_EIAJ)
469*53ee8cc1Swenshuai.xi             {
470*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1, 0x00|is_auto_mute);
471*53ee8cc1Swenshuai.xi             }
472*53ee8cc1Swenshuai.xi             else
473*53ee8cc1Swenshuai.xi             {
474*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error1!! \r\n"));
475*53ee8cc1Swenshuai.xi                 return FALSE;
476*53ee8cc1Swenshuai.xi             }
477*53ee8cc1Swenshuai.xi             break;
478*53ee8cc1Swenshuai.xi 
479*53ee8cc1Swenshuai.xi         case AU_MODE_STEREO:
480*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_BTSC)
481*53ee8cc1Swenshuai.xi             {
482*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x01|is_auto);
483*53ee8cc1Swenshuai.xi             }
484*53ee8cc1Swenshuai.xi             else if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
485*53ee8cc1Swenshuai.xi             {
486*53ee8cc1Swenshuai.xi                 if((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2)
487*53ee8cc1Swenshuai.xi                 {
488*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x01|is_auto);
489*53ee8cc1Swenshuai.xi                 }
490*53ee8cc1Swenshuai.xi                 else if((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM)
491*53ee8cc1Swenshuai.xi                 {
492*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE2,  0x02);
493*53ee8cc1Swenshuai.xi                 }
494*53ee8cc1Swenshuai.xi             }
495*53ee8cc1Swenshuai.xi             else if((HAL_SIF_GetDspCodeType()) == AU_SIF_EIAJ)
496*53ee8cc1Swenshuai.xi             {
497*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x01|is_auto);
498*53ee8cc1Swenshuai.xi             }
499*53ee8cc1Swenshuai.xi             else
500*53ee8cc1Swenshuai.xi             {
501*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error2!! \r\n"));
502*53ee8cc1Swenshuai.xi                 return FALSE;
503*53ee8cc1Swenshuai.xi             }
504*53ee8cc1Swenshuai.xi             break;
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi         case AU_MODE_SAP:
507*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_BTSC)
508*53ee8cc1Swenshuai.xi             {
509*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x02|is_auto);
510*53ee8cc1Swenshuai.xi             }
511*53ee8cc1Swenshuai.xi             else if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
512*53ee8cc1Swenshuai.xi             {
513*53ee8cc1Swenshuai.xi                 if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2)
514*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x02|is_auto);
515*53ee8cc1Swenshuai.xi             }
516*53ee8cc1Swenshuai.xi             else if((HAL_SIF_GetDspCodeType()) == AU_SIF_EIAJ)
517*53ee8cc1Swenshuai.xi             {
518*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x02|is_auto);
519*53ee8cc1Swenshuai.xi             }
520*53ee8cc1Swenshuai.xi             else
521*53ee8cc1Swenshuai.xi             {
522*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error3!! \r\n"));
523*53ee8cc1Swenshuai.xi                 return FALSE;
524*53ee8cc1Swenshuai.xi             }
525*53ee8cc1Swenshuai.xi             break;
526*53ee8cc1Swenshuai.xi 
527*53ee8cc1Swenshuai.xi         case AU_MODE_LANG_A:
528*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
529*53ee8cc1Swenshuai.xi             {
530*53ee8cc1Swenshuai.xi                 if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2)
531*53ee8cc1Swenshuai.xi                 {
532*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x00|is_auto);
533*53ee8cc1Swenshuai.xi                 }
534*53ee8cc1Swenshuai.xi                 else if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM)
535*53ee8cc1Swenshuai.xi                 {
536*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE2,  0x06);
537*53ee8cc1Swenshuai.xi                 }
538*53ee8cc1Swenshuai.xi             }
539*53ee8cc1Swenshuai.xi             else
540*53ee8cc1Swenshuai.xi             {
541*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error4!! \r\n"));
542*53ee8cc1Swenshuai.xi                 return FALSE;
543*53ee8cc1Swenshuai.xi             }
544*53ee8cc1Swenshuai.xi             break;
545*53ee8cc1Swenshuai.xi 
546*53ee8cc1Swenshuai.xi         case AU_MODE_LANG_B:
547*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
548*53ee8cc1Swenshuai.xi             {
549*53ee8cc1Swenshuai.xi                 if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2 )
550*53ee8cc1Swenshuai.xi                 {
551*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x02|is_auto);
552*53ee8cc1Swenshuai.xi                 }
553*53ee8cc1Swenshuai.xi                 else if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM )
554*53ee8cc1Swenshuai.xi                 {
555*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE2,  0x07);
556*53ee8cc1Swenshuai.xi                 }
557*53ee8cc1Swenshuai.xi             }
558*53ee8cc1Swenshuai.xi             else
559*53ee8cc1Swenshuai.xi             {
560*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error5!! \r\n"));
561*53ee8cc1Swenshuai.xi                 return FALSE;
562*53ee8cc1Swenshuai.xi             }
563*53ee8cc1Swenshuai.xi             break;
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi         case AU_MODE_LANG_AB:
566*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
567*53ee8cc1Swenshuai.xi             {
568*53ee8cc1Swenshuai.xi                 if ((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_A2 )
569*53ee8cc1Swenshuai.xi                 {
570*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE1,  0x03|is_auto);
571*53ee8cc1Swenshuai.xi                 }
572*53ee8cc1Swenshuai.xi                 else if((HAL_AUDIO_ReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM )
573*53ee8cc1Swenshuai.xi                 {
574*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_MODE2,  0x05);
575*53ee8cc1Swenshuai.xi                 }
576*53ee8cc1Swenshuai.xi             }
577*53ee8cc1Swenshuai.xi             else
578*53ee8cc1Swenshuai.xi             {
579*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error6!! \r\n"));
580*53ee8cc1Swenshuai.xi                 return FALSE;
581*53ee8cc1Swenshuai.xi             }
582*53ee8cc1Swenshuai.xi             break;
583*53ee8cc1Swenshuai.xi 
584*53ee8cc1Swenshuai.xi         case AU_MODE_NICAM_MONO:
585*53ee8cc1Swenshuai.xi             if (((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM) && ((HAL_AUDIO_DecReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM))
586*53ee8cc1Swenshuai.xi             {
587*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE2, 0x08);
588*53ee8cc1Swenshuai.xi             }
589*53ee8cc1Swenshuai.xi             else
590*53ee8cc1Swenshuai.xi             {
591*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error7!! \r\n"));
592*53ee8cc1Swenshuai.xi                 return FALSE;
593*53ee8cc1Swenshuai.xi             }
594*53ee8cc1Swenshuai.xi             break;
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi         case AU_MODE_FORCE_NICAM:
597*53ee8cc1Swenshuai.xi             if (((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM) && ((HAL_AUDIO_DecReadByte(AU_CMD_STANDARD)&0xF0) == SIF_MODE_NICAM))
598*53ee8cc1Swenshuai.xi             {
599*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(AU_CMD_MODE2, 0x80);
600*53ee8cc1Swenshuai.xi             }
601*53ee8cc1Swenshuai.xi             else
602*53ee8cc1Swenshuai.xi             {
603*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("\r\n set sound mode error8!! \r\n"));
604*53ee8cc1Swenshuai.xi                 return FALSE;
605*53ee8cc1Swenshuai.xi             }
606*53ee8cc1Swenshuai.xi             break;
607*53ee8cc1Swenshuai.xi 
608*53ee8cc1Swenshuai.xi         default:
609*53ee8cc1Swenshuai.xi             break;
610*53ee8cc1Swenshuai.xi     }
611*53ee8cc1Swenshuai.xi 
612*53ee8cc1Swenshuai.xi     return TRUE;
613*53ee8cc1Swenshuai.xi }
614*53ee8cc1Swenshuai.xi 
615*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
616*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name  : HAL_SIF_StartAutoDetect
617*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : This routine is to start to detect the sound system for SIF Palsum module.
618*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE  :
619*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
620*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE  :
621*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
622*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_StartAutoDetect(void)623*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_StartAutoDetect(void)
624*53ee8cc1Swenshuai.xi {
625*53ee8cc1Swenshuai.xi     if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
626*53ee8cc1Swenshuai.xi         return FALSE;
627*53ee8cc1Swenshuai.xi 
628*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD,0xFF,0x00);
629*53ee8cc1Swenshuai.xi     AUDIO_DELAY1MS(1);
630*53ee8cc1Swenshuai.xi     if (bHiDev_Flag==0)
631*53ee8cc1Swenshuai.xi     {
632*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x30, 0x00);
633*53ee8cc1Swenshuai.xi         if(bDetect_Main_Std_Only_Flag == 0)
634*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0xE0);
635*53ee8cc1Swenshuai.xi         else
636*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0xC0);
637*53ee8cc1Swenshuai.xi     }
638*53ee8cc1Swenshuai.xi     else
639*53ee8cc1Swenshuai.xi     {
640*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x30, 0x10);
641*53ee8cc1Swenshuai.xi         if(bDetect_Main_Std_Only_Flag == 0)
642*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0xF0);
643*53ee8cc1Swenshuai.xi         else
644*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0xD0);
645*53ee8cc1Swenshuai.xi     }
646*53ee8cc1Swenshuai.xi     return TRUE;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
650*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name  : HAL_SIF_SendCmd
651*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description : This routine is to send command to SIF module to do corresponding action.
652*53ee8cc1Swenshuai.xi /// @param <IN>        \b AU_SIF_CMD : u8DecCmd, MS_U8 : comm_arg1, MS_U8 : comm_arg2
653*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
654*53ee8cc1Swenshuai.xi /// @param <RET>       \b MS_U8 :
655*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE  :
656*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SIF_SendCmd(AU_SIF_CMD u8DecCmd,MS_U8 comm_arg1,MS_U8 comm_arg2)657*53ee8cc1Swenshuai.xi MS_U8 HAL_SIF_SendCmd(AU_SIF_CMD u8DecCmd, MS_U8 comm_arg1, MS_U8 comm_arg2)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi     MS_U8 SifDspType;
660*53ee8cc1Swenshuai.xi     MS_U8 u8OrigDecCmd = 0;
661*53ee8cc1Swenshuai.xi     MS_U8 u8Return = 0;
662*53ee8cc1Swenshuai.xi     MS_U16 u16cmd = 0;
663*53ee8cc1Swenshuai.xi 
664*53ee8cc1Swenshuai.xi     switch( u8DecCmd )
665*53ee8cc1Swenshuai.xi     {
666*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_STOP:
667*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_PLAY:
668*53ee8cc1Swenshuai.xi             SifDspType = HAL_SIF_GetDspType();
669*53ee8cc1Swenshuai.xi             if (SifDspType == DSP_DEC) {
670*53ee8cc1Swenshuai.xi                 u8OrigDecCmd = HAL_MAD_GetDecCmd(DVB_Audio_Decoder1);
671*53ee8cc1Swenshuai.xi                 HAL_MAD_SetDecCmd((AU_DVB_DECCMD)(u8DecCmd|(u8OrigDecCmd&0xFE)));
672*53ee8cc1Swenshuai.xi             }
673*53ee8cc1Swenshuai.xi             else if (SifDspType == DSP_SE) {
674*53ee8cc1Swenshuai.xi                 u8OrigDecCmd = HAL_MAD2_GetDecCmd();
675*53ee8cc1Swenshuai.xi                 u16cmd = (u8DecCmd|(u8OrigDecCmd&0xFE)) + 0x100;
676*53ee8cc1Swenshuai.xi                 HAL_MAD2_SetDecCmd((AU_DVB_DECCMD)u16cmd);
677*53ee8cc1Swenshuai.xi             }
678*53ee8cc1Swenshuai.xi             break;
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_HIDEV:
681*53ee8cc1Swenshuai.xi             bHiDev_Flag = (MS_BOOL)comm_arg1;
682*53ee8cc1Swenshuai.xi 
683*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
684*53ee8cc1Swenshuai.xi                 break;
685*53ee8cc1Swenshuai.xi 
686*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_CMD_STANDARD);
687*53ee8cc1Swenshuai.xi             if((u8Return&0xF0)<=SIF_MODE_HIDEV)
688*53ee8cc1Swenshuai.xi             {
689*53ee8cc1Swenshuai.xi                 u8Return = u8Return & 0x0F;
690*53ee8cc1Swenshuai.xi                 if(bHiDev_Flag)
691*53ee8cc1Swenshuai.xi                 {
692*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_STANDARD, u8Return|SIF_MODE_HIDEV);
693*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x01, 0x01);  //Reset FC tracking
694*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1MS(5);
695*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x01, 0x00);
696*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x02, 0x02);  //Enable FC tracking
697*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1MS(1);
698*53ee8cc1Swenshuai.xi                 }
699*53ee8cc1Swenshuai.xi                 else
700*53ee8cc1Swenshuai.xi                 {
701*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x02, 0x00);  //Disable FC tracking
702*53ee8cc1Swenshuai.xi                     AUDIO_DELAY1MS(1);
703*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteByte(AU_CMD_STANDARD, u8Return|SIF_MODE_MONO);
704*53ee8cc1Swenshuai.xi                 }
705*53ee8cc1Swenshuai.xi             }
706*53ee8cc1Swenshuai.xi             break;
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_HIDEV_FILTER_BW_LEVEL:
709*53ee8cc1Swenshuai.xi             hidev_filter_bandwidth_level= comm_arg1;
710*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x30, hidev_filter_bandwidth_level);
711*53ee8cc1Swenshuai.xi             break;
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_RESET_FC_TRACKING:
714*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
715*53ee8cc1Swenshuai.xi                 break;
716*53ee8cc1Swenshuai.xi 
717*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x01, 0x01);
718*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(5);
719*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x01, 0x00);
720*53ee8cc1Swenshuai.xi             break;
721*53ee8cc1Swenshuai.xi 
722*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_FC_TRACKING:
723*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
724*53ee8cc1Swenshuai.xi                 break;
725*53ee8cc1Swenshuai.xi 
726*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE) {
727*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x02, 0x02);
728*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(1);
729*53ee8cc1Swenshuai.xi             }
730*53ee8cc1Swenshuai.xi             else {
731*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x02, 0x00);
732*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(1);
733*53ee8cc1Swenshuai.xi             }
734*53ee8cc1Swenshuai.xi             break;
735*53ee8cc1Swenshuai.xi 
736*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_ADC_FROM_VIF_PATH:
737*53ee8cc1Swenshuai.xi             if (bADCFromVifPathSupported == TRUE) {
738*53ee8cc1Swenshuai.xi                 if ((MS_BOOL)comm_arg1 == TRUE) {
739*53ee8cc1Swenshuai.xi                     if (bADCFromVifPathEnabled == FALSE) {
740*53ee8cc1Swenshuai.xi                         //HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0x10, 0x10); //  enable VIF
741*53ee8cc1Swenshuai.xi                         bADCFromVifPathEnabled = TRUE;
742*53ee8cc1Swenshuai.xi                         sif_clock = AUD_SIF_43M;
743*53ee8cc1Swenshuai.xi                     }
744*53ee8cc1Swenshuai.xi                 }
745*53ee8cc1Swenshuai.xi                 else {
746*53ee8cc1Swenshuai.xi                     if (bADCFromVifPathEnabled == TRUE) {
747*53ee8cc1Swenshuai.xi                         //HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0x10, 0x00); //  disalbe VIF
748*53ee8cc1Swenshuai.xi                         bADCFromVifPathEnabled = FALSE;
749*53ee8cc1Swenshuai.xi                         sif_clock = AUD_SIF_48M;
750*53ee8cc1Swenshuai.xi                     }
751*53ee8cc1Swenshuai.xi                 }
752*53ee8cc1Swenshuai.xi             }
753*53ee8cc1Swenshuai.xi             break;
754*53ee8cc1Swenshuai.xi 
755*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_SIFFIFO_MODE:
756*53ee8cc1Swenshuai.xi             // 2-stage or 4-stage SIF FIFO Mode.
757*53ee8cc1Swenshuai.xi             break;
758*53ee8cc1Swenshuai.xi 
759*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_CHANNEL:
760*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE)
761*53ee8cc1Swenshuai.xi             {
762*53ee8cc1Swenshuai.xi                 if (HAL_SIF_SendCmd(AU_SIF_CMD_GET_ADC_FROM_VIF_PATH, 0, 0) == TRUE) // VIF mode
763*53ee8cc1Swenshuai.xi                 {
764*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x70, 0x00);
765*53ee8cc1Swenshuai.xi 
766*53ee8cc1Swenshuai.xi                     if (sif_clock == AUD_SIF_42M)
767*53ee8cc1Swenshuai.xi                     {
768*53ee8cc1Swenshuai.xi                         HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x20); // SIF CLK: 42MHZ
769*53ee8cc1Swenshuai.xi                     }
770*53ee8cc1Swenshuai.xi                     else if (sif_clock == AUD_SIF_43M)
771*53ee8cc1Swenshuai.xi                     {
772*53ee8cc1Swenshuai.xi                         HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x00); // SIF CLK: 43MHZ
773*53ee8cc1Swenshuai.xi                     }
774*53ee8cc1Swenshuai.xi                     else if (sif_clock == AUD_SIF_44M)
775*53ee8cc1Swenshuai.xi                     {
776*53ee8cc1Swenshuai.xi                         HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x30); // SIF CLK: 44MHZ
777*53ee8cc1Swenshuai.xi                     }
778*53ee8cc1Swenshuai.xi                 }
779*53ee8cc1Swenshuai.xi                 else // SIF mode
780*53ee8cc1Swenshuai.xi                 {
781*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x70, 0x40); // SIF CLK: 48MHZ
782*53ee8cc1Swenshuai.xi                 }
783*53ee8cc1Swenshuai.xi             }
784*53ee8cc1Swenshuai.xi             break;
785*53ee8cc1Swenshuai.xi 
786*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_AUTO_MUTE:
787*53ee8cc1Swenshuai.xi             gAutoMute= (MS_BOOL)comm_arg1;
788*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_MODE1, 0x80, ((MS_U8)gAutoMute<<7));
789*53ee8cc1Swenshuai.xi             break;
790*53ee8cc1Swenshuai.xi 
791*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_AUTO_SOUNDMODE:
792*53ee8cc1Swenshuai.xi             gAutoSoundmode= (MS_BOOL)comm_arg1;
793*53ee8cc1Swenshuai.xi             break;
794*53ee8cc1Swenshuai.xi 
795*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_BEEPER_FUNCTION:
796*53ee8cc1Swenshuai.xi             beeper_enable = (MS_BOOL)comm_arg1;
797*53ee8cc1Swenshuai.xi             if(beeper_enable)
798*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_TONE, 0x80, 0x80);
799*53ee8cc1Swenshuai.xi             else
800*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_TONE, 0x80, 0x00);
801*53ee8cc1Swenshuai.xi 
802*53ee8cc1Swenshuai.xi             break;
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_BEEPER_TONE:
805*53ee8cc1Swenshuai.xi             // tone = comm_arg1;
806*53ee8cc1Swenshuai.xi             // volume = comm_arg2;
807*53ee8cc1Swenshuai.xi             ///////////////////////////////////////////////////////////////////////////////////
808*53ee8cc1Swenshuai.xi             //Volume control.
809*53ee8cc1Swenshuai.xi             //Gain setting = 0db _ VOL*L0 dB (0db ~ -114db)
810*53ee8cc1Swenshuai.xi             //VOL = 0 ~ 11 (+12~+1db)
811*53ee8cc1Swenshuai.xi             //VOL = 12 (0db)
812*53ee8cc1Swenshuai.xi             //VOL = 13 ~ 126 (-1 ~ -114db)
813*53ee8cc1Swenshuai.xi             //VOL = 127, mute
814*53ee8cc1Swenshuai.xi             ///////////////////////////////////////////////////////////////////////////////////
815*53ee8cc1Swenshuai.xi             //REG_2D2E[6:0]: beeper tone frequency (maximum 32 step(4KHz))
816*53ee8cc1Swenshuai.xi             //0x01: 125Hz
817*53ee8cc1Swenshuai.xi             //0x02: 250Hz
818*53ee8cc1Swenshuai.xi             //...
819*53ee8cc1Swenshuai.xi             //0x08: 1kHz
820*53ee8cc1Swenshuai.xi             //...
821*53ee8cc1Swenshuai.xi             //0x11: 2kHz
822*53ee8cc1Swenshuai.xi             //...
823*53ee8cc1Swenshuai.xi             //0x19: 3kHz
824*53ee8cc1Swenshuai.xi             //...
825*53ee8cc1Swenshuai.xi             //0x21: 4kHz
826*53ee8cc1Swenshuai.xi             ///////////////////////////////////////////////////////////////////////////////////
827*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_TONE, 0x7F, comm_arg1);
828*53ee8cc1Swenshuai.xi             break;
829*53ee8cc1Swenshuai.xi 
830*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_STD:
831*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD, 0x0f, comm_arg1);
832*53ee8cc1Swenshuai.xi             break;
833*53ee8cc1Swenshuai.xi 
834*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_SUB_CARRIER_STD:
835*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, comm_arg1);
836*53ee8cc1Swenshuai.xi             break;
837*53ee8cc1Swenshuai.xi 
838*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_CARRIER_DEBOUNCE:
839*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x80, comm_arg1);
840*53ee8cc1Swenshuai.xi             break;
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_SIF_SYNTHESIZER:
843*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_AUDIO_INPUT_CFG , 0x04, comm_arg2);
844*53ee8cc1Swenshuai.xi             break;
845*53ee8cc1Swenshuai.xi #if 1
846*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_ENABLE_AGC:
847*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE) {
848*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x01, 0x01);
849*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(3);
850*53ee8cc1Swenshuai.xi             }
851*53ee8cc1Swenshuai.xi             else {
852*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x01, 0x00);
853*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(3);
854*53ee8cc1Swenshuai.xi             }
855*53ee8cc1Swenshuai.xi             break;
856*53ee8cc1Swenshuai.xi 
857*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_RESET_AGC:
858*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x02, 0x02);
859*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(3);
860*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x02, 0x00);
861*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(3);
862*53ee8cc1Swenshuai.xi             break;
863*53ee8cc1Swenshuai.xi 
864*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_STANDARD_RESET:
865*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(AU_CMD_STANDARD, 0x00);  //Clear SIF Carrier1 bit
866*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_PFIRBANDWIDTH, 0x02, 0x00);  //Disable FC tracking
867*53ee8cc1Swenshuai.xi             AUDIO_DELAY1MS(10);
868*53ee8cc1Swenshuai.xi             break;
869*53ee8cc1Swenshuai.xi #endif
870*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_DK123_MONITOR:
871*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE) {
872*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x08, 0x08);
873*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(3);
874*53ee8cc1Swenshuai.xi             }
875*53ee8cc1Swenshuai.xi             else {
876*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x08, 0x00);
877*53ee8cc1Swenshuai.xi                 AUDIO_DELAY1MS(3);
878*53ee8cc1Swenshuai.xi             }
879*53ee8cc1Swenshuai.xi             break;
880*53ee8cc1Swenshuai.xi 
881*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_DETECT_MAIN_STD_ONLY:
882*53ee8cc1Swenshuai.xi             bDetect_Main_Std_Only_Flag = (MS_BOOL)comm_arg1;
883*53ee8cc1Swenshuai.xi             break;
884*53ee8cc1Swenshuai.xi 
885*53ee8cc1Swenshuai.xi         // GET INFO
886*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_HIDEV_ENABLE:
887*53ee8cc1Swenshuai.xi             u8Return = (MS_U8)bHiDev_Flag;
888*53ee8cc1Swenshuai.xi             break;
889*53ee8cc1Swenshuai.xi 
890*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_HIDEV_FILTER_BW_LEVEL:
891*53ee8cc1Swenshuai.xi             u8Return = (MS_U8)hidev_filter_bandwidth_level;
892*53ee8cc1Swenshuai.xi             break;
893*53ee8cc1Swenshuai.xi 
894*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_ADC_FROM_VIF_PATH:
895*53ee8cc1Swenshuai.xi             u8Return = (MS_U8)bADCFromVifPathEnabled;
896*53ee8cc1Swenshuai.xi             break;
897*53ee8cc1Swenshuai.xi 
898*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_FM_A2_MODE_STATUS:
899*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
900*53ee8cc1Swenshuai.xi             {
901*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("DSP type not palsum\n"));
902*53ee8cc1Swenshuai.xi                 break;
903*53ee8cc1Swenshuai.xi             }
904*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_MODE1);
905*53ee8cc1Swenshuai.xi             break;
906*53ee8cc1Swenshuai.xi 
907*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_BTSC_MODE_STATUS:
908*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_BTSC) {
909*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("DSP type not btsc\n"));
910*53ee8cc1Swenshuai.xi                 break;
911*53ee8cc1Swenshuai.xi             }
912*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_MODE1);
913*53ee8cc1Swenshuai.xi             break;
914*53ee8cc1Swenshuai.xi 
915*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_NICAM_MODE_STATUS:
916*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) != AU_SIF_PALSUM)
917*53ee8cc1Swenshuai.xi             {
918*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("DSP type not palsum\n"));
919*53ee8cc1Swenshuai.xi                 break;
920*53ee8cc1Swenshuai.xi             }
921*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_MODE2);
922*53ee8cc1Swenshuai.xi             break;
923*53ee8cc1Swenshuai.xi 
924*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_STANDARD_STATUS:
925*53ee8cc1Swenshuai.xi             if ((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM)
926*53ee8cc1Swenshuai.xi             {
927*53ee8cc1Swenshuai.xi                 u8Return = HAL_AUDIO_ReadReg(AU_STATUS_STANDARD);
928*53ee8cc1Swenshuai.xi             }
929*53ee8cc1Swenshuai.xi             else if ((HAL_SIF_GetDspCodeType()) == AU_SIF_BTSC)
930*53ee8cc1Swenshuai.xi             {
931*53ee8cc1Swenshuai.xi                 u8Return = AU_SYS_M_BTSC;
932*53ee8cc1Swenshuai.xi             }
933*53ee8cc1Swenshuai.xi             else
934*53ee8cc1Swenshuai.xi             {
935*53ee8cc1Swenshuai.xi                 DBG_SIF(printf("DSP type not SIF \n"));
936*53ee8cc1Swenshuai.xi                 return FALSE;
937*53ee8cc1Swenshuai.xi             }
938*53ee8cc1Swenshuai.xi             break;
939*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_STANDARD_CMD:
940*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_CMD_STANDARD);
941*53ee8cc1Swenshuai.xi             break;
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_NSR_CMD:
944*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_DBG_CMD, 0xFF, 0x3C);
945*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_DBG_DATA_H, 0xFF, 0x00);
946*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_DBG_DATA_M, 0xFF, 0x00);
947*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_DBG_DATA_L, 0xFF, 0x00);
948*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_DBG_H);
949*53ee8cc1Swenshuai.xi             break;
950*53ee8cc1Swenshuai.xi 
951*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_AMP_CMD:
952*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(AU_CMD_DBG_CMD, 0xFF, 0x30);
953*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_DBG_H);
954*53ee8cc1Swenshuai.xi             u8Return = HAL_AUDIO_ReadReg(AU_STATUS_DBG_M);
955*53ee8cc1Swenshuai.xi             break;
956*53ee8cc1Swenshuai.xi 
957*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_GET_VIF_PATCH_ENABLE:
958*53ee8cc1Swenshuai.xi             u8Return = (MS_U8)vif_patch_flag;
959*53ee8cc1Swenshuai.xi             break;
960*53ee8cc1Swenshuai.xi 
961*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_SIF_SHIFT_CLK:
962*53ee8cc1Swenshuai.xi             if (HAL_SIF_SendCmd(AU_SIF_CMD_GET_ADC_FROM_VIF_PATH, 0, 0) == TRUE) // VIF mode
963*53ee8cc1Swenshuai.xi             {
964*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x70, 0x00);
965*53ee8cc1Swenshuai.xi 
966*53ee8cc1Swenshuai.xi                 if (comm_arg1 == 0x00)
967*53ee8cc1Swenshuai.xi                 {
968*53ee8cc1Swenshuai.xi                     sif_clock = AUD_SIF_42M;
969*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x20); // SIF CLK: 42MHZ
970*53ee8cc1Swenshuai.xi                 }
971*53ee8cc1Swenshuai.xi                 else if (comm_arg1 == 0x01)
972*53ee8cc1Swenshuai.xi                 {
973*53ee8cc1Swenshuai.xi                     sif_clock = AUD_SIF_43M;
974*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x00); // SIF CLK: 43MHZ
975*53ee8cc1Swenshuai.xi                 }
976*53ee8cc1Swenshuai.xi                 else if (comm_arg1 == 0x02)
977*53ee8cc1Swenshuai.xi                 {
978*53ee8cc1Swenshuai.xi                     sif_clock = AUD_SIF_44M;
979*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(AU_CMD_AGC, 0x30, 0x30); // SIF CLK: 44MHZ
980*53ee8cc1Swenshuai.xi                 }
981*53ee8cc1Swenshuai.xi                 HAL_SIF_SetSystem(sifDspCodeType);
982*53ee8cc1Swenshuai.xi             }
983*53ee8cc1Swenshuai.xi             break;
984*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_FMTX_SET_PREEMP:
985*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE)  // Pre-emphasis coefficient for NTSC
986*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD, 0x10, 0x10);
987*53ee8cc1Swenshuai.xi             else // Pre-emphasis coefficient for PAL
988*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD, 0x10, 0x00);
989*53ee8cc1Swenshuai.xi             break;
990*53ee8cc1Swenshuai.xi 
991*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_ENC_CMD:
992*53ee8cc1Swenshuai.xi             if ((MS_BOOL)comm_arg1 == TRUE)  //enable data_IO for SIF_Enc
993*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD+1, 0x80, 0x80);
994*53ee8cc1Swenshuai.xi             else //disable data_IO for SIF_Enc
995*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(AU_CMD_STANDARD+1, 0x80, 0x00);
996*53ee8cc1Swenshuai.xi             break;
997*53ee8cc1Swenshuai.xi 
998*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_ENC_Input_attenuation:
999*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_ATVEnc_input_attenuation_ADDR,  ((comm_arg1&0xFF)<<16)+((comm_arg2&0xFF)<<8));
1000*53ee8cc1Swenshuai.xi             break;
1001*53ee8cc1Swenshuai.xi 
1002*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_ENC_Output_scaling:
1003*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_ATVEnc_output_scaling_ADDR,  ((comm_arg1&0xFF)<<16)+((comm_arg2&0xFF)<<8));
1004*53ee8cc1Swenshuai.xi             break;
1005*53ee8cc1Swenshuai.xi 
1006*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_BTSC_Enc_M_Gain:
1007*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_BTSCEnc_output_M_gain_ADDR,  ((comm_arg1&0xFF)<<16)+((comm_arg2&0xFF)<<8));
1008*53ee8cc1Swenshuai.xi             break;
1009*53ee8cc1Swenshuai.xi 
1010*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_BTSC_Enc_D_Gain:
1011*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_BTSCEnc_output_D_gain_ADDR,  ((comm_arg1&0xFF)<<16)+((comm_arg2&0xFF)<<8));
1012*53ee8cc1Swenshuai.xi             break;
1013*53ee8cc1Swenshuai.xi 
1014*53ee8cc1Swenshuai.xi         case AU_SIF_CMD_SET_BTSC_Enc_SAP_Gain:
1015*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(DSP2XboxAddr_BTSCEnc_output_SAP_gain_ADDR,  ((comm_arg1&0xFF)<<16)+((comm_arg2&0xFF)<<8));
1016*53ee8cc1Swenshuai.xi             break;
1017*53ee8cc1Swenshuai.xi         default:
1018*53ee8cc1Swenshuai.xi             break;
1019*53ee8cc1Swenshuai.xi     }
1020*53ee8cc1Swenshuai.xi     return u8Return;
1021*53ee8cc1Swenshuai.xi }
1022*53ee8cc1Swenshuai.xi 
HAL_SIF_AccessThreshold(AUDIO_SIF_SYSTEM_TYPE rw_standard_type,AUDIO_SIF_THRESHOLD_TYPE u8Threshold_type,MS_U16 u16Value)1023*53ee8cc1Swenshuai.xi MS_U32 HAL_SIF_AccessThreshold(AUDIO_SIF_SYSTEM_TYPE rw_standard_type, AUDIO_SIF_THRESHOLD_TYPE  u8Threshold_type, MS_U16 u16Value)
1024*53ee8cc1Swenshuai.xi {
1025*53ee8cc1Swenshuai.xi     MS_BOOL  writethd;
1026*53ee8cc1Swenshuai.xi     MS_U16 standard_type;
1027*53ee8cc1Swenshuai.xi 
1028*53ee8cc1Swenshuai.xi     writethd = HINIBBLE(rw_standard_type) ;
1029*53ee8cc1Swenshuai.xi     standard_type = LONIBBLE(rw_standard_type) ;
1030*53ee8cc1Swenshuai.xi 
1031*53ee8cc1Swenshuai.xi     if (((HAL_SIF_GetDspCodeType()) == AU_SIF_PALSUM) &&( standard_type >= BTSC_STANDARD))
1032*53ee8cc1Swenshuai.xi         return FALSE;
1033*53ee8cc1Swenshuai.xi     else if(((HAL_SIF_GetDspCodeType()) == AU_SIF_BTSC) &&( standard_type != BTSC_STANDARD))
1034*53ee8cc1Swenshuai.xi         return FALSE;
1035*53ee8cc1Swenshuai.xi 
1036*53ee8cc1Swenshuai.xi     if (u16Value > 0x7fff)
1037*53ee8cc1Swenshuai.xi     {
1038*53ee8cc1Swenshuai.xi         DBG_SIF(printf("Threshold value is too large\n"));
1039*53ee8cc1Swenshuai.xi         return FALSE;
1040*53ee8cc1Swenshuai.xi     }
1041*53ee8cc1Swenshuai.xi 
1042*53ee8cc1Swenshuai.xi     if (writethd)
1043*53ee8cc1Swenshuai.xi     {
1044*53ee8cc1Swenshuai.xi         if (HAL_SIF_GetDspType() == DSP_DEC)
1045*53ee8cc1Swenshuai.xi             HAL_MAD_Write_DSP_sram(au_pal_sys_threshold[standard_type]+u8Threshold_type,((MS_U32)u16Value)<<8, DSP_MEM_TYPE_PM);
1046*53ee8cc1Swenshuai.xi         else if (HAL_SIF_GetDspType() == DSP_SE)
1047*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(au_pal_sys_threshold[standard_type]+u8Threshold_type,((MS_U32)u16Value)<<8);
1048*53ee8cc1Swenshuai.xi         return TRUE;
1049*53ee8cc1Swenshuai.xi     }
1050*53ee8cc1Swenshuai.xi     else
1051*53ee8cc1Swenshuai.xi     {
1052*53ee8cc1Swenshuai.xi         if (HAL_SIF_GetDspType() == DSP_DEC)
1053*53ee8cc1Swenshuai.xi             return (HAL_MAD_Read_DSP_sram((au_pal_sys_threshold[standard_type]+u8Threshold_type),DSP_MEM_TYPE_PM));
1054*53ee8cc1Swenshuai.xi         else // if (HAL_SIF_GetDspType() == DSP_SE)
1055*53ee8cc1Swenshuai.xi             return (HAL_MAD2_Read_DSP_Xbox(au_pal_sys_threshold[standard_type]+u8Threshold_type));
1056*53ee8cc1Swenshuai.xi     }
1057*53ee8cc1Swenshuai.xi }
1058*53ee8cc1Swenshuai.xi 
HAL_SIF_GetOrginalGain(void)1059*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_GetOrginalGain(void)
1060*53ee8cc1Swenshuai.xi {
1061*53ee8cc1Swenshuai.xi     MS_U8  i;
1062*53ee8cc1Swenshuai.xi 
1063*53ee8cc1Swenshuai.xi     if (g_AudioVars2 == NULL)
1064*53ee8cc1Swenshuai.xi     {
1065*53ee8cc1Swenshuai.xi         DBG_SIF(printf("%s() : invalid g_AudioVars2!\n", __FUNCTION__));
1066*53ee8cc1Swenshuai.xi         return FALSE;
1067*53ee8cc1Swenshuai.xi     }
1068*53ee8cc1Swenshuai.xi 
1069*53ee8cc1Swenshuai.xi     if ((HAL_SIF_GetDspCodeType())== AU_SIF_BTSC)
1070*53ee8cc1Swenshuai.xi     {
1071*53ee8cc1Swenshuai.xi         for(i = 0; i< sizeof(SIF_PM_GAIN_TBL_BTSC)/(sizeof(MS_U16)*2); i++)
1072*53ee8cc1Swenshuai.xi         {
1073*53ee8cc1Swenshuai.xi             if (HAL_SIF_GetDspType() == DSP_DEC) {
1074*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_gain_0[i] = (HAL_MAD_Read_DSP_sram (SIF_PM_GAIN_TBL_BTSC[i][0],DSP_MEM_TYPE_PM) >> 8);
1075*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_shift_0[i] = HAL_MAD_Read_DSP_sram (SIF_PM_GAIN_TBL_BTSC[i][1],DSP_MEM_TYPE_PM);
1076*53ee8cc1Swenshuai.xi             }
1077*53ee8cc1Swenshuai.xi             else if (HAL_SIF_GetDspType() == DSP_SE) {
1078*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_gain_0[i] = (HAL_MAD2_Read_DSP_Xbox (SIF_PM_GAIN_TBL_BTSC[i][0]) >> 8);
1079*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_shift_0[i] = HAL_MAD2_Read_DSP_Xbox (SIF_PM_GAIN_TBL_BTSC[i][1]);
1080*53ee8cc1Swenshuai.xi             }
1081*53ee8cc1Swenshuai.xi         }
1082*53ee8cc1Swenshuai.xi     }
1083*53ee8cc1Swenshuai.xi     else if ((HAL_SIF_GetDspCodeType())== AU_SIF_PALSUM)
1084*53ee8cc1Swenshuai.xi     {
1085*53ee8cc1Swenshuai.xi         for(i = 0; i< sizeof(SIF_PM_GAIN_TBL_PAL)/(sizeof(MS_U16)*2); i++)
1086*53ee8cc1Swenshuai.xi         {
1087*53ee8cc1Swenshuai.xi             if (HAL_SIF_GetDspType() == DSP_DEC) {
1088*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_gain_0[i] = (HAL_MAD_Read_DSP_sram (SIF_PM_GAIN_TBL_PAL[i][0],DSP_MEM_TYPE_PM) >> 8);
1089*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_shift_0[i] = HAL_MAD_Read_DSP_sram (SIF_PM_GAIN_TBL_PAL[i][1],DSP_MEM_TYPE_PM);
1090*53ee8cc1Swenshuai.xi             }
1091*53ee8cc1Swenshuai.xi             else if (HAL_SIF_GetDspType() == DSP_SE) {
1092*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_gain_0[i] = (HAL_MAD2_Read_DSP_Xbox (SIF_PM_GAIN_TBL_PAL[i][0]) >> 8);
1093*53ee8cc1Swenshuai.xi                 g_AudioVars2->sif_shift_0[i] = HAL_MAD2_Read_DSP_Xbox (SIF_PM_GAIN_TBL_PAL[i][1]);
1094*53ee8cc1Swenshuai.xi             }
1095*53ee8cc1Swenshuai.xi         }
1096*53ee8cc1Swenshuai.xi     }
1097*53ee8cc1Swenshuai.xi     else if ((HAL_SIF_GetDspCodeType())== AU_SIF_EIAJ)
1098*53ee8cc1Swenshuai.xi     {
1099*53ee8cc1Swenshuai.xi     }
1100*53ee8cc1Swenshuai.xi     else
1101*53ee8cc1Swenshuai.xi     {
1102*53ee8cc1Swenshuai.xi         DBG_SIF(printf("\r\n get original gain DSP type error!! \r\n"));
1103*53ee8cc1Swenshuai.xi         return FALSE;
1104*53ee8cc1Swenshuai.xi     }
1105*53ee8cc1Swenshuai.xi     return TRUE;
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi 
HAL_SIF_SetPrescale(MS_U8 u8Type,int db_value)1108*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_SetPrescale(MS_U8 u8Type,int db_value)
1109*53ee8cc1Swenshuai.xi {
1110*53ee8cc1Swenshuai.xi     MS_U8  i, i_min, i_max;
1111*53ee8cc1Swenshuai.xi     MS_U8 u8DspCodeType;
1112*53ee8cc1Swenshuai.xi     int  normalized_db;
1113*53ee8cc1Swenshuai.xi     MS_U16 sif_shift, sif_gain, shift_value;
1114*53ee8cc1Swenshuai.xi     MS_U32 gain;
1115*53ee8cc1Swenshuai.xi 
1116*53ee8cc1Swenshuai.xi     u8DspCodeType=HAL_SIF_GetDspCodeType();
1117*53ee8cc1Swenshuai.xi     if (db_value == 99)
1118*53ee8cc1Swenshuai.xi     {
1119*53ee8cc1Swenshuai.xi         if (u8DspCodeType == AU_SIF_BTSC)
1120*53ee8cc1Swenshuai.xi         {
1121*53ee8cc1Swenshuai.xi             if (HAL_SIF_GetDspType() == DSP_DEC) {
1122*53ee8cc1Swenshuai.xi                 HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_BTSC[u8Type][0],0, DSP_MEM_TYPE_PM);
1123*53ee8cc1Swenshuai.xi                 HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_BTSC[u8Type][1],0, DSP_MEM_TYPE_PM);
1124*53ee8cc1Swenshuai.xi             }
1125*53ee8cc1Swenshuai.xi             else if (HAL_SIF_GetDspType() == DSP_SE) {
1126*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_BTSC[u8Type][0],0);
1127*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_BTSC[u8Type][1],0);
1128*53ee8cc1Swenshuai.xi             }
1129*53ee8cc1Swenshuai.xi         }
1130*53ee8cc1Swenshuai.xi         else if (u8DspCodeType == AU_SIF_PALSUM)
1131*53ee8cc1Swenshuai.xi         {
1132*53ee8cc1Swenshuai.xi             if (HAL_SIF_GetDspType() == DSP_DEC) {
1133*53ee8cc1Swenshuai.xi                 HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_PAL[u8Type][0],0, DSP_MEM_TYPE_PM);
1134*53ee8cc1Swenshuai.xi                 HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_PAL[u8Type][1],0, DSP_MEM_TYPE_PM);
1135*53ee8cc1Swenshuai.xi             }
1136*53ee8cc1Swenshuai.xi             else if (HAL_SIF_GetDspType() == DSP_SE) {
1137*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_PAL[u8Type][0],0);
1138*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_PAL[u8Type][1],0);
1139*53ee8cc1Swenshuai.xi             }
1140*53ee8cc1Swenshuai.xi         }
1141*53ee8cc1Swenshuai.xi         else if (u8DspCodeType == AU_SIF_EIAJ)
1142*53ee8cc1Swenshuai.xi         {
1143*53ee8cc1Swenshuai.xi             //MDrv_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_EIAJ[u8Type][0],0, PM);
1144*53ee8cc1Swenshuai.xi             //MDrv_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_EIAJ[u8Type][1],0, PM);
1145*53ee8cc1Swenshuai.xi         }
1146*53ee8cc1Swenshuai.xi         else
1147*53ee8cc1Swenshuai.xi         {
1148*53ee8cc1Swenshuai.xi             DBG_SIF(printf("\r\n set prescale DSP type error!! %x \r\n",u8DspCodeType));
1149*53ee8cc1Swenshuai.xi             return FALSE;
1150*53ee8cc1Swenshuai.xi         }
1151*53ee8cc1Swenshuai.xi         return TRUE;
1152*53ee8cc1Swenshuai.xi     }
1153*53ee8cc1Swenshuai.xi 
1154*53ee8cc1Swenshuai.xi     if (g_AudioVars2 != NULL)
1155*53ee8cc1Swenshuai.xi     {
1156*53ee8cc1Swenshuai.xi         sif_gain = g_AudioVars2->sif_gain_0[u8Type];
1157*53ee8cc1Swenshuai.xi         sif_shift = g_AudioVars2->sif_shift_0[u8Type];
1158*53ee8cc1Swenshuai.xi     }
1159*53ee8cc1Swenshuai.xi     else
1160*53ee8cc1Swenshuai.xi     {
1161*53ee8cc1Swenshuai.xi         sif_gain = 0x7FFF;
1162*53ee8cc1Swenshuai.xi         sif_shift = 0x0000;
1163*53ee8cc1Swenshuai.xi     }
1164*53ee8cc1Swenshuai.xi     //printf("\r\n dB_value *4 is %d  \r\n ",(MS_U16)db_value);
1165*53ee8cc1Swenshuai.xi     //printf("\r\n original_sif_gain is %x",(MS_U16)g_AudioVars2->sif_gain);
1166*53ee8cc1Swenshuai.xi     //printf("\r\n original_sif_shift is %x",(MS_U16)g_AudioVars2->sif_shift);
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi     //read user DB setting
1169*53ee8cc1Swenshuai.xi     i_min = 8/PRESCALE_STEP_ONE_DB-1;
1170*53ee8cc1Swenshuai.xi     i_max = sizeof(PRESCALE_STEP_TBL)/sizeof(MS_U16);
1171*53ee8cc1Swenshuai.xi     //caculate new gain & shift
1172*53ee8cc1Swenshuai.xi     if(db_value>(18*PRESCALE_STEP_ONE_DB))
1173*53ee8cc1Swenshuai.xi     {
1174*53ee8cc1Swenshuai.xi         shift_value = 5;// 3;
1175*53ee8cc1Swenshuai.xi         db_value = 0;
1176*53ee8cc1Swenshuai.xi     }
1177*53ee8cc1Swenshuai.xi     else if (db_value > (12*PRESCALE_STEP_ONE_DB))
1178*53ee8cc1Swenshuai.xi     {
1179*53ee8cc1Swenshuai.xi         shift_value = 5;// 3;
1180*53ee8cc1Swenshuai.xi         db_value = db_value - (18*PRESCALE_STEP_ONE_DB);
1181*53ee8cc1Swenshuai.xi     }
1182*53ee8cc1Swenshuai.xi     else if (db_value > (6*PRESCALE_STEP_ONE_DB))
1183*53ee8cc1Swenshuai.xi     {
1184*53ee8cc1Swenshuai.xi         shift_value = 4;// 2;
1185*53ee8cc1Swenshuai.xi         db_value = db_value - (12*PRESCALE_STEP_ONE_DB);
1186*53ee8cc1Swenshuai.xi     }
1187*53ee8cc1Swenshuai.xi     else if (db_value > 0 )
1188*53ee8cc1Swenshuai.xi     {
1189*53ee8cc1Swenshuai.xi         shift_value = 3;// 1;
1190*53ee8cc1Swenshuai.xi         db_value = db_value - (6*PRESCALE_STEP_ONE_DB);
1191*53ee8cc1Swenshuai.xi     }
1192*53ee8cc1Swenshuai.xi     else if (db_value > (-6*PRESCALE_STEP_ONE_DB) )
1193*53ee8cc1Swenshuai.xi     {
1194*53ee8cc1Swenshuai.xi         shift_value = 2;//0;
1195*53ee8cc1Swenshuai.xi     }
1196*53ee8cc1Swenshuai.xi     else if (db_value > (-12*PRESCALE_STEP_ONE_DB) )
1197*53ee8cc1Swenshuai.xi     {
1198*53ee8cc1Swenshuai.xi         shift_value = 1;//-1;
1199*53ee8cc1Swenshuai.xi         db_value = db_value + (6*PRESCALE_STEP_ONE_DB);
1200*53ee8cc1Swenshuai.xi     }
1201*53ee8cc1Swenshuai.xi     else
1202*53ee8cc1Swenshuai.xi     {
1203*53ee8cc1Swenshuai.xi         shift_value = 0;//-2;
1204*53ee8cc1Swenshuai.xi         db_value = 0;
1205*53ee8cc1Swenshuai.xi     }
1206*53ee8cc1Swenshuai.xi     gain = 0x7FFF;
1207*53ee8cc1Swenshuai.xi     normalized_db = -db_value;
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi     for(i=i_min;i<i_max;i++)
1210*53ee8cc1Swenshuai.xi     {
1211*53ee8cc1Swenshuai.xi         if(normalized_db & (1<<(i-i_min)))
1212*53ee8cc1Swenshuai.xi         {
1213*53ee8cc1Swenshuai.xi             gain = ((MS_U32)PRESCALE_STEP_TBL[i])*((MS_U32)gain);
1214*53ee8cc1Swenshuai.xi             gain = gain>>15;
1215*53ee8cc1Swenshuai.xi         }
1216*53ee8cc1Swenshuai.xi     }
1217*53ee8cc1Swenshuai.xi     // check for
1218*53ee8cc1Swenshuai.xi     while ((sif_shift+shift_value) <2)
1219*53ee8cc1Swenshuai.xi     {
1220*53ee8cc1Swenshuai.xi         gain = (0x4000*gain);
1221*53ee8cc1Swenshuai.xi         gain = gain>>15;
1222*53ee8cc1Swenshuai.xi         shift_value++;
1223*53ee8cc1Swenshuai.xi     }
1224*53ee8cc1Swenshuai.xi 
1225*53ee8cc1Swenshuai.xi     gain = (gain*((MS_U32)sif_gain))>>15;
1226*53ee8cc1Swenshuai.xi     sif_gain = (MS_U16) gain;
1227*53ee8cc1Swenshuai.xi     sif_shift = sif_shift+shift_value-2;
1228*53ee8cc1Swenshuai.xi     //set new gain & shift to PM
1229*53ee8cc1Swenshuai.xi     if (u8DspCodeType   == AU_SIF_BTSC)
1230*53ee8cc1Swenshuai.xi     {
1231*53ee8cc1Swenshuai.xi         if (HAL_SIF_GetDspType() == DSP_DEC) {
1232*53ee8cc1Swenshuai.xi             HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_BTSC[u8Type][0], (((MS_U32)sif_gain)<<8), DSP_MEM_TYPE_PM);
1233*53ee8cc1Swenshuai.xi             HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_BTSC[u8Type][1], (MS_U32)sif_shift, DSP_MEM_TYPE_PM);
1234*53ee8cc1Swenshuai.xi         }
1235*53ee8cc1Swenshuai.xi         else if (HAL_SIF_GetDspType() == DSP_SE) {
1236*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_BTSC[u8Type][0], (((MS_U32)sif_gain)<<8));
1237*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_BTSC[u8Type][1], (MS_U32)sif_shift);
1238*53ee8cc1Swenshuai.xi         }
1239*53ee8cc1Swenshuai.xi     }
1240*53ee8cc1Swenshuai.xi     else if (u8DspCodeType == AU_SIF_PALSUM)
1241*53ee8cc1Swenshuai.xi     {
1242*53ee8cc1Swenshuai.xi         if (HAL_SIF_GetDspType() == DSP_DEC) {
1243*53ee8cc1Swenshuai.xi             HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_PAL[u8Type][0], (((MS_U32)sif_gain)<<8), DSP_MEM_TYPE_PM);
1244*53ee8cc1Swenshuai.xi             HAL_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_PAL[u8Type][1], (MS_U32)sif_shift, DSP_MEM_TYPE_PM);
1245*53ee8cc1Swenshuai.xi         }
1246*53ee8cc1Swenshuai.xi         else if (HAL_SIF_GetDspType() == DSP_SE) {
1247*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_PAL[u8Type][0], (((MS_U32)sif_gain)<<8));
1248*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_Xbox(SIF_PM_GAIN_TBL_PAL[u8Type][1], (MS_U32)sif_shift);
1249*53ee8cc1Swenshuai.xi         }
1250*53ee8cc1Swenshuai.xi     }
1251*53ee8cc1Swenshuai.xi     else if (u8DspCodeType == AU_SIF_EIAJ)
1252*53ee8cc1Swenshuai.xi     {
1253*53ee8cc1Swenshuai.xi         //MDrv_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_EIAJ[u8Type][0],0, PM);
1254*53ee8cc1Swenshuai.xi         //MDrv_MAD_Write_DSP_sram(SIF_PM_GAIN_TBL_EIAJ[u8Type][1],0, PM);
1255*53ee8cc1Swenshuai.xi     }
1256*53ee8cc1Swenshuai.xi     else
1257*53ee8cc1Swenshuai.xi     {
1258*53ee8cc1Swenshuai.xi          DBG_SIF(printf("\r\n set prescale DSP type error!! %x \r\n",u8DspCodeType));
1259*53ee8cc1Swenshuai.xi          return FALSE;
1260*53ee8cc1Swenshuai.xi     }
1261*53ee8cc1Swenshuai.xi     return TRUE;
1262*53ee8cc1Swenshuai.xi }
1263*53ee8cc1Swenshuai.xi 
HAL_SIF_ReLoadCode(AUDIO_DSP_CODE_TYPE dspCodeType)1264*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_ReLoadCode(AUDIO_DSP_CODE_TYPE dspCodeType)
1265*53ee8cc1Swenshuai.xi {
1266*53ee8cc1Swenshuai.xi     if ((HAL_SIF_GetDspCodeType())== dspCodeType)
1267*53ee8cc1Swenshuai.xi             return TRUE;
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi     DBG_SIF(printf("MDrv_SIF_ReLoadCode(u8Type= SIF(%x))\r\n",dspCodeType));
1270*53ee8cc1Swenshuai.xi 
1271*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_CHANNEL, FALSE, NULL); // REset SIF
1272*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_SIF_SYNTHESIZER, FALSE, 0x00); // disable SIF Audio sythesizer & disable DVB fix-sync mode
1273*53ee8cc1Swenshuai.xi 
1274*53ee8cc1Swenshuai.xi     if (HAL_SIF_GetDspType() == DSP_SE)
1275*53ee8cc1Swenshuai.xi     {
1276*53ee8cc1Swenshuai.xi         HAL_AUDIO_AbsWriteMaskByte(0x112CC9, 0x20, 0x20);   //0x112CC8[13] = 1 to IDMA port selection to SE DSP
1277*53ee8cc1Swenshuai.xi 
1278*53ee8cc1Swenshuai.xi         MsOS_DisableInterrupt(E_INT_FIQ_DEC_DSP2UP);
1279*53ee8cc1Swenshuai.xi         // Reset MAD module
1280*53ee8cc1Swenshuai.xi         HAL_MAD2_DisEn_MIUREQ();
1281*53ee8cc1Swenshuai.xi         if(HAL_AUDIO_Alg2ReloadCode(dspCodeType) == TRUE)
1282*53ee8cc1Swenshuai.xi         {
1283*53ee8cc1Swenshuai.xi             HAL_SIF_SetDspCodeType(dspCodeType);
1284*53ee8cc1Swenshuai.xi         }
1285*53ee8cc1Swenshuai.xi         MsOS_EnableInterrupt(E_INT_FIQ_DEC_DSP2UP);
1286*53ee8cc1Swenshuai.xi     }
1287*53ee8cc1Swenshuai.xi 
1288*53ee8cc1Swenshuai.xi     HAL_SIF_GetOrginalGain();
1289*53ee8cc1Swenshuai.xi 
1290*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_CHANNEL, TRUE, NULL);
1291*53ee8cc1Swenshuai.xi     // Enable SIF Audio synthesizer here to prevent reload unstable noise.
1292*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_SIF_SYNTHESIZER, TRUE, 0x04); // enable SIF Audio sythesizer
1293*53ee8cc1Swenshuai.xi 
1294*53ee8cc1Swenshuai.xi     if (dspCodeType == AU_SIF_PALSUM)
1295*53ee8cc1Swenshuai.xi     {
1296*53ee8cc1Swenshuai.xi         HAL_SIF_SendCmd(AU_SIF_CMD_SET_CARRIER_DEBOUNCE, 0x80, NULL);
1297*53ee8cc1Swenshuai.xi         HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_AGC, TRUE, NULL);
1298*53ee8cc1Swenshuai.xi         HAL_SIF_SendCmd(AU_SIF_CMD_DK123_MONITOR, TRUE, NULL);
1299*53ee8cc1Swenshuai.xi     }
1300*53ee8cc1Swenshuai.xi 
1301*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_AUTO_MUTE, FALSE, NULL);
1302*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_AUTO_SOUNDMODE, TRUE, NULL);
1303*53ee8cc1Swenshuai.xi 
1304*53ee8cc1Swenshuai.xi     return TRUE;
1305*53ee8cc1Swenshuai.xi }
1306*53ee8cc1Swenshuai.xi 
HAL_SIF_SetSystem(AUDIO_DSP_CODE_TYPE dspCodeType)1307*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_SetSystem(AUDIO_DSP_CODE_TYPE dspCodeType)
1308*53ee8cc1Swenshuai.xi {
1309*53ee8cc1Swenshuai.xi     sifDspCodeType = dspCodeType;
1310*53ee8cc1Swenshuai.xi     HAL_SIF_ReLoadCode(sifDspCodeType);
1311*53ee8cc1Swenshuai.xi     HAL_SIF_TriggerSifPLL();
1312*53ee8cc1Swenshuai.xi     HAL_SIF_SendCmd(AU_SIF_CMD_ENABLE_CHANNEL, TRUE, NULL);
1313*53ee8cc1Swenshuai.xi     return TRUE;
1314*53ee8cc1Swenshuai.xi }
1315*53ee8cc1Swenshuai.xi 
HAL_SIF_CheckDecSys(En_DVB_decSystemType enDecSystem)1316*53ee8cc1Swenshuai.xi MS_BOOL HAL_SIF_CheckDecSys(En_DVB_decSystemType enDecSystem)
1317*53ee8cc1Swenshuai.xi {
1318*53ee8cc1Swenshuai.xi     AUDIO_DSP_CODE_TYPE dspCodeType1, dspCodeType2;
1319*53ee8cc1Swenshuai.xi     dspCodeType1 = HAL_SIF_GetDspCodeType();
1320*53ee8cc1Swenshuai.xi     dspCodeType2 = HAL_AUDIO_Convert_EnDVBdecSystemType_to_AudioDspCodeType(enDecSystem);
1321*53ee8cc1Swenshuai.xi 
1322*53ee8cc1Swenshuai.xi     if (dspCodeType1 == dspCodeType2)
1323*53ee8cc1Swenshuai.xi         return TRUE;
1324*53ee8cc1Swenshuai.xi     else
1325*53ee8cc1Swenshuai.xi         return FALSE;
1326*53ee8cc1Swenshuai.xi }