Speaker channel swapping is conditional to audio mode
Swapping speaker channels when audio mode is
AUDIO_MODE_IN_COMMUNICATION or AUDIO_MODE_IN_CALL
can break the echo reference.
Bug 25808310
Change-Id: I4c26d8982abd6513572b88e7abb7bba64789d18b
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index b84353d..5cdc394 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -2755,6 +2755,14 @@
struct platform_data *my_data = (struct platform_data *)adev->platform;
if (my_data->speaker_lr_swap != swap_channels) {
+
+ // do not swap channels in audio modes with concurrent capture and playback
+ // as this may break the echo reference
+ if ((adev->mode == AUDIO_MODE_IN_COMMUNICATION) || (adev->mode == AUDIO_MODE_IN_CALL)) {
+ ALOGV("%s: will not swap due to audio mode %d", __func__, adev->mode);
+ return 0;
+ }
+
my_data->speaker_lr_swap = swap_channels;
list_for_each(node, &adev->usecase_list) {