xref: /utopia/UTPA2-700.0.x/modules/audio/hal/mustang/audio/halSOUND.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 #include "regCHIP.h"
104*53ee8cc1Swenshuai.xi #include "drvAUDIO_if.h"
105*53ee8cc1Swenshuai.xi #include "drvAUDIO.h"
106*53ee8cc1Swenshuai.xi #include "halAUDIO.h"
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi // Internal Definition
109*53ee8cc1Swenshuai.xi #include "halSOUND.h"
110*53ee8cc1Swenshuai.xi #include "regAUDIO.h"
111*53ee8cc1Swenshuai.xi #include "halMAD2.h"
112*53ee8cc1Swenshuai.xi 
113*53ee8cc1Swenshuai.xi #include "audio_mbox2.h"
114*53ee8cc1Swenshuai.xi #include "audio_comm2.h"
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi #if (defined ANDROID)
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi   #include <sys/mman.h>
119*53ee8cc1Swenshuai.xi   #include <cutils/ashmem.h>
120*53ee8cc1Swenshuai.xi   #include <cutils/log.h>
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi   #ifndef LOGI // android 4.1 rename LOGx to ALOGx
123*53ee8cc1Swenshuai.xi     #define LOGI ALOGI
124*53ee8cc1Swenshuai.xi   #endif
125*53ee8cc1Swenshuai.xi 
126*53ee8cc1Swenshuai.xi   #ifndef LOGE // android 4.1 rename LOGx to ALOGx
127*53ee8cc1Swenshuai.xi     #define LOGE ALOGE
128*53ee8cc1Swenshuai.xi   #endif
129*53ee8cc1Swenshuai.xi 
130*53ee8cc1Swenshuai.xi   #if(OMX_AUDIO_DEBUG)
131*53ee8cc1Swenshuai.xi     #define HALSOUND_PRINT(fmt, args...)    LOGI("<<android>>      " fmt, ## args)
132*53ee8cc1Swenshuai.xi   #else
133*53ee8cc1Swenshuai.xi     #define HALSOUND_PRINT(fmt, args...)
134*53ee8cc1Swenshuai.xi   #endif
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi   #define HALSOUND_ERROR(fmt, args...)    LOGE("<<android>>      " fmt, ## args)
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi #else
139*53ee8cc1Swenshuai.xi     #ifdef CONFIG_MBOOT //mboot Speed up
140*53ee8cc1Swenshuai.xi         #define HALSOUND_PRINT(fmt, args...)
141*53ee8cc1Swenshuai.xi         #define HALSOUND_ERROR(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
142*53ee8cc1Swenshuai.xi     #else
143*53ee8cc1Swenshuai.xi         #define HALSOUND_PRINT(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
144*53ee8cc1Swenshuai.xi         #define HALSOUND_ERROR(fmt, args...)    printf("[[utopia]]      " fmt, ## args)
145*53ee8cc1Swenshuai.xi     #endif
146*53ee8cc1Swenshuai.xi #endif
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
150*53ee8cc1Swenshuai.xi //  Driver Compiler Options
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi #define DBG_SOUND(msg) //msg
153*53ee8cc1Swenshuai.xi #define MAX_PEQ_BAND  8
154*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
155*53ee8cc1Swenshuai.xi //  Local Defines
156*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
157*53ee8cc1Swenshuai.xi 
158*53ee8cc1Swenshuai.xi 
159*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
160*53ee8cc1Swenshuai.xi //  Local Structures
161*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi 
164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
165*53ee8cc1Swenshuai.xi //  Global Variables
166*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
167*53ee8cc1Swenshuai.xi extern MS_U16 g_BalanceMask;
168*53ee8cc1Swenshuai.xi extern AUDIO_SHARED_VARS2 * g_AudioVars2;
169*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
170*53ee8cc1Swenshuai.xi //  Local Variables
171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
172*53ee8cc1Swenshuai.xi static MS_U32 peq_band_enable = 0xFFFFFFFF;
173*53ee8cc1Swenshuai.xi static MS_U32 peq_band_precision = 0x00000000;
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi const MS_U32  AVC_SOffset_TBL[13]=
176*53ee8cc1Swenshuai.xi {
177*53ee8cc1Swenshuai.xi     0x200000,       // Offset +0 dB, 3.21 format for DSP
178*53ee8cc1Swenshuai.xi     0x23E793,       //        +1 dB
179*53ee8cc1Swenshuai.xi     0x28491D,       //        +2 dB
180*53ee8cc1Swenshuai.xi     0x2D3381,       //        +3 dB
181*53ee8cc1Swenshuai.xi     0x32B771,       //        +4 dB
182*53ee8cc1Swenshuai.xi     0x38E7AA,       //        +5 dB
183*53ee8cc1Swenshuai.xi     0x3FD930,       //        +6 dB
184*53ee8cc1Swenshuai.xi     0x47A39A,       //        +7 dB
185*53ee8cc1Swenshuai.xi     0x50615F,       //        +8 dB
186*53ee8cc1Swenshuai.xi     0x5A3031,       //        +9 dB
187*53ee8cc1Swenshuai.xi     0x653160,       //       +10 dB
188*53ee8cc1Swenshuai.xi     0x718A50,       //       +11 dB
189*53ee8cc1Swenshuai.xi     0x7F64F0,       //       +12 dB
190*53ee8cc1Swenshuai.xi };
191*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
192*53ee8cc1Swenshuai.xi //  Debug Functions
193*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
194*53ee8cc1Swenshuai.xi 
195*53ee8cc1Swenshuai.xi 
196*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
197*53ee8cc1Swenshuai.xi //  Local Functions
198*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
199*53ee8cc1Swenshuai.xi 
200*53ee8cc1Swenshuai.xi 
201*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
202*53ee8cc1Swenshuai.xi //  Global Functions
203*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
206*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_Init() @@VVV
207*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is the initialization for Audio sound effect module.
208*53ee8cc1Swenshuai.xi /// @param <IN>        \b InitTbl    : Sound effect  initial table
209*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
210*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
211*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
212*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_Init(void)213*53ee8cc1Swenshuai.xi void HAL_SOUND_Init(void)
214*53ee8cc1Swenshuai.xi {
215*53ee8cc1Swenshuai.xi     // Toggle  to initialize DAC DATA SRAM.
216*53ee8cc1Swenshuai.xi     HAL_AUDIO_SeWriteMaskByte(0x2B40,0x02,0x02);
217*53ee8cc1Swenshuai.xi     AUDIO_DELAY1US(1000);
218*53ee8cc1Swenshuai.xi     HAL_AUDIO_SeWriteMaskByte(0x2B40,0x02,0x00);
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi     //reset DSP
221*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte( REG_SE_IDMA_CTRL0, 0x02);
222*53ee8cc1Swenshuai.xi     AUDIO_DELAY1US(2000);
223*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte( REG_SE_IDMA_CTRL0, 0x03);
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi }
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
228*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_Init2
229*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_Init2(void)230*53ee8cc1Swenshuai.xi void HAL_SOUND_Init2(void)
231*53ee8cc1Swenshuai.xi {
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi     HAL_SOUND_Init();
234*53ee8cc1Swenshuai.xi     HAL_AUDSP_DspLoadCode(AU_DVB2_NONE);
235*53ee8cc1Swenshuai.xi     //HAL_AUDSP_DspLoadCode(AU_SND_EFFECT);
236*53ee8cc1Swenshuai.xi     HAL_AUDIO_SeSystemLoadCode();  // Do nothing in single DSP chip
237*53ee8cc1Swenshuai.xi }
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
240*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetMute() @@VVV
241*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set audio u8Path S/W mute.
242*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    : for audio u8Path0 ~ u8Path6
243*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Mute
244*53ee8cc1Swenshuai.xi ///                                                    FALSE--Unmute
245*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
246*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
247*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
248*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetMute(MS_U8 u8Path,MS_BOOL bEnable)249*53ee8cc1Swenshuai.xi void HAL_SOUND_SetMute(MS_U8 u8Path, MS_BOOL bEnable)
250*53ee8cc1Swenshuai.xi {
251*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL_SOUND_SetMute = %x\n", (MS_U8)bEnable ));
252*53ee8cc1Swenshuai.xi 
253*53ee8cc1Swenshuai.xi     switch(u8Path)
254*53ee8cc1Swenshuai.xi     {
255*53ee8cc1Swenshuai.xi         case AUDIO_PATH_SW_DMA_0:
256*53ee8cc1Swenshuai.xi         case AUDIO_PATH_SW_DMA_1:
257*53ee8cc1Swenshuai.xi         {
258*53ee8cc1Swenshuai.xi             if(bEnable == TRUE)
259*53ee8cc1Swenshuai.xi             {
260*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(M2S_MBOX_SW_DMA_READER_DDR_Ctrl, 0x8000, 0x8000);    // bit 15
261*53ee8cc1Swenshuai.xi             }
262*53ee8cc1Swenshuai.xi             else
263*53ee8cc1Swenshuai.xi             {
264*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskReg(M2S_MBOX_SW_DMA_READER_DDR_Ctrl, 0x8000, 0x0000);
265*53ee8cc1Swenshuai.xi             }
266*53ee8cc1Swenshuai.xi         }
267*53ee8cc1Swenshuai.xi         break;
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi         case AUDIO_PATH_HW_DMA_0:
270*53ee8cc1Swenshuai.xi         case AUDIO_PATH_HW_DMA_1:
271*53ee8cc1Swenshuai.xi         {
272*53ee8cc1Swenshuai.xi             if(bEnable)
273*53ee8cc1Swenshuai.xi             {
274*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_FRC, 0x02, 0x02);
275*53ee8cc1Swenshuai.xi             }
276*53ee8cc1Swenshuai.xi             else
277*53ee8cc1Swenshuai.xi             {
278*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_FRC, 0x02, 0x00);
279*53ee8cc1Swenshuai.xi             }
280*53ee8cc1Swenshuai.xi         }
281*53ee8cc1Swenshuai.xi         break;
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT0:
284*53ee8cc1Swenshuai.xi             if(bEnable)  // Mute
285*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT0_VOLUME, 0x80, 0x80);
286*53ee8cc1Swenshuai.xi             else        // UnMute
287*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT0_VOLUME, 0x80, 0x00);
288*53ee8cc1Swenshuai.xi             break;
289*53ee8cc1Swenshuai.xi 
290*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT1:
291*53ee8cc1Swenshuai.xi             if(bEnable)
292*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT1_VOLUME, 0x80, 0x80 );
293*53ee8cc1Swenshuai.xi             else
294*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT1_VOLUME, 0x80, 0x00 );
295*53ee8cc1Swenshuai.xi             break;
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT2:
298*53ee8cc1Swenshuai.xi             if(bEnable)
299*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT2_VOLUME, 0x80, 0x80);
300*53ee8cc1Swenshuai.xi             else
301*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT2_VOLUME, 0x80, 0x00);
302*53ee8cc1Swenshuai.xi             break;
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT3:
305*53ee8cc1Swenshuai.xi             if(bEnable)
306*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT3_VOLUME, 0x80, 0x80);
307*53ee8cc1Swenshuai.xi             else
308*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT3_VOLUME, 0x80, 0x00);
309*53ee8cc1Swenshuai.xi             break;
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_I2S:
312*53ee8cc1Swenshuai.xi             if(bEnable)
313*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S_VOLUME, 0x80, 0x80);
314*53ee8cc1Swenshuai.xi             else
315*53ee8cc1Swenshuai.xi               HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S_VOLUME, 0x80, 0x00);
316*53ee8cc1Swenshuai.xi             break;
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_SPDIF:
319*53ee8cc1Swenshuai.xi             _HAL_AUDIO_SPDIF_SetMute(bEnable);
320*53ee8cc1Swenshuai.xi             break;
321*53ee8cc1Swenshuai.xi 
322*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_MAIN:
323*53ee8cc1Swenshuai.xi             {
324*53ee8cc1Swenshuai.xi                 MS_U32 u32Value;
325*53ee8cc1Swenshuai.xi 
326*53ee8cc1Swenshuai.xi                 /* TODO
327*53ee8cc1Swenshuai.xi                  * It's a patch here
328*53ee8cc1Swenshuai.xi                  * also control multi channel volume
329*53ee8cc1Swenshuai.xi                  */
330*53ee8cc1Swenshuai.xi                 u32Value = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, DSP_MEM_TYPE_DM);
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi                 if(bEnable)
333*53ee8cc1Swenshuai.xi                 {
334*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_INT, 0x80, 0x80);
335*53ee8cc1Swenshuai.xi 
336*53ee8cc1Swenshuai.xi                     u32Value = u32Value | 0x008000;
337*53ee8cc1Swenshuai.xi                 }
338*53ee8cc1Swenshuai.xi                 else
339*53ee8cc1Swenshuai.xi                 {
340*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_INT, 0x80, 0x00);
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi                     u32Value = u32Value & 0xFF7FFF;
343*53ee8cc1Swenshuai.xi                 }
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, u32Value, DSP_MEM_TYPE_DM);
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi                 break;
348*53ee8cc1Swenshuai.xi             }
349*53ee8cc1Swenshuai.xi 
350*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_SECONDARY:
351*53ee8cc1Swenshuai.xi             if(bEnable)
352*53ee8cc1Swenshuai.xi             {
353*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH6_MIX_VOL_INT, 0x80, 0x80);
354*53ee8cc1Swenshuai.xi             }
355*53ee8cc1Swenshuai.xi             else
356*53ee8cc1Swenshuai.xi             {
357*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH6_MIX_VOL_INT, 0x80, 0x00);
358*53ee8cc1Swenshuai.xi             }
359*53ee8cc1Swenshuai.xi             break;
360*53ee8cc1Swenshuai.xi 
361*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_DMA_IN:
362*53ee8cc1Swenshuai.xi             if(bEnable)
363*53ee8cc1Swenshuai.xi             {
364*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH8_MIX_VOL_INT, 0x80, 0x80);
365*53ee8cc1Swenshuai.xi             }
366*53ee8cc1Swenshuai.xi             else
367*53ee8cc1Swenshuai.xi             {
368*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH8_MIX_VOL_INT, 0x80, 0x00);
369*53ee8cc1Swenshuai.xi             }
370*53ee8cc1Swenshuai.xi             break;
371*53ee8cc1Swenshuai.xi 
372*53ee8cc1Swenshuai.xi       case AUDIO_PATH_7:
373*53ee8cc1Swenshuai.xi             if(bEnable)
374*53ee8cc1Swenshuai.xi             {
375*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH7_VOLUME, 0x80, 0x80);
376*53ee8cc1Swenshuai.xi             }
377*53ee8cc1Swenshuai.xi             else
378*53ee8cc1Swenshuai.xi             {
379*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteMaskByte(REG_SOUND_CH7_VOLUME, 0x80, 0x00);
380*53ee8cc1Swenshuai.xi             }
381*53ee8cc1Swenshuai.xi             break;
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_PCM_CAPTURE1:
384*53ee8cc1Swenshuai.xi             {
385*53ee8cc1Swenshuai.xi                 MS_U32 u32Value;
386*53ee8cc1Swenshuai.xi 
387*53ee8cc1Swenshuai.xi                 u32Value = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_pcmCapture_volume, DSP_MEM_TYPE_DM);
388*53ee8cc1Swenshuai.xi 
389*53ee8cc1Swenshuai.xi                 if(bEnable)
390*53ee8cc1Swenshuai.xi                 {
391*53ee8cc1Swenshuai.xi                     u32Value = u32Value | 0x008000;
392*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture_volume, u32Value, DSP_MEM_TYPE_DM);
393*53ee8cc1Swenshuai.xi                 }
394*53ee8cc1Swenshuai.xi                 else
395*53ee8cc1Swenshuai.xi                 {
396*53ee8cc1Swenshuai.xi                     u32Value = u32Value & 0xFF7FFF;
397*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture_volume, u32Value, DSP_MEM_TYPE_DM);
398*53ee8cc1Swenshuai.xi                 }
399*53ee8cc1Swenshuai.xi 
400*53ee8cc1Swenshuai.xi                 break;
401*53ee8cc1Swenshuai.xi             }
402*53ee8cc1Swenshuai.xi 
403*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_DMA_WRITER1:
404*53ee8cc1Swenshuai.xi             {
405*53ee8cc1Swenshuai.xi                 MS_U32 u32Value;
406*53ee8cc1Swenshuai.xi 
407*53ee8cc1Swenshuai.xi                 u32Value = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_dmaWriter1_volume, DSP_MEM_TYPE_DM);
408*53ee8cc1Swenshuai.xi 
409*53ee8cc1Swenshuai.xi                 if(bEnable)
410*53ee8cc1Swenshuai.xi                 {
411*53ee8cc1Swenshuai.xi                     u32Value = u32Value | 0x008000;
412*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_dmaWriter1_volume, u32Value, DSP_MEM_TYPE_DM);
413*53ee8cc1Swenshuai.xi                 }
414*53ee8cc1Swenshuai.xi                 else
415*53ee8cc1Swenshuai.xi                 {
416*53ee8cc1Swenshuai.xi                     u32Value = u32Value & 0xFF7FFF;
417*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_dmaWriter1_volume, u32Value, DSP_MEM_TYPE_DM);
418*53ee8cc1Swenshuai.xi                 }
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi                 break;
421*53ee8cc1Swenshuai.xi             }
422*53ee8cc1Swenshuai.xi 
423*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_PCM_CAPTURE2:
424*53ee8cc1Swenshuai.xi             {
425*53ee8cc1Swenshuai.xi                 MS_U32 u32Value;
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi                 u32Value = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_pcmCapture2_volume, DSP_MEM_TYPE_DM);
428*53ee8cc1Swenshuai.xi 
429*53ee8cc1Swenshuai.xi                 if(bEnable)
430*53ee8cc1Swenshuai.xi                 {
431*53ee8cc1Swenshuai.xi                     u32Value = u32Value | 0x008000;
432*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture2_volume, u32Value, DSP_MEM_TYPE_DM);
433*53ee8cc1Swenshuai.xi                 }
434*53ee8cc1Swenshuai.xi                 else
435*53ee8cc1Swenshuai.xi                 {
436*53ee8cc1Swenshuai.xi                     u32Value = u32Value & 0xFF7FFF;
437*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture2_volume, u32Value, DSP_MEM_TYPE_DM);
438*53ee8cc1Swenshuai.xi                 }
439*53ee8cc1Swenshuai.xi 
440*53ee8cc1Swenshuai.xi                 break;
441*53ee8cc1Swenshuai.xi             }
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_MCH_IN: //Multi-Ch 1~3
444*53ee8cc1Swenshuai.xi             {
445*53ee8cc1Swenshuai.xi                 MS_U32 u32Value;
446*53ee8cc1Swenshuai.xi 
447*53ee8cc1Swenshuai.xi                 u32Value = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, DSP_MEM_TYPE_DM);
448*53ee8cc1Swenshuai.xi 
449*53ee8cc1Swenshuai.xi                 if(bEnable)
450*53ee8cc1Swenshuai.xi                 {
451*53ee8cc1Swenshuai.xi                     u32Value = u32Value | 0x008000;
452*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, u32Value, DSP_MEM_TYPE_DM);
453*53ee8cc1Swenshuai.xi                 }
454*53ee8cc1Swenshuai.xi                 else
455*53ee8cc1Swenshuai.xi                 {
456*53ee8cc1Swenshuai.xi                     u32Value = u32Value & 0xFF7FFF;
457*53ee8cc1Swenshuai.xi                     HAL_MAD2_Write_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, u32Value, DSP_MEM_TYPE_DM);
458*53ee8cc1Swenshuai.xi                 }
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi                 break;
461*53ee8cc1Swenshuai.xi             }
462*53ee8cc1Swenshuai.xi 
463*53ee8cc1Swenshuai.xi         default:
464*53ee8cc1Swenshuai.xi             break;
465*53ee8cc1Swenshuai.xi     }
466*53ee8cc1Swenshuai.xi }
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
469*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_AbsoluteVolume()  @@VVV
470*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the absolute volume of audio u8Path.
471*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    : for audio CH1~CH6
472*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol1    :     MSB 7-bit register u8Value of 10-bit volume
473*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x7E , gain: +12db to   -114db (-1 db per step)
474*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol2    :     LSB 3-bit register u8Value of 10-bit volume
475*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x07 , gain:  -0db to -0.875db (-0.125 db per step)
476*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
477*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
478*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
479*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_AbsoluteVolume(MS_U8 u8Path,MS_U8 u8u8Vol1,MS_U8 u8u8Vol2)480*53ee8cc1Swenshuai.xi void HAL_SOUND_AbsoluteVolume(MS_U8 u8Path, MS_U8 u8u8Vol1, MS_U8 u8u8Vol2)
481*53ee8cc1Swenshuai.xi {
482*53ee8cc1Swenshuai.xi     switch(u8Path)
483*53ee8cc1Swenshuai.xi     {
484*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT0:
485*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT0_VOLUME, 0x7F, u8u8Vol1);
486*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT0_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
487*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x01, 0x01);   // bEnable DSP CH1 sound effect
488*53ee8cc1Swenshuai.xi             break;
489*53ee8cc1Swenshuai.xi 
490*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT1:
491*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT1_VOLUME, 0x7F, u8u8Vol1);
492*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT1_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
493*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x02, 0x02);   // bEnable DSP CH2 sound effect
494*53ee8cc1Swenshuai.xi             break;
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT2:
497*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT2_VOLUME, 0x7F, u8u8Vol1);
498*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT2_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
499*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x04, 0x04);   // bEnable DSP CH3 sound effect
500*53ee8cc1Swenshuai.xi             break;
501*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_AUOUT3:
502*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT3_VOLUME, 0x7F, u8u8Vol1);
503*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AUOUT3_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
504*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x08, 0x08);   // bEnable DSP CH4 sound effect
505*53ee8cc1Swenshuai.xi             break;
506*53ee8cc1Swenshuai.xi 
507*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_I2S:
508*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S_VOLUME, 0x7F, u8u8Vol1);
509*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
510*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x10, 0x10);   // bEnable DSP CH5 sound effect
511*53ee8cc1Swenshuai.xi             break;
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_SPDIF:
514*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_SPDIF_VOLUME, 0x7F, u8u8Vol1);
515*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_SPDIF_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
516*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x20, 0x20);   // bEnable DSP CH6 sound effect
517*53ee8cc1Swenshuai.xi 
518*53ee8cc1Swenshuai.xi             break;
519*53ee8cc1Swenshuai.xi 
520*53ee8cc1Swenshuai.xi      case AUDIO_T3_PATH_I2S2:
521*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S2_VOLUME, 0x7F, u8u8Vol1);
522*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_I2S2_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
523*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(M2S_MBOX_VOLUME_EN, 0x20, 0x20);   // bEnable AUDIO_T3_PATH_I2S2
524*53ee8cc1Swenshuai.xi             break;
525*53ee8cc1Swenshuai.xi 
526*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_MAIN:  //CH5
527*53ee8cc1Swenshuai.xi         {
528*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
529*53ee8cc1Swenshuai.xi             MS_U32 u32Muteflag;
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_INT, 0x7F, u8u8Vol1);
532*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH5_MIX_VOL_FRC, 0xE0, (u8u8Vol2<<5));
533*53ee8cc1Swenshuai.xi 
534*53ee8cc1Swenshuai.xi             /* TODO
535*53ee8cc1Swenshuai.xi              * It's a patch here
536*53ee8cc1Swenshuai.xi              * also control multi channel volume
537*53ee8cc1Swenshuai.xi              */
538*53ee8cc1Swenshuai.xi             u32Muteflag = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, DSP_MEM_TYPE_DM);
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi             u8u8Vol1 = u8u8Vol1 & 0x7F;
541*53ee8cc1Swenshuai.xi             u8u8Vol2 = (u8u8Vol2<<5) & 0xE0;
542*53ee8cc1Swenshuai.xi             u32Value = ((MS_U32)u8u8Vol1)<<8;
543*53ee8cc1Swenshuai.xi             u32Value = u32Value + (MS_U32)u8u8Vol2;
544*53ee8cc1Swenshuai.xi             u32Value = u32Value | (u32Muteflag & 0x008000);
545*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, u32Value, DSP_MEM_TYPE_DM);
546*53ee8cc1Swenshuai.xi 
547*53ee8cc1Swenshuai.xi             break;
548*53ee8cc1Swenshuai.xi         }
549*53ee8cc1Swenshuai.xi 
550*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_SECONDARY: //CH6
551*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH6_MIX_VOL_INT, 0x7F, u8u8Vol1);
552*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH6_MIX_VOL_FRC, 0xE0, (u8u8Vol2<<5));
553*53ee8cc1Swenshuai.xi             break;
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_DMA_IN: //CH8
556*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH8_MIX_VOL_INT, 0x7F, u8u8Vol1);
557*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH8_MIX_VOL_FRC, 0xE0, (u8u8Vol2<<5));
558*53ee8cc1Swenshuai.xi             break;
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi         case AUDIO_PATH_7: //CH7
561*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH7_VOLUME, 0x7F, u8u8Vol1);
562*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_CH7_VOL_FRAC, 0xE0, (u8u8Vol2<<5));
563*53ee8cc1Swenshuai.xi             break;
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_PCM_CAPTURE1:
566*53ee8cc1Swenshuai.xi         {
567*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
568*53ee8cc1Swenshuai.xi             MS_U32 u32Muteflag;
569*53ee8cc1Swenshuai.xi             u32Muteflag = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_pcmCapture_volume, DSP_MEM_TYPE_DM);
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi             u8u8Vol1 = u8u8Vol1 & 0x7F;
572*53ee8cc1Swenshuai.xi             u8u8Vol2 = (u8u8Vol2<<5) & 0xE0;
573*53ee8cc1Swenshuai.xi             u32Value = ((MS_U32)u8u8Vol1)<<8;
574*53ee8cc1Swenshuai.xi             u32Value = u32Value + (MS_U32)u8u8Vol2;
575*53ee8cc1Swenshuai.xi             u32Value = u32Value | (u32Muteflag & 0x008000);
576*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture_volume, u32Value, DSP_MEM_TYPE_DM);
577*53ee8cc1Swenshuai.xi 
578*53ee8cc1Swenshuai.xi             break;
579*53ee8cc1Swenshuai.xi         }
580*53ee8cc1Swenshuai.xi 
581*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_PCM_CAPTURE2:
582*53ee8cc1Swenshuai.xi         {
583*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
584*53ee8cc1Swenshuai.xi             MS_U32 u32Muteflag;
585*53ee8cc1Swenshuai.xi             u32Muteflag = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_pcmCapture2_volume, DSP_MEM_TYPE_DM);
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi             u8u8Vol1 = u8u8Vol1 & 0x7F;
588*53ee8cc1Swenshuai.xi             u8u8Vol2 = (u8u8Vol2<<5) & 0xE0;
589*53ee8cc1Swenshuai.xi             u32Value = ((MS_U32)u8u8Vol1)<<8;
590*53ee8cc1Swenshuai.xi             u32Value = u32Value + (MS_U32)u8u8Vol2;
591*53ee8cc1Swenshuai.xi             u32Value = u32Value | (u32Muteflag & 0x008000);
592*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2DmAddr_pcmCapture2_volume, u32Value, DSP_MEM_TYPE_DM);
593*53ee8cc1Swenshuai.xi 
594*53ee8cc1Swenshuai.xi             break;
595*53ee8cc1Swenshuai.xi         }
596*53ee8cc1Swenshuai.xi 
597*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_DMA_WRITER1:
598*53ee8cc1Swenshuai.xi         {
599*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
600*53ee8cc1Swenshuai.xi             MS_U32 u32Muteflag;
601*53ee8cc1Swenshuai.xi             u32Muteflag = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_dmaWriter1_volume, DSP_MEM_TYPE_DM);
602*53ee8cc1Swenshuai.xi 
603*53ee8cc1Swenshuai.xi             u8u8Vol1 = u8u8Vol1 & 0x7F;
604*53ee8cc1Swenshuai.xi             u8u8Vol2 = (u8u8Vol2<<5) & 0xE0;
605*53ee8cc1Swenshuai.xi             u32Value = ((MS_U32)u8u8Vol1)<<8;
606*53ee8cc1Swenshuai.xi             u32Value = u32Value + (MS_U32)u8u8Vol2;
607*53ee8cc1Swenshuai.xi             u32Value = u32Value | (u32Muteflag & 0x008000);
608*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2DmAddr_dmaWriter1_volume, u32Value, DSP_MEM_TYPE_DM);
609*53ee8cc1Swenshuai.xi 
610*53ee8cc1Swenshuai.xi             break;
611*53ee8cc1Swenshuai.xi         }
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi         case AUDIO_T3_PATH_MIXER_MCH_IN: //Multi-Ch 1~3
614*53ee8cc1Swenshuai.xi         {
615*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
616*53ee8cc1Swenshuai.xi             MS_U32 u32Muteflag;
617*53ee8cc1Swenshuai.xi             u32Muteflag = HAL_MAD2_Read_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, DSP_MEM_TYPE_DM);
618*53ee8cc1Swenshuai.xi 
619*53ee8cc1Swenshuai.xi             u8u8Vol1 = u8u8Vol1 & 0x7F;
620*53ee8cc1Swenshuai.xi             u8u8Vol2 = (u8u8Vol2<<5) & 0xE0;
621*53ee8cc1Swenshuai.xi             u32Value = ((MS_U32)u8u8Vol1)<<8;
622*53ee8cc1Swenshuai.xi             u32Value = u32Value + (MS_U32)u8u8Vol2;
623*53ee8cc1Swenshuai.xi             u32Value = u32Value | (u32Muteflag & 0x008000);
624*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2DmAddr_Multi_Channel_VOL, u32Value, DSP_MEM_TYPE_DM);
625*53ee8cc1Swenshuai.xi             break;
626*53ee8cc1Swenshuai.xi         }
627*53ee8cc1Swenshuai.xi 
628*53ee8cc1Swenshuai.xi         default:
629*53ee8cc1Swenshuai.xi             break;
630*53ee8cc1Swenshuai.xi     }
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi }
633*53ee8cc1Swenshuai.xi 
634*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
635*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetPreScale() @@VVV
636*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u8Prescale of audio u8Path.
637*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    : for audio u8Path0 ~ u8Path5
638*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Prescale    :     range from 0x01 to 0xFF , gain: -13.75db to +18db (0.125 db per step)
639*53ee8cc1Swenshuai.xi ///                                    0x00: disable pre-scale
640*53ee8cc1Swenshuai.xi ///                                    0x6F: gain = 0db
641*53ee8cc1Swenshuai.xi ///                                    0xFF: gain = +18db
642*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
643*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
644*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
645*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetPreScale(MS_U8 u8Path,MS_U8 u8Prescale)646*53ee8cc1Swenshuai.xi void HAL_SOUND_SetPreScale(MS_U8 u8Path, MS_U8 u8Prescale)
647*53ee8cc1Swenshuai.xi {
648*53ee8cc1Swenshuai.xi     switch(u8Path)
649*53ee8cc1Swenshuai.xi     {
650*53ee8cc1Swenshuai.xi         case AUDIO_PATH_MAIN:
651*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(REG_SOUND_MAIN_PERSCALE, u8Prescale);
652*53ee8cc1Swenshuai.xi             break;
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi         default:
655*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(REG_SOUND_MAIN_PERSCALE, u8Prescale);
656*53ee8cc1Swenshuai.xi             break;
657*53ee8cc1Swenshuai.xi     }
658*53ee8cc1Swenshuai.xi }
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
661*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetPreScale()
662*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u8Prescale of audio u8Path.
663*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    : for audio u8Path0 ~ u8Path5
664*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Prescale    :     range from 0x01 to 0xFF , gain: -13.75db to +18db (0.125 db per step)
665*53ee8cc1Swenshuai.xi ///                                    0x00: disable pre-scale
666*53ee8cc1Swenshuai.xi ///                                    0x6F: gain = 0db
667*53ee8cc1Swenshuai.xi ///                                    0xFF: gain = +18db
668*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
669*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
670*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
671*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetPreScale(MS_U8 u8Path)672*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetPreScale(MS_U8 u8Path)
673*53ee8cc1Swenshuai.xi {
674*53ee8cc1Swenshuai.xi     MS_U16 tmp=0;
675*53ee8cc1Swenshuai.xi     switch ( u8Path )
676*53ee8cc1Swenshuai.xi     {
677*53ee8cc1Swenshuai.xi         case AUDIO_PATH_MAIN:
678*53ee8cc1Swenshuai.xi             tmp = HAL_AUDIO_ReadByte(REG_SOUND_MAIN_PERSCALE);
679*53ee8cc1Swenshuai.xi             break;
680*53ee8cc1Swenshuai.xi 
681*53ee8cc1Swenshuai.xi         default:
682*53ee8cc1Swenshuai.xi             tmp = HAL_AUDIO_ReadByte(REG_SOUND_MAIN_PERSCALE);
683*53ee8cc1Swenshuai.xi             break;
684*53ee8cc1Swenshuai.xi     }
685*53ee8cc1Swenshuai.xi     return tmp;
686*53ee8cc1Swenshuai.xi }
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
689*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetOutputPhaseShiftMask()   @@VVV
690*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Set Output Signal Phase Shift Mask. ( 0 degree normal or 180 degree inverse)
691*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    :    AUDIO_PATH_TYPE
692*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Channel    :   0 for Left channel; 1 for Right channel
693*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
694*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
695*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
696*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetOutputPhaseShiftMask(AUDIO_OUTPUT_TYPE u8Output,MS_U8 u8Channel)697*53ee8cc1Swenshuai.xi void HAL_SOUND_SetOutputPhaseShiftMask(AUDIO_OUTPUT_TYPE u8Output, MS_U8 u8Channel)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi     MS_U16 PhaseShiftMaskBit = 0;
700*53ee8cc1Swenshuai.xi     MS_BOOL ctrl_flag = TRUE;
701*53ee8cc1Swenshuai.xi 
702*53ee8cc1Swenshuai.xi     switch(u8Output)
703*53ee8cc1Swenshuai.xi     {
704*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT0_OUTPUT:
705*53ee8cc1Swenshuai.xi             if (u8Channel)
706*53ee8cc1Swenshuai.xi             {
707*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC0_R_BIT;
708*53ee8cc1Swenshuai.xi             }
709*53ee8cc1Swenshuai.xi             else
710*53ee8cc1Swenshuai.xi             {
711*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC0_L_BIT;
712*53ee8cc1Swenshuai.xi             }
713*53ee8cc1Swenshuai.xi             break;
714*53ee8cc1Swenshuai.xi 
715*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT1_OUTPUT:
716*53ee8cc1Swenshuai.xi         case AUDIO_HP_OUTPUT:
717*53ee8cc1Swenshuai.xi             if (u8Channel)
718*53ee8cc1Swenshuai.xi             {
719*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC1_R_BIT;
720*53ee8cc1Swenshuai.xi             }
721*53ee8cc1Swenshuai.xi             else
722*53ee8cc1Swenshuai.xi             {
723*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC1_L_BIT;
724*53ee8cc1Swenshuai.xi             }
725*53ee8cc1Swenshuai.xi             break;
726*53ee8cc1Swenshuai.xi 
727*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT2_OUTPUT:
728*53ee8cc1Swenshuai.xi             if (u8Channel)
729*53ee8cc1Swenshuai.xi             {
730*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC2_R_BIT;
731*53ee8cc1Swenshuai.xi             }
732*53ee8cc1Swenshuai.xi             else
733*53ee8cc1Swenshuai.xi             {
734*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC2_L_BIT;
735*53ee8cc1Swenshuai.xi             }
736*53ee8cc1Swenshuai.xi             break;
737*53ee8cc1Swenshuai.xi 
738*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT3_OUTPUT:
739*53ee8cc1Swenshuai.xi             if (u8Channel)
740*53ee8cc1Swenshuai.xi             {
741*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC3_R_BIT;
742*53ee8cc1Swenshuai.xi             }
743*53ee8cc1Swenshuai.xi             else
744*53ee8cc1Swenshuai.xi             {
745*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_DAC3_L_BIT;
746*53ee8cc1Swenshuai.xi             }
747*53ee8cc1Swenshuai.xi             break;
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi         case AUDIO_I2S_OUTPUT:
750*53ee8cc1Swenshuai.xi             if (u8Channel)
751*53ee8cc1Swenshuai.xi             {
752*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S0_R_BIT;
753*53ee8cc1Swenshuai.xi             }
754*53ee8cc1Swenshuai.xi             else
755*53ee8cc1Swenshuai.xi             {
756*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S0_L_BIT;
757*53ee8cc1Swenshuai.xi             }
758*53ee8cc1Swenshuai.xi             break;
759*53ee8cc1Swenshuai.xi 
760*53ee8cc1Swenshuai.xi         case AUDIO_I2S2_OUTPUT:
761*53ee8cc1Swenshuai.xi             if (u8Channel)
762*53ee8cc1Swenshuai.xi             {
763*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S1_R_BIT;
764*53ee8cc1Swenshuai.xi             }
765*53ee8cc1Swenshuai.xi             else
766*53ee8cc1Swenshuai.xi             {
767*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S1_L_BIT;
768*53ee8cc1Swenshuai.xi             }
769*53ee8cc1Swenshuai.xi             break;
770*53ee8cc1Swenshuai.xi 
771*53ee8cc1Swenshuai.xi         case AUDIO_I2S3_OUTPUT:
772*53ee8cc1Swenshuai.xi             if (u8Channel)
773*53ee8cc1Swenshuai.xi             {
774*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S2_R_BIT;
775*53ee8cc1Swenshuai.xi             }
776*53ee8cc1Swenshuai.xi             else
777*53ee8cc1Swenshuai.xi             {
778*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S2_L_BIT;
779*53ee8cc1Swenshuai.xi             }
780*53ee8cc1Swenshuai.xi             break;
781*53ee8cc1Swenshuai.xi 
782*53ee8cc1Swenshuai.xi         case AUDIO_I2S4_OUTPUT:
783*53ee8cc1Swenshuai.xi             if (u8Channel)
784*53ee8cc1Swenshuai.xi             {
785*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S3_R_BIT;
786*53ee8cc1Swenshuai.xi             }
787*53ee8cc1Swenshuai.xi             else
788*53ee8cc1Swenshuai.xi             {
789*53ee8cc1Swenshuai.xi                 PhaseShiftMaskBit = M2S_MBOX_PHASE_SHIFT_I2S3_L_BIT;
790*53ee8cc1Swenshuai.xi             }
791*53ee8cc1Swenshuai.xi             break;
792*53ee8cc1Swenshuai.xi 
793*53ee8cc1Swenshuai.xi         default:
794*53ee8cc1Swenshuai.xi             ctrl_flag = FALSE;
795*53ee8cc1Swenshuai.xi             printf("Warning! un-support OutputPhaseShift case(%u). \r\n", u8Output);
796*53ee8cc1Swenshuai.xi             break;
797*53ee8cc1Swenshuai.xi     }
798*53ee8cc1Swenshuai.xi 
799*53ee8cc1Swenshuai.xi     if (ctrl_flag)
800*53ee8cc1Swenshuai.xi     {
801*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskReg(M2S_MBOX_PHASE_SHIFT_CTRL, 1<<(PhaseShiftMaskBit), 1<<(PhaseShiftMaskBit));
802*53ee8cc1Swenshuai.xi     }
803*53ee8cc1Swenshuai.xi }
804*53ee8cc1Swenshuai.xi 
805*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
806*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableBalance()   @@VVV
807*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable Balance featue.
808*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Enable    :    Balance Enable bits
809*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
810*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
811*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
812*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableBalance(MS_U8 u8Enable)813*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableBalance(MS_U8 u8Enable)
814*53ee8cc1Swenshuai.xi {
815*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(M2S_MBOX_BALANCE_EN+1, 0x80, (u8Enable<<7)); // Balance enable flag
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi     if(u8Enable)
818*53ee8cc1Swenshuai.xi        HAL_AUDIO_WriteMaskReg(M2S_MBOX_BALANCE_EN, g_BalanceMask, 0xFFFF); // Balance enable
819*53ee8cc1Swenshuai.xi     else
820*53ee8cc1Swenshuai.xi        HAL_AUDIO_WriteMaskReg(M2S_MBOX_BALANCE_EN, g_BalanceMask, 0x0000); // Balance disable
821*53ee8cc1Swenshuai.xi }
822*53ee8cc1Swenshuai.xi 
823*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
824*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetBalanceMask()   @@VVV
825*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Set Balance Mask.
826*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Path    :    AUDIO_PATH_TYPE
827*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Enable    :    TRUE or FALSE
828*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
829*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
830*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
831*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetBalanceMask(AUDIO_OUTPUT_TYPE u8Output,MS_BOOL u8Enable)832*53ee8cc1Swenshuai.xi void HAL_SOUND_SetBalanceMask(AUDIO_OUTPUT_TYPE u8Output, MS_BOOL u8Enable)
833*53ee8cc1Swenshuai.xi {
834*53ee8cc1Swenshuai.xi     MS_U16 BalanceMaskBit = 0;
835*53ee8cc1Swenshuai.xi     MS_BOOL ctrl_flag = TRUE;
836*53ee8cc1Swenshuai.xi 
837*53ee8cc1Swenshuai.xi     switch(u8Output)
838*53ee8cc1Swenshuai.xi     {
839*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT0_OUTPUT:
840*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_DAC0_EN_BIT;
841*53ee8cc1Swenshuai.xi             break;
842*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT1_OUTPUT:
843*53ee8cc1Swenshuai.xi         case AUDIO_HP_OUTPUT:
844*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_DAC1_EN_BIT;
845*53ee8cc1Swenshuai.xi             break;
846*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT2_OUTPUT:
847*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_DAC2_EN_BIT;
848*53ee8cc1Swenshuai.xi             break;
849*53ee8cc1Swenshuai.xi         case AUDIO_AUOUT3_OUTPUT:
850*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_DAC3_EN_BIT;
851*53ee8cc1Swenshuai.xi             break;
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi         case AUDIO_I2S_OUTPUT:
854*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_I2S0_EN_BIT;
855*53ee8cc1Swenshuai.xi             break;
856*53ee8cc1Swenshuai.xi         case AUDIO_I2S2_OUTPUT:
857*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_I2S1_EN_BIT;
858*53ee8cc1Swenshuai.xi             break;
859*53ee8cc1Swenshuai.xi         case AUDIO_I2S3_OUTPUT:
860*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_I2S2_EN_BIT;
861*53ee8cc1Swenshuai.xi             break;
862*53ee8cc1Swenshuai.xi         case AUDIO_I2S4_OUTPUT:
863*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_I2S3_EN_BIT;
864*53ee8cc1Swenshuai.xi             break;
865*53ee8cc1Swenshuai.xi 
866*53ee8cc1Swenshuai.xi         case AUDIO_SPDIF_OUTPUT:
867*53ee8cc1Swenshuai.xi             BalanceMaskBit = M2S_MBOX_BAL_SPDIF_EN_BIT;
868*53ee8cc1Swenshuai.xi             break;
869*53ee8cc1Swenshuai.xi 
870*53ee8cc1Swenshuai.xi         case AUDIO_HDMI_ARC_OUTPUT:  // tmp disable, no this choice
871*53ee8cc1Swenshuai.xi             ctrl_flag = FALSE;
872*53ee8cc1Swenshuai.xi             break;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi         case AUDIO_HDMI_OUTPUT:  // tmp disable, no this choice
875*53ee8cc1Swenshuai.xi             ctrl_flag = FALSE;
876*53ee8cc1Swenshuai.xi             break;
877*53ee8cc1Swenshuai.xi 
878*53ee8cc1Swenshuai.xi         default:
879*53ee8cc1Swenshuai.xi             printf("Warning! un-support BalanceMask case(%u). \r\n", u8Output);
880*53ee8cc1Swenshuai.xi             ctrl_flag = FALSE;
881*53ee8cc1Swenshuai.xi             break;
882*53ee8cc1Swenshuai.xi     }
883*53ee8cc1Swenshuai.xi 
884*53ee8cc1Swenshuai.xi     if (ctrl_flag)
885*53ee8cc1Swenshuai.xi     {
886*53ee8cc1Swenshuai.xi         g_BalanceMask = ((g_BalanceMask & (~(0x1<<BalanceMaskBit))) | (u8Enable<<BalanceMaskBit));
887*53ee8cc1Swenshuai.xi         HAL_SOUND_EnableBalance(TRUE);
888*53ee8cc1Swenshuai.xi     }
889*53ee8cc1Swenshuai.xi }
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi const MS_U8 BalanceTab[]=
892*53ee8cc1Swenshuai.xi {
893*53ee8cc1Swenshuai.xi     0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,  /// 0 ~ 9
894*53ee8cc1Swenshuai.xi     0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,  /// 10 ~ 19
895*53ee8cc1Swenshuai.xi     0x14,0x15,0x16,0x17,0x18,0x1A,0x1B,0x1C,0x1F,0x20,  /// 20 ~ 29
896*53ee8cc1Swenshuai.xi     0x22,0x23,0x25,0x27,0x29,0x2B,0x2E,0x30,0x33,0x36,  /// 30 ~ 39
897*53ee8cc1Swenshuai.xi     0x38,0x3D,0x41,0x46,0x4B,0x51,0x59,0x66,0x72,0x8B,  /// 40 ~ 49
898*53ee8cc1Swenshuai.xi     0xFF    /// 50
899*53ee8cc1Swenshuai.xi };
900*53ee8cc1Swenshuai.xi 
901*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
902*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetBalance()    @@VVV
903*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set Balance value.
904*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Balance     :   0~49    -> R channel volume down
905*53ee8cc1Swenshuai.xi ///                                     :   50      -> L/R the same (0 dB)
906*53ee8cc1Swenshuai.xi ///                                     :   51~100  -> L channel volume down
907*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
908*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
909*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
910*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetBalance(MS_U8 u8Balance)911*53ee8cc1Swenshuai.xi void HAL_SOUND_SetBalance(MS_U8 u8Balance)
912*53ee8cc1Swenshuai.xi {
913*53ee8cc1Swenshuai.xi     MS_U8 value_l = 0, value_r = 0;
914*53ee8cc1Swenshuai.xi 
915*53ee8cc1Swenshuai.xi     //printf("apiAud>> u8Balance = %02bx\n", u8Balance);
916*53ee8cc1Swenshuai.xi     if(u8Balance==50)
917*53ee8cc1Swenshuai.xi     {
918*53ee8cc1Swenshuai.xi         value_l = 0x00;
919*53ee8cc1Swenshuai.xi         value_r = 0x00;
920*53ee8cc1Swenshuai.xi     }
921*53ee8cc1Swenshuai.xi     else if(u8Balance<50)
922*53ee8cc1Swenshuai.xi     {
923*53ee8cc1Swenshuai.xi         value_l = 0x00;
924*53ee8cc1Swenshuai.xi         value_r = BalanceTab[(50-u8Balance)];
925*53ee8cc1Swenshuai.xi     }
926*53ee8cc1Swenshuai.xi     else if(u8Balance>50)
927*53ee8cc1Swenshuai.xi     {
928*53ee8cc1Swenshuai.xi         value_l = BalanceTab[(u8Balance-50)];
929*53ee8cc1Swenshuai.xi         value_r = 0x00;
930*53ee8cc1Swenshuai.xi     }
931*53ee8cc1Swenshuai.xi     //AUD_DEBUG(printf("\napiAud>> Balance UI:0x%bx L:0x%bx R:0x%bx",u8Balance,value_l,value_r));
932*53ee8cc1Swenshuai.xi     HAL_SOUND_SetBalance_L(value_l );
933*53ee8cc1Swenshuai.xi     HAL_SOUND_SetBalance_R(value_r );
934*53ee8cc1Swenshuai.xi }
935*53ee8cc1Swenshuai.xi 
936*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
937*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetBalance_L()    @@VVV
938*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set Absolute Balance u8Value of main L-channel.
939*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Balance_L   : L-channel balance register u8Value
940*53ee8cc1Swenshuai.xi ///                                       0x00(0dB)~0xFF(mute), step: -0.25 (dB/step)
941*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
942*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
943*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
944*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetBalance_L(MS_U8 u8Balance_L)945*53ee8cc1Swenshuai.xi void HAL_SOUND_SetBalance_L(MS_U8 u8Balance_L)
946*53ee8cc1Swenshuai.xi {
947*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_BALANCEL, u8Balance_L);
948*53ee8cc1Swenshuai.xi }
949*53ee8cc1Swenshuai.xi 
950*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
951*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetBalance_L()
952*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set absolute Balance u8Value of main u8Path L-channel.
953*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
954*53ee8cc1Swenshuai.xi /// @param <OUT>       \b u8Balance_L   : L-channel balance register u8Value
955*53ee8cc1Swenshuai.xi ///                                       0x00(0dB)~0xFF(mute), step: -0.25 (dB/step)
956*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
957*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
958*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetBalance_L(void)959*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetBalance_L(void)
960*53ee8cc1Swenshuai.xi {
961*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_ReadByte(REG_SOUND_BALANCEL));
962*53ee8cc1Swenshuai.xi }
963*53ee8cc1Swenshuai.xi 
964*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
965*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetBalance_R()    @@VVV
966*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set Absolute Balance u8Value of main R-channel.
967*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Balance_R   : R-channel balance register u8Value
968*53ee8cc1Swenshuai.xi ///                                       0x00(0dB)~0xFF(mute), step: -0.25 (dB/step)
969*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
970*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
971*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
972*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetBalance_R(MS_U8 u8Balance_R)973*53ee8cc1Swenshuai.xi void HAL_SOUND_SetBalance_R(MS_U8 u8Balance_R)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_BALANCER, u8Balance_R);
976*53ee8cc1Swenshuai.xi }
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
979*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetBalance_R()
980*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set absolute Balance u8Value of main u8Path R-channel.
981*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
982*53ee8cc1Swenshuai.xi /// @param <OUT>       \b u8Balance_R   : R-channel balance register u8Value
983*53ee8cc1Swenshuai.xi ///                                       0x00(0dB)~0xFF(mute), step: -0.25 (dB/step)
984*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
985*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
986*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetBalance_R(void)987*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetBalance_R(void)
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_ReadByte(REG_SOUND_BALANCER));
990*53ee8cc1Swenshuai.xi }
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
993*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetDynamicBass()
994*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the DynamicBass u8Level of main u8Path .
995*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level    :
996*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
997*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
998*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
999*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetDynamicBass(MS_U8 u8Level)1000*53ee8cc1Swenshuai.xi void HAL_SOUND_SetDynamicBass(MS_U8 u8Level)
1001*53ee8cc1Swenshuai.xi {
1002*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(M2S_MBOX_SUPBASS_CTRL, u8Level);
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi     if(u8Level == 0)
1005*53ee8cc1Swenshuai.xi     {
1006*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(REG_SOUND_MAIN_SNDEFFECT, 0x20, 0x00);
1007*53ee8cc1Swenshuai.xi     }
1008*53ee8cc1Swenshuai.xi     else
1009*53ee8cc1Swenshuai.xi     {
1010*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(REG_SOUND_MAIN_SNDEFFECT, 0x20, 0x20);
1011*53ee8cc1Swenshuai.xi     }
1012*53ee8cc1Swenshuai.xi }
1013*53ee8cc1Swenshuai.xi 
1014*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1015*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetBass() @@VVV
1016*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Bass u8Value of main u8Path .
1017*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level :  max: 100 (+15dB)
1018*53ee8cc1Swenshuai.xi ///                                        50 (  0dB)
1019*53ee8cc1Swenshuai.xi ///                                  min:   0 (-16dB)
1020*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1021*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1022*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1023*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetBass(MS_U8 u8Level)1024*53ee8cc1Swenshuai.xi void HAL_SOUND_SetBass(MS_U8 u8Level)
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi     MS_S32 u8Value;
1027*53ee8cc1Swenshuai.xi 
1028*53ee8cc1Swenshuai.xi     if(u8Level >= 100)
1029*53ee8cc1Swenshuai.xi     {
1030*53ee8cc1Swenshuai.xi         u8Value = 0x30;
1031*53ee8cc1Swenshuai.xi     }
1032*53ee8cc1Swenshuai.xi     else
1033*53ee8cc1Swenshuai.xi     {
1034*53ee8cc1Swenshuai.xi         u8Value = ((int)u8Level-50)*48/50; //16/50;
1035*53ee8cc1Swenshuai.xi     }
1036*53ee8cc1Swenshuai.xi 
1037*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("Bass:%d",u8Level));
1038*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("==>%x\r\n",u8Value));
1039*53ee8cc1Swenshuai.xi 
1040*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_BASS, (MS_U8)u8Value);
1041*53ee8cc1Swenshuai.xi }
1042*53ee8cc1Swenshuai.xi 
1043*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1044*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetBass()
1045*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value gain.
1046*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1047*53ee8cc1Swenshuai.xi /// @param <OUT>       \b u16Bass :  max: 0x30 (+15dB)
1048*53ee8cc1Swenshuai.xi ///                                       0x00 (  0dB), step = 0.25 (dB/step)
1049*53ee8cc1Swenshuai.xi ///                                  min: 0xD0 (-16dB)
1050*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1051*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1052*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetBass(void)1053*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetBass(void)
1054*53ee8cc1Swenshuai.xi {
1055*53ee8cc1Swenshuai.xi     MS_U16 u16Bass = 0;
1056*53ee8cc1Swenshuai.xi 
1057*53ee8cc1Swenshuai.xi     u16Bass = HAL_AUDIO_ReadByte(REG_SOUND_BASS);
1058*53ee8cc1Swenshuai.xi     return u16Bass;
1059*53ee8cc1Swenshuai.xi }
1060*53ee8cc1Swenshuai.xi 
1061*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1062*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_AbsoluteBass()    @@VVV
1063*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the absolute Bass u8Value of main u8Path .
1064*53ee8cc1Swenshuai.xi /// @param <IN>        \b bass    :  max: 0x30 (+15dB)
1065*53ee8cc1Swenshuai.xi ///                                       0x00 (  0dB), step = 0.25 (dB/step)
1066*53ee8cc1Swenshuai.xi ///                                  min: 0xD0 (-16dB)
1067*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1068*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1069*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1070*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_AbsoluteBass(MS_U8 u8Bass)1071*53ee8cc1Swenshuai.xi void HAL_SOUND_AbsoluteBass(MS_U8 u8Bass)
1072*53ee8cc1Swenshuai.xi {
1073*53ee8cc1Swenshuai.xi     if ((u8Bass > 0x30) && (u8Bass <= 0x7F))
1074*53ee8cc1Swenshuai.xi     {
1075*53ee8cc1Swenshuai.xi         u8Bass = 0x30;
1076*53ee8cc1Swenshuai.xi     }
1077*53ee8cc1Swenshuai.xi     if ((u8Bass < 0xD0) && (u8Bass >= 0x80))
1078*53ee8cc1Swenshuai.xi     {
1079*53ee8cc1Swenshuai.xi         u8Bass = 0xD0;
1080*53ee8cc1Swenshuai.xi     }
1081*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_BASS, u8Bass);
1082*53ee8cc1Swenshuai.xi }
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1085*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetTreble()   @@VVV
1086*53ee8cc1Swenshuai.xi //// @brief \b Function \b Description: This routine is used to set the Treble u8Value of main u8Path .
1087*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level :  max: 100 (+15dB)
1088*53ee8cc1Swenshuai.xi ///                                        50 (  0dB)
1089*53ee8cc1Swenshuai.xi ///                                  min:   0 (-16dB)
1090*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1091*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1092*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1093*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetTreble(MS_U8 u8Level)1094*53ee8cc1Swenshuai.xi void HAL_SOUND_SetTreble(MS_U8 u8Level)
1095*53ee8cc1Swenshuai.xi {
1096*53ee8cc1Swenshuai.xi     MS_S32 u8Value;
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi     if (u8Level >= 100)
1099*53ee8cc1Swenshuai.xi     {
1100*53ee8cc1Swenshuai.xi         u8Value = 0x30;
1101*53ee8cc1Swenshuai.xi     }
1102*53ee8cc1Swenshuai.xi     else
1103*53ee8cc1Swenshuai.xi     {
1104*53ee8cc1Swenshuai.xi         u8Value = ((int)u8Level-50)*48/50; //16/50;
1105*53ee8cc1Swenshuai.xi     }
1106*53ee8cc1Swenshuai.xi 
1107*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("Treble:%d",u8Level));
1108*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("==>%x\r\n",u8Value));
1109*53ee8cc1Swenshuai.xi 
1110*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_TREBLE, (MS_U8)u8Value);
1111*53ee8cc1Swenshuai.xi }
1112*53ee8cc1Swenshuai.xi 
1113*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1114*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetTreble()
1115*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value gain.
1116*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1117*53ee8cc1Swenshuai.xi /// @param <OUT>       \b u16Treble :  max: 0x30 (+15dB)
1118*53ee8cc1Swenshuai.xi ///                                         0x00 (  0dB), step = 0.25 (dB/step)
1119*53ee8cc1Swenshuai.xi ///                                    min: 0xD0 (-16dB)
1120*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1121*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1122*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetTreble(void)1123*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetTreble(void)
1124*53ee8cc1Swenshuai.xi {
1125*53ee8cc1Swenshuai.xi     MS_U16 u16Treble = 0;
1126*53ee8cc1Swenshuai.xi 
1127*53ee8cc1Swenshuai.xi     u16Treble = HAL_AUDIO_ReadByte(REG_SOUND_TREBLE);
1128*53ee8cc1Swenshuai.xi     return u16Treble;
1129*53ee8cc1Swenshuai.xi }
1130*53ee8cc1Swenshuai.xi 
1131*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1132*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_AbsoluteTreble()  @@VVV
1133*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the absolute Treble u8Value of main u8Path .
1134*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Treble:  max: 0x30 (+15dB)
1135*53ee8cc1Swenshuai.xi ///                                       0x00 (  0dB), step = 0.25 (dB/step)
1136*53ee8cc1Swenshuai.xi ///                                  min: 0xD0 (-16dB)
1137*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1138*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1139*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1140*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_AbsoluteTreble(MS_U8 u8Treble)1141*53ee8cc1Swenshuai.xi void HAL_SOUND_AbsoluteTreble(MS_U8 u8Treble)
1142*53ee8cc1Swenshuai.xi {
1143*53ee8cc1Swenshuai.xi     if ((u8Treble > 0x30) && (u8Treble <= 0x7F))
1144*53ee8cc1Swenshuai.xi     {
1145*53ee8cc1Swenshuai.xi         u8Treble = 0x30;
1146*53ee8cc1Swenshuai.xi     }
1147*53ee8cc1Swenshuai.xi     if ((u8Treble < 0xD0) && (u8Treble >= 0x80))
1148*53ee8cc1Swenshuai.xi     {
1149*53ee8cc1Swenshuai.xi         u8Treble = 0xD0;
1150*53ee8cc1Swenshuai.xi     }
1151*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_TREBLE, u8Treble);
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi 
1154*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1155*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetEq()   @@VVV
1156*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the the 5-band EQ u8Level  .
1157*53ee8cc1Swenshuai.xi /// @param <IN>        \b band    :  EQ band 0~4
1158*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level    :  Absolute EQ register u8Value
1159*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1160*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1161*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1162*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetEq(MS_U8 u8Band,MS_U8 u8Level)1163*53ee8cc1Swenshuai.xi void HAL_SOUND_SetEq(MS_U8 u8Band, MS_U8 u8Level)
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi     MS_U8 value;
1166*53ee8cc1Swenshuai.xi 
1167*53ee8cc1Swenshuai.xi     if( u8Band>4)
1168*53ee8cc1Swenshuai.xi     {
1169*53ee8cc1Swenshuai.xi         return;
1170*53ee8cc1Swenshuai.xi     }
1171*53ee8cc1Swenshuai.xi 
1172*53ee8cc1Swenshuai.xi     if(u8Level>=100)
1173*53ee8cc1Swenshuai.xi     {
1174*53ee8cc1Swenshuai.xi         value = 0x30;
1175*53ee8cc1Swenshuai.xi     }
1176*53ee8cc1Swenshuai.xi     else
1177*53ee8cc1Swenshuai.xi     {
1178*53ee8cc1Swenshuai.xi         value = ((int)u8Level-50)*48/50;
1179*53ee8cc1Swenshuai.xi     }
1180*53ee8cc1Swenshuai.xi 
1181*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_EQ1 + (u8Band*2), value);
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi 
1184*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1185*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetEq()
1186*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the the 5-band EQ u8Level  .
1187*53ee8cc1Swenshuai.xi /// @param <IN>        \b band    :  EQ band 0~4
1188*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level    :  Absolute EQ register u8Value
1189*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1190*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1191*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1192*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetEq(MS_U8 u8Band)1193*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetEq(MS_U8 u8Band)
1194*53ee8cc1Swenshuai.xi {
1195*53ee8cc1Swenshuai.xi     MS_U16 value = 0;
1196*53ee8cc1Swenshuai.xi 
1197*53ee8cc1Swenshuai.xi     value = HAL_AUDIO_ReadByte(REG_SOUND_EQ1 + (u8Band*2));
1198*53ee8cc1Swenshuai.xi     return value;
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi 
1201*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1202*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetEq7()  @@VVV
1203*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the the 7-band EQ u8Level  .
1204*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Band    :  EQ band 0~6
1205*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Level    :  Absolute EQ register u8Value
1206*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1207*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1208*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1209*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetEq7(MS_U8 u8Band,MS_U8 u8Level)1210*53ee8cc1Swenshuai.xi void HAL_SOUND_SetEq7(MS_U8 u8Band, MS_U8 u8Level)
1211*53ee8cc1Swenshuai.xi {
1212*53ee8cc1Swenshuai.xi     MS_U8 value;
1213*53ee8cc1Swenshuai.xi 
1214*53ee8cc1Swenshuai.xi     if( u8Band>6)
1215*53ee8cc1Swenshuai.xi       return;
1216*53ee8cc1Swenshuai.xi 
1217*53ee8cc1Swenshuai.xi     if(u8Level==100)
1218*53ee8cc1Swenshuai.xi         value = 0x30;
1219*53ee8cc1Swenshuai.xi     else
1220*53ee8cc1Swenshuai.xi         value = ((int)u8Level-50)*48/50;
1221*53ee8cc1Swenshuai.xi 
1222*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_EQ_BASE + (u8Band*2), value);
1223*53ee8cc1Swenshuai.xi }
1224*53ee8cc1Swenshuai.xi 
1225*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1226*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetADCThreshold() @@VVV
1227*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the ADC input energy threshold to reduce the background noise .
1228*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Threshold    :  NR threshold u8Level
1229*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1230*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1231*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1232*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetADCThreshold(MS_U8 u8Threshold)1233*53ee8cc1Swenshuai.xi void HAL_SOUND_SetADCThreshold(MS_U8 u8Threshold)
1234*53ee8cc1Swenshuai.xi {
1235*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_NR_THRESHOLD, u8Threshold);
1236*53ee8cc1Swenshuai.xi }
1237*53ee8cc1Swenshuai.xi 
1238*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1239*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetDRCThreshold() @@VVV
1240*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the DRC  threshold u8Level.
1241*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Threshold    :  DRC threshold u8Level
1242*53ee8cc1Swenshuai.xi ///                                    0x00--  0    dBFS
1243*53ee8cc1Swenshuai.xi ///                                    0x01--  -0.5    dBFS
1244*53ee8cc1Swenshuai.xi ///                                    0x20--  -16    dBFS
1245*53ee8cc1Swenshuai.xi ///                                    0x50--  -40    dBFS
1246*53ee8cc1Swenshuai.xi /// @param <IN>        \b Type    :   SPEAKER or HEADPHONE case
1247*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1248*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1249*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1250*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetDRCThreshold(MS_U8 u8Level,AUDIO_SOUNDEFFECT_TYPE Type)1251*53ee8cc1Swenshuai.xi void HAL_SOUND_SetDRCThreshold(MS_U8 u8Level, AUDIO_SOUNDEFFECT_TYPE Type)
1252*53ee8cc1Swenshuai.xi {
1253*53ee8cc1Swenshuai.xi     if (u8Level >= 0x50)
1254*53ee8cc1Swenshuai.xi     u8Level = 0x50;
1255*53ee8cc1Swenshuai.xi 
1256*53ee8cc1Swenshuai.xi     switch (Type)
1257*53ee8cc1Swenshuai.xi     {
1258*53ee8cc1Swenshuai.xi         case AUDIO_SOUNDEFFECT_SPEAKER:
1259*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(REG_SOUND_DRC_THRESHOLD, u8Level); //[ 7: 0]
1260*53ee8cc1Swenshuai.xi             break;
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi         case AUDIO_SOUNDEFFECT_HEADPHONE:
1263*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(REG_SOUND_DRC_THRESHOLD+1, u8Level); //[15: 8]
1264*53ee8cc1Swenshuai.xi             break;
1265*53ee8cc1Swenshuai.xi 
1266*53ee8cc1Swenshuai.xi         default:
1267*53ee8cc1Swenshuai.xi             printf("Warning! Invalid AUDIO_SOUNDEFFECT_TYPE(%u). \r\n", Type);
1268*53ee8cc1Swenshuai.xi             break;
1269*53ee8cc1Swenshuai.xi     }
1270*53ee8cc1Swenshuai.xi }
1271*53ee8cc1Swenshuai.xi 
1272*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1273*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetDRCThreshold()
1274*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the DRC  threshold u8Level.
1275*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE
1276*53ee8cc1Swenshuai.xi /// @param <OUT>       \b Threshold value    :
1277*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1278*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1279*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetDRCThreshold(void)1280*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetDRCThreshold(void)
1281*53ee8cc1Swenshuai.xi {
1282*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_SeReadByte(REG_SOUND_DRC_THRESHOLD));
1283*53ee8cc1Swenshuai.xi }
1284*53ee8cc1Swenshuai.xi 
1285*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1286*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetDRCEntry() @@VVV
1287*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the DRC Entry u8Enable.
1288*53ee8cc1Swenshuai.xi /// @param <IN>        \b Type    :   SPEAKER or HEADPHONE case
1289*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Enable:   DRC EntrySelect u8Enable
1290*53ee8cc1Swenshuai.xi ///                                   0 -- DRC before VOL function; 1 -- DRC behind VOL function;
1291*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1292*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1293*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1294*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetDRCEntry(AUDIO_SOUNDEFFECT_TYPE Type,MS_U8 u8Enable)1295*53ee8cc1Swenshuai.xi void HAL_SOUND_SetDRCEntry(AUDIO_SOUNDEFFECT_TYPE Type, MS_U8 u8Enable)
1296*53ee8cc1Swenshuai.xi {
1297*53ee8cc1Swenshuai.xi     switch (Type)
1298*53ee8cc1Swenshuai.xi     {
1299*53ee8cc1Swenshuai.xi         case AUDIO_SOUNDEFFECT_SPEAKER:
1300*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskReg(M2S_MBOX_SNDEFF_CTRL2, 1<<(M2S_MBOX_SPK_VOL_BSND_CTRL_BIT), u8Enable<<(M2S_MBOX_SPK_VOL_BSND_CTRL_BIT));
1301*53ee8cc1Swenshuai.xi             break;
1302*53ee8cc1Swenshuai.xi 
1303*53ee8cc1Swenshuai.xi         case AUDIO_SOUNDEFFECT_HEADPHONE:
1304*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskReg(M2S_MBOX_SNDEFF_CTRL2, 1<<(M2S_MBOX_HP_VOL_BSND_CTRL_BIT), u8Enable<<(M2S_MBOX_HP_VOL_BSND_CTRL_BIT));
1305*53ee8cc1Swenshuai.xi             break;
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi         default:
1308*53ee8cc1Swenshuai.xi             printf("Warning! Invalid AUDIO_SOUNDEFFECT_TYPE(%u). \r\n", Type);
1309*53ee8cc1Swenshuai.xi             break;
1310*53ee8cc1Swenshuai.xi     }
1311*53ee8cc1Swenshuai.xi }
1312*53ee8cc1Swenshuai.xi 
1313*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1314*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAVCThreshold() @@VVV
1315*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  threshold u8Level.
1316*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Threshold    :  AVC threshold u8Level
1317*53ee8cc1Swenshuai.xi ///                                    0x00--  0    dBFS
1318*53ee8cc1Swenshuai.xi ///                                    0x01--  -0.5    dBFS
1319*53ee8cc1Swenshuai.xi ///                                    0x20--  -16    dBFS
1320*53ee8cc1Swenshuai.xi ///                                    0x50--  -40    dBFS
1321*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1322*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1323*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1324*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAVCThreshold(MS_U8 u8Level)1325*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAVCThreshold(MS_U8 u8Level)
1326*53ee8cc1Swenshuai.xi {
1327*53ee8cc1Swenshuai.xi     if (u8Level >= 0x50)
1328*53ee8cc1Swenshuai.xi     u8Level = 0x50;
1329*53ee8cc1Swenshuai.xi 
1330*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteByte(REG_SOUND_AVC_THRESHOLD,u8Level);
1331*53ee8cc1Swenshuai.xi }
1332*53ee8cc1Swenshuai.xi 
1333*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1334*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetAVCThreshold()
1335*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  threshold u8Level.
1336*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE
1337*53ee8cc1Swenshuai.xi /// @param <OUT>       \b Threshold value    :
1338*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1339*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1340*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetAVCThreshold(void)1341*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetAVCThreshold(void)
1342*53ee8cc1Swenshuai.xi {
1343*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_SeReadByte(REG_SOUND_AVC_THRESHOLD));
1344*53ee8cc1Swenshuai.xi }
1345*53ee8cc1Swenshuai.xi 
1346*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1347*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAvcMode()  @@VVV
1348*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  mode.
1349*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8AvcMode    :  AVC threshold u8Level
1350*53ee8cc1Swenshuai.xi ///                                    0: L mode
1351*53ee8cc1Swenshuai.xi ///                                    1: S mode
1352*53ee8cc1Swenshuai.xi ///                                    2: M mode
1353*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1354*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1355*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1356*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAvcMode(MS_U8 u8AvcMode)1357*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAvcMode(MS_U8 u8AvcMode )
1358*53ee8cc1Swenshuai.xi {
1359*53ee8cc1Swenshuai.xi     switch(u8AvcMode)
1360*53ee8cc1Swenshuai.xi     {
1361*53ee8cc1Swenshuai.xi         case 0:
1362*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AVC_MODE ,0x03 ,0x00);
1363*53ee8cc1Swenshuai.xi             break;
1364*53ee8cc1Swenshuai.xi         case 1:
1365*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AVC_MODE ,0x03 ,0x01);
1366*53ee8cc1Swenshuai.xi             break;
1367*53ee8cc1Swenshuai.xi         case 2:
1368*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(REG_SOUND_AVC_MODE ,0x03 ,0x02);
1369*53ee8cc1Swenshuai.xi             break;
1370*53ee8cc1Swenshuai.xi         default:
1371*53ee8cc1Swenshuai.xi             break;
1372*53ee8cc1Swenshuai.xi     }
1373*53ee8cc1Swenshuai.xi }
1374*53ee8cc1Swenshuai.xi 
1375*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1376*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetAvcMode()
1377*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  mode.
1378*53ee8cc1Swenshuai.xi /// @param <RET>        \b u8AvcMode    :  AVC threshold u8Level
1379*53ee8cc1Swenshuai.xi ///                                    0: L mode
1380*53ee8cc1Swenshuai.xi ///                                    1: S mode
1381*53ee8cc1Swenshuai.xi ///                                    2: M mode
1382*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetAvcMode(void)1383*53ee8cc1Swenshuai.xi MS_U16  HAL_SOUND_GetAvcMode(void)
1384*53ee8cc1Swenshuai.xi {
1385*53ee8cc1Swenshuai.xi     return(HAL_AUDIO_ReadByte(REG_SOUND_AVC_MODE)&0x03);
1386*53ee8cc1Swenshuai.xi }
1387*53ee8cc1Swenshuai.xi 
1388*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1389*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAvcAT()    @@VVV
1390*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  attack time .
1391*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8AvcAT    :  AVC attack time
1392*53ee8cc1Swenshuai.xi ///                                 AvcAT = 0 --> 2 sec
1393*53ee8cc1Swenshuai.xi ///                                 AvcAT = 1 --> 1 sec
1394*53ee8cc1Swenshuai.xi ///                                 AvcAT = 2 --> 500 ms
1395*53ee8cc1Swenshuai.xi ///                                 AvcAT = 3 --> 400 ms
1396*53ee8cc1Swenshuai.xi ///                                 AvcAT = 4 --> 300 ms
1397*53ee8cc1Swenshuai.xi ///                                 AvcAT = 5 --> 200 ms
1398*53ee8cc1Swenshuai.xi ///                                 AvcAT = 6 --> 100 ms
1399*53ee8cc1Swenshuai.xi ///                                 AvcAT = 7 --> 20  ms
1400*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1401*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1402*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1403*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAvcAT(MS_U8 u8AvcAT)1404*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAvcAT(MS_U8 u8AvcAT )
1405*53ee8cc1Swenshuai.xi {
1406*53ee8cc1Swenshuai.xi     if(u8AvcAT>7)
1407*53ee8cc1Swenshuai.xi         u8AvcAT=7;
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(REG_SOUND_AVC_AT ,0xE0 ,(u8AvcAT<<5));
1410*53ee8cc1Swenshuai.xi }
1411*53ee8cc1Swenshuai.xi 
1412*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1413*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetAvcAT()
1414*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  mode.
1415*53ee8cc1Swenshuai.xi /// @param <RET>
1416*53ee8cc1Swenshuai.xi ///                                 AvcAT = 0 --> 2 sec
1417*53ee8cc1Swenshuai.xi ///                                 AvcAT = 1 --> 1 sec
1418*53ee8cc1Swenshuai.xi ///                                 AvcAT = 2 --> 500 ms
1419*53ee8cc1Swenshuai.xi ///                                 AvcAT = 3 --> 400 ms
1420*53ee8cc1Swenshuai.xi ///                                 AvcAT = 4 --> 300  ms
1421*53ee8cc1Swenshuai.xi ///                                 AvcAT = 5 --> 200 ms
1422*53ee8cc1Swenshuai.xi ///                                 AvcAT = 6 --> 100 ms
1423*53ee8cc1Swenshuai.xi ///                                 AvcAT = 7 --> 20  ms
1424*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetAvcAT(void)1425*53ee8cc1Swenshuai.xi MS_U16  HAL_SOUND_GetAvcAT(void)
1426*53ee8cc1Swenshuai.xi {
1427*53ee8cc1Swenshuai.xi     return((HAL_AUDIO_ReadByte(REG_SOUND_AVC_AT)&0xE0)>>5);
1428*53ee8cc1Swenshuai.xi }
1429*53ee8cc1Swenshuai.xi 
1430*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1431*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAvcRT()    @@VVV
1432*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  release time .
1433*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8AvcRT    :  AVC release time
1434*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 0 --> 2 sec
1435*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 1 --> 1 sec
1436*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 2 --> 500 ms
1437*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 3 --> 400 ms
1438*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 4 --> 300 ms
1439*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 5 --> 200 ms
1440*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 6 --> 100 ms
1441*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 7 --> 20  ms
1442*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1443*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1444*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1445*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAvcRT(MS_U8 u8AvcRT)1446*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAvcRT(MS_U8 u8AvcRT )
1447*53ee8cc1Swenshuai.xi {
1448*53ee8cc1Swenshuai.xi     if(u8AvcRT>7)
1449*53ee8cc1Swenshuai.xi         u8AvcRT=7;
1450*53ee8cc1Swenshuai.xi 
1451*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(REG_SOUND_AVC_RT ,0x1C ,(u8AvcRT<<2));
1452*53ee8cc1Swenshuai.xi }
1453*53ee8cc1Swenshuai.xi 
1454*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1455*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetAvcRT()
1456*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the AVC  mode.
1457*53ee8cc1Swenshuai.xi /// @param <RET>        \b u8AvcRT    :  AVC release time
1458*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 0 --> 2 sec
1459*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 1 --> 1 sec
1460*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 2 --> 500 ms
1461*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 3 --> 400 ms
1462*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 4 --> 300 ms
1463*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 5 --> 200 ms
1464*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 6 --> 100 ms
1465*53ee8cc1Swenshuai.xi ///                                 u8AvcRT = 7 --> 20  ms
1466*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetAvcRT(void)1467*53ee8cc1Swenshuai.xi MS_U16  HAL_SOUND_GetAvcRT(void)
1468*53ee8cc1Swenshuai.xi {
1469*53ee8cc1Swenshuai.xi     MS_U16 Mode=0;
1470*53ee8cc1Swenshuai.xi 
1471*53ee8cc1Swenshuai.xi     Mode = (HAL_AUDIO_ReadByte(REG_SOUND_AVC_RT)&0x1C) >> 2;
1472*53ee8cc1Swenshuai.xi    return Mode;
1473*53ee8cc1Swenshuai.xi }
1474*53ee8cc1Swenshuai.xi 
1475*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1476*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnablePEQ()
1477*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable PEQ featue
1478*53ee8cc1Swenshuai.xi /// @param <IN>        \b Enpeq   :     TRUE  -- Enable  PEQ
1479*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable PEQ
1480*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1481*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1482*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1483*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnablePEQ(MS_BOOL Enpeq)1484*53ee8cc1Swenshuai.xi void HAL_SOUND_EnablePEQ(MS_BOOL Enpeq)
1485*53ee8cc1Swenshuai.xi {
1486*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x01, Enpeq);
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi 
1489*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1490*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetPEQ_Status()
1491*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the PEQ is enable or not
1492*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1493*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1494*53ee8cc1Swenshuai.xi /// @param <RET>       \b bEnable :     TRUE  -- Enable  PEQ
1495*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable PEQ
1496*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1497*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetPEQ_Status(void)1498*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetPEQ_Status(void)
1499*53ee8cc1Swenshuai.xi {
1500*53ee8cc1Swenshuai.xi     if ((HAL_AUDIO_ReadByte(0x2D20)&0x01) == 0x01)
1501*53ee8cc1Swenshuai.xi     {
1502*53ee8cc1Swenshuai.xi         return 1;
1503*53ee8cc1Swenshuai.xi     }
1504*53ee8cc1Swenshuai.xi     else
1505*53ee8cc1Swenshuai.xi     {
1506*53ee8cc1Swenshuai.xi         return 0;
1507*53ee8cc1Swenshuai.xi     }
1508*53ee8cc1Swenshuai.xi }
1509*53ee8cc1Swenshuai.xi 
1510*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1511*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableHPF()   @@VVV
1512*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable HPF featue.
1513*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  HPF
1514*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable HPF
1515*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1516*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1517*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1518*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableHPF(MS_BOOL bEnable)1519*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableHPF(MS_BOOL bEnable)
1520*53ee8cc1Swenshuai.xi {
1521*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x04, bEnable<<2);
1522*53ee8cc1Swenshuai.xi }
1523*53ee8cc1Swenshuai.xi 
1524*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1525*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetHPF_Status()
1526*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the HPF is enable or not
1527*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1528*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1529*53ee8cc1Swenshuai.xi /// @param <RET>       \b bEnable :     TRUE  -- Enable  HPF
1530*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable HPF
1531*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1532*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetHPF_Status(void)1533*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetHPF_Status(void)
1534*53ee8cc1Swenshuai.xi {
1535*53ee8cc1Swenshuai.xi     if ((HAL_AUDIO_ReadByte(0x2D20)&0x04) == 0x04)
1536*53ee8cc1Swenshuai.xi     {
1537*53ee8cc1Swenshuai.xi         return 1;
1538*53ee8cc1Swenshuai.xi     }
1539*53ee8cc1Swenshuai.xi     else
1540*53ee8cc1Swenshuai.xi     {
1541*53ee8cc1Swenshuai.xi         return 0;
1542*53ee8cc1Swenshuai.xi     }
1543*53ee8cc1Swenshuai.xi }
1544*53ee8cc1Swenshuai.xi 
1545*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1546*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableDcRemove()
1547*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable DC remove.
1548*53ee8cc1Swenshuai.xi /// @param <IN>        \b EnDcRemove :  TRUE  -- Enable  DC remove
1549*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable DC remove
1550*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1551*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1552*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1553*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableDcRemove(MS_BOOL EnDcRemove)1554*53ee8cc1Swenshuai.xi MS_BOOL HAL_SOUND_EnableDcRemove(MS_BOOL EnDcRemove)
1555*53ee8cc1Swenshuai.xi {
1556*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x08, EnDcRemove<<3);
1557*53ee8cc1Swenshuai.xi     return 1;
1558*53ee8cc1Swenshuai.xi }
1559*53ee8cc1Swenshuai.xi 
1560*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1561*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableKTVEcho()  @@VVV
1562*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to bEnable/disable the KTVEcho featue.
1563*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  KTVEcho
1564*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable KTVEcho
1565*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1566*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1567*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1568*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableKTVEcho(MS_BOOL bEnable)1569*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableKTVEcho(MS_BOOL bEnable)
1570*53ee8cc1Swenshuai.xi {
1571*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x10, bEnable<<4);
1572*53ee8cc1Swenshuai.xi }
1573*53ee8cc1Swenshuai.xi 
1574*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1575*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableEaseVol()  @@VVV
1576*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to bEnable/disable the EaseVol featue.
1577*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  EaseVol
1578*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable EaseVol
1579*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1580*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1581*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1582*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableEaseVol(MS_BOOL bEnable)1583*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableEaseVol(MS_BOOL bEnable)
1584*53ee8cc1Swenshuai.xi {
1585*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x40, bEnable<<6);
1586*53ee8cc1Swenshuai.xi }
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1589*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableEQ()   @@VVV
1590*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable GEQ featue.
1591*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  GEQ
1592*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable GEQ
1593*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1594*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1595*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1596*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableEQ(MS_BOOL bEnable)1597*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableEQ(MS_BOOL bEnable)
1598*53ee8cc1Swenshuai.xi {
1599*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D20, 0x80, bEnable<<7);
1600*53ee8cc1Swenshuai.xi }
1601*53ee8cc1Swenshuai.xi 
1602*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1603*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetEQ_Status()
1604*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the GEQ is enable or not
1605*53ee8cc1Swenshuai.xi /// @param <IN>       \b NONE    :
1606*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1607*53ee8cc1Swenshuai.xi /// @param <RET>       \b bEnable :     TRUE  -- Enable  GEQ
1608*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable GEQ
1609*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1610*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetEQ_Status(void)1611*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetEQ_Status(void)
1612*53ee8cc1Swenshuai.xi {
1613*53ee8cc1Swenshuai.xi     if((HAL_AUDIO_ReadByte(0x2D20)&0x80) == 0x80)
1614*53ee8cc1Swenshuai.xi     {
1615*53ee8cc1Swenshuai.xi         return 1;
1616*53ee8cc1Swenshuai.xi     }
1617*53ee8cc1Swenshuai.xi     else
1618*53ee8cc1Swenshuai.xi     {
1619*53ee8cc1Swenshuai.xi         return 0;
1620*53ee8cc1Swenshuai.xi     }
1621*53ee8cc1Swenshuai.xi }
1622*53ee8cc1Swenshuai.xi 
1623*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1624*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableSurround()  @@VVV
1625*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable Surround featue.
1626*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Enable Surround
1627*53ee8cc1Swenshuai.xi ///                                                    FALSE--Disable Surround
1628*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1629*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1630*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1631*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableSurround(MS_BOOL bEnable)1632*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableSurround(MS_BOOL bEnable)
1633*53ee8cc1Swenshuai.xi {
1634*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D21, 0x04, bEnable<<2);
1635*53ee8cc1Swenshuai.xi }
1636*53ee8cc1Swenshuai.xi 
1637*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1638*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSurround_Status()
1639*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the Surround is enable or not
1640*53ee8cc1Swenshuai.xi /// @param <IN>       \b NONE    :
1641*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1642*53ee8cc1Swenshuai.xi /// @param <RET>        \b bEnable    :     TRUE --Enable Surround
1643*53ee8cc1Swenshuai.xi ///                                                    FALSE--Disable Surround
1644*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1645*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSurround_Status(void)1646*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSurround_Status(void)
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi     if((HAL_AUDIO_ReadByte(0x2D21)&0x04) == 0x04)
1649*53ee8cc1Swenshuai.xi     {
1650*53ee8cc1Swenshuai.xi         return 1;
1651*53ee8cc1Swenshuai.xi     }
1652*53ee8cc1Swenshuai.xi     else
1653*53ee8cc1Swenshuai.xi     {
1654*53ee8cc1Swenshuai.xi         return 0;
1655*53ee8cc1Swenshuai.xi     }
1656*53ee8cc1Swenshuai.xi }
1657*53ee8cc1Swenshuai.xi 
1658*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1659*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableTone()  @@VVV
1660*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable the Bass & Treble featue.
1661*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Enable Tone
1662*53ee8cc1Swenshuai.xi ///                                                    FALSE--Disable Tone
1663*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1664*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1665*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1666*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableTone(MS_BOOL bEnable)1667*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableTone(MS_BOOL bEnable)
1668*53ee8cc1Swenshuai.xi {
1669*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D21, 0x08, bEnable<<3);
1670*53ee8cc1Swenshuai.xi }
1671*53ee8cc1Swenshuai.xi 
1672*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1673*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetTone_Status()
1674*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get Bass & Trebleis enable or not
1675*53ee8cc1Swenshuai.xi /// @param <IN>       \b NONE    :
1676*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1677*53ee8cc1Swenshuai.xi /// @param <RET>        \b bEnable    :     TRUE --Enable Tone
1678*53ee8cc1Swenshuai.xi ///                                                    FALSE--Disable Tone
1679*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1680*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetTone_Status(void)1681*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetTone_Status(void)
1682*53ee8cc1Swenshuai.xi {
1683*53ee8cc1Swenshuai.xi     if((HAL_AUDIO_ReadByte(0x2D21)&0x08) == 0x08)
1684*53ee8cc1Swenshuai.xi     {
1685*53ee8cc1Swenshuai.xi        return 1;
1686*53ee8cc1Swenshuai.xi     }
1687*53ee8cc1Swenshuai.xi     else
1688*53ee8cc1Swenshuai.xi     {
1689*53ee8cc1Swenshuai.xi        return 0;
1690*53ee8cc1Swenshuai.xi     }
1691*53ee8cc1Swenshuai.xi }
1692*53ee8cc1Swenshuai.xi 
1693*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1694*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableAutoVolume() @@VVV
1695*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable the AVC featue.
1696*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  AVC (AutoVolume)
1697*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable AVC (AutoVolume)
1698*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1699*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1700*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1701*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableAutoVolume(MS_BOOL bEnable)1702*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableAutoVolume(MS_BOOL bEnable)
1703*53ee8cc1Swenshuai.xi {
1704*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D21, 0x10, bEnable<<4);
1705*53ee8cc1Swenshuai.xi }
1706*53ee8cc1Swenshuai.xi 
1707*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1708*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetAutoVolume_Status()
1709*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the AutoVolume is enable or not
1710*53ee8cc1Swenshuai.xi /// @param <IN>       \b NONE    :
1711*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1712*53ee8cc1Swenshuai.xi /// @param <RET>       \b bEnable :     TRUE  -- Enable  AVC (AutoVolume)
1713*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable AVC (AutoVolume)
1714*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1715*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetAutoVolume_Status(void)1716*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetAutoVolume_Status(void)
1717*53ee8cc1Swenshuai.xi {
1718*53ee8cc1Swenshuai.xi     if((HAL_AUDIO_ReadByte(0x2D21)&0x10) == 0x10)
1719*53ee8cc1Swenshuai.xi     {
1720*53ee8cc1Swenshuai.xi         return 1;
1721*53ee8cc1Swenshuai.xi     }
1722*53ee8cc1Swenshuai.xi     else
1723*53ee8cc1Swenshuai.xi     {
1724*53ee8cc1Swenshuai.xi         return 0;
1725*53ee8cc1Swenshuai.xi     }
1726*53ee8cc1Swenshuai.xi }
1727*53ee8cc1Swenshuai.xi 
1728*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1729*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableDRC() @@VVV
1730*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable the DRC featue.
1731*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable :     TRUE  -- Enable  DRC
1732*53ee8cc1Swenshuai.xi ///                                     FALSE -- Disable DRC
1733*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1734*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1735*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1736*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableDRC(MS_BOOL bEnable)1737*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableDRC(MS_BOOL bEnable)
1738*53ee8cc1Swenshuai.xi {
1739*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D21, 0x20, bEnable<<5);
1740*53ee8cc1Swenshuai.xi }
1741*53ee8cc1Swenshuai.xi 
1742*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1743*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_EnableNR()
1744*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Enable/Disable the NR(Noise Reduction) featue and set NR thershold.
1745*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Enable NR
1746*53ee8cc1Swenshuai.xi ///                                                    FALSE--Disable NR
1747*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1748*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1749*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1750*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_EnableNR(MS_U8 u8Level)1751*53ee8cc1Swenshuai.xi void HAL_SOUND_EnableNR(MS_U8 u8Level)
1752*53ee8cc1Swenshuai.xi {
1753*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D32, 0xFF, u8Level);
1754*53ee8cc1Swenshuai.xi }
1755*53ee8cc1Swenshuai.xi 
1756*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1757*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetNRAttenuate()
1758*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the attenuate u8Level while NR is bEnabled.
1759*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mode    :     0 :    Auto fading to -24 dB
1760*53ee8cc1Swenshuai.xi ///                                                  1 :    Auto fading to -24 dB
1761*53ee8cc1Swenshuai.xi ///                                                  2 :    Auto fading to -24 dB
1762*53ee8cc1Swenshuai.xi ///                                                  3 :    Auto fading to -24 dB
1763*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1764*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1765*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1766*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetNRAttenuate(MS_U8 u8Mode)1767*53ee8cc1Swenshuai.xi void HAL_SOUND_SetNRAttenuate(MS_U8 u8Mode)
1768*53ee8cc1Swenshuai.xi {
1769*53ee8cc1Swenshuai.xi     u8Mode = u8Mode;
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi 
1772*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1773*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_PowerDown_Wait() @@VVV
1774*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to DSP power-down wait function.
1775*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Not wait
1776*53ee8cc1Swenshuai.xi ///                                                    FALSE--wait
1777*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1778*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1779*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1780*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_PowerDown_Wait(MS_BOOL bEnable)1781*53ee8cc1Swenshuai.xi void HAL_SOUND_PowerDown_Wait(MS_BOOL bEnable)
1782*53ee8cc1Swenshuai.xi {
1783*53ee8cc1Swenshuai.xi     HAL_AUDIO_WriteMaskByte(0x2D31, 0x01, bEnable);
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1787*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAdAbsoluteVolume()  @@VVV
1788*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the absolute volume of AD.
1789*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol1    :     MSB 7-bit register u8Value of 10-bit volume
1790*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x7E , gain: +12db to   -114db (-1 db per step)
1791*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol2    :     LSB 3-bit register u8Value of 10-bit volume
1792*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x07 , gain:  -0db to -0.875db (-0.125 db per step)
1793*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1794*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1795*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1796*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAdAbsoluteVolume(MS_U8 u8Vol1,MS_U8 u8Vol2)1797*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAdAbsoluteVolume(MS_U8 u8Vol1, MS_U8 u8Vol2)
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi     MS_U32 Vol = ((u8Vol1<<3) | (u8Vol2&0x07));
1800*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AD_VOLUME, ADEC1, Vol, 0);
1801*53ee8cc1Swenshuai.xi     // Vol[10:0] =  mute[10]|int[9:3]|fra[2:0]
1802*53ee8cc1Swenshuai.xi }
1803*53ee8cc1Swenshuai.xi 
1804*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1805*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetAdMute()  @@VVV
1806*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set AD mute.
1807*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Mute AD
1808*53ee8cc1Swenshuai.xi ///                                        FALSE--Unmute AD
1809*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1810*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1811*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1812*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetAdMute(MS_BOOL bEnable)1813*53ee8cc1Swenshuai.xi void HAL_SOUND_SetAdMute(MS_BOOL bEnable)
1814*53ee8cc1Swenshuai.xi {
1815*53ee8cc1Swenshuai.xi     HAL_DEC_R2_Set_SHM_PARAM(R2_SHM_PARAM_AD_VOLUME_MUTE, ADEC1, bEnable, 0);
1816*53ee8cc1Swenshuai.xi }
1817*53ee8cc1Swenshuai.xi 
1818*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1819*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetCH1AudioDelay()
1820*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u16Value of audio delay.
1821*53ee8cc1Swenshuai.xi /// @param <IN>        \b delay    :   in ms unit
1822*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1823*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1824*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1825*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetCH1AudioDelay(MS_U16 u16Delay)1826*53ee8cc1Swenshuai.xi void HAL_SOUND_SetCH1AudioDelay(MS_U16 u16Delay)
1827*53ee8cc1Swenshuai.xi {
1828*53ee8cc1Swenshuai.xi     if (u16Delay > AUDIO_DELAY_UPPER_BOUND)
1829*53ee8cc1Swenshuai.xi     {
1830*53ee8cc1Swenshuai.xi         printf("Warning! Invalid value (%u), main audio delay should be less than %u ms. \r\n", u16Delay, AUDIO_DELAY_UPPER_BOUND);
1831*53ee8cc1Swenshuai.xi         u16Delay = AUDIO_DELAY_UPPER_BOUND;
1832*53ee8cc1Swenshuai.xi     }
1833*53ee8cc1Swenshuai.xi 
1834*53ee8cc1Swenshuai.xi     if (u16Delay < AUDIO_DELAY_LOWER_BOUND)
1835*53ee8cc1Swenshuai.xi     {
1836*53ee8cc1Swenshuai.xi         printf("Warning! Invalid value (%u), main audio delay should be larger than %u ms. \r\n", u16Delay, AUDIO_DELAY_LOWER_BOUND);
1837*53ee8cc1Swenshuai.xi         u16Delay = AUDIO_DELAY_LOWER_BOUND;
1838*53ee8cc1Swenshuai.xi     }
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi     HAL_MAD2_Write_DSP_sram(DSP2PmAddr_mainAudioDelay, u16Delay, DSP_MEM_TYPE_PM);
1841*53ee8cc1Swenshuai.xi }
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1844*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetCH1AudioDelay()
1845*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value of audio delay.
1846*53ee8cc1Swenshuai.xi /// @param <RET>        \b delay    :  in ms unit
1847*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetCH1AudioDelay(void)1848*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetCH1AudioDelay(void)
1849*53ee8cc1Swenshuai.xi {
1850*53ee8cc1Swenshuai.xi     return(HAL_MAD2_Read_DSP_sram(DSP2PmAddr_mainAudioDelay, DSP_MEM_TYPE_PM));
1851*53ee8cc1Swenshuai.xi }
1852*53ee8cc1Swenshuai.xi 
1853*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1854*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetCH5AudioDelay()
1855*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u16Value of CH5 delay.
1856*53ee8cc1Swenshuai.xi /// @param <IN>        \b delay    :   in ms unit
1857*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetCH5AudioDelay(MS_U16 u16Delay)1858*53ee8cc1Swenshuai.xi void HAL_SOUND_SetCH5AudioDelay(MS_U16 u16Delay)
1859*53ee8cc1Swenshuai.xi {
1860*53ee8cc1Swenshuai.xi     HAL_MAD2_Write_DSP_sram(DSP2PmAddr_ch5InputDelay, u16Delay, DSP_MEM_TYPE_PM);
1861*53ee8cc1Swenshuai.xi }
1862*53ee8cc1Swenshuai.xi 
1863*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1864*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetCH5AudioDelay()
1865*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value of audio delay.
1866*53ee8cc1Swenshuai.xi /// @param <RET>        \b delay    :  in ms unit
1867*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetCH5AudioDelay(void)1868*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetCH5AudioDelay(void)
1869*53ee8cc1Swenshuai.xi {
1870*53ee8cc1Swenshuai.xi     return(HAL_MAD2_Read_DSP_sram(DSP2PmAddr_ch5InputDelay, DSP_MEM_TYPE_PM));
1871*53ee8cc1Swenshuai.xi }
1872*53ee8cc1Swenshuai.xi 
1873*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1874*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetCH6AudioDelay()
1875*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u16Value of CH6 delay.
1876*53ee8cc1Swenshuai.xi /// @param <IN>        \b delay    :   in ms unit
1877*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetCH6AudioDelay(MS_U16 u16Delay)1878*53ee8cc1Swenshuai.xi void HAL_SOUND_SetCH6AudioDelay(MS_U16 u16Delay)
1879*53ee8cc1Swenshuai.xi {
1880*53ee8cc1Swenshuai.xi     HAL_MAD2_Write_DSP_sram(DSP2PmAddr_ch6InputDelay, u16Delay, DSP_MEM_TYPE_PM);
1881*53ee8cc1Swenshuai.xi }
1882*53ee8cc1Swenshuai.xi 
1883*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1884*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetCH6AudioDelay()
1885*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value of audio delay.
1886*53ee8cc1Swenshuai.xi /// @param <RET>        \b delay    :  in ms unit
1887*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetCH6AudioDelay(void)1888*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetCH6AudioDelay(void)
1889*53ee8cc1Swenshuai.xi {
1890*53ee8cc1Swenshuai.xi     return(HAL_MAD2_Read_DSP_sram(DSP2PmAddr_ch6InputDelay, DSP_MEM_TYPE_PM));
1891*53ee8cc1Swenshuai.xi }
1892*53ee8cc1Swenshuai.xi 
1893*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1894*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetSpdifAudioDelay()
1895*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u16Value of audio delay.
1896*53ee8cc1Swenshuai.xi /// @param <IN>        \b delay    :   in ms unit
1897*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1898*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1899*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1900*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetSpdifAudioDelay(MS_U16 u16Delay)1901*53ee8cc1Swenshuai.xi void HAL_SOUND_SetSpdifAudioDelay(MS_U16 u16Delay)
1902*53ee8cc1Swenshuai.xi {
1903*53ee8cc1Swenshuai.xi     if (u16Delay > AUDIO_DELAY_UPPER_BOUND_SPDIF)
1904*53ee8cc1Swenshuai.xi     {
1905*53ee8cc1Swenshuai.xi         printf("Warning! Invalid value (%u), spdif audio delay should be less than %u ms. \r\n", u16Delay, AUDIO_DELAY_UPPER_BOUND_SPDIF);
1906*53ee8cc1Swenshuai.xi         u16Delay = AUDIO_DELAY_UPPER_BOUND_SPDIF;
1907*53ee8cc1Swenshuai.xi     }
1908*53ee8cc1Swenshuai.xi 
1909*53ee8cc1Swenshuai.xi     if (u16Delay < AUDIO_DELAY_LOWER_BOUND_SPDIF)
1910*53ee8cc1Swenshuai.xi     {
1911*53ee8cc1Swenshuai.xi         printf("Warning! Invalid value (%u), spdif audio delay should be larger than %u ms. \r\n", u16Delay, AUDIO_DELAY_LOWER_BOUND_SPDIF);
1912*53ee8cc1Swenshuai.xi         u16Delay = AUDIO_DELAY_LOWER_BOUND_SPDIF;
1913*53ee8cc1Swenshuai.xi     }
1914*53ee8cc1Swenshuai.xi 
1915*53ee8cc1Swenshuai.xi     HAL_MAD2_Write_DSP_sram(DSP2PmAddr_spdifDelay, u16Delay, DSP_MEM_TYPE_PM);
1916*53ee8cc1Swenshuai.xi }
1917*53ee8cc1Swenshuai.xi 
1918*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1919*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSpdifAudioDelay()
1920*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value of audio SPDIF delay.
1921*53ee8cc1Swenshuai.xi /// @param <RET>        \b delay    :  in ms unit
1922*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSpdifAudioDelay(void)1923*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSpdifAudioDelay(void)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi     return(HAL_MAD2_Read_DSP_sram(DSP2PmAddr_spdifDelay, DSP_MEM_TYPE_PM));
1926*53ee8cc1Swenshuai.xi }
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1929*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetHPAudioDelay()
1930*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the u16Value of HP delay.
1931*53ee8cc1Swenshuai.xi /// @param <IN>        \b delay    :   in ms unit
1932*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetHPAudioDelay(MS_U16 u16Delay)1933*53ee8cc1Swenshuai.xi void HAL_SOUND_SetHPAudioDelay(MS_U16 u16Delay)
1934*53ee8cc1Swenshuai.xi {
1935*53ee8cc1Swenshuai.xi     HAL_MAD2_Write_DSP_sram(DSP2PmAddr_hpDelay, u16Delay, DSP_MEM_TYPE_PM);
1936*53ee8cc1Swenshuai.xi }
1937*53ee8cc1Swenshuai.xi 
1938*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1939*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetHPAudioDelay()
1940*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to get the u16Value of audio HP delay.
1941*53ee8cc1Swenshuai.xi /// @param <RET>        \b delay    :   in ms unit
1942*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetHPAudioDelay(void)1943*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetHPAudioDelay(void)
1944*53ee8cc1Swenshuai.xi {
1945*53ee8cc1Swenshuai.xi     return(HAL_MAD2_Read_DSP_sram(DSP2PmAddr_hpDelay, DSP_MEM_TYPE_PM));
1946*53ee8cc1Swenshuai.xi }
1947*53ee8cc1Swenshuai.xi 
1948*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1949*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetMenuSound() @@Need_Modify
1950*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to Play Menu Sound.
1951*53ee8cc1Swenshuai.xi /// @param <IN>        \b NONE    :
1952*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1953*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1954*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
1955*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_PlayMenuSound(void)1956*53ee8cc1Swenshuai.xi void HAL_SOUND_PlayMenuSound(void)
1957*53ee8cc1Swenshuai.xi {
1958*53ee8cc1Swenshuai.xi      /*Cathy0721
1959*53ee8cc1Swenshuai.xi      HAL_AUDIO_WriteMaskByte(0x2DAE, 0x01, 0x01);
1960*53ee8cc1Swenshuai.xi      AUDIO_DELAY1MS(10);
1961*53ee8cc1Swenshuai.xi      HAL_AUDIO_WriteMaskByte(0x2DAE, 0x01, 0x00);*/
1962*53ee8cc1Swenshuai.xi }
1963*53ee8cc1Swenshuai.xi 
1964*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1965*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetSurroundXA() @@VVV
1966*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xA Gain.
1967*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mode    :     0 :    0.1         xA : 0x2D8A[3:2] 00: 0.1
1968*53ee8cc1Swenshuai.xi ///                                    1 :    0.15                         01: 0.15
1969*53ee8cc1Swenshuai.xi ///                                    2 :    0.2                          10: 0.2
1970*53ee8cc1Swenshuai.xi ///                                    3 :    0.25                         11: 0.25
1971*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
1972*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
1973*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE
1974*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetSurroundXA(MS_U8 u8Mode)1975*53ee8cc1Swenshuai.xi void HAL_SOUND_SetSurroundXA(MS_U8 u8Mode)
1976*53ee8cc1Swenshuai.xi {
1977*53ee8cc1Swenshuai.xi    switch(u8Mode)
1978*53ee8cc1Swenshuai.xi     {
1979*53ee8cc1Swenshuai.xi         case 0:
1980*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x0C ,0x00);
1981*53ee8cc1Swenshuai.xi             break;
1982*53ee8cc1Swenshuai.xi         case 1:
1983*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x0C ,0x04);
1984*53ee8cc1Swenshuai.xi             break;
1985*53ee8cc1Swenshuai.xi         case 2:
1986*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x0C ,0x08);
1987*53ee8cc1Swenshuai.xi             break;
1988*53ee8cc1Swenshuai.xi         case 3:
1989*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x0C ,0x0C);
1990*53ee8cc1Swenshuai.xi             break;
1991*53ee8cc1Swenshuai.xi         default:
1992*53ee8cc1Swenshuai.xi             break;
1993*53ee8cc1Swenshuai.xi     }
1994*53ee8cc1Swenshuai.xi }
1995*53ee8cc1Swenshuai.xi 
1996*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1997*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSurroundXA()
1998*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xA Gain.
1999*53ee8cc1Swenshuai.xi /// @param <RET> MODE  \b u8Mode    :     0 :    0.1         xA : 0x2D8A[3:2] 00: 0.1
2000*53ee8cc1Swenshuai.xi ///                                    1 :    0.15                         01: 0.15
2001*53ee8cc1Swenshuai.xi ///                                    2 :    0.2                          10: 0.2
2002*53ee8cc1Swenshuai.xi ///                                    3 :    0.25                         11: 0.25
2003*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSurroundXA(void)2004*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSurroundXA(void)
2005*53ee8cc1Swenshuai.xi {
2006*53ee8cc1Swenshuai.xi     return((HAL_AUDIO_ReadByte(0x2D26)&0x0C)>>2);
2007*53ee8cc1Swenshuai.xi }
2008*53ee8cc1Swenshuai.xi 
2009*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2010*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetSurroundXB()  @@VVV
2011*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xB Gain.
2012*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mode    :     0 :    0.25         xB : 0x2D8A[5:4] 00: 0.25
2013*53ee8cc1Swenshuai.xi ///                                                  1 :    0.3                           01: 0.3
2014*53ee8cc1Swenshuai.xi ///                                                  2 :    0.35                          10: 0.35
2015*53ee8cc1Swenshuai.xi ///                                                  3 :    0.45                          11: 0.45
2016*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2017*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
2018*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE
2019*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetSurroundXB(MS_U8 u8Mode)2020*53ee8cc1Swenshuai.xi void HAL_SOUND_SetSurroundXB(MS_U8 u8Mode)
2021*53ee8cc1Swenshuai.xi {
2022*53ee8cc1Swenshuai.xi     switch(u8Mode)
2023*53ee8cc1Swenshuai.xi     {
2024*53ee8cc1Swenshuai.xi         case 0:
2025*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x30 ,0x00);
2026*53ee8cc1Swenshuai.xi             break;
2027*53ee8cc1Swenshuai.xi         case 1:
2028*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x30 ,0x10);
2029*53ee8cc1Swenshuai.xi             break;
2030*53ee8cc1Swenshuai.xi         case 2:
2031*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x30 ,0x20);
2032*53ee8cc1Swenshuai.xi             break;
2033*53ee8cc1Swenshuai.xi         case 3:
2034*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0x30 ,0x30);
2035*53ee8cc1Swenshuai.xi             break;
2036*53ee8cc1Swenshuai.xi         default:
2037*53ee8cc1Swenshuai.xi             break;
2038*53ee8cc1Swenshuai.xi     }
2039*53ee8cc1Swenshuai.xi }
2040*53ee8cc1Swenshuai.xi 
2041*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2042*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSurroundXB()
2043*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xB Gain.
2044*53ee8cc1Swenshuai.xi /// @param <RET> MODE  \b u8Mode    :     0 :    0.1         xB : 0x2D8A[3:2] 00: 0.1
2045*53ee8cc1Swenshuai.xi ///                                    1 :    0.15                         01: 0.15
2046*53ee8cc1Swenshuai.xi ///                                    2 :    0.2                          10: 0.2
2047*53ee8cc1Swenshuai.xi ///                                    3 :    0.25                         11: 0.25
2048*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSurroundXB(void)2049*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSurroundXB(void)
2050*53ee8cc1Swenshuai.xi {
2051*53ee8cc1Swenshuai.xi     return((HAL_AUDIO_ReadByte(0x2D26)&0x30)>>4);
2052*53ee8cc1Swenshuai.xi }
2053*53ee8cc1Swenshuai.xi 
2054*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2055*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetSurroundXK() @@VVV
2056*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xK Gain.
2057*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mode    :     0 :    0.1         xK : 0x2D8A[7:6]  00: 0.1
2058*53ee8cc1Swenshuai.xi ///                                                  1 :    0.2                           01: 0.2
2059*53ee8cc1Swenshuai.xi ///                                                  2 :    0.3                           10: 0.3
2060*53ee8cc1Swenshuai.xi ///                                                  3 :    0.4                           11: 0.4
2061*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2062*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
2063*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE
2064*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetSurroundXK(MS_U8 u8Mode)2065*53ee8cc1Swenshuai.xi void HAL_SOUND_SetSurroundXK(MS_U8 u8Mode)
2066*53ee8cc1Swenshuai.xi {
2067*53ee8cc1Swenshuai.xi      HAL_AUDIO_WriteMaskByte(0x2D27 ,0x07 ,u8Mode);
2068*53ee8cc1Swenshuai.xi }
2069*53ee8cc1Swenshuai.xi 
2070*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2071*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSurroundXK()
2072*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xK Gain.
2073*53ee8cc1Swenshuai.xi /// @param <RET> MODE  \b u8Mode    :     0 :    0.1         xK : 0x2D27[2:0] 00: 0.1
2074*53ee8cc1Swenshuai.xi ///                                                  1 :    0.2                           01: 0.2
2075*53ee8cc1Swenshuai.xi ///                                                  2 :    0.3                           10: 0.3
2076*53ee8cc1Swenshuai.xi ///                                                  3 :    0.4                           11: 0.4
2077*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSurroundXK(void)2078*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSurroundXK(void)
2079*53ee8cc1Swenshuai.xi {
2080*53ee8cc1Swenshuai.xi     MS_U16 Mode=0;
2081*53ee8cc1Swenshuai.xi 
2082*53ee8cc1Swenshuai.xi     Mode = HAL_AUDIO_ReadByte(0x2D27)&0x07;
2083*53ee8cc1Swenshuai.xi 
2084*53ee8cc1Swenshuai.xi     return Mode;
2085*53ee8cc1Swenshuai.xi }
2086*53ee8cc1Swenshuai.xi 
2087*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2088*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetSurroundLPFGain() @@VVV
2089*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround LPF Gain.
2090*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8Mode    :     0 :    0 dB        LPF Gain : 0x2DA0[7:6]  00: 0 dB
2091*53ee8cc1Swenshuai.xi ///                                                  1 :    2 dB                                01: 2 dB
2092*53ee8cc1Swenshuai.xi ///                                                  2 :    4 dB                                10: 4 dB
2093*53ee8cc1Swenshuai.xi ///                                                  3 :    un-support                          11: un-support
2094*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2095*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
2096*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE
2097*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetSurroundLPFGain(MS_U8 u8Mode)2098*53ee8cc1Swenshuai.xi void HAL_SOUND_SetSurroundLPFGain(MS_U8 u8Mode)
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi    switch(u8Mode)
2101*53ee8cc1Swenshuai.xi     {
2102*53ee8cc1Swenshuai.xi         case 0:
2103*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0xC0 ,0x00);
2104*53ee8cc1Swenshuai.xi             break;
2105*53ee8cc1Swenshuai.xi         case 1:
2106*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0xC0 ,0x40);
2107*53ee8cc1Swenshuai.xi             break;
2108*53ee8cc1Swenshuai.xi         case 2:
2109*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskByte(0x2D26 ,0xC0 ,0x80);
2110*53ee8cc1Swenshuai.xi             break;
2111*53ee8cc1Swenshuai.xi         case 3:
2112*53ee8cc1Swenshuai.xi             //HAL_AUDIO_WriteMaskByte(0x2D26 ,0xC0 ,0xC0);
2113*53ee8cc1Swenshuai.xi             break;
2114*53ee8cc1Swenshuai.xi         default:
2115*53ee8cc1Swenshuai.xi             break;
2116*53ee8cc1Swenshuai.xi     }
2117*53ee8cc1Swenshuai.xi }
2118*53ee8cc1Swenshuai.xi 
2119*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2120*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_GetSurroundLPFGain()
2121*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the Surround xK Gain.
2122*53ee8cc1Swenshuai.xi /// @param <RET>   \b LPFGain    :
2123*53ee8cc1Swenshuai.xi //                                      0 :    0dB
2124*53ee8cc1Swenshuai.xi ///                                    1 :    2dB
2125*53ee8cc1Swenshuai.xi ///                                    2 :    4dB
2126*53ee8cc1Swenshuai.xi ///                                    3 :    up-support
2127*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_GetSurroundLPFGain(void)2128*53ee8cc1Swenshuai.xi MS_U16 HAL_SOUND_GetSurroundLPFGain(void)
2129*53ee8cc1Swenshuai.xi {
2130*53ee8cc1Swenshuai.xi     return((HAL_AUDIO_ReadByte(0x2D26)&0xC0)>>6);
2131*53ee8cc1Swenshuai.xi }
2132*53ee8cc1Swenshuai.xi 
2133*53ee8cc1Swenshuai.xi 
2134*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2135*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetPEQCoef()
2136*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set PEQ Coefficient.
2137*53ee8cc1Swenshuai.xi /// @param <IN>        \b peq_coef
2138*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE  :
2139*53ee8cc1Swenshuai.xi /// @param <RET>       \b  NONE :
2140*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE
2141*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetPEQCoef(AUDIO_PEQ_COEF * peq_coef)2142*53ee8cc1Swenshuai.xi void HAL_SOUND_SetPEQCoef(AUDIO_PEQ_COEF *peq_coef)
2143*53ee8cc1Swenshuai.xi {
2144*53ee8cc1Swenshuai.xi     MS_U16 dsp_addr;
2145*53ee8cc1Swenshuai.xi     MS_U16 dsp_scale_addr;
2146*53ee8cc1Swenshuai.xi 
2147*53ee8cc1Swenshuai.xi     if(peq_coef->sfs == 0)
2148*53ee8cc1Swenshuai.xi     {
2149*53ee8cc1Swenshuai.xi         DBG_SOUND(printf("!!!only support 48K coefficient ! ! !\n");)
2150*53ee8cc1Swenshuai.xi         return;
2151*53ee8cc1Swenshuai.xi     }
2152*53ee8cc1Swenshuai.xi 
2153*53ee8cc1Swenshuai.xi     //PEQ setting
2154*53ee8cc1Swenshuai.xi     if(peq_coef->type == AUDIO_COEF_PEQ || peq_coef->type == AUDIO_COEF_PREVER_PEQ)  // PEQ setting
2155*53ee8cc1Swenshuai.xi     {
2156*53ee8cc1Swenshuai.xi         if(peq_coef->enable == FALSE)
2157*53ee8cc1Swenshuai.xi             peq_band_enable &= (0xFFFFFFFF ^ ((MS_U32)1<<peq_coef->band));
2158*53ee8cc1Swenshuai.xi         else
2159*53ee8cc1Swenshuai.xi             peq_band_enable |= ((MS_U32)1<<peq_coef->band);
2160*53ee8cc1Swenshuai.xi 
2161*53ee8cc1Swenshuai.xi         if(peq_coef->precision == AUDIO_SINGLE_PRECISION)
2162*53ee8cc1Swenshuai.xi             peq_band_precision &= (0xFFFFFFFF ^ ((MS_U32)1<<peq_coef->band));
2163*53ee8cc1Swenshuai.xi         else
2164*53ee8cc1Swenshuai.xi             peq_band_precision |= ((MS_U32)1<<peq_coef->band);
2165*53ee8cc1Swenshuai.xi 
2166*53ee8cc1Swenshuai.xi         dsp_addr = DSP2PmAddr_peq48KCoeffAddr + peq_coef->band*5;
2167*53ee8cc1Swenshuai.xi         dsp_scale_addr = DSP2PmAddr_peqscale48KAddr + peq_coef->band;
2168*53ee8cc1Swenshuai.xi 
2169*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT)); //disable  updating coefficient to prevent pop
2170*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr,peq_coef->a0, DSP_MEM_TYPE_PM);
2171*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+1,peq_coef->a1, DSP_MEM_TYPE_PM);
2172*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+2,peq_coef->a2, DSP_MEM_TYPE_PM);
2173*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+3,peq_coef->b1, DSP_MEM_TYPE_PM);
2174*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+4,peq_coef->b2, DSP_MEM_TYPE_PM);
2175*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_scale_addr,(MS_U32)peq_coef->scale, DSP_MEM_TYPE_PM);
2176*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peqbandEnAddr,peq_band_enable, DSP_MEM_TYPE_PM);
2177*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peqbandDoubleAddr,peq_band_precision, DSP_MEM_TYPE_PM);
2178*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 0x00); //enable coefficient update
2179*53ee8cc1Swenshuai.xi     }
2180*53ee8cc1Swenshuai.xi     // HLPF setting
2181*53ee8cc1Swenshuai.xi     else  if(peq_coef->type == AUDIO_COEF_HPF)
2182*53ee8cc1Swenshuai.xi     {
2183*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT)); //disable  updating coefficient to prevent pop
2184*53ee8cc1Swenshuai.xi         dsp_addr = DSP2PmAddr_hpf48KCoeffAddr;
2185*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr,peq_coef->a0, DSP_MEM_TYPE_PM);
2186*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+1,peq_coef->a1, DSP_MEM_TYPE_PM);
2187*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+2,peq_coef->a2, DSP_MEM_TYPE_PM);
2188*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+3,peq_coef->b1, DSP_MEM_TYPE_PM);
2189*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+4,peq_coef->b2, DSP_MEM_TYPE_PM);
2190*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 0x00); //disable oefficient update
2191*53ee8cc1Swenshuai.xi     }
2192*53ee8cc1Swenshuai.xi     //TONE setting
2193*53ee8cc1Swenshuai.xi     else  if(peq_coef->type == AUDIO_COEF_BASS ||peq_coef->type == AUDIO_COEF_TREBLE)
2194*53ee8cc1Swenshuai.xi     {
2195*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT)); //disable  updating coefficient to prevent pop
2196*53ee8cc1Swenshuai.xi         if(peq_coef->type == AUDIO_COEF_BASS)
2197*53ee8cc1Swenshuai.xi         {
2198*53ee8cc1Swenshuai.xi             dsp_addr = DSP2PmAddr_bass48KCoeffAddr;
2199*53ee8cc1Swenshuai.xi         }
2200*53ee8cc1Swenshuai.xi         else
2201*53ee8cc1Swenshuai.xi         {
2202*53ee8cc1Swenshuai.xi             dsp_addr = DSP2PmAddr_treble48KCoeffAddr;
2203*53ee8cc1Swenshuai.xi             dsp_scale_addr =DSP2PmAddr_treblescale48KAddr;
2204*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(dsp_scale_addr,(MS_U32)peq_coef->scale, DSP_MEM_TYPE_PM);
2205*53ee8cc1Swenshuai.xi          }
2206*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr,peq_coef->a0, DSP_MEM_TYPE_PM);
2207*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+1,peq_coef->a1, DSP_MEM_TYPE_PM);
2208*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+2,peq_coef->a2, DSP_MEM_TYPE_PM);
2209*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+3,peq_coef->b1, DSP_MEM_TYPE_PM);
2210*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(dsp_addr+4,peq_coef->b2, DSP_MEM_TYPE_PM);
2211*53ee8cc1Swenshuai.xi         HAL_MAD2_Write_DSP_sram(DSP2PmAddr_toneSelectAddr,0x01, DSP_MEM_TYPE_PM);
2212*53ee8cc1Swenshuai.xi         HAL_AUDIO_WriteMaskByte(M2S_MBOX_SNDEFF_EN, 1<< (M2S_MBOX_COEFFUPDATE_EN_BIT), 0x00); //disable oefficient update
2213*53ee8cc1Swenshuai.xi     }
2214*53ee8cc1Swenshuai.xi     else
2215*53ee8cc1Swenshuai.xi     {
2216*53ee8cc1Swenshuai.xi         DBG_SOUND(printf("!!! undefined coefficient type ! ! !\n");)
2217*53ee8cc1Swenshuai.xi         return;
2218*53ee8cc1Swenshuai.xi     }
2219*53ee8cc1Swenshuai.xi 
2220*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL a0 = %x", (MS_U8)(peq_coef->a0>>16)));
2221*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x", (MS_U8)(peq_coef->a0>>8)));
2222*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x\r\n", (MS_U8)peq_coef->a0));
2223*53ee8cc1Swenshuai.xi 
2224*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL a1 = %x", (MS_U8)(peq_coef->a1>>16)));
2225*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x", (MS_U8)(peq_coef->a1>>8)));
2226*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x\r\n", (MS_U8)peq_coef->a1));
2227*53ee8cc1Swenshuai.xi 
2228*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL a2 = %x", (MS_U8)(peq_coef->a2>>16)));
2229*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x", (MS_U8)(peq_coef->a2>>8)));
2230*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x\r\n", (MS_U8)peq_coef->a2));
2231*53ee8cc1Swenshuai.xi 
2232*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL b1 = %x", (MS_U8)(peq_coef->b1>>16)));
2233*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x", (MS_U8)(peq_coef->b1>>8)));
2234*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x\r\n", (MS_U8)peq_coef->b1));
2235*53ee8cc1Swenshuai.xi 
2236*53ee8cc1Swenshuai.xi     DBG_SOUND(printf("HAL b2 = %x", (MS_U8)(peq_coef->b2>>16)));
2237*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x", (MS_U8)(peq_coef->b2>>8)));
2238*53ee8cc1Swenshuai.xi     DBG_SOUND(printf(" %x\r\n", (MS_U8)peq_coef->b2));
2239*53ee8cc1Swenshuai.xi }
2240*53ee8cc1Swenshuai.xi 
2241*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2242*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: MDrv_SOUND_SetMixModeVolume()  @@VVV
2243*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set the absolute volume of mix mode.
2244*53ee8cc1Swenshuai.xi /// @param <IN>        \b eSourceType: for audio source
2245*53ee8cc1Swenshuai.xi /// @param <IN>        \b VolType    : for vol type
2246*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol1   :     MSB 7-bit register u8Value of 10-bit volume
2247*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x7E , gain: +12db to   -114db (-1 db per step)
2248*53ee8cc1Swenshuai.xi /// @param <IN>        \b u8u8Vol2   :     LSB 3-bit register u8Value of 10-bit volume
2249*53ee8cc1Swenshuai.xi ///                                range from 0x00 to 0x07 , gain:  -0db to -0.875db (-0.125 db per step)
2250*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2251*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
2252*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
2253*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetMixModeVolume(AUDIO_SOURCE_INFO_TYPE eSourceType,AUDIO_MIX_VOL_TYPE VolType,MS_U8 u8Vol1,MS_U8 u8Vol2)2254*53ee8cc1Swenshuai.xi void HAL_SOUND_SetMixModeVolume(AUDIO_SOURCE_INFO_TYPE eSourceType, AUDIO_MIX_VOL_TYPE VolType, MS_U8 u8Vol1, MS_U8 u8Vol2  )
2255*53ee8cc1Swenshuai.xi {
2256*53ee8cc1Swenshuai.xi     switch (eSourceType)
2257*53ee8cc1Swenshuai.xi     {
2258*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_KTV_IN:
2259*53ee8cc1Swenshuai.xi             switch(VolType)
2260*53ee8cc1Swenshuai.xi             {
2261*53ee8cc1Swenshuai.xi                 case PCM_VOL:
2262*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_DMA_IN, u8Vol1, u8Vol2);
2263*53ee8cc1Swenshuai.xi                     break;
2264*53ee8cc1Swenshuai.xi 
2265*53ee8cc1Swenshuai.xi                 case MIC_VOL:
2266*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_MAIN, u8Vol1, u8Vol2);
2267*53ee8cc1Swenshuai.xi                     break;
2268*53ee8cc1Swenshuai.xi 
2269*53ee8cc1Swenshuai.xi                 case MP3_VOL:
2270*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_SECONDARY, u8Vol1, u8Vol2);
2271*53ee8cc1Swenshuai.xi                     break;
2272*53ee8cc1Swenshuai.xi 
2273*53ee8cc1Swenshuai.xi                 case ECHO1_VOL:
2274*53ee8cc1Swenshuai.xi                     if(u8Vol1<14)
2275*53ee8cc1Swenshuai.xi                         u8Vol1 = 14;
2276*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D57, 0x7F, u8Vol1);
2277*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D56, 0xE0, (u8Vol2<<5));
2278*53ee8cc1Swenshuai.xi                     break;
2279*53ee8cc1Swenshuai.xi 
2280*53ee8cc1Swenshuai.xi                 case ECHO2_VOL:
2281*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D59, 0x7F, u8Vol1);
2282*53ee8cc1Swenshuai.xi                     HAL_AUDIO_WriteMaskByte(0x2D58, 0xE0, (u8Vol2<<5));
2283*53ee8cc1Swenshuai.xi                     break;
2284*53ee8cc1Swenshuai.xi 
2285*53ee8cc1Swenshuai.xi                 default:
2286*53ee8cc1Swenshuai.xi                     break;
2287*53ee8cc1Swenshuai.xi             }
2288*53ee8cc1Swenshuai.xi             break;
2289*53ee8cc1Swenshuai.xi 
2290*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_GAME_IN:
2291*53ee8cc1Swenshuai.xi             switch(VolType)
2292*53ee8cc1Swenshuai.xi             {
2293*53ee8cc1Swenshuai.xi                 case PCM_VOL:
2294*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_DMA_IN, u8Vol1, u8Vol2);
2295*53ee8cc1Swenshuai.xi                     break;
2296*53ee8cc1Swenshuai.xi 
2297*53ee8cc1Swenshuai.xi                 case GAME1_VOL:
2298*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_MAIN, u8Vol1, u8Vol2);
2299*53ee8cc1Swenshuai.xi                     break;
2300*53ee8cc1Swenshuai.xi 
2301*53ee8cc1Swenshuai.xi                 case GAME2_VOL:
2302*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_SECONDARY, u8Vol1, u8Vol2);
2303*53ee8cc1Swenshuai.xi                     break;
2304*53ee8cc1Swenshuai.xi                 default:
2305*53ee8cc1Swenshuai.xi                     break;
2306*53ee8cc1Swenshuai.xi             }
2307*53ee8cc1Swenshuai.xi             break;
2308*53ee8cc1Swenshuai.xi 
2309*53ee8cc1Swenshuai.xi         default:
2310*53ee8cc1Swenshuai.xi             break;
2311*53ee8cc1Swenshuai.xi     }
2312*53ee8cc1Swenshuai.xi }
2313*53ee8cc1Swenshuai.xi 
2314*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2315*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetMixModeMute() @@VVV
2316*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used to set audio mix mode S/W mute.
2317*53ee8cc1Swenshuai.xi /// @param <IN>        \b eSourseType: for audio source type
2318*53ee8cc1Swenshuai.xi /// @param <IN>        \b VolType    : for vol type
2319*53ee8cc1Swenshuai.xi /// @param <IN>        \b bEnable    :     TRUE --Mute
2320*53ee8cc1Swenshuai.xi ///                                  :     FALSE--Unmute
2321*53ee8cc1Swenshuai.xi /// @param <OUT>       \b NONE    :
2322*53ee8cc1Swenshuai.xi /// @param <RET>       \b NONE    :
2323*53ee8cc1Swenshuai.xi /// @param <GLOBAL>    \b NONE    :
2324*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SOUND_SetMixModeMute(AUDIO_SOURCE_INFO_TYPE eSourceType,AUDIO_MIX_VOL_TYPE VolType,MS_BOOL EnMute)2325*53ee8cc1Swenshuai.xi void HAL_SOUND_SetMixModeMute(AUDIO_SOURCE_INFO_TYPE eSourceType, AUDIO_MIX_VOL_TYPE VolType, MS_BOOL EnMute )
2326*53ee8cc1Swenshuai.xi {
2327*53ee8cc1Swenshuai.xi     switch (eSourceType)
2328*53ee8cc1Swenshuai.xi     {
2329*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_KTV_IN:
2330*53ee8cc1Swenshuai.xi             switch(VolType)
2331*53ee8cc1Swenshuai.xi             {
2332*53ee8cc1Swenshuai.xi                 case PCM_VOL:
2333*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_DMA_IN, EnMute);
2334*53ee8cc1Swenshuai.xi                     break;
2335*53ee8cc1Swenshuai.xi 
2336*53ee8cc1Swenshuai.xi                 case MIC_VOL:
2337*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_MAIN, EnMute);
2338*53ee8cc1Swenshuai.xi                     break;
2339*53ee8cc1Swenshuai.xi 
2340*53ee8cc1Swenshuai.xi                 case MP3_VOL:
2341*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_SECONDARY, EnMute);
2342*53ee8cc1Swenshuai.xi                     break;
2343*53ee8cc1Swenshuai.xi 
2344*53ee8cc1Swenshuai.xi                 default:
2345*53ee8cc1Swenshuai.xi                     break;
2346*53ee8cc1Swenshuai.xi             }
2347*53ee8cc1Swenshuai.xi             break;
2348*53ee8cc1Swenshuai.xi 
2349*53ee8cc1Swenshuai.xi         case E_AUDIO_INFO_GAME_IN:
2350*53ee8cc1Swenshuai.xi             switch(VolType)
2351*53ee8cc1Swenshuai.xi             {
2352*53ee8cc1Swenshuai.xi                 case PCM_VOL:
2353*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_DMA_IN, EnMute);
2354*53ee8cc1Swenshuai.xi                     break;
2355*53ee8cc1Swenshuai.xi 
2356*53ee8cc1Swenshuai.xi                 case GAME1_VOL:
2357*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_MAIN, EnMute);
2358*53ee8cc1Swenshuai.xi                     break;
2359*53ee8cc1Swenshuai.xi 
2360*53ee8cc1Swenshuai.xi                 case GAME2_VOL:
2361*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_SECONDARY, EnMute);
2362*53ee8cc1Swenshuai.xi                     break;
2363*53ee8cc1Swenshuai.xi 
2364*53ee8cc1Swenshuai.xi                 default:
2365*53ee8cc1Swenshuai.xi                     break;
2366*53ee8cc1Swenshuai.xi             }
2367*53ee8cc1Swenshuai.xi             break;
2368*53ee8cc1Swenshuai.xi 
2369*53ee8cc1Swenshuai.xi         default:
2370*53ee8cc1Swenshuai.xi             break;
2371*53ee8cc1Swenshuai.xi     }
2372*53ee8cc1Swenshuai.xi }
2373*53ee8cc1Swenshuai.xi 
2374*53ee8cc1Swenshuai.xi //******************************************************************************
2375*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SOUND_SetParam()
2376*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used for adjust Common Sound parameters
2377*53ee8cc1Swenshuai.xi /// @return MS_BOOL     \b : True / False
2378*53ee8cc1Swenshuai.xi //******************************************************************************
HAL_SOUND_SetParam(Sound_SET_Type Type,MS_U32 * p_param)2379*53ee8cc1Swenshuai.xi MS_BOOL HAL_SOUND_SetParam( Sound_SET_Type Type, MS_U32 *p_param )
2380*53ee8cc1Swenshuai.xi {
2381*53ee8cc1Swenshuai.xi     MS_U8 param1 = (MS_U8)(p_param[0]);
2382*53ee8cc1Swenshuai.xi     MS_U8 param2 = (MS_U8)(p_param[1]);
2383*53ee8cc1Swenshuai.xi     MS_U8 param3 = (MS_U8)(p_param[2]);
2384*53ee8cc1Swenshuai.xi     MS_U8 param4 = (MS_U8)(p_param[3]);
2385*53ee8cc1Swenshuai.xi 
2386*53ee8cc1Swenshuai.xi     switch(Type)
2387*53ee8cc1Swenshuai.xi     {
2388*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetPreScale:
2389*53ee8cc1Swenshuai.xi             HAL_SOUND_SetPreScale(param1, param2);
2390*53ee8cc1Swenshuai.xi             break;
2391*53ee8cc1Swenshuai.xi 
2392*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetMute:
2393*53ee8cc1Swenshuai.xi             HAL_SOUND_SetMute(param1, param2);
2394*53ee8cc1Swenshuai.xi             break;
2395*53ee8cc1Swenshuai.xi 
2396*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetBalance:
2397*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBalance(param1);
2398*53ee8cc1Swenshuai.xi             break;
2399*53ee8cc1Swenshuai.xi 
2400*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableEQ:
2401*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableEQ(param1);
2402*53ee8cc1Swenshuai.xi             break;
2403*53ee8cc1Swenshuai.xi 
2404*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnablePEQ:
2405*53ee8cc1Swenshuai.xi             HAL_SOUND_EnablePEQ(param1);
2406*53ee8cc1Swenshuai.xi             break;
2407*53ee8cc1Swenshuai.xi 
2408*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableTone:
2409*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableTone(param1);
2410*53ee8cc1Swenshuai.xi             break;
2411*53ee8cc1Swenshuai.xi 
2412*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableAutoVolume:
2413*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableAutoVolume(param1);
2414*53ee8cc1Swenshuai.xi             break;
2415*53ee8cc1Swenshuai.xi 
2416*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableSurround:
2417*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableSurround(param1);
2418*53ee8cc1Swenshuai.xi             break;
2419*53ee8cc1Swenshuai.xi 
2420*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetBass:
2421*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBass(param1);
2422*53ee8cc1Swenshuai.xi             break;
2423*53ee8cc1Swenshuai.xi 
2424*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableBalance:
2425*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableBalance(param1);
2426*53ee8cc1Swenshuai.xi             break;
2427*53ee8cc1Swenshuai.xi 
2428*53ee8cc1Swenshuai.xi         case Sound_SET_Type_AbsoluteBass:
2429*53ee8cc1Swenshuai.xi             HAL_SOUND_AbsoluteBass(param1);
2430*53ee8cc1Swenshuai.xi             break;
2431*53ee8cc1Swenshuai.xi 
2432*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetTreble:
2433*53ee8cc1Swenshuai.xi             HAL_SOUND_SetTreble(param1);
2434*53ee8cc1Swenshuai.xi             break;
2435*53ee8cc1Swenshuai.xi 
2436*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetEq:
2437*53ee8cc1Swenshuai.xi             HAL_SOUND_SetEq(param1, param2);
2438*53ee8cc1Swenshuai.xi             break;
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetEq_7band:
2441*53ee8cc1Swenshuai.xi             HAL_SOUND_SetEq7(param1, param2);
2442*53ee8cc1Swenshuai.xi             break;
2443*53ee8cc1Swenshuai.xi 
2444*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetAvc:
2445*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAVCThreshold(param1);
2446*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcMode(param2);
2447*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcAT(param3);
2448*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcRT(param4);
2449*53ee8cc1Swenshuai.xi             break;
2450*53ee8cc1Swenshuai.xi 
2451*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetAudioDelay:
2452*53ee8cc1Swenshuai.xi             HAL_SOUND_SetCH1AudioDelay(param1);
2453*53ee8cc1Swenshuai.xi             break;
2454*53ee8cc1Swenshuai.xi 
2455*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetSurround:
2456*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXA(param1);
2457*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXB(param2);
2458*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXK(param3);
2459*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundLPFGain(param4);
2460*53ee8cc1Swenshuai.xi             break;
2461*53ee8cc1Swenshuai.xi 
2462*53ee8cc1Swenshuai.xi         case Sound_SET_Type_ConvertVolumeUnit:
2463*53ee8cc1Swenshuai.xi             break;
2464*53ee8cc1Swenshuai.xi 
2465*53ee8cc1Swenshuai.xi         case Sound_SET_Type_SetDCOffet:
2466*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(0x2B50 ,param1);
2467*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(0x2B51 ,param2);
2468*53ee8cc1Swenshuai.xi             break;
2469*53ee8cc1Swenshuai.xi 
2470*53ee8cc1Swenshuai.xi         case Sound_SET_Type_EnableSineTone:
2471*53ee8cc1Swenshuai.xi         default:
2472*53ee8cc1Swenshuai.xi             break;
2473*53ee8cc1Swenshuai.xi     }
2474*53ee8cc1Swenshuai.xi     return TRUE;
2475*53ee8cc1Swenshuai.xi }
2476*53ee8cc1Swenshuai.xi 
2477*53ee8cc1Swenshuai.xi //******************************************************************************
2478*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SND_ProcessEnable()
2479*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used for adjust Common Sound parameters
2480*53ee8cc1Swenshuai.xi //******************************************************************************
HAL_SND_ProcessEnable(Sound_ENABLE_Type Type,MS_BOOL enable)2481*53ee8cc1Swenshuai.xi MS_BOOL HAL_SND_ProcessEnable(Sound_ENABLE_Type Type, MS_BOOL enable)
2482*53ee8cc1Swenshuai.xi {
2483*53ee8cc1Swenshuai.xi     MS_BOOL status = FALSE;
2484*53ee8cc1Swenshuai.xi 
2485*53ee8cc1Swenshuai.xi     switch(Type)
2486*53ee8cc1Swenshuai.xi     {
2487*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_EQ:
2488*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableEQ(enable);
2489*53ee8cc1Swenshuai.xi             status = TRUE;
2490*53ee8cc1Swenshuai.xi             break;
2491*53ee8cc1Swenshuai.xi 
2492*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_PEQ:
2493*53ee8cc1Swenshuai.xi             HAL_SOUND_EnablePEQ(enable);
2494*53ee8cc1Swenshuai.xi             status = TRUE;
2495*53ee8cc1Swenshuai.xi             break;
2496*53ee8cc1Swenshuai.xi 
2497*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_Tone:
2498*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableTone(enable);
2499*53ee8cc1Swenshuai.xi             status = TRUE;
2500*53ee8cc1Swenshuai.xi             break;
2501*53ee8cc1Swenshuai.xi 
2502*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_AutoVolume:
2503*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableAutoVolume(enable);
2504*53ee8cc1Swenshuai.xi             status = TRUE;
2505*53ee8cc1Swenshuai.xi             break;
2506*53ee8cc1Swenshuai.xi 
2507*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_Surround:
2508*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableSurround(enable);
2509*53ee8cc1Swenshuai.xi             status = TRUE;
2510*53ee8cc1Swenshuai.xi             break;
2511*53ee8cc1Swenshuai.xi 
2512*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_Balance:
2513*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableBalance(enable);
2514*53ee8cc1Swenshuai.xi             status = TRUE;
2515*53ee8cc1Swenshuai.xi             break;
2516*53ee8cc1Swenshuai.xi 
2517*53ee8cc1Swenshuai.xi     case Sound_ENABL_Type_DRC:
2518*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableDRC(enable);
2519*53ee8cc1Swenshuai.xi             status = TRUE;
2520*53ee8cc1Swenshuai.xi             break;
2521*53ee8cc1Swenshuai.xi 
2522*53ee8cc1Swenshuai.xi        case Sound_ENABL_Type_KTVEcho:
2523*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableKTVEcho(enable);
2524*53ee8cc1Swenshuai.xi             status = TRUE;
2525*53ee8cc1Swenshuai.xi             break;
2526*53ee8cc1Swenshuai.xi 
2527*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_Hpf:
2528*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableHPF(enable);
2529*53ee8cc1Swenshuai.xi             status = TRUE;
2530*53ee8cc1Swenshuai.xi             break;
2531*53ee8cc1Swenshuai.xi 
2532*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_DcRemove:
2533*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableDcRemove(enable);
2534*53ee8cc1Swenshuai.xi             status = TRUE;
2535*53ee8cc1Swenshuai.xi             break;
2536*53ee8cc1Swenshuai.xi 
2537*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_EaseVol:
2538*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableEaseVol(enable);
2539*53ee8cc1Swenshuai.xi             status = TRUE;
2540*53ee8cc1Swenshuai.xi             break;
2541*53ee8cc1Swenshuai.xi 
2542*53ee8cc1Swenshuai.xi         case Sound_ENABL_Type_HeadPhoneSoundEffect:
2543*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteMaskReg(M2S_MBOX_SNDEFF_CTRL2, 1<<(M2S_MBOX_HEADPHONEPSND_CTRL_BIT), enable<<(M2S_MBOX_HEADPHONEPSND_CTRL_BIT));
2544*53ee8cc1Swenshuai.xi             status = TRUE;
2545*53ee8cc1Swenshuai.xi             break;
2546*53ee8cc1Swenshuai.xi 
2547*53ee8cc1Swenshuai.xi         default:
2548*53ee8cc1Swenshuai.xi             status = FALSE;
2549*53ee8cc1Swenshuai.xi             break;
2550*53ee8cc1Swenshuai.xi     }
2551*53ee8cc1Swenshuai.xi     return(status);
2552*53ee8cc1Swenshuai.xi }
2553*53ee8cc1Swenshuai.xi 
2554*53ee8cc1Swenshuai.xi //******************************************************************************
2555*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_SND_SetParam()
2556*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used for adjust Common Sound parameters
2557*53ee8cc1Swenshuai.xi /// @return MS_BOOL     \b : True / False
2558*53ee8cc1Swenshuai.xi //******************************************************************************
HAL_SND_SetParam(Sound_SET_PARAM_Type Type,MS_U16 param1,MS_U16 param2)2559*53ee8cc1Swenshuai.xi MS_BOOL HAL_SND_SetParam(Sound_SET_PARAM_Type Type, MS_U16 param1, MS_U16 param2)
2560*53ee8cc1Swenshuai.xi {
2561*53ee8cc1Swenshuai.xi     MS_BOOL status = FALSE;
2562*53ee8cc1Swenshuai.xi     MS_U16  data = 0;
2563*53ee8cc1Swenshuai.xi 
2564*53ee8cc1Swenshuai.xi     switch(Type)
2565*53ee8cc1Swenshuai.xi     {
2566*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PreScale:
2567*53ee8cc1Swenshuai.xi             HAL_SOUND_SetPreScale(param1, param2);      //param1: path, param2:prescale
2568*53ee8cc1Swenshuai.xi             status = TRUE;
2569*53ee8cc1Swenshuai.xi             break;
2570*53ee8cc1Swenshuai.xi 
2571*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Balance:
2572*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBalance(param1);               // param1: balance 0~100
2573*53ee8cc1Swenshuai.xi             status = TRUE;
2574*53ee8cc1Swenshuai.xi             break;
2575*53ee8cc1Swenshuai.xi 
2576*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AbsoluteBalance:
2577*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBalance_L((MS_U8)param1);             // param1: balance L  0x00(0dB)~0xFF(mute)
2578*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBalance_R((MS_U8)param2);             // param2: balance R  0x00(0dB)~0xFF(mute)
2579*53ee8cc1Swenshuai.xi             status = TRUE;
2580*53ee8cc1Swenshuai.xi             break;
2581*53ee8cc1Swenshuai.xi 
2582*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Bass:
2583*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBass(param1);                  // param1: bass 0~100
2584*53ee8cc1Swenshuai.xi             status = TRUE;
2585*53ee8cc1Swenshuai.xi             break;
2586*53ee8cc1Swenshuai.xi 
2587*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AbsoluteBass:              // absolute bass, param1: 0x30(+12dB)~0x00(0dB)~0xD0(-12dB)
2588*53ee8cc1Swenshuai.xi             HAL_SOUND_AbsoluteBass(param1);
2589*53ee8cc1Swenshuai.xi             status = TRUE;
2590*53ee8cc1Swenshuai.xi             break;
2591*53ee8cc1Swenshuai.xi 
2592*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Treble:
2593*53ee8cc1Swenshuai.xi             HAL_SOUND_SetTreble(param1);                // param1: treble 0~100
2594*53ee8cc1Swenshuai.xi             status = TRUE;
2595*53ee8cc1Swenshuai.xi             break;
2596*53ee8cc1Swenshuai.xi 
2597*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AbsoluteTreble:              // absolute treble, param1: 0x30(+12dB)~0x00(0dB)~0xD0(-12dB)
2598*53ee8cc1Swenshuai.xi             HAL_SOUND_AbsoluteTreble(param1);
2599*53ee8cc1Swenshuai.xi             status = TRUE;
2600*53ee8cc1Swenshuai.xi             break;
2601*53ee8cc1Swenshuai.xi 
2602*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_EQ:
2603*53ee8cc1Swenshuai.xi             HAL_SOUND_SetEq(param1, param2);            //param1: band 0~4, param2:level 0~100
2604*53ee8cc1Swenshuai.xi             break;
2605*53ee8cc1Swenshuai.xi 
2606*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AbsoluteEQ:                // absolute GEQ, param1: band 0~4, param2: 0x30(+12dB)~0x00(0dB)~0xD0(-12dB)
2607*53ee8cc1Swenshuai.xi             if(param1 > 4)
2608*53ee8cc1Swenshuai.xi             {
2609*53ee8cc1Swenshuai.xi                 printf("Invalid value, GEQ Band should be 0~4\n");
2610*53ee8cc1Swenshuai.xi             }
2611*53ee8cc1Swenshuai.xi             else
2612*53ee8cc1Swenshuai.xi             {
2613*53ee8cc1Swenshuai.xi                 if ((param2 > 0x30) && (param2 <= 0x7F))
2614*53ee8cc1Swenshuai.xi                 {
2615*53ee8cc1Swenshuai.xi                     param2 = 0x30;
2616*53ee8cc1Swenshuai.xi                 }
2617*53ee8cc1Swenshuai.xi                 if ((param2 < 0xD0) && (param2 >= 0x80))
2618*53ee8cc1Swenshuai.xi                 {
2619*53ee8cc1Swenshuai.xi                     param2 = 0xD0;
2620*53ee8cc1Swenshuai.xi                 }
2621*53ee8cc1Swenshuai.xi                 HAL_AUDIO_WriteByte(REG_SOUND_EQ1 + (param1*2), (MS_U8)param2);
2622*53ee8cc1Swenshuai.xi             }
2623*53ee8cc1Swenshuai.xi             break;
2624*53ee8cc1Swenshuai.xi 
2625*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Surround_XA:
2626*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXA(param1);
2627*53ee8cc1Swenshuai.xi             status = TRUE;
2628*53ee8cc1Swenshuai.xi             break;
2629*53ee8cc1Swenshuai.xi 
2630*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Surround_XB:
2631*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXB(param1);
2632*53ee8cc1Swenshuai.xi             status = TRUE;
2633*53ee8cc1Swenshuai.xi             break;
2634*53ee8cc1Swenshuai.xi 
2635*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Surround_XK:
2636*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundXK(param1);
2637*53ee8cc1Swenshuai.xi             status = TRUE;
2638*53ee8cc1Swenshuai.xi             break;
2639*53ee8cc1Swenshuai.xi 
2640*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Surround_LPFGAIN:
2641*53ee8cc1Swenshuai.xi             HAL_SOUND_SetSurroundLPFGain(param1);
2642*53ee8cc1Swenshuai.xi             status = TRUE;
2643*53ee8cc1Swenshuai.xi             break;
2644*53ee8cc1Swenshuai.xi 
2645*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_NR_Threshold:
2646*53ee8cc1Swenshuai.xi             HAL_SOUND_EnableNR((MS_U8)param1);      // param1: NR threshold: 0x00~0xFF
2647*53ee8cc1Swenshuai.xi             status = TRUE;
2648*53ee8cc1Swenshuai.xi             break;
2649*53ee8cc1Swenshuai.xi 
2650*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Avc_Mode:
2651*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcMode(param1);
2652*53ee8cc1Swenshuai.xi             status = TRUE;
2653*53ee8cc1Swenshuai.xi             break;
2654*53ee8cc1Swenshuai.xi 
2655*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Avc_Threshold:
2656*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAVCThreshold(param1);
2657*53ee8cc1Swenshuai.xi             status = TRUE;
2658*53ee8cc1Swenshuai.xi             break;
2659*53ee8cc1Swenshuai.xi 
2660*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Avc_AT:
2661*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcAT(param1);
2662*53ee8cc1Swenshuai.xi             status = TRUE;
2663*53ee8cc1Swenshuai.xi             break;
2664*53ee8cc1Swenshuai.xi 
2665*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Avc_RT:
2666*53ee8cc1Swenshuai.xi             HAL_SOUND_SetAvcRT(param1);
2667*53ee8cc1Swenshuai.xi             status = TRUE;
2668*53ee8cc1Swenshuai.xi             break;
2669*53ee8cc1Swenshuai.xi 
2670*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Drc_Threshold:
2671*53ee8cc1Swenshuai.xi             HAL_SOUND_SetDRCThreshold(param1,(AUDIO_SOUNDEFFECT_TYPE)param2);
2672*53ee8cc1Swenshuai.xi             status = TRUE;
2673*53ee8cc1Swenshuai.xi             break;
2674*53ee8cc1Swenshuai.xi 
2675*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AudioDelay:
2676*53ee8cc1Swenshuai.xi             HAL_SOUND_SetCH1AudioDelay(param1);
2677*53ee8cc1Swenshuai.xi             status = TRUE;
2678*53ee8cc1Swenshuai.xi             break;
2679*53ee8cc1Swenshuai.xi 
2680*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_DCOffet:
2681*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(0x2B51, param1);
2682*53ee8cc1Swenshuai.xi             HAL_AUDIO_WriteByte(0x2B50, param2);
2683*53ee8cc1Swenshuai.xi             status = TRUE;
2684*53ee8cc1Swenshuai.xi             break;
2685*53ee8cc1Swenshuai.xi 
2686*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_48K_A0:
2687*53ee8cc1Swenshuai.xi             if((param1>>8) > MAX_PEQ_BAND-1)
2688*53ee8cc1Swenshuai.xi                 printf("PEQ paramater Band should be 0~4\n");
2689*53ee8cc1Swenshuai.xi             else
2690*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peq48KCoeffAddr+(param1>>8)*5, ((param1&0xFF)<<16)+param2, DSP_MEM_TYPE_PM);
2691*53ee8cc1Swenshuai.xi             break;
2692*53ee8cc1Swenshuai.xi 
2693*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_48K_A1:
2694*53ee8cc1Swenshuai.xi             if((param1>>8) > MAX_PEQ_BAND-1)
2695*53ee8cc1Swenshuai.xi                 printf("PEQ paramater Band should be 0~4\n");
2696*53ee8cc1Swenshuai.xi             else
2697*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peq48KCoeffAddr+(param1>>8)*5+1, ((param1&0xFF)<<16)+param2, DSP_MEM_TYPE_PM);
2698*53ee8cc1Swenshuai.xi             break;
2699*53ee8cc1Swenshuai.xi 
2700*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_48K_A2:
2701*53ee8cc1Swenshuai.xi             if((param1>>8) > MAX_PEQ_BAND-1)
2702*53ee8cc1Swenshuai.xi                 printf("PEQ paramater Band should be 0~4\n");
2703*53ee8cc1Swenshuai.xi             else
2704*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peq48KCoeffAddr+(param1>>8)*5+2, ((param1&0xFF)<<16)+param2, DSP_MEM_TYPE_PM);
2705*53ee8cc1Swenshuai.xi             break;
2706*53ee8cc1Swenshuai.xi 
2707*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_48K_B1:
2708*53ee8cc1Swenshuai.xi             if((param1>>8) > MAX_PEQ_BAND-1)
2709*53ee8cc1Swenshuai.xi                 printf("PEQ paramater Band should be 0~4\n");
2710*53ee8cc1Swenshuai.xi             else
2711*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peq48KCoeffAddr+(param1>>8)*5+3, ((param1&0xFF)<<16)+param2, DSP_MEM_TYPE_PM);
2712*53ee8cc1Swenshuai.xi             break;
2713*53ee8cc1Swenshuai.xi 
2714*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_48K_B2:
2715*53ee8cc1Swenshuai.xi             if((param1>>8) > MAX_PEQ_BAND-1)
2716*53ee8cc1Swenshuai.xi                 printf("PEQ paramater Band should be 0~4\n");
2717*53ee8cc1Swenshuai.xi             else
2718*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2PmAddr_peq48KCoeffAddr+(param1>>8)*5+4, ((param1&0xFF)<<16)+param2, DSP_MEM_TYPE_PM);
2719*53ee8cc1Swenshuai.xi             break;
2720*53ee8cc1Swenshuai.xi 
2721*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_32K_A0:
2722*53ee8cc1Swenshuai.xi             // No support 32K PEQ in T12
2723*53ee8cc1Swenshuai.xi             break;
2724*53ee8cc1Swenshuai.xi 
2725*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_32K_A1:
2726*53ee8cc1Swenshuai.xi             // No support 32K PEQ in T12
2727*53ee8cc1Swenshuai.xi             break;
2728*53ee8cc1Swenshuai.xi 
2729*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_32K_A2:
2730*53ee8cc1Swenshuai.xi             // No support 32K PEQ in T12
2731*53ee8cc1Swenshuai.xi             break;
2732*53ee8cc1Swenshuai.xi 
2733*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_32K_B1:
2734*53ee8cc1Swenshuai.xi             // No support 32K PEQ in T12
2735*53ee8cc1Swenshuai.xi             break;
2736*53ee8cc1Swenshuai.xi 
2737*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PEQ_32K_B2:
2738*53ee8cc1Swenshuai.xi             // No support 32K PEQ in T12
2739*53ee8cc1Swenshuai.xi             break;
2740*53ee8cc1Swenshuai.xi 
2741*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_DMAReader:
2742*53ee8cc1Swenshuai.xi             if(param1 == 0)
2743*53ee8cc1Swenshuai.xi             {
2744*53ee8cc1Swenshuai.xi                 if(param2 >= 4)
2745*53ee8cc1Swenshuai.xi                 {
2746*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_DMA_IN, true);
2747*53ee8cc1Swenshuai.xi                 }
2748*53ee8cc1Swenshuai.xi                 else
2749*53ee8cc1Swenshuai.xi                 {
2750*53ee8cc1Swenshuai.xi                     data = 0x0C + param2*4;
2751*53ee8cc1Swenshuai.xi                     HAL_SOUND_AbsoluteVolume(AUDIO_T3_PATH_MIXER_DMA_IN,data,0);
2752*53ee8cc1Swenshuai.xi                     HAL_SOUND_SetMute(AUDIO_T3_PATH_MIXER_DMA_IN, false);
2753*53ee8cc1Swenshuai.xi                 }
2754*53ee8cc1Swenshuai.xi                 status = TRUE;
2755*53ee8cc1Swenshuai.xi             }
2756*53ee8cc1Swenshuai.xi             break;
2757*53ee8cc1Swenshuai.xi 
2758*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_AVC_S_Offset:
2759*53ee8cc1Swenshuai.xi             {
2760*53ee8cc1Swenshuai.xi                 MS_U32 S_offset = 0x400000; // default offset: +6 dB, 3.21 format for DSP
2761*53ee8cc1Swenshuai.xi                 if((param1 < 0) || (param1 > 12))
2762*53ee8cc1Swenshuai.xi                 {
2763*53ee8cc1Swenshuai.xi                     printf("AVC offset is out of range 0~12 dB \n");
2764*53ee8cc1Swenshuai.xi                 }
2765*53ee8cc1Swenshuai.xi                 else
2766*53ee8cc1Swenshuai.xi                 {
2767*53ee8cc1Swenshuai.xi                     S_offset = (MS_U32)AVC_SOffset_TBL[param1];
2768*53ee8cc1Swenshuai.xi                 }
2769*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(DSP2DmAddr_AvcSOffsetAddr, S_offset, DSP_MEM_TYPE_DM);
2770*53ee8cc1Swenshuai.xi                 status = TRUE;
2771*53ee8cc1Swenshuai.xi                 break;
2772*53ee8cc1Swenshuai.xi             }
2773*53ee8cc1Swenshuai.xi 
2774*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Type_A:
2775*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Type_B:
2776*53ee8cc1Swenshuai.xi         {
2777*53ee8cc1Swenshuai.xi             MS_U32 u32EaseType = AUDIO_EASE_TYPE_LINEAR;
2778*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
2779*53ee8cc1Swenshuai.xi 
2780*53ee8cc1Swenshuai.xi             status = TRUE;
2781*53ee8cc1Swenshuai.xi 
2782*53ee8cc1Swenshuai.xi             switch (Type)
2783*53ee8cc1Swenshuai.xi             {
2784*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Type_A:
2785*53ee8cc1Swenshuai.xi                 {
2786*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
2787*53ee8cc1Swenshuai.xi                     break;
2788*53ee8cc1Swenshuai.xi                 }
2789*53ee8cc1Swenshuai.xi 
2790*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Type_B:
2791*53ee8cc1Swenshuai.xi                 {
2792*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
2793*53ee8cc1Swenshuai.xi                     break;
2794*53ee8cc1Swenshuai.xi                 }
2795*53ee8cc1Swenshuai.xi 
2796*53ee8cc1Swenshuai.xi                 default:
2797*53ee8cc1Swenshuai.xi                 {
2798*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease command %d\n", __FUNCTION__, Type);
2799*53ee8cc1Swenshuai.xi                     status = FALSE;
2800*53ee8cc1Swenshuai.xi                     break;
2801*53ee8cc1Swenshuai.xi                 }
2802*53ee8cc1Swenshuai.xi             }
2803*53ee8cc1Swenshuai.xi 
2804*53ee8cc1Swenshuai.xi             switch (param1)
2805*53ee8cc1Swenshuai.xi             {
2806*53ee8cc1Swenshuai.xi                 case E_AUDIO_EASE_TYPE_LINEAR:
2807*53ee8cc1Swenshuai.xi                 {
2808*53ee8cc1Swenshuai.xi                     u32EaseType = AUDIO_EASE_TYPE_LINEAR;
2809*53ee8cc1Swenshuai.xi                     break;
2810*53ee8cc1Swenshuai.xi                 }
2811*53ee8cc1Swenshuai.xi 
2812*53ee8cc1Swenshuai.xi                 case E_AUDIO_EASE_TYPE_INCUBIC:
2813*53ee8cc1Swenshuai.xi                 {
2814*53ee8cc1Swenshuai.xi                     u32EaseType = AUDIO_EASE_TYPE_INCUBIC;
2815*53ee8cc1Swenshuai.xi                     break;
2816*53ee8cc1Swenshuai.xi                 }
2817*53ee8cc1Swenshuai.xi 
2818*53ee8cc1Swenshuai.xi                 case E_AUDIO_EASE_TYPE_OUTCUBIC:
2819*53ee8cc1Swenshuai.xi                 {
2820*53ee8cc1Swenshuai.xi                     u32EaseType = AUDIO_EASE_TYPE_OUTCUBIC;
2821*53ee8cc1Swenshuai.xi                     break;
2822*53ee8cc1Swenshuai.xi                 }
2823*53ee8cc1Swenshuai.xi 
2824*53ee8cc1Swenshuai.xi                 case E_AUDIO_EASE_TYPE_INOUTCUBIC:
2825*53ee8cc1Swenshuai.xi                 {
2826*53ee8cc1Swenshuai.xi                     u32EaseType = AUDIO_EASE_TYPE_INOUTCUBIC;
2827*53ee8cc1Swenshuai.xi                     break;
2828*53ee8cc1Swenshuai.xi                 }
2829*53ee8cc1Swenshuai.xi 
2830*53ee8cc1Swenshuai.xi                 default:
2831*53ee8cc1Swenshuai.xi                 {
2832*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease type %d\n", __FUNCTION__, param1);
2833*53ee8cc1Swenshuai.xi                     status = FALSE;
2834*53ee8cc1Swenshuai.xi                     break;
2835*53ee8cc1Swenshuai.xi                 }
2836*53ee8cc1Swenshuai.xi             }
2837*53ee8cc1Swenshuai.xi 
2838*53ee8cc1Swenshuai.xi             if (status == TRUE)
2839*53ee8cc1Swenshuai.xi             {
2840*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram((u32DspPmEaseBase + 2), u32EaseType, DSP_MEM_TYPE_PM);
2841*53ee8cc1Swenshuai.xi             }
2842*53ee8cc1Swenshuai.xi 
2843*53ee8cc1Swenshuai.xi             break;
2844*53ee8cc1Swenshuai.xi         }
2845*53ee8cc1Swenshuai.xi 
2846*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Duration_A:
2847*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Duration_B:
2848*53ee8cc1Swenshuai.xi         {
2849*53ee8cc1Swenshuai.xi             MS_U32 u32MiniSecond = 0;
2850*53ee8cc1Swenshuai.xi             MS_U32 u32SamplesOfMiniSecond = 0;
2851*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
2852*53ee8cc1Swenshuai.xi 
2853*53ee8cc1Swenshuai.xi             status = TRUE;
2854*53ee8cc1Swenshuai.xi 
2855*53ee8cc1Swenshuai.xi             switch (Type)
2856*53ee8cc1Swenshuai.xi             {
2857*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Duration_A:
2858*53ee8cc1Swenshuai.xi                 {
2859*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
2860*53ee8cc1Swenshuai.xi                     break;
2861*53ee8cc1Swenshuai.xi                 }
2862*53ee8cc1Swenshuai.xi 
2863*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Duration_B:
2864*53ee8cc1Swenshuai.xi                 {
2865*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
2866*53ee8cc1Swenshuai.xi                     break;
2867*53ee8cc1Swenshuai.xi                 }
2868*53ee8cc1Swenshuai.xi 
2869*53ee8cc1Swenshuai.xi                 default:
2870*53ee8cc1Swenshuai.xi                 {
2871*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease command %d\n", __FUNCTION__, Type);
2872*53ee8cc1Swenshuai.xi                     status = FALSE;
2873*53ee8cc1Swenshuai.xi                     break;
2874*53ee8cc1Swenshuai.xi                 }
2875*53ee8cc1Swenshuai.xi             }
2876*53ee8cc1Swenshuai.xi 
2877*53ee8cc1Swenshuai.xi             if (status == TRUE)
2878*53ee8cc1Swenshuai.xi             {
2879*53ee8cc1Swenshuai.xi                 if (param1 > 60000)
2880*53ee8cc1Swenshuai.xi                 {
2881*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: target duration (%d) of audio ease is too large!\n", __FUNCTION__, param1);
2882*53ee8cc1Swenshuai.xi                     u32MiniSecond = 60000;
2883*53ee8cc1Swenshuai.xi                 }
2884*53ee8cc1Swenshuai.xi                 else
2885*53ee8cc1Swenshuai.xi                 {
2886*53ee8cc1Swenshuai.xi                     u32MiniSecond = (MS_U32)param1;
2887*53ee8cc1Swenshuai.xi                 }
2888*53ee8cc1Swenshuai.xi 
2889*53ee8cc1Swenshuai.xi                 u32SamplesOfMiniSecond = u32MiniSecond * 48; /* samples of 1 ms in 48KHz */
2890*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram((u32DspPmEaseBase + 1), u32SamplesOfMiniSecond, DSP_MEM_TYPE_PM);
2891*53ee8cc1Swenshuai.xi             }
2892*53ee8cc1Swenshuai.xi 
2893*53ee8cc1Swenshuai.xi             break;
2894*53ee8cc1Swenshuai.xi         }
2895*53ee8cc1Swenshuai.xi 
2896*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Gain_A:
2897*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Gain_B:
2898*53ee8cc1Swenshuai.xi         {
2899*53ee8cc1Swenshuai.xi             MS_U32 u32Gain = 0;
2900*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
2901*53ee8cc1Swenshuai.xi 
2902*53ee8cc1Swenshuai.xi             status = TRUE;
2903*53ee8cc1Swenshuai.xi 
2904*53ee8cc1Swenshuai.xi             switch (Type)
2905*53ee8cc1Swenshuai.xi             {
2906*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Gain_A:
2907*53ee8cc1Swenshuai.xi                 {
2908*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
2909*53ee8cc1Swenshuai.xi                     break;
2910*53ee8cc1Swenshuai.xi                 }
2911*53ee8cc1Swenshuai.xi 
2912*53ee8cc1Swenshuai.xi                 case Sound_SET_PARAM_Ease_Gain_B:
2913*53ee8cc1Swenshuai.xi                 {
2914*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
2915*53ee8cc1Swenshuai.xi                     break;
2916*53ee8cc1Swenshuai.xi                 }
2917*53ee8cc1Swenshuai.xi 
2918*53ee8cc1Swenshuai.xi                 default:
2919*53ee8cc1Swenshuai.xi                 {
2920*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease command %d\n", __FUNCTION__, Type);
2921*53ee8cc1Swenshuai.xi                     status = FALSE;
2922*53ee8cc1Swenshuai.xi                     break;
2923*53ee8cc1Swenshuai.xi                 }
2924*53ee8cc1Swenshuai.xi             }
2925*53ee8cc1Swenshuai.xi 
2926*53ee8cc1Swenshuai.xi             if (status == TRUE)
2927*53ee8cc1Swenshuai.xi             {
2928*53ee8cc1Swenshuai.xi                 u32Gain = (MS_U32)(((param1 & 0xFF) << 16) | (param2 & 0xFFFF));
2929*53ee8cc1Swenshuai.xi                 if (u32Gain > 0x7FFFFF)
2930*53ee8cc1Swenshuai.xi                 {
2931*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: target gain (0x%X) of audio ease is too large!\n", __FUNCTION__, (unsigned int)u32Gain);
2932*53ee8cc1Swenshuai.xi                     u32Gain = 0x7FFFFF;
2933*53ee8cc1Swenshuai.xi                 }
2934*53ee8cc1Swenshuai.xi 
2935*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(u32DspPmEaseBase, u32Gain, DSP_MEM_TYPE_PM);
2936*53ee8cc1Swenshuai.xi             }
2937*53ee8cc1Swenshuai.xi 
2938*53ee8cc1Swenshuai.xi             break;
2939*53ee8cc1Swenshuai.xi         }
2940*53ee8cc1Swenshuai.xi 
2941*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Target_Channel_A:
2942*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Ease_Target_Channel_B:
2943*53ee8cc1Swenshuai.xi         {
2944*53ee8cc1Swenshuai.xi             MS_U32 u32Mask = 0x000000;
2945*53ee8cc1Swenshuai.xi             MS_U32 u32TargetChannel = AUDIO_EASE_CH_NONE;
2946*53ee8cc1Swenshuai.xi             MS_U32 u32ChannelSetting = 0;
2947*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 8;
2948*53ee8cc1Swenshuai.xi 
2949*53ee8cc1Swenshuai.xi             status = TRUE;
2950*53ee8cc1Swenshuai.xi 
2951*53ee8cc1Swenshuai.xi             if (param2 == TRUE)
2952*53ee8cc1Swenshuai.xi             {
2953*53ee8cc1Swenshuai.xi                 switch (Type)
2954*53ee8cc1Swenshuai.xi                 {
2955*53ee8cc1Swenshuai.xi                     case Sound_SET_PARAM_Ease_Target_Channel_A:
2956*53ee8cc1Swenshuai.xi                     {
2957*53ee8cc1Swenshuai.xi                         u32TargetChannel = AUDIO_EASE_CH_A;
2958*53ee8cc1Swenshuai.xi                         break;
2959*53ee8cc1Swenshuai.xi                     }
2960*53ee8cc1Swenshuai.xi 
2961*53ee8cc1Swenshuai.xi                     case Sound_SET_PARAM_Ease_Target_Channel_B:
2962*53ee8cc1Swenshuai.xi                     {
2963*53ee8cc1Swenshuai.xi                         u32TargetChannel = AUDIO_EASE_CH_B;
2964*53ee8cc1Swenshuai.xi                         break;
2965*53ee8cc1Swenshuai.xi                     }
2966*53ee8cc1Swenshuai.xi 
2967*53ee8cc1Swenshuai.xi                     default:
2968*53ee8cc1Swenshuai.xi                     {
2969*53ee8cc1Swenshuai.xi                         HALSOUND_ERROR("%s: invalid audio ease command %d\n", __FUNCTION__, Type);
2970*53ee8cc1Swenshuai.xi                         status = FALSE;
2971*53ee8cc1Swenshuai.xi                         break;
2972*53ee8cc1Swenshuai.xi                     }
2973*53ee8cc1Swenshuai.xi                 }
2974*53ee8cc1Swenshuai.xi             }
2975*53ee8cc1Swenshuai.xi             else
2976*53ee8cc1Swenshuai.xi             {
2977*53ee8cc1Swenshuai.xi                 u32TargetChannel = AUDIO_EASE_CH_NONE;
2978*53ee8cc1Swenshuai.xi             }
2979*53ee8cc1Swenshuai.xi 
2980*53ee8cc1Swenshuai.xi             switch (param1)
2981*53ee8cc1Swenshuai.xi             {
2982*53ee8cc1Swenshuai.xi                 case AUDIO_PATH_4:
2983*53ee8cc1Swenshuai.xi                 {
2984*53ee8cc1Swenshuai.xi                     /* for Channel 5 */
2985*53ee8cc1Swenshuai.xi                     u32Mask = 0x000F;
2986*53ee8cc1Swenshuai.xi                     break;
2987*53ee8cc1Swenshuai.xi                 }
2988*53ee8cc1Swenshuai.xi 
2989*53ee8cc1Swenshuai.xi                 case AUDIO_PATH_5:
2990*53ee8cc1Swenshuai.xi                 {
2991*53ee8cc1Swenshuai.xi                     /* for Channel 6 */
2992*53ee8cc1Swenshuai.xi                     u32Mask = 0x0000F0;
2993*53ee8cc1Swenshuai.xi                     u32TargetChannel <<= 4;
2994*53ee8cc1Swenshuai.xi                     break;
2995*53ee8cc1Swenshuai.xi                 }
2996*53ee8cc1Swenshuai.xi 
2997*53ee8cc1Swenshuai.xi                 case AUDIO_PATH_6:
2998*53ee8cc1Swenshuai.xi                 {
2999*53ee8cc1Swenshuai.xi                     /* for Channel 7 */
3000*53ee8cc1Swenshuai.xi                     u32Mask = 0x000F00;
3001*53ee8cc1Swenshuai.xi                     u32TargetChannel <<= 8;
3002*53ee8cc1Swenshuai.xi                     break;
3003*53ee8cc1Swenshuai.xi                 }
3004*53ee8cc1Swenshuai.xi 
3005*53ee8cc1Swenshuai.xi                 case AUDIO_PATH_7:
3006*53ee8cc1Swenshuai.xi                 {
3007*53ee8cc1Swenshuai.xi                     /* for Channel 8 */
3008*53ee8cc1Swenshuai.xi                     u32Mask = 0x00F000;
3009*53ee8cc1Swenshuai.xi                     u32TargetChannel <<= 12;
3010*53ee8cc1Swenshuai.xi                     break;
3011*53ee8cc1Swenshuai.xi                 }
3012*53ee8cc1Swenshuai.xi 
3013*53ee8cc1Swenshuai.xi                 case AUDIO_PATH_0:
3014*53ee8cc1Swenshuai.xi                 {
3015*53ee8cc1Swenshuai.xi                     /* for Channel 1~4 (Multi-Channel) */
3016*53ee8cc1Swenshuai.xi                     u32Mask = 0x0F0000;
3017*53ee8cc1Swenshuai.xi                     u32TargetChannel <<= 16;
3018*53ee8cc1Swenshuai.xi                     break;
3019*53ee8cc1Swenshuai.xi                 }
3020*53ee8cc1Swenshuai.xi 
3021*53ee8cc1Swenshuai.xi                 default:
3022*53ee8cc1Swenshuai.xi                 {
3023*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease path %d\n", __FUNCTION__, param1);
3024*53ee8cc1Swenshuai.xi                     status = FALSE;
3025*53ee8cc1Swenshuai.xi                     break;
3026*53ee8cc1Swenshuai.xi                 }
3027*53ee8cc1Swenshuai.xi             }
3028*53ee8cc1Swenshuai.xi 
3029*53ee8cc1Swenshuai.xi             if (status == TRUE)
3030*53ee8cc1Swenshuai.xi             {
3031*53ee8cc1Swenshuai.xi                 u32ChannelSetting = HAL_MAD2_Read_DSP_sram(u32DspPmEaseBase, DSP_MEM_TYPE_PM);
3032*53ee8cc1Swenshuai.xi                 u32ChannelSetting = (u32ChannelSetting & (~u32Mask)) | u32TargetChannel;
3033*53ee8cc1Swenshuai.xi                 HAL_MAD2_Write_DSP_sram(u32DspPmEaseBase, u32ChannelSetting, DSP_MEM_TYPE_PM);
3034*53ee8cc1Swenshuai.xi             }
3035*53ee8cc1Swenshuai.xi 
3036*53ee8cc1Swenshuai.xi             break;
3037*53ee8cc1Swenshuai.xi         }
3038*53ee8cc1Swenshuai.xi 
3039*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_Drc_Entry:
3040*53ee8cc1Swenshuai.xi         {
3041*53ee8cc1Swenshuai.xi             HAL_SOUND_SetDRCEntry((AUDIO_SOUNDEFFECT_TYPE) param1,(MS_U8)param2);
3042*53ee8cc1Swenshuai.xi             status = TRUE;
3043*53ee8cc1Swenshuai.xi 	        break;
3044*53ee8cc1Swenshuai.xi         }
3045*53ee8cc1Swenshuai.xi 
3046*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_VolFadingStep:
3047*53ee8cc1Swenshuai.xi         {
3048*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_VolFadingStep1, param1<<8, DSP_MEM_TYPE_PM);
3049*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_VolFadingStep2, param2<<8, DSP_MEM_TYPE_PM);
3050*53ee8cc1Swenshuai.xi             status = TRUE;
3051*53ee8cc1Swenshuai.xi             break;
3052*53ee8cc1Swenshuai.xi         }
3053*53ee8cc1Swenshuai.xi 
3054*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_VolFadingCtrl:
3055*53ee8cc1Swenshuai.xi         {
3056*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_VolFadingCtrl, param1 , DSP_MEM_TYPE_PM);
3057*53ee8cc1Swenshuai.xi             status = TRUE;
3058*53ee8cc1Swenshuai.xi             break;
3059*53ee8cc1Swenshuai.xi         }
3060*53ee8cc1Swenshuai.xi 
3061*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_BalanceMask:
3062*53ee8cc1Swenshuai.xi         {
3063*53ee8cc1Swenshuai.xi             HAL_SOUND_SetBalanceMask(param1, param2);
3064*53ee8cc1Swenshuai.xi             status = TRUE;
3065*53ee8cc1Swenshuai.xi             break;
3066*53ee8cc1Swenshuai.xi         }
3067*53ee8cc1Swenshuai.xi 
3068*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_PhaseShiftMask:
3069*53ee8cc1Swenshuai.xi         {
3070*53ee8cc1Swenshuai.xi             HAL_SOUND_SetOutputPhaseShiftMask(param1, param2);
3071*53ee8cc1Swenshuai.xi             status = TRUE;
3072*53ee8cc1Swenshuai.xi             break;
3073*53ee8cc1Swenshuai.xi         }
3074*53ee8cc1Swenshuai.xi 
3075*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch1:
3076*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch2:
3077*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch3:
3078*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch4:
3079*53ee8cc1Swenshuai.xi         {
3080*53ee8cc1Swenshuai.xi             if (param1 > MULTI_CH_INPUT_DLY_UPPER_BOUND)
3081*53ee8cc1Swenshuai.xi             {
3082*53ee8cc1Swenshuai.xi                 HALSOUND_ERROR("Warning! Invalid value (%u), delay time should be less than %u ms. \r\n", (unsigned int)param1, MULTI_CH_INPUT_DLY_UPPER_BOUND);
3083*53ee8cc1Swenshuai.xi                 param1 = MULTI_CH_INPUT_DLY_UPPER_BOUND;
3084*53ee8cc1Swenshuai.xi             }
3085*53ee8cc1Swenshuai.xi 
3086*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_multiChInputDelay, param1, DSP_MEM_TYPE_PM);
3087*53ee8cc1Swenshuai.xi             status = TRUE;
3088*53ee8cc1Swenshuai.xi 
3089*53ee8cc1Swenshuai.xi             break;
3090*53ee8cc1Swenshuai.xi         }
3091*53ee8cc1Swenshuai.xi 
3092*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch5:
3093*53ee8cc1Swenshuai.xi         {
3094*53ee8cc1Swenshuai.xi             if (param1 > CH5_INPUT_DLY_UPPER_BOUND)
3095*53ee8cc1Swenshuai.xi             {
3096*53ee8cc1Swenshuai.xi                 HALSOUND_ERROR("Warning! Invalid value (%u), delay time should be less than %u ms. \r\n", (unsigned int)param1, CH5_INPUT_DLY_UPPER_BOUND);
3097*53ee8cc1Swenshuai.xi                 param1 = CH5_INPUT_DLY_UPPER_BOUND;
3098*53ee8cc1Swenshuai.xi             }
3099*53ee8cc1Swenshuai.xi 
3100*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_ch5InputDelay, param1, DSP_MEM_TYPE_PM);
3101*53ee8cc1Swenshuai.xi             status = TRUE;
3102*53ee8cc1Swenshuai.xi 
3103*53ee8cc1Swenshuai.xi             break;
3104*53ee8cc1Swenshuai.xi         }
3105*53ee8cc1Swenshuai.xi 
3106*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch6:
3107*53ee8cc1Swenshuai.xi         {
3108*53ee8cc1Swenshuai.xi             if (param1 > CH6_INPUT_DLY_UPPER_BOUND)
3109*53ee8cc1Swenshuai.xi             {
3110*53ee8cc1Swenshuai.xi                 HALSOUND_ERROR("Warning! Invalid value (%u), delay time should be less than %u ms. \r\n", (unsigned int)param1, CH6_INPUT_DLY_UPPER_BOUND);
3111*53ee8cc1Swenshuai.xi                 param1 = CH6_INPUT_DLY_UPPER_BOUND;
3112*53ee8cc1Swenshuai.xi             }
3113*53ee8cc1Swenshuai.xi 
3114*53ee8cc1Swenshuai.xi             HAL_MAD2_Write_DSP_sram(DSP2PmAddr_ch6InputDelay, param1, DSP_MEM_TYPE_PM);
3115*53ee8cc1Swenshuai.xi             status = TRUE;
3116*53ee8cc1Swenshuai.xi 
3117*53ee8cc1Swenshuai.xi             break;
3118*53ee8cc1Swenshuai.xi         }
3119*53ee8cc1Swenshuai.xi 
3120*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch7:
3121*53ee8cc1Swenshuai.xi         {
3122*53ee8cc1Swenshuai.xi             status = TRUE;
3123*53ee8cc1Swenshuai.xi 
3124*53ee8cc1Swenshuai.xi             break;
3125*53ee8cc1Swenshuai.xi         }
3126*53ee8cc1Swenshuai.xi 
3127*53ee8cc1Swenshuai.xi         case Sound_SET_PARAM_InternalDelay_Ch8:
3128*53ee8cc1Swenshuai.xi         {
3129*53ee8cc1Swenshuai.xi             status = TRUE;
3130*53ee8cc1Swenshuai.xi 
3131*53ee8cc1Swenshuai.xi             break;
3132*53ee8cc1Swenshuai.xi         }
3133*53ee8cc1Swenshuai.xi 
3134*53ee8cc1Swenshuai.xi         default:
3135*53ee8cc1Swenshuai.xi         {
3136*53ee8cc1Swenshuai.xi             status = FALSE;
3137*53ee8cc1Swenshuai.xi 
3138*53ee8cc1Swenshuai.xi             break;
3139*53ee8cc1Swenshuai.xi         }
3140*53ee8cc1Swenshuai.xi     }
3141*53ee8cc1Swenshuai.xi     return(status);
3142*53ee8cc1Swenshuai.xi }
3143*53ee8cc1Swenshuai.xi 
3144*53ee8cc1Swenshuai.xi //******************************************************************************
3145*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_AUDIO_SOUND_SetParam()
3146*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: This routine is used for adjust Common Sound parameters
3147*53ee8cc1Swenshuai.xi /// @return MS_BOOL     \b : True / False
3148*53ee8cc1Swenshuai.xi //******************************************************************************
HAL_SND_GetParam(Sound_GET_PARAM_Type Type,MS_U16 param1)3149*53ee8cc1Swenshuai.xi MS_U16 HAL_SND_GetParam( Sound_GET_PARAM_Type Type, MS_U16 param1)
3150*53ee8cc1Swenshuai.xi {
3151*53ee8cc1Swenshuai.xi     MS_U16 tmp=0;
3152*53ee8cc1Swenshuai.xi     switch(Type)
3153*53ee8cc1Swenshuai.xi     {
3154*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_PreScale:
3155*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetPreScale(param1);                           //param1: path
3156*53ee8cc1Swenshuai.xi             break;
3157*53ee8cc1Swenshuai.xi 
3158*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Balance_L:
3159*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetBalance_L();                                // 0~0xFF
3160*53ee8cc1Swenshuai.xi             break;
3161*53ee8cc1Swenshuai.xi 
3162*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Balance_R:
3163*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetBalance_R();                                // 0~0xFF
3164*53ee8cc1Swenshuai.xi             break;
3165*53ee8cc1Swenshuai.xi 
3166*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_EQ:
3167*53ee8cc1Swenshuai.xi            tmp = HAL_SOUND_GetEq(param1);                                  //param1: band 0~4
3168*53ee8cc1Swenshuai.xi             break;
3169*53ee8cc1Swenshuai.xi 
3170*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Surround_XA:
3171*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetSurroundXA();
3172*53ee8cc1Swenshuai.xi             break;
3173*53ee8cc1Swenshuai.xi 
3174*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Surround_XB:
3175*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetSurroundXB();
3176*53ee8cc1Swenshuai.xi             break;
3177*53ee8cc1Swenshuai.xi 
3178*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Surround_XK:
3179*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetSurroundXK();
3180*53ee8cc1Swenshuai.xi             break;
3181*53ee8cc1Swenshuai.xi 
3182*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Surround_LPFGAIN:
3183*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetSurroundLPFGain();
3184*53ee8cc1Swenshuai.xi             break;
3185*53ee8cc1Swenshuai.xi 
3186*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Treble:
3187*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetTreble();
3188*53ee8cc1Swenshuai.xi             break;
3189*53ee8cc1Swenshuai.xi 
3190*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Bass:
3191*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetBass();
3192*53ee8cc1Swenshuai.xi             break;
3193*53ee8cc1Swenshuai.xi 
3194*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Avc_Mode:
3195*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetAvcMode();
3196*53ee8cc1Swenshuai.xi             break;
3197*53ee8cc1Swenshuai.xi 
3198*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Avc_Threshold:
3199*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetAVCThreshold();
3200*53ee8cc1Swenshuai.xi             break;
3201*53ee8cc1Swenshuai.xi 
3202*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Avc_AT:
3203*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetAvcAT();
3204*53ee8cc1Swenshuai.xi             break;
3205*53ee8cc1Swenshuai.xi 
3206*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Avc_RT:
3207*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetAvcRT();
3208*53ee8cc1Swenshuai.xi             break;
3209*53ee8cc1Swenshuai.xi 
3210*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_AudioDelay:
3211*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetCH1AudioDelay();
3212*53ee8cc1Swenshuai.xi             break;
3213*53ee8cc1Swenshuai.xi 
3214*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_DCOffet:
3215*53ee8cc1Swenshuai.xi             tmp = HAL_AUDIO_ReadByte(0x2B51);
3216*53ee8cc1Swenshuai.xi             tmp = ((MS_U16)HAL_AUDIO_ReadByte(0x2B50) |(tmp<<8));
3217*53ee8cc1Swenshuai.xi             break;
3218*53ee8cc1Swenshuai.xi 
3219*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_NR_Threshold:
3220*53ee8cc1Swenshuai.xi             tmp = HAL_AUDIO_ReadByte(0x2D24);
3221*53ee8cc1Swenshuai.xi             break;
3222*53ee8cc1Swenshuai.xi 
3223*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_NR_Status:
3224*53ee8cc1Swenshuai.xi            // tmp = (HAL_AUDIO_ReadByte(0x2A78) & 0x01);
3225*53ee8cc1Swenshuai.xi             break;
3226*53ee8cc1Swenshuai.xi 
3227*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_getSignal_Energy:
3228*53ee8cc1Swenshuai.xi           //  tmp = HAL_MAD_Read_DSP_sram(0x3F2B, DSP_MEM_TYPE_DM);
3229*53ee8cc1Swenshuai.xi             break;
3230*53ee8cc1Swenshuai.xi 
3231*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_EQ_Status:
3232*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetEQ_Status();
3233*53ee8cc1Swenshuai.xi             break;
3234*53ee8cc1Swenshuai.xi 
3235*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_PEQ_Status:
3236*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetPEQ_Status();
3237*53ee8cc1Swenshuai.xi             break;
3238*53ee8cc1Swenshuai.xi 
3239*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Tone_Status:
3240*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetTone_Status();
3241*53ee8cc1Swenshuai.xi             break;
3242*53ee8cc1Swenshuai.xi 
3243*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_AutoVolume_Status:
3244*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetAutoVolume_Status();
3245*53ee8cc1Swenshuai.xi             break;
3246*53ee8cc1Swenshuai.xi 
3247*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Surround_Status:
3248*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetSurround_Status();
3249*53ee8cc1Swenshuai.xi             break;
3250*53ee8cc1Swenshuai.xi 
3251*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Drc_Threshold:
3252*53ee8cc1Swenshuai.xi             tmp = HAL_SOUND_GetDRCThreshold();
3253*53ee8cc1Swenshuai.xi             break;
3254*53ee8cc1Swenshuai.xi 
3255*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_DMAReader_Buffer_Addr:
3256*53ee8cc1Swenshuai.xi             tmp = (MS_U16)(DMA_READER_TEMP_BUFFER_ADDR>>8);
3257*53ee8cc1Swenshuai.xi             break;
3258*53ee8cc1Swenshuai.xi 
3259*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Type_A:
3260*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Type_B:
3261*53ee8cc1Swenshuai.xi         {
3262*53ee8cc1Swenshuai.xi             MS_U32 u32EaseType = AUDIO_EASE_TYPE_LINEAR;
3263*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
3264*53ee8cc1Swenshuai.xi 
3265*53ee8cc1Swenshuai.xi             switch (Type)
3266*53ee8cc1Swenshuai.xi             {
3267*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Type_A:
3268*53ee8cc1Swenshuai.xi                 {
3269*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3270*53ee8cc1Swenshuai.xi                     break;
3271*53ee8cc1Swenshuai.xi                 }
3272*53ee8cc1Swenshuai.xi 
3273*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Type_B:
3274*53ee8cc1Swenshuai.xi                 {
3275*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
3276*53ee8cc1Swenshuai.xi                     break;
3277*53ee8cc1Swenshuai.xi                 }
3278*53ee8cc1Swenshuai.xi 
3279*53ee8cc1Swenshuai.xi                 default:
3280*53ee8cc1Swenshuai.xi                 {
3281*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3282*53ee8cc1Swenshuai.xi                     break;
3283*53ee8cc1Swenshuai.xi                 }
3284*53ee8cc1Swenshuai.xi             }
3285*53ee8cc1Swenshuai.xi 
3286*53ee8cc1Swenshuai.xi             u32EaseType = HAL_MAD2_Read_DSP_sram((u32DspPmEaseBase + 2), DSP_MEM_TYPE_PM);
3287*53ee8cc1Swenshuai.xi 
3288*53ee8cc1Swenshuai.xi             switch (u32EaseType)
3289*53ee8cc1Swenshuai.xi             {
3290*53ee8cc1Swenshuai.xi                 case AUDIO_EASE_TYPE_LINEAR:
3291*53ee8cc1Swenshuai.xi                 {
3292*53ee8cc1Swenshuai.xi                     tmp = E_AUDIO_EASE_TYPE_LINEAR;
3293*53ee8cc1Swenshuai.xi                     break;
3294*53ee8cc1Swenshuai.xi                 }
3295*53ee8cc1Swenshuai.xi 
3296*53ee8cc1Swenshuai.xi                 case AUDIO_EASE_TYPE_INCUBIC:
3297*53ee8cc1Swenshuai.xi                 {
3298*53ee8cc1Swenshuai.xi                     tmp = E_AUDIO_EASE_TYPE_INCUBIC;
3299*53ee8cc1Swenshuai.xi                     break;
3300*53ee8cc1Swenshuai.xi                 }
3301*53ee8cc1Swenshuai.xi 
3302*53ee8cc1Swenshuai.xi                 case AUDIO_EASE_TYPE_OUTCUBIC:
3303*53ee8cc1Swenshuai.xi                 {
3304*53ee8cc1Swenshuai.xi                     tmp = E_AUDIO_EASE_TYPE_OUTCUBIC;
3305*53ee8cc1Swenshuai.xi                     break;
3306*53ee8cc1Swenshuai.xi                 }
3307*53ee8cc1Swenshuai.xi 
3308*53ee8cc1Swenshuai.xi                 case AUDIO_EASE_TYPE_INOUTCUBIC:
3309*53ee8cc1Swenshuai.xi                 {
3310*53ee8cc1Swenshuai.xi                     tmp = E_AUDIO_EASE_TYPE_INOUTCUBIC;
3311*53ee8cc1Swenshuai.xi                     break;
3312*53ee8cc1Swenshuai.xi                 }
3313*53ee8cc1Swenshuai.xi 
3314*53ee8cc1Swenshuai.xi                 default:
3315*53ee8cc1Swenshuai.xi                 {
3316*53ee8cc1Swenshuai.xi                     HALSOUND_ERROR("%s: invalid audio ease type %u\n", __FUNCTION__, (unsigned int)u32EaseType);
3317*53ee8cc1Swenshuai.xi                     break;
3318*53ee8cc1Swenshuai.xi                 }
3319*53ee8cc1Swenshuai.xi             }
3320*53ee8cc1Swenshuai.xi 
3321*53ee8cc1Swenshuai.xi             break;
3322*53ee8cc1Swenshuai.xi         }
3323*53ee8cc1Swenshuai.xi 
3324*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Duration_A:
3325*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Duration_B:
3326*53ee8cc1Swenshuai.xi         {
3327*53ee8cc1Swenshuai.xi             MS_U32 u32MiniSecond = 0;
3328*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
3329*53ee8cc1Swenshuai.xi 
3330*53ee8cc1Swenshuai.xi             switch (Type)
3331*53ee8cc1Swenshuai.xi             {
3332*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Duration_A:
3333*53ee8cc1Swenshuai.xi                 {
3334*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3335*53ee8cc1Swenshuai.xi                     break;
3336*53ee8cc1Swenshuai.xi                 }
3337*53ee8cc1Swenshuai.xi 
3338*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Duration_B:
3339*53ee8cc1Swenshuai.xi                 {
3340*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
3341*53ee8cc1Swenshuai.xi                     break;
3342*53ee8cc1Swenshuai.xi                 }
3343*53ee8cc1Swenshuai.xi 
3344*53ee8cc1Swenshuai.xi                 default:
3345*53ee8cc1Swenshuai.xi                 {
3346*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3347*53ee8cc1Swenshuai.xi                     break;
3348*53ee8cc1Swenshuai.xi                 }
3349*53ee8cc1Swenshuai.xi             }
3350*53ee8cc1Swenshuai.xi 
3351*53ee8cc1Swenshuai.xi             u32MiniSecond = HAL_MAD2_Read_DSP_sram((u32DspPmEaseBase + 1), DSP_MEM_TYPE_PM) / 48;
3352*53ee8cc1Swenshuai.xi             tmp = (MS_U16)u32MiniSecond;
3353*53ee8cc1Swenshuai.xi 
3354*53ee8cc1Swenshuai.xi             break;
3355*53ee8cc1Swenshuai.xi         }
3356*53ee8cc1Swenshuai.xi 
3357*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Gain_A:
3358*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_Ease_Gain_B:
3359*53ee8cc1Swenshuai.xi         {
3360*53ee8cc1Swenshuai.xi             MS_U32 u32Value;
3361*53ee8cc1Swenshuai.xi             MS_U32 u32DspPmEaseBase = 0;
3362*53ee8cc1Swenshuai.xi 
3363*53ee8cc1Swenshuai.xi             switch (Type)
3364*53ee8cc1Swenshuai.xi             {
3365*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Gain_A:
3366*53ee8cc1Swenshuai.xi                 {
3367*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3368*53ee8cc1Swenshuai.xi                     break;
3369*53ee8cc1Swenshuai.xi                 }
3370*53ee8cc1Swenshuai.xi 
3371*53ee8cc1Swenshuai.xi                 case Sound_GET_PARAM_Ease_Gain_B:
3372*53ee8cc1Swenshuai.xi                 {
3373*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr + 4;
3374*53ee8cc1Swenshuai.xi                     break;
3375*53ee8cc1Swenshuai.xi                 }
3376*53ee8cc1Swenshuai.xi 
3377*53ee8cc1Swenshuai.xi                 default:
3378*53ee8cc1Swenshuai.xi                 {
3379*53ee8cc1Swenshuai.xi                     u32DspPmEaseBase = DSP2PmAddr_VolEaseAddr;
3380*53ee8cc1Swenshuai.xi                     break;
3381*53ee8cc1Swenshuai.xi                 }
3382*53ee8cc1Swenshuai.xi             }
3383*53ee8cc1Swenshuai.xi 
3384*53ee8cc1Swenshuai.xi             u32Value = HAL_MAD2_Read_DSP_sram((u32DspPmEaseBase + 3), DSP_MEM_TYPE_PM);
3385*53ee8cc1Swenshuai.xi             tmp = (MS_U16)(u32Value >> 8);
3386*53ee8cc1Swenshuai.xi 
3387*53ee8cc1Swenshuai.xi             break;
3388*53ee8cc1Swenshuai.xi         }
3389*53ee8cc1Swenshuai.xi 
3390*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch1:
3391*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch2:
3392*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch3:
3393*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch4:
3394*53ee8cc1Swenshuai.xi         {
3395*53ee8cc1Swenshuai.xi             tmp = (MS_U16)HAL_MAD2_Read_DSP_sram(DSP2PmAddr_multiChInputDelay, DSP_MEM_TYPE_PM);
3396*53ee8cc1Swenshuai.xi             break;
3397*53ee8cc1Swenshuai.xi         }
3398*53ee8cc1Swenshuai.xi 
3399*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch5:
3400*53ee8cc1Swenshuai.xi         {
3401*53ee8cc1Swenshuai.xi             tmp = (MS_U16)HAL_MAD2_Read_DSP_sram(DSP2PmAddr_ch5InputDelay, DSP_MEM_TYPE_PM);
3402*53ee8cc1Swenshuai.xi             break;
3403*53ee8cc1Swenshuai.xi         }
3404*53ee8cc1Swenshuai.xi 
3405*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch6:
3406*53ee8cc1Swenshuai.xi         {
3407*53ee8cc1Swenshuai.xi             tmp = (MS_U16)HAL_MAD2_Read_DSP_sram(DSP2PmAddr_ch6InputDelay, DSP_MEM_TYPE_PM);
3408*53ee8cc1Swenshuai.xi             break;
3409*53ee8cc1Swenshuai.xi         }
3410*53ee8cc1Swenshuai.xi 
3411*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch7:
3412*53ee8cc1Swenshuai.xi         {
3413*53ee8cc1Swenshuai.xi             break;
3414*53ee8cc1Swenshuai.xi         }
3415*53ee8cc1Swenshuai.xi 
3416*53ee8cc1Swenshuai.xi         case Sound_GET_PARAM_InternalDelay_Ch8:
3417*53ee8cc1Swenshuai.xi         {
3418*53ee8cc1Swenshuai.xi             break;
3419*53ee8cc1Swenshuai.xi         }
3420*53ee8cc1Swenshuai.xi 
3421*53ee8cc1Swenshuai.xi         default:
3422*53ee8cc1Swenshuai.xi             break;
3423*53ee8cc1Swenshuai.xi     }
3424*53ee8cc1Swenshuai.xi     return tmp;
3425*53ee8cc1Swenshuai.xi 
3426*53ee8cc1Swenshuai.xi }
3427*53ee8cc1Swenshuai.xi 
3428*53ee8cc1Swenshuai.xi 
3429