hal: acquire wake lock for voice call

acquire wake lock to fix voice mute during
usb disconnect.

Change-Id: I5d6c20e526fd49c9c88419c0466e486a4aa6c0fd
diff --git a/hal/Android.mk b/hal/Android.mk
index de04e52..787a317 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -111,7 +111,9 @@
 
 LOCAL_CFLAGS += -Wno-macro-redefined
 
-LOCAL_HEADER_LIBRARIES := libhardware_headers
+LOCAL_HEADER_LIBRARIES := \
+    libhardware_headers \
+    libhardware_legacy_headers
 
 LOCAL_SRC_FILES := \
     audio_hw.c \
@@ -145,7 +147,8 @@
     libhidlbase \
     libhidltransport \
     libprocessgroup \
-    libutils
+    libutils \
+    libhardware_legacy
 
 LOCAL_C_INCLUDES += \
     external/tinyalsa/include \
@@ -153,6 +156,7 @@
     system/media/audio_utils/include \
     external/expat/lib \
     vendor/qcom/opensource/core-utils/fwk-detect \
+    $(TOP)/hardware/libhardware_legacy/include/hardware_legacy \
     $(call include-path-for, audio-route) \
     $(call include-path-for, audio-effects) \
     $(LOCAL_PATH)/$(AUDIO_PLATFORM) \
diff --git a/hal/voice.c b/hal/voice.c
index f1e2c47..05c0601 100644
--- a/hal/voice.c
+++ b/hal/voice.c
@@ -33,6 +33,13 @@
 #include "platform.h"
 #include "platform_api.h"
 #include "audio_extn.h"
+#ifndef LINUX_ENABLED
+#include <hardware_legacy/power.h>
+#else
+#define acquire_wake_lock(a, b) (0)
+#define release_wake_lock(a) (0)
+#define PARTIAL_WAKE_LOCK 1
+#endif
 
 #ifdef DYNAMIC_LOG_ENABLED
 #include <log_xml_parser.h>
@@ -40,6 +47,8 @@
 #include <log_utils.h>
 #endif
 
+#define TRANSIT_WAKE_LOCK_NAME "audiohal_transit_wake_lock"
+
 struct pcm_config pcm_config_voice_call = {
     .channels = 1,
     .rate = 8000,
@@ -240,6 +249,13 @@
           voice_loopback_tx = NULL;
        }
     }
+
+    if (voice_update_pcm_config(adev)) {
+        ret = release_wake_lock(TRANSIT_WAKE_LOCK_NAME);
+        if (ret)
+            ALOGE("%s: failed to release voicecall wake lock. ret: %d",__func__, ret);
+    }
+
     /* 2. Get and set stream specific mixer controls */
     disable_audio_route(adev, uc_info);
 
@@ -383,6 +399,12 @@
         }
     }
 
+    if (voice_update_pcm_config(adev)) {
+        ret = acquire_wake_lock(PARTIAL_WAKE_LOCK, TRANSIT_WAKE_LOCK_NAME);
+        if (ret)
+            ALOGE("%s: acquiring wake lock failed for voice call ret: %d",__func__, ret);
+    }
+
     if (adev->mic_break_enabled)
         platform_set_mic_break_det(adev->platform, true);