blob: 3ec6fe31261ae08db016123367b079740b2b3341 [file] [log] [blame]
#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;
}
}
#elif defined _ALSA_CODEC_IN_CAP
static struct audio_para_conf init_default_para[] = {
};
static struct audio_para_conf common_out_para_audio[] = {
};
static struct audio_para_conf common_in_para_audio[] = {
};
static struct audio_para_conf hp_outpath_para_audio[] = {
};
static struct audio_para_conf spk_outpath_para_audio[] = {
};
static struct audio_para_conf main_mic_inpath_para_audio[] = {
};
static struct audio_para_conf aux_mic_inpath_para_audio[] = {
};
static struct audio_para_conf handset_inoutpath_para_voice[] = {
{"voice processing path select", {"handset"}}, // handset speak headset bluetooth
};
static struct audio_para_conf headset_inoutpath_para_voice[] = {
{"voice processing path select", {"headset"}}, // handset speak headset bluetooth
};
static struct audio_para_conf spk_inoutpath_para_voice[] = {
{"voice processing path select", {"speak"}}, // handset speak headset bluetooth
};
static struct audio_para_conf output_dac_vol = {};
static struct audio_para_conf input_adc_vol = {};
static struct audio_para_conf dac_mute = {};
static struct audio_para_conf adc_mute = {};
static struct audio_para_conf spk_path_onoff[] = {
};
static struct audio_para_conf rcv_path_onoff[] = {
};
static struct audio_para_conf earp_path_onoff[] = {
};
static int output_vol_conversion(int vol)
{
return 24;
}
static int input_vol_conversion(int vol)
{
return 24;
}
#else
static struct audio_para_conf init_default_para[] = {
};
static struct audio_para_conf common_out_para_audio[] = {
};
static struct audio_para_conf common_in_para_audio[] = {
};
static struct audio_para_conf hp_outpath_para_audio[] = {
};
static struct audio_para_conf spk_outpath_para_audio[] = {
};
static struct audio_para_conf main_mic_inpath_para_audio[] = {
};
static struct audio_para_conf aux_mic_inpath_para_audio[] = {
};
static struct audio_para_conf handset_inoutpath_para_voice[] = {
};
static struct audio_para_conf headset_inoutpath_para_voice[] = {
};
static struct audio_para_conf spk_inoutpath_para_voice[] = {
};
static struct audio_para_conf output_dac_vol = {};
static struct audio_para_conf input_adc_vol = {};
static struct audio_para_conf dac_mute = {};
static struct audio_para_conf adc_mute = {};
static struct audio_para_conf spk_path_onoff[] = {
};
static struct audio_para_conf rcv_path_onoff[] = {
};
static struct audio_para_conf earp_path_onoff[] = {
};
static int output_vol_conversion(int vol)
{
return 24;
}
static int input_vol_conversion(int vol)
{
return 24;
}
#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(%s)\n",control);
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");
}
}
}
static void mix_get_value_wrap(struct mixer *mixer, const char *control, int *values)
{
struct mixer_ctl *ctl;
enum mixer_ctl_type type;
unsigned int num_ctl_values;
unsigned int i;
int val;
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(%s)\n",control);
return;
}
type = mixer_ctl_get_type(ctl);
num_ctl_values = mixer_ctl_get_num_values(ctl);
for (i = 0; i < num_ctl_values; i++) {
val = mixer_ctl_get_value(ctl, i);
if (val == -EINVAL) {
fprintf(stderr, "Error: invalid value for index %d\n", i);
return;
}
*(values+i) = val;
}
}
#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_get_voice_vol(struct mixer *mixer, int *volume)
{
return 0;
}
int mix_set_tx_voice_vol(struct mixer *mixer, int volume)
{
return 0;
}
int mix_get_tx_voice_vol(struct mixer *mixer, int *volume)
{
return 0;
}
int mix_set_voice_mute(struct mixer *mixer, bool enable)
{
return 0;
}
int mix_get_voice_mute(struct mixer *mixer, bool *enable)
{
return 0;
}
int mix_set_rx_voice_mute(struct mixer *mixer, bool enable)
{
return 0;
}
int mix_get_rx_voice_mute(struct mixer *mixer, bool *enable)
{
return 0;
}
int mix_set_vp_path(struct mixer *mixer, int path)
{
return 0;
}
int mix_get_vp_path(struct mixer *mixer, int *path)
{
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;
}
int set_voice_device_mode(int dev_mode)
{
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_get_voice_vol(struct mixer *mixer, int *volume)
{
struct mixer_ctl *ctl;
int val;
printf("%s: start !\n",__func__);
char name[] = "voice processing path Volume";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
val = mixer_ctl_get_value(ctl, 0);
if((val < 0)||(val > 11)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
*volume = val;
return 0;
}
int mix_set_tx_voice_vol(struct mixer *mixer, int volume)
{
struct mixer_ctl *ctl;
char name[] = "voice processing tx 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_get_tx_voice_vol(struct mixer *mixer, int *volume)
{
struct mixer_ctl *ctl;
int val;
printf("%s: start !\n",__func__);
char name[] = "voice processing tx path Volume";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
val = mixer_ctl_get_value(ctl, 0);
if((val < 0)||(val > 11)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
*volume = val;
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_get_voice_mute(struct mixer *mixer, bool *enable)
{
struct mixer_ctl *ctl;
int val;
printf("%s: start !\n",__func__);
char name[] = "voice uplink mute";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
val = mixer_ctl_get_value(ctl, 0);
if((val != 0)&&(val != 1)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
*enable = val;
return 0;
}
int mix_set_rx_voice_mute(struct mixer *mixer, bool enable)
{
struct mixer_ctl *ctl;
char name[] = "voice downlink 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_get_rx_voice_mute(struct mixer *mixer, bool *enable)
{
struct mixer_ctl *ctl;
int val;
printf("%s: start !\n",__func__);
char name[] = "voice downlink mute";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
val = mixer_ctl_get_value(ctl, 0);
if((val != 0)&&(val != 1)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
*enable = val;
return 0;
}
int mix_set_vp_path(struct mixer *mixer, int path)
{
int ret = 0;
unsigned int num_enums;
struct mixer_ctl *ctl;
char name[] = "voice processing path select";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
num_enums = mixer_ctl_get_num_enums(ctl);
if((path < 0)||(path >= num_enums)){
fprintf(stderr, "Invalid val=%d\n",path);
return -2;
}
ret = mixer_ctl_set_value(ctl, 0, path);
if (ret){
fprintf(stderr, "Error: set value,ret=%d\n",ret);
return -2;
}
return 0;
}
int mix_get_vp_path(struct mixer *mixer, int *path)
{
struct mixer_ctl *ctl;
int val;
unsigned int num_enums;
printf("%s: start !\n",__func__);
char name[] = "voice processing path select";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
num_enums = mixer_ctl_get_num_enums(ctl);
val = mixer_ctl_get_value(ctl, 0);
if((val < 0)||(val >= num_enums)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
printf("%s: val=%d !\n",__func__,val);
*path = val;
return 0;
}
int mix_set_vp_path_st(struct mixer *mixer, char *path)
{
struct mixer_ctl *ctl;
char name[] = "voice processing path select";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
//mixer_ctl_set_value(ctl, 0, path);
if (mixer_ctl_set_enum_by_string(ctl, path))
fprintf(stderr, "Error: invalid enum value\n");
return 0;
}
int mix_get_vp_path_st(struct mixer *mixer, int *path)
{
struct mixer_ctl *ctl;
int val;
unsigned int num_enums;
unsigned int i;
const char *string;
printf("%s: start !\n",__func__);
char name[] = "voice processing path select";
ctl = mixer_get_ctl_by_name(mixer, name);
if (!ctl) {
fprintf(stderr, "Invalid mixer control\n");
return -1;
}
num_enums = mixer_ctl_get_num_enums(ctl);
val = mixer_ctl_get_value(ctl, 0);
if((val < 0)||(val >= num_enums)){
fprintf(stderr, "Invalid val=%d\n",val);
return -2;
}
printf("%s: val=%d !\n",__func__,val);
string = mixer_ctl_get_enum_string(ctl, val);
if(string == NULL){
fprintf(stderr, "err, string is NULL \n");
return -2;
}
printf("%s: string=%s !\n",__func__,string);
path = string;
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;
}
int mix_get_voice_path(struct mixer *mixer, int *path)
{
mix_get_value_wrap(mixer, "audio path select", path);
return 0;
}
#define VOCIE_SND_CARD_NUM 0
//ÉèÖÃvoiceÒôƵÉ豸ģʽ dev_mode£ºhandset,speaker,headset 0 ±íʾ³É¹¦£¬ ÆäËü±íʾÓдíÎó
int set_voice_device_mode(int dev_mode)
{
struct mixer *voice_mixer = NULL;
printf("%s: start dev_mode=%d!\n",__func__, dev_mode);
if ((dev_mode < T_OUTPUT_HANDSET ) ||(dev_mode > T_OUTPUT_HEADSET)){
printf("%s: dev_mode not support, dev_mode=%d!\n",__func__, dev_mode);
return -1;
}
//open mixer dev for control
voice_mixer = mixer_open(VOCIE_SND_CARD_NUM);
if (!voice_mixer) {
printf("voice_mixer open failed!\n");
return -1;
}
//config mixer dev
mix_set_voice_path(voice_mixer, dev_mode);
//close mixer
mixer_close(voice_mixer);
voice_mixer = NULL;
return 0;
}
#endif