Merge "hal: remove volume_listener from audio effects"
diff --git a/hal/audio_extn/hfp.c b/hal/audio_extn/hfp.c
index ca5d3bb..697a507 100644
--- a/hal/audio_extn/hfp.c
+++ b/hal/audio_extn/hfp.c
@@ -52,6 +52,7 @@
#define AUDIO_PARAMETER_HFP_PCM_DEV_ID "hfp_pcm_dev_id"
#define AUDIO_PARAMETER_HFP_VOL_MIXER_CTL "hfp_vol_mixer_ctl"
#define AUDIO_PARAMETER_HFP_VALUE_MAX 128
+#define AUDIO_PARAMETER_HFP_FORCE_ROUTE_SPEAKER "hfp_route_spkr"
#define AUDIO_PARAMETER_KEY_HFP_MIC_VOLUME "hfp_mic_volume"
#define PLAYBACK_VOLUME_MAX 0x2000
@@ -118,6 +119,7 @@
.stop_threshold = INT_MAX,
.avail_min = 0,
};
+static bool route_spkr = false;
//external feature dependency
static fp_platform_set_mic_mute_t fp_platform_set_mic_mute;
@@ -320,6 +322,11 @@
uc_info->in_snd_device = SND_DEVICE_NONE;
uc_info->out_snd_device = SND_DEVICE_NONE;
+ if (route_spkr) {
+ reassign_device_list(&uc_info->device_list, AUDIO_DEVICE_OUT_SPEAKER, "");
+ reassign_device_list(&uc_info->stream.out->device_list, AUDIO_DEVICE_OUT_SPEAKER, "");
+ }
+
list_add_tail(&adev->usecase_list, &uc_info->list);
fp_select_devices(adev, hfpmod.ucid);
@@ -431,6 +438,7 @@
ALOGD("%s: enter", __func__);
hfpmod.is_hfp_running = false;
+ route_spkr = false;
/* 1. Close the PCM devices */
if (hfpmod.hfp_sco_rx) {
@@ -553,6 +561,7 @@
int val;
float vol;
char value[32]={0};
+ struct audio_usecase *uc_info = NULL;
ALOGV("%s: enter", __func__);
@@ -581,14 +590,36 @@
ALOGE("Unsupported rate..");
}
- if (hfpmod.is_hfp_running) {
- memset(value, 0, sizeof(value));
- ret = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING,
+ memset(value, 0, sizeof(value));
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_HFP_FORCE_ROUTE_SPEAKER, value,
+ sizeof(value));
+ if(ret >= 0){
+ route_spkr = true;
+ ALOGD("%s: Set force route to speaker", __func__);
+ }
+
+ memset(value, 0, sizeof(value));
+ ret = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING,
value, sizeof(value));
- if (ret >= 0) {
- val = atoi(value);
- if (val > 0)
- fp_select_devices(adev, hfpmod.ucid);
+ if (ret >= 0) {
+ val = atoi(value);
+ if (val > 0) {
+ if (hfpmod.is_hfp_running) {
+ if (route_spkr) {
+ if (val != AUDIO_DEVICE_OUT_SPEAKER)
+ ALOGI("%s: HFP call in progress, cannot route to device %d", __func__, val);
+ } else {
+ uc_info = fp_get_usecase_from_list(adev, hfpmod.ucid);
+
+ if (uc_info != NULL) {
+ reassign_device_list(&uc_info->device_list, val, "");
+ reassign_device_list(&uc_info->stream.out->device_list, val, "");
+ fp_select_devices(adev, hfpmod.ucid);
+ }
+ }
+
+ str_parms_del(parms, AUDIO_PARAMETER_STREAM_ROUTING);
+ }
}
}