hal: ensure EC reference is disabled before enabling
HW echo cancellation is not working after device switch due
to state mismatch between tinyalsa and the kernel.
Ensure that EC reference is disabled always before enabling
EC reference for the new device.
Change-Id: Ia1152402990db836d3f94278a7d36726310dc60c
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 1683d0a..74d9dfe 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -610,19 +610,18 @@
struct platform_data *my_data = (struct platform_data *)platform;
struct audio_device *adev = my_data->adev;
- if (enable) {
- my_data->ec_ref_enabled = enable;
- audio_route_apply_and_update_path(adev->audio_route, "echo-reference");
- } else {
- if (my_data->ec_ref_enabled) {
- audio_route_reset_and_update_path(adev->audio_route, "echo-reference");
- my_data->ec_ref_enabled = enable;
- } else {
- ALOGV("EC Reference is already disabled: %d", my_data->ec_ref_enabled);
- }
+ if (my_data->ec_ref_enabled) {
+ my_data->ec_ref_enabled = false;
+ ALOGV("%s: disabling echo-reference", __func__);
+ audio_route_reset_and_update_path(adev->audio_route, "echo-reference");
}
- ALOGV("Setting EC Reference: %d", enable);
+ if (enable) {
+ my_data->ec_ref_enabled = true;
+ ALOGD("%s: enabling echo-reference", __func__);
+ audio_route_apply_and_update_path(adev->audio_route, "echo-reference");
+ }
+
}
static struct csd_data *open_csd_client(bool i2s_ext_modem)