zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/lib/libtinyalsa/audio_mixer_ctrl.c b/ap/lib/libtinyalsa/audio_mixer_ctrl.c
new file mode 100755
index 0000000..68448ab
--- /dev/null
+++ b/ap/lib/libtinyalsa/audio_mixer_ctrl.c
@@ -0,0 +1,1327 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <tinyalsa/asoundlib.h>
+#include <sound/asound.h>
+#include <tinyalsa/audio_mixer_ctrl.h>
+
+#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
+
+struct audio_para_conf {
+	const char *control;
+	char *values[2];
+};
+
+
+#if defined _USE_CODEC_TI3100
+
+
+enum t_output_vol {
+    T_OUTPUT_VOL_MINUS_63_5DB = 0,
+    T_OUTPUT_VOL_MINUS_63DB = 1,
+    T_OUTPUT_VOL_MINUS_27DB = 73,
+    T_OUTPUT_VOL_MINUS_24DB = 79,
+    T_OUTPUT_VOL_MINUS_21DB = 85,
+    T_OUTPUT_VOL_MINUS_18DB = 91,
+    T_OUTPUT_VOL_MINUS_15DB = 97,
+    T_OUTPUT_VOL_MINUS_12DB = 103,
+    T_OUTPUT_VOL_MINUS_9DB = 109,
+    T_OUTPUT_VOL_MINUS_6DB = 115,
+    T_OUTPUT_VOL_MINUS_3DB = 121,
+    T_OUTPUT_VOL_MINUS_2DB = 123,
+    T_OUTPUT_VOL_MINUS_1DB = 125,
+    T_OUTPUT_VOL_0DB = 127,
+    T_OUTPUT_VOL_1DB = 129,
+    T_OUTPUT_VOL_2DB = 131,
+    T_OUTPUT_VOL_3DB = 133,
+    T_OUTPUT_VOL_6DB = 139,
+    T_OUTPUT_VOL_9DB = 145,
+    T_OUTPUT_VOL_12DB = 151,
+    T_OUTPUT_VOL_24DB = 175,
+};
+
+enum t_input_vol {
+    T_INPUT_VOL_MINUS_12DB = 0,
+	T_INPUT_VOL_MINUS_7DB = 10,
+    T_INPUT_VOL_MINUS_6DB = 12,
+    T_INPUT_VOL_MINUS_5DB = 14,
+    T_INPUT_VOL_MINUS_4DB = 16,
+    T_INPUT_VOL_MINUS_3DB = 18,
+    T_INPUT_VOL_MINUS_2DB = 20,
+    T_INPUT_VOL_MINUS_1DB = 22,
+    T_INPUT_VOL_0DB = 24,
+    T_INPUT_VOL_1DB = 26,
+    T_INPUT_VOL_2DB = 28,
+    T_INPUT_VOL_3DB = 30,
+    T_INPUT_VOL_20DB = 64,
+};
+
+static struct audio_para_conf init_default_para[] = {  //¿ª»ú³õʼ»¯µ÷ÓÃ
+	{"Mic PGA Capture Volume", {"40"}},
+	{"ADC Mute", {"0"}},
+	{"ADC Fine Capture Volume", {"0"}},
+	{"Speaker Analog Playback Volume", {"127"}},
+	{"Speaker Driver Playback Switch", {"1"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB
+};
+
+#ifdef _USE_7520V3_PHONE_TYPE_FWP
+static struct audio_para_conf  common_out_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"Speaker Analog Playback Volume", {"127"}},
+	{"Speaker Driver Playback Switch", {"1"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB
+};
+
+static struct audio_para_conf  common_in_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"Mic PGA Capture Volume", {"12"}},
+	{"ADC Mute", {"0"}},
+	{"ADC Fine Capture Volume", {"0"}},
+
+};
+
+static struct audio_para_conf  hp_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ
+	{"Speaker Switch", {"0"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Volume", {"0", "0"}},
+};
+
+static struct audio_para_conf  spk_outpath_para_audio[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"Speaker Switch", {"1"}},
+	{"Speaker Driver Playback Volume", {"2"}}, //18dB
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+};
+
+static  struct  audio_para_conf  main_mic_inpath_para_audio[] = { //¶ÔÓ¦ÓÚMic1lp_Mic1lmÊäÈëͨµÀ
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+
+};
+
+static  struct  audio_para_conf  aux_mic_inpath_para_audio[] = {//¶ÔÓ¦ÓÚMic1rpÊäÈëͨµÀ
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LP P-Terminal", {"Off"}},
+	{"MIC1LM M-Terminal", {"Off"}},
+};
+
+static struct audio_para_conf  handset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"12"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB	
+	{"Speaker Switch", {"0"}},
+	{"DAC Playback Volume", {"129", "129"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Volume", {"5", "5"}},
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing path select", {"handset"}},  // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  headset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ Mic1rpÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"40"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB	
+	{"Speaker Switch", {"0"}},
+	{"DAC Playback Volume ", {"129", "129"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Switch", {"7", "7"}}, //7dB
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LP P-Terminal", {"Off"}},
+	{"MIC1LM M-Terminal", {"Off"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing select", {"headset"}}, // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  spk_inoutpath_para_voice[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"12"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"Speaker Analog Playback Volume", {"127"}},
+	{"Speaker Driver Playback Switch", {"1"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"DAC Playback Volume", {"124", "124"}}, //-1.5dB
+	{"Speaker Switch", {"1"}},
+	{"Speaker Driver Playback Volume", {"0"}}, //18dB
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
+};
+
+#else 
+static struct audio_para_conf  common_out_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"Speaker Analog Playback Volume", {"127"}},
+	{"Speaker Driver Playback Switch", {"1"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB
+};
+
+static struct audio_para_conf  common_in_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"Mic PGA Capture Volume", {"40"}},
+	{"ADC Mute", {"0"}},
+	{"ADC Fine Capture Volume", {"0"}},
+
+};
+
+static struct audio_para_conf  hp_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ
+	{"Speaker Switch", {"0"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Volume", {"0", "0"}},
+};
+
+static struct audio_para_conf  spk_outpath_para_audio[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"Speaker Switch", {"1"}},
+	{"Speaker Driver Playback Volume", {"2"}}, //18dB
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+};
+
+static  struct  audio_para_conf  main_mic_inpath_para_audio[] = { //¶ÔÓ¦ÓÚMic1lp_Mic1lmÊäÈëͨµÀ
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+
+};
+
+static  struct  audio_para_conf  aux_mic_inpath_para_audio[] = {//¶ÔÓ¦ÓÚMic1rpÊäÈëͨµÀ
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LP P-Terminal", {"Off"}},
+	{"MIC1LM M-Terminal", {"Off"}},
+};
+
+static struct audio_para_conf  handset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"40"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB	
+	{"Speaker Switch", {"0"}},
+	{"DAC Playback Volume", {"129", "129"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Volume", {"7", "7"}},
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing path select", {"handset"}},  // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  headset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ Mic1rpÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"40"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"HP Analog Playback Volume", {"127", "127"}},
+	{"HP Driver Playback Switch", {"1", "1"}}, //7dB	
+	{"Speaker Switch", {"0"}},
+	{"DAC Playback Volume ", {"129", "129"}},
+	{"HP Left Switch", {"1"}},
+	{"HP Right Switch", {"1"}},
+	{"HP Driver Playback Switch", {"7", "7"}}, //7dB
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LP P-Terminal", {"Off"}},
+	{"MIC1LM M-Terminal", {"Off"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing select", {"headset"}}, // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  spk_inoutpath_para_voice[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"Mic PGA Capture Volume", {"20"}},
+	//{"ADC Mute", {"0"}},
+	//{"ADC Fine Capture Volume", {"0"}},
+	{"Speaker Analog Playback Volume", {"127"}},
+	{"Speaker Driver Playback Switch", {"1"}},
+	{"DAC Left Input", {"Mono"}},
+	{"DAC Right Input", {"Mono"}},
+	{"Output Right From Right DAC", {"1"}},
+	{"Output Left From Left DAC", {"1"}},
+	{"DAC Playback Volume", {"124", "124"}}, //-1.5dB
+	{"Speaker Switch", {"1"}},
+	{"Speaker Driver Playback Volume", {"2"}}, //18dB
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+	{"MIC1LM P-Terminal", {"Off"}},
+	{"MIC1RP P-Terminal", {"Off"}},
+	{"MIC1LP P-Terminal", {"FFR 10 Ohm"}},
+	{"MIC1LM M-Terminal", {"FFR 10 Ohm"}},
+	{"ADC Capture Volume", {"24"}},
+	{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
+};
+
+#endif
+static struct audio_para_conf output_dac_vol = 	{"DAC Playback Volume", {"129","129"}};
+
+static struct audio_para_conf input_adc_vol = {"ADC Capture Volume", {"24"}};
+
+static struct audio_para_conf dac_mute = {"DAC Mute", {"1", "1"}};
+static struct audio_para_conf adc_mute = {"ADC Mute", {"1"}};
+
+static struct audio_para_conf spk_path_onoff[] = {
+	{"Speaker Switch", {"0"}},
+};
+static struct audio_para_conf rcv_path_onoff[] = {
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+};
+static struct audio_para_conf earp_path_onoff[] = {
+	{"HP Left Switch", {"0"}},
+	{"HP Right Switch", {"0"}},
+};
+static int output_vol_conversion(int vol)
+{
+	switch(vol){
+	case T_AUDIO_OUTPUT_VOL_LEVEL_0:
+		return T_OUTPUT_VOL_MINUS_63_5DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_1:
+		return T_OUTPUT_VOL_MINUS_27DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_2:
+		return T_OUTPUT_VOL_MINUS_24DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_3:
+		return T_OUTPUT_VOL_MINUS_21DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_4:
+		return T_OUTPUT_VOL_MINUS_18DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_5:
+		return T_OUTPUT_VOL_MINUS_15DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_6:
+		return T_OUTPUT_VOL_MINUS_12DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_7:
+		return T_OUTPUT_VOL_MINUS_9DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_8:
+		return T_OUTPUT_VOL_MINUS_6DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_9:
+		return T_OUTPUT_VOL_MINUS_3DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_10:
+		return T_OUTPUT_VOL_0DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_11:
+		return T_OUTPUT_VOL_3DB;
+	default:
+		return T_OUTPUT_VOL_0DB;
+	}
+}
+
+static int input_vol_conversion(int vol)
+{
+	switch(vol) {
+	case T_AUDIO_INPUT_VOL_LEVEL_0:
+		return T_INPUT_VOL_MINUS_12DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_1:
+		return T_INPUT_VOL_MINUS_7DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_2:
+		return T_INPUT_VOL_MINUS_6DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_3:
+		return T_INPUT_VOL_MINUS_5DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_4:
+		return T_INPUT_VOL_MINUS_4DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_5:
+		return T_INPUT_VOL_MINUS_3DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_6:
+		return T_INPUT_VOL_MINUS_2DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_7:
+		return T_INPUT_VOL_MINUS_1DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_8:
+		return T_INPUT_VOL_0DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_9:
+		return T_INPUT_VOL_1DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_10:
+		return T_INPUT_VOL_2DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_11:
+		return T_INPUT_VOL_3DB;
+	default:
+		return T_INPUT_VOL_0DB;
+	}
+}
+
+ 
+#elif defined _USE_CODEC_ES8374
+
+
+enum t_output_vol {
+    T_OUTPUT_VOL_MINUS_96DB = 0,
+	T_OUTPUT_VOL_MINUS_95DB = 2,
+	T_OUTPUT_VOL_MINUS_90DB = 12,
+	T_OUTPUT_VOL_MINUS_85DB = 22,
+    T_OUTPUT_VOL_MINUS_80DB = 32,
+    T_OUTPUT_VOL_MINUS_75DB = 42,
+    T_OUTPUT_VOL_MINUS_70DB = 52,
+    T_OUTPUT_VOL_MINUS_65DB = 62,
+    T_OUTPUT_VOL_MINUS_60DB = 72,
+    T_OUTPUT_VOL_MINUS_55DB = 82,
+    T_OUTPUT_VOL_MINUS_50DB = 92,
+    T_OUTPUT_VOL_MINUS_45DB = 102,
+    T_OUTPUT_VOL_MINUS_40DB = 112,
+    T_OUTPUT_VOL_MINUS_35DB = 122,
+    T_OUTPUT_VOL_MINUS_30DB = 132,
+    T_OUTPUT_VOL_MINUS_25DB = 142,
+    T_OUTPUT_VOL_MINUS_20DB = 152,
+    T_OUTPUT_VOL_MINUS_15DB = 162,
+    T_OUTPUT_VOL_MINUS_10DB = 172,
+    T_OUTPUT_VOL_MINUS_7DB  = 178,
+    T_OUTPUT_VOL_MINUS_6DB  = 180,
+    T_OUTPUT_VOL_MINUS_5DB  = 182,
+    T_OUTPUT_VOL_MINUS_4DB  = 184,
+    T_OUTPUT_VOL_MINUS_3DB  = 186,
+    T_OUTPUT_VOL_MINUS_2DB  = 188,
+    T_OUTPUT_VOL_MINUS_1DB  = 190,
+    T_OUTPUT_VOL_0DB        = 192
+};
+
+enum t_input_vol {
+    T_INPUT_VOL_MINUS_96DB = 0,
+	T_INPUT_VOL_MINUS_95DB = 2,
+	T_INPUT_VOL_MINUS_90DB = 12,
+	T_INPUT_VOL_MINUS_85DB = 22,
+    T_INPUT_VOL_MINUS_80DB = 32,
+    T_INPUT_VOL_MINUS_75DB = 42,
+    T_INPUT_VOL_MINUS_70DB = 52,
+    T_INPUT_VOL_MINUS_65DB = 62,
+    T_INPUT_VOL_MINUS_60DB = 72,
+    T_INPUT_VOL_MINUS_55DB = 82,
+    T_INPUT_VOL_MINUS_50DB = 92,
+    T_INPUT_VOL_MINUS_45DB = 102,
+    T_INPUT_VOL_MINUS_40DB = 112,
+    T_INPUT_VOL_MINUS_35DB = 122,
+    T_INPUT_VOL_MINUS_30DB = 132,
+    T_INPUT_VOL_MINUS_25DB = 142,
+    T_INPUT_VOL_MINUS_20DB = 152,
+    T_INPUT_VOL_MINUS_15DB = 162,
+    T_INPUT_VOL_MINUS_10DB = 172,
+    T_INPUT_VOL_MINUS_7DB  = 178,
+    T_INPUT_VOL_MINUS_6DB  = 180,
+    T_INPUT_VOL_MINUS_5DB  = 182,
+    T_INPUT_VOL_MINUS_4DB  = 184,
+    T_INPUT_VOL_MINUS_3DB  = 186,
+    T_INPUT_VOL_MINUS_2DB  = 188,
+    T_INPUT_VOL_MINUS_1DB  = 190,
+    T_INPUT_VOL_0DB        = 192
+};
+
+
+static struct audio_para_conf init_default_para[] = {  //¿ª»ú³õʼ»¯µ÷ÓÃ
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ALC MUX", {"0"}},	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"ALC Capture Max PGA", {"15"}},
+	{"DAC MUTE", {"0"}},  	  
+	{"DAC Playback Volume", {"120"}},	
+	{"DAC SDP SRC MUX",  {"0"}},  
+	{"DAC SRC MUX",  {"0"}} 
+};
+
+//#ifdef  _USE_7520V3_PHONE_TYPE_C31F
+#if ( defined _USE_7520V3_PHONE_TYPE_C31F || defined _USE_7520V3_PHONE_TYPE_WTWD )
+
+static struct audio_para_conf  common_out_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"DAC MUTE", {"0"}},  	  
+	//{"DAC Playback Volume", {"120"}},	
+	{"DAC SDP SRC MUX",  {"0"}},  
+	{"DAC SRC MUX",  {"0"}} 
+};
+
+static struct audio_para_conf  common_in_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},	
+	{"ADC HPF COEFFICIENT", {"5"}},
+#if 0	
+	{"ALC MUX", {"1"}},	
+	{"ALC Capture Target Volume", {"5"}},
+	{"ALC Capture Max PGA", {"11"}},
+	{"ALC Capture Min PGA", {"2"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"0"}},
+	{"ALC Capture Attack Time", {"0"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+};
+
+#ifdef _USE_7520V3_PHONE_TYPE_WTWD
+static struct audio_para_conf  hp_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"1"}}, 	
+	{"SPEAKER MIXER GAIN", {"41"}},		//1d	
+	{"SPEAKER OUTPUT Volume", {"0"}},	//1e
+	{"DAC Playback Volume", {"192"}}, //38
+};
+#else
+static struct audio_para_conf  hp_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"4"}},      
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"audio path select",{"handset"}},
+};
+
+#endif
+/*
+static struct audio_para_conf  spk_outpath_para_audio[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},	
+	{"SPEAKER MIXER GAIN", {"4"}},			
+	{"SPEAKER OUTPUT Volume", {"4"}},		
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"1"}} 	
+};
+*/
+
+static struct audio_para_conf  spk_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"11"}},      
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"audio path select",{"speak"}},
+};
+
+static  struct  audio_para_conf  main_mic_inpath_para_audio[] = { //¶ÔÓ¦ÓÚLin1-Rin1ÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},
+};
+
+static  struct  audio_para_conf  aux_mic_inpath_para_audio[] = {//¶ÔÓ¦ÓÚLin2-Rin2ÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"2"}},	
+};
+
+#ifdef _USE_7520V3_PHONE_TYPE_WTWD
+
+static struct audio_para_conf  handset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	//{"voice processing path select", {"headset"}},  // handset speak headset bluetooth
+	{"voice processing path select", {"handset"}},	// handset speak headset bluetooth
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}}, 
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+			
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"1"}}, 	
+	{"SPEAKER MIXER GAIN", {"32"}},	//old 41		
+	{"SPEAKER OUTPUT Volume", {"0"}},	//1
+	{"DAC Playback Volume", {"192"}}, //38
+};
+
+#else
+static struct audio_para_conf  handset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"voice processing path select", {"handset"}},  // handset speak headset bluetooth
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"11"}}, 
+    {"DAC Playback Volume", {"192"}}, 
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+};
+#endif
+static struct audio_para_conf  headset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ Mic1rpÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"7"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"4"}},
+	{"DAC Playback Volume", {"190"}},
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing select", {"headset"}}, // handset speak headset bluetooth
+};
+#ifdef _USE_7520V3_PHONE_TYPE_WTWD //class-d -->receiver
+static struct audio_para_conf  spk_inoutpath_para_voice[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0	
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}},		
+	{"MONO OUT GAIN", {"4"}}, 
+	{"DAC Playback Volume", {"186"}},
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
+};
+#else//momo out -> speaker
+static struct audio_para_conf  spk_inoutpath_para_voice[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0	
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"6"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}},		
+	{"MONO OUT GAIN", {"0"}}, 
+	{"DAC Playback Volume", {"186"}},
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
+};
+
+#endif
+
+
+
+#else
+static struct audio_para_conf  common_out_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"DAC MUTE", {"0"}},  	  
+	//{"DAC Playback Volume", {"120"}},	
+	{"DAC SDP SRC MUX",  {"0"}},  
+	{"DAC SRC MUX",  {"0"}} 
+};
+
+static struct audio_para_conf  common_in_para_audio[] = {  //¶ÔÓ¦¹«¹²²¿·Ö
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},	
+	{"ADC HPF COEFFICIENT", {"5"}},
+#if 1	
+	{"ALC MUX", {"1"}},	
+	{"ALC Capture Target Volume", {"5"}},
+	{"ALC Capture Max PGA", {"11"}},
+	{"ALC Capture Min PGA", {"2"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"0"}},
+	{"ALC Capture Attack Time", {"0"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"3"}},	
+	{"ADC Capture Volume", {"180"}},	
+};
+
+static struct audio_para_conf  hp_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"4"}},      
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}}
+};
+
+/*
+static struct audio_para_conf  spk_outpath_para_audio[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},	
+	{"SPEAKER MIXER GAIN", {"4"}},			
+	{"SPEAKER OUTPUT Volume", {"4"}},		
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"1"}} 	
+};
+*/
+
+static struct audio_para_conf  spk_outpath_para_audio[] = {  //¶ÔÓ¦ÓÚSpkÊä³öͨµÀ
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"3"}},      
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}}
+};
+
+static  struct  audio_para_conf  main_mic_inpath_para_audio[] = { //¶ÔÓ¦ÓÚLin1-Rin1ÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},
+};
+
+static  struct  audio_para_conf  aux_mic_inpath_para_audio[] = {//¶ÔÓ¦ÓÚLin2-Rin2ÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"2"}},	
+};
+
+static struct audio_para_conf  handset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"7"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"4"}}, 
+    {"DAC Playback Volume", {"190"}}, 
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing path select", {"handset"}},  // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  headset_inoutpath_para_voice[] = {  //¶ÔÓ¦ÓÚHpÊä³öͨµÀ Mic1rpÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"7"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}}, 		
+	{"MONO OUT GAIN", {"4"}},
+	{"DAC Playback Volume", {"190"}},
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing select", {"headset"}}, // handset speak headset bluetooth
+};
+
+static struct audio_para_conf  spk_inoutpath_para_voice[] = { //¶ÔÓ¦ÓÚSpkÊä³öͨµÀMic1lp_Mic1lmÊäÈëͨµÀ
+	{"DIFFERENTIAL MUX", {"1"}},	
+	{"DMIC MUX", {"0"}},	
+	{"SDP OUT MUX", {"0"}},
+	{"ADC Soft Ramp", {"0"}},
+	{"ADC HPF COEFFICIENT", {"5"}},
+
+	{"ALC MUX", {"0"}},	
+#if 0	
+	{"ALC Capture Target Volume", {"7"}},
+	{"ALC Capture Max PGA", {"13"}},
+	{"ALC Capture Min PGA", {"8"}},
+	{"ALC Capture Hold Time", {"0"}},
+	{"ALC Capture Decay Time", {"1"}},
+	{"ALC Capture Attack Time", {"2"}},
+	{"ALC WIN SIZE", {"6"}},
+	{"ALC Capture NG Threshold", {"14"}},
+	{"ALC Capture NG Type", {"0"}},
+	{"ALC Capture NG Switch", {"0"}},
+#endif	
+	{"D2SE MIC BOOST GAIN", {"1"}},
+	{"LIN PGA GAIN", {"7"}},	
+	{"ADC Capture Volume", {"192"}},	
+	{"SPEAKER MIXER DAC TO SPEAKER OUT Switch", {"0"}},		
+	{"MONO OUT GAIN", {"4"}}, 
+	{"DAC Playback Volume", {"190"}},
+	{"MONO MIXER DAC TO MONO OUT Switch", {"1"}},
+	{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
+};
+
+#endif
+
+static struct audio_para_conf output_dac_vol = {"DAC Playback Volume", {"120"}};
+
+static struct audio_para_conf input_adc_vol = {"ADC Capture Volume", {"192"}};
+
+static struct audio_para_conf dac_mute = {"DAC MUTE", {"1"}};
+static struct audio_para_conf adc_mute = {"ADC MUTE", {"1"}};
+
+static struct audio_para_conf spk_path_onoff[] = {
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},
+};
+
+static struct audio_para_conf rcv_path_onoff[] = {
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},
+};
+
+static struct audio_para_conf earp_path_onoff[] = {
+	{"MONO MIXER DAC TO MONO OUT Switch", {"0"}},
+};
+
+
+static int output_vol_conversion(int vol)
+{
+	switch(vol){
+	case T_AUDIO_OUTPUT_VOL_LEVEL_0:
+		return T_OUTPUT_VOL_MINUS_96DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_1:
+		return T_OUTPUT_VOL_MINUS_45DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_2:
+		return T_OUTPUT_VOL_MINUS_40DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_3:
+		return T_OUTPUT_VOL_MINUS_35DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_4:
+		return T_OUTPUT_VOL_MINUS_30DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_5:
+		return T_OUTPUT_VOL_MINUS_25DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_6:
+		return T_OUTPUT_VOL_MINUS_20DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_7:
+		return T_OUTPUT_VOL_MINUS_15DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_8:
+		return T_OUTPUT_VOL_MINUS_10DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_9:
+		return T_OUTPUT_VOL_MINUS_6DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_10:
+		return T_OUTPUT_VOL_MINUS_3DB;
+	case T_AUDIO_OUTPUT_VOL_LEVEL_11:
+		return T_OUTPUT_VOL_0DB;
+	default:
+		return T_OUTPUT_VOL_0DB;
+	}
+}
+
+static int input_vol_conversion(int vol)
+{
+	switch(vol) {
+	case T_AUDIO_INPUT_VOL_LEVEL_0:
+		return T_INPUT_VOL_MINUS_96DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_1:
+		return T_INPUT_VOL_MINUS_30DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_2:
+		return T_INPUT_VOL_MINUS_25DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_3:
+		return T_INPUT_VOL_MINUS_20DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_4:
+		return T_INPUT_VOL_MINUS_15DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_5:
+		return T_INPUT_VOL_MINUS_10DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_6:
+		return T_INPUT_VOL_MINUS_7DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_7:
+		return T_INPUT_VOL_MINUS_4DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_8:
+		return T_INPUT_VOL_MINUS_3DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_9:
+		return T_INPUT_VOL_MINUS_2DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_10:
+		return T_INPUT_VOL_MINUS_1DB;
+	case T_AUDIO_INPUT_VOL_LEVEL_11:
+		return T_INPUT_VOL_0DB;
+	default:
+		return T_INPUT_VOL_MINUS_30DB;
+	}
+}
+
+#endif
+
+//static struct audio_para_conf nxp_voice_vol = 	{"voice processing path Volume",{"3"}}; //(range 0->5)
+
+static void mix_set_value_wrap(struct mixer *mixer, const char *control, char **values)
+{
+	struct mixer_ctl *ctl;
+	enum mixer_ctl_type type;
+	unsigned int num_ctl_values;
+	unsigned int i;
+
+	if (isdigit(control[0]))
+		ctl = mixer_get_ctl(mixer, atoi(control));
+	else
+		ctl = mixer_get_ctl_by_name(mixer, control);
+
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return;
+	}
+
+	type = mixer_ctl_get_type(ctl);
+	num_ctl_values = mixer_ctl_get_num_values(ctl);
+
+	if (isdigit(values[0][0])) {
+
+		for (i = 0; i < num_ctl_values; i++) {
+			if (mixer_ctl_set_value(ctl, i, atoi(values[i]))) {
+				fprintf(stderr, "Error: invalid value for index %d\n", i);
+				return;
+			}
+		}
+
+	} else {
+		if (type == MIXER_CTL_TYPE_ENUM) {
+			/*if (num_values != 1) {
+			    fprintf(stderr, "Enclose strings in quotes and try again\n");
+			    return;
+			}*/
+			if (mixer_ctl_set_enum_by_string(ctl, values[0]))
+				fprintf(stderr, "Error: invalid enum value\n");
+		} else {
+			fprintf(stderr, "Error: only enum types can be set with strings\n");
+		}
+	}
+}
+
+#ifdef _CPE_AUDIO_PRJ
+int mix_set_output_path(struct mixer *mixer, int path)
+{
+	
+	return 0;
+}
+
+int mix_set_input_path(struct mixer *mixer, int path)
+{
+
+
+	return 0;
+}
+
+int mix_set_input_vol(struct mixer *mixer, int volume)
+{
+
+
+	return 0;
+}
+
+int mix_set_output_vol(struct mixer *mixer, int volume)
+{
+
+
+	return 0;
+}
+
+int mix_set_output_mute(struct mixer *mixer, bool enable)
+{
+
+
+	return 0;
+}
+
+int mix_set_input_mute(struct mixer *mixer, bool enable)
+{
+
+		
+	return 0;
+}
+
+int mix_set_outputpath_onoff(struct mixer *mixer, int path ,bool onoff)
+{
+
+	return 0;
+}
+
+
+int mix_set_voice_vol(struct mixer *mixer, int volume)
+{
+
+
+	return 0;
+}
+
+int mix_set_voice_mute(struct mixer *mixer, bool enable)
+{
+
+	
+	return 0;
+}
+
+int mix_set_voice_path(struct mixer *mixer, int path)
+{
+	int i;
+
+
+	return 0;
+}
+
+
+int mix_set_in_call_tone(struct mixer *mixer, int tontype)
+{
+
+
+	return 0;
+}
+
+int mix_set_default_param(struct mixer *mixer) 
+{
+
+	return 0;
+}
+#else
+int mix_set_output_path(struct mixer *mixer, int path)
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(common_out_para_audio); i++) {
+		mix_set_value_wrap(mixer, common_out_para_audio[i].control, common_out_para_audio[i].values);
+	}
+	switch (path) {
+	case T_OUTPUT_RECEIVER:
+		for (i = 0; i < ARRAY_SIZE(hp_outpath_para_audio); i++) {
+			mix_set_value_wrap(mixer, hp_outpath_para_audio[i].control, hp_outpath_para_audio[i].values);
+		}
+		break;
+	case T_OUTPUT_SPEAKER:
+		for (i = 0; i < ARRAY_SIZE(spk_outpath_para_audio); i++) {
+			mix_set_value_wrap(mixer, spk_outpath_para_audio[i].control, spk_outpath_para_audio[i].values);
+		}
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+int mix_set_input_path(struct mixer *mixer, int path)
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(common_in_para_audio); i++) {
+		mix_set_value_wrap(mixer, common_in_para_audio[i].control, common_in_para_audio[i].values);
+	}
+	switch (path) {
+	case T_INPUT_MICLP:
+		for (i = 0; i < ARRAY_SIZE(main_mic_inpath_para_audio); i++) {
+			mix_set_value_wrap(mixer, main_mic_inpath_para_audio[i].control, main_mic_inpath_para_audio[i].values);
+		}
+		break;
+	case T_INPUT_MICRP:
+		for (i = 0; i < ARRAY_SIZE(aux_mic_inpath_para_audio); i++) {
+			mix_set_value_wrap(mixer, aux_mic_inpath_para_audio[i].control, aux_mic_inpath_para_audio[i].values);
+		}
+		break;
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+int mix_set_input_vol(struct mixer *mixer, int volume)
+{
+	struct mixer_ctl *ctl;
+	char *name = input_adc_vol.control;
+	int num_values, i;
+	int vol = input_vol_conversion(volume);
+
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+    num_values = mixer_ctl_get_num_values(ctl);
+
+    for (i = 0; i < num_values; i++) {
+		mixer_ctl_set_value(ctl, i, vol);
+    }
+
+	return 0;
+}
+
+int mix_set_output_vol(struct mixer *mixer, int volume)
+{
+	struct mixer_ctl *ctl;
+	char *name = output_dac_vol.control;
+	int num_values, i;
+
+	int vol = output_vol_conversion(volume);
+
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	num_values = mixer_ctl_get_num_values(ctl);
+
+    for (i = 0; i < num_values; i++) {
+		mixer_ctl_set_value(ctl, i, vol);
+    }
+
+	return 0;
+}
+
+int mix_set_output_mute(struct mixer *mixer, bool enable)
+{
+	struct mixer_ctl *ctl;
+	char *name = dac_mute.control; 
+	int num_values, i;
+
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	num_values = mixer_ctl_get_num_values(ctl);
+
+    for (i = 0; i < num_values; i++) {
+		mixer_ctl_set_value(ctl, i, enable);
+    }
+
+	return 0;
+}
+
+int mix_set_input_mute(struct mixer *mixer, bool enable)
+{
+	struct mixer_ctl *ctl;
+	char *name = adc_mute.control;
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	int num_values, i;
+
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	num_values = mixer_ctl_get_num_values(ctl);
+
+    for (i = 0; i < num_values; i++) {
+		mixer_ctl_set_value(ctl, 0, enable);
+    }
+		
+	return 0;
+}
+
+int mix_set_outputpath_onoff(struct mixer *mixer, int path ,bool onoff)
+{
+	struct mixer_ctl *ctl;
+	struct audio_para_conf *path_para;
+	int i, j, num_values, size;
+	switch(path) {
+	case T_OUTPUT_RECEIVER:
+		size = ARRAY_SIZE(rcv_path_onoff);
+		path_para = rcv_path_onoff;
+		break;
+	case T_OUTPUT_SPEAKER:
+		size = ARRAY_SIZE(spk_path_onoff);
+		path_para = spk_path_onoff;
+		break;
+	case T_OUTPUT_HEADSET:
+		size = ARRAY_SIZE(earp_path_onoff);
+		path_para = earp_path_onoff;
+		break;
+	default:
+		return -1;
+	}
+
+	for (i = 0; i < size; i++) {
+		ctl = mixer_get_ctl_by_name(mixer, path_para[i].control);
+		num_values = mixer_ctl_get_num_values(ctl);
+
+	    for (j = 0; j < num_values; j++) {
+			mixer_ctl_set_value(ctl, j, onoff);
+	    }
+
+//		mix_set_value_wrap(mixer, spk_path_onoff[i].control, spk_path_onoff[i].values);
+    }
+
+	return 0;
+}
+
+
+int mix_set_voice_vol(struct mixer *mixer, int volume)
+{
+	struct mixer_ctl *ctl;
+	char name[] = "voice processing path Volume";
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	mixer_ctl_set_value(ctl, 0, volume);
+
+	return 0;
+}
+
+int mix_set_voice_mute(struct mixer *mixer, bool enable)
+{
+	struct mixer_ctl *ctl;
+	char name[] = "voice uplink mute";
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	mixer_ctl_set_value(ctl, 0, enable);
+	
+	return 0;
+}
+
+int mix_set_voice_path(struct mixer *mixer, int path)
+{
+	int i;
+/*
+	for (i = 0; i < ARRAY_SIZE(common_in_para_audio); i++) {
+		tinymix_set_value_test(mixer, common_in_para_audio[i].control, common_in_para_audio[i].values);
+	}
+	
+	for(i = 0;i<ARRAY_SIZE(common_out_para_audio);i++)
+	{
+ 	  	tinymix_set_value_test(mixer,common_out_para_audio[i].control,common_out_para_audio[i].values);
+	}
+*/	
+	switch (path) {
+	case T_OUTPUT_RECEIVER:
+		for (i = 0; i < ARRAY_SIZE(handset_inoutpath_para_voice); i++)	{
+			mix_set_value_wrap(mixer, handset_inoutpath_para_voice[i].control, handset_inoutpath_para_voice[i].values);
+		}
+		break;
+	case T_OUTPUT_SPEAKER:
+		for (i = 0; i < ARRAY_SIZE(spk_inoutpath_para_voice); i++) {
+			mix_set_value_wrap(mixer, spk_inoutpath_para_voice[i].control, spk_inoutpath_para_voice[i].values);
+		}
+		break;
+	case T_OUTPUT_HEADSET:
+		for (i = 0; i < ARRAY_SIZE(headset_inoutpath_para_voice); i++) {
+			mix_set_value_wrap(mixer, headset_inoutpath_para_voice[i].control, headset_inoutpath_para_voice[i].values);
+		}
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+
+int mix_set_in_call_tone(struct mixer *mixer, int tontype)
+{
+	struct mixer_ctl *ctl;
+	char name[] = "voice tone sel";
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	mixer_ctl_set_value(ctl, 0, tontype);
+
+	return 0;
+}
+
+int mix_set_default_param(struct mixer *mixer) 
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(init_default_para); i++) {
+		mix_set_value_wrap(mixer, init_default_para[i].control, init_default_para[i].values);
+	}
+	
+	return 0;
+}
+#endif