hal: support calibration for hfp with dual asm loopback
Add support TX and RX calibration for HFP call
on both uplink and downlink ASM loopback path.
Change-Id: I66dec9ec01e0645ba6f5c21a4e64aabd10e2b6a5
Signed-off-by: Derek Chen <chenche@codeaurora.org>
Signed-off-by: Guodong Hu <guodhu@codeaurora.org>
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index fb65f88..f860df5 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -417,6 +417,8 @@
[USECASE_AUDIO_PLAYBACK_FM] = {FM_PLAYBACK_PCM_DEVICE, FM_CAPTURE_PCM_DEVICE},
[USECASE_AUDIO_HFP_SCO] = {HFP_PCM_RX, HFP_SCO_RX},
[USECASE_AUDIO_HFP_SCO_WB] = {HFP_PCM_RX, HFP_SCO_RX},
+ [USECASE_AUDIO_HFP_SCO_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX},
+ [USECASE_AUDIO_HFP_SCO_WB_DOWNLINK] = {HFP_ASM_RX_TX, HFP_ASM_RX_TX},
[USECASE_VOICE_CALL] = {VOICE_CALL_PCM_DEVICE, VOICE_CALL_PCM_DEVICE},
[USECASE_AUDIO_PLAYBACK_MMAP] = {MMAP_PLAYBACK_PCM_DEVICE,
MMAP_PLAYBACK_PCM_DEVICE},
@@ -1276,6 +1278,8 @@
{TO_NAME_INDEX(USECASE_INCALL_REC_UPLINK_AND_DOWNLINK)},
{TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO)},
{TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO_WB)},
+ {TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO_DOWNLINK)},
+ {TO_NAME_INDEX(USECASE_AUDIO_HFP_SCO_WB_DOWNLINK)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_FM)},
{TO_NAME_INDEX(USECASE_AUDIO_RECORD_FM_VIRTUAL)},
{TO_NAME_INDEX(USECASE_AUDIO_SPKR_CALIB_RX)},
@@ -4981,10 +4985,14 @@
snd_device_t incall_rec_device;
int sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
struct audio_backend_cfg backend_cfg = {0};
+ bool is_bus_dev_usecase = false;
if (voice_is_in_call(my_data->adev))
is_incall_rec_usecase = voice_is_in_call_rec_stream(usecase->stream.in);
+ if (usecase->devices & AUDIO_DEVICE_OUT_BUS)
+ is_bus_dev_usecase = true;
+
if (usecase->type == PCM_PLAYBACK)
snd_device = usecase->out_snd_device;
else if ((usecase->type == PCM_CAPTURE) && is_incall_rec_usecase)
@@ -5013,6 +5021,11 @@
new_snd_device[0] = snd_device;
}
}
+ if ((usecase->type == PCM_HFP_CALL) && is_bus_dev_usecase) {
+ num_devices = 2;
+ new_snd_device[0] = usecase->in_snd_device;
+ new_snd_device[1] = usecase->out_snd_device;
+ }
for (i = 0; i < num_devices; i++) {
if (!is_incall_rec_usecase) {
@@ -5032,6 +5045,17 @@
if ((usecase->type == PCM_CAPTURE) && (app_type == DEFAULT_APP_TYPE_RX_PATH)) {
ALOGD("Resetting app type for Tx path to default");
app_type = DEFAULT_APP_TYPE_TX_PATH;
+ } else if ((usecase->type == PCM_HFP_CALL) && is_bus_dev_usecase) {
+ if (new_snd_device[i] >= SND_DEVICE_OUT_BEGIN &&
+ new_snd_device[i] < SND_DEVICE_OUT_END) {
+ app_type = usecase->out_app_type_cfg.app_type;
+ sample_rate = usecase->out_app_type_cfg.sample_rate;
+ } else {
+ app_type = usecase->in_app_type_cfg.app_type;
+ sample_rate = usecase->in_app_type_cfg.sample_rate;
+ }
+ ALOGD("%s: Updating to app type (%d) and sample rate (%d)",
+ __func__, app_type, sample_rate);
}
/* Override backend cfg sample rate in calibration for vi feedback usecase */
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 2a570ce..7f54e7f 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -451,7 +451,7 @@
#define FM_CAPTURE_PCM_DEVICE 6
#ifdef PLATFORM_AUTO
-#define HFP_PCM_RX 36
+#define HFP_PCM_RX 29
#else
#define HFP_PCM_RX 5
#endif
@@ -638,8 +638,8 @@
#define HFP_SCO_RX 17
#define HFP_ASM_RX_TX 18
#elif PLATFORM_AUTO
-#define HFP_SCO_RX 36
-#define HFP_ASM_RX_TX 29
+#define HFP_SCO_RX 29
+#define HFP_ASM_RX_TX 36
#elif defined (PLATFORM_MSMFALCON) || defined (PLATFORM_MSM8937)
#define HFP_SCO_RX 17
#define HFP_ASM_RX_TX 18