[Feature][ZXW-285]merge P56U05 version

Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No

Change-Id: Ied657102425a179a89ef41847170152e8a5d437c
diff --git a/ap/lib/libtinyalsa/audio_mixer_ctrl.c b/ap/lib/libtinyalsa/audio_mixer_ctrl.c
index 311ceca..57d2435 100755
--- a/ap/lib/libtinyalsa/audio_mixer_ctrl.c
+++ b/ap/lib/libtinyalsa/audio_mixer_ctrl.c
@@ -1510,6 +1510,80 @@
 	return 0;
 }
 
+int mix_set_voice_vol_gain(struct mixer *mixer, int vol_gain)
+{
+	struct mixer_ctl *ctl;
+	char name[] = "voice processing path Volume Gain";
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	mixer_ctl_set_value(ctl, 0, vol_gain);
+
+	return 0;
+}
+
+int mix_get_voice_vol_gain(struct mixer *mixer, int *vol_gain)
+{
+	struct mixer_ctl *ctl;
+	int val;
+	
+	printf("%s: start !\n",__func__);
+	char name[] = "voice processing path Volume Gain";
+	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 < -15)||(val > 24)){
+		fprintf(stderr, "Invalid val=%d\n",val);
+		return -2;		
+	}
+	*vol_gain = val;
+	return 0;
+}
+
+int mix_set_tx_voice_vol_gain(struct mixer *mixer, int vol_gain)
+{
+	struct mixer_ctl *ctl;
+	char name[] = "voice processing tx path Volume Gain";
+	ctl = mixer_get_ctl_by_name(mixer, name);
+	if (!ctl) {
+		fprintf(stderr, "Invalid mixer control\n");
+		return -1;
+	}
+
+	mixer_ctl_set_value(ctl, 0, vol_gain);
+
+	return 0;
+}
+
+int mix_get_tx_voice_vol_gain(struct mixer *mixer, int *vol_gain)
+{
+	struct mixer_ctl *ctl;
+	int val;
+	
+	printf("%s: start !\n",__func__);
+	char name[] = "voice processing tx path Volume Gain";
+	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 < -15)||(val > 24)){
+		fprintf(stderr, "Invalid val=%d\n",val);
+		return -2;		
+	}
+	*vol_gain = val;
+	return 0;
+}
+
 int mix_set_tx_voice_vol(struct mixer *mixer, int volume)
 {
 	struct mixer_ctl *ctl;