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 }