Merge tag 'LA.UM.8.4.r1-06200-8x98.0' of https://source.codeaurora.org/quic/la/platform/hardware/qcom/audio into arrow-11.0-caf-msm8998
"LA.UM.8.4.r1-06200-8x98.0"
Change-Id: I08d6bc3cca08025cc718ce9576389082044252c0
diff --git a/Android.mk b/Android.mk
index 6db5a30..6e8c1ce 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,3 +1,5 @@
+ifeq ($(call my-dir),$(call project-path-for,qcom-audio))
+
ifneq ($(AUDIO_USE_STUB_HAL), true)
ifneq ($(filter mpq8092 msm8960 msm8226 msm8x26 msm8610 msm8974 msm8x74 apq8084 msm8916 msm8994 msm8992 msm8909 msm8996 msm8952 msm8937 thorium msm8953 msmgold msm8998 sdm660 sdm845 sdm710 apq8098_latv qcs605 sdmshrike msmnile kona $(MSMSTEPPE) $(TRINKET) atoll lito,$(TARGET_BOARD_PLATFORM)),)
@@ -26,3 +28,5 @@
endif
endif
+
+endif
diff --git a/hal/Android.mk b/hal/Android.mk
index 787a317..6a23413 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -143,9 +143,7 @@
libdl \
libaudioutils \
libexpat \
- libhwbinder \
libhidlbase \
- libhidltransport \
libprocessgroup \
libutils \
libhardware_legacy
@@ -345,11 +343,21 @@
LOCAL_SHARED_LIBRARIES += vendor.qti.hardware.audiohalext@1.0
endif
+ifneq ($(strip $(AUDIO_FEATURE_ENABLED_EXT_AMPLIFIER)),false)
+ LOCAL_CFLAGS += -DEXT_AMPLIFIER_ENABLED
+ LOCAL_SRC_FILES += audio_extn/audio_amplifier.c
+ LOCAL_SHARED_LIBRARIES += libhardware
+endif
+
+ifeq ($(strip $(AUDIO_FEATURE_ELLIPTIC_ULTRASOUND_SUPPORT)),true)
+ LOCAL_CFLAGS += -DELLIPTIC_ULTRASOUND_ENABLED
+ LOCAL_SRC_FILES += audio_extn/ultrasound.c
+endif
+
LOCAL_CFLAGS += -D_GNU_SOURCE
LOCAL_CFLAGS += -Wall -Werror
-LOCAL_COPY_HEADERS_TO := mm-audio
-LOCAL_COPY_HEADERS := audio_extn/audio_defs.h
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_GCOV)),true)
LOCAL_CFLAGS += --coverage -fprofile-arcs -ftest-coverage
@@ -362,7 +370,7 @@
# LOCAL_SRC_FILES += audio_extn/auto_hal.c
#endif
-LOCAL_SHARED_LIBRARIES += libbase libhidlbase libhwbinder libutils android.hardware.power@1.2 liblog
+LOCAL_SHARED_LIBRARIES += libbase libhidlbase libutils android.hardware.power@1.2 liblog
LOCAL_SRC_FILES += audio_perf.cpp
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FM_TUNER_EXT)),true)
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
index 82bab47..ec8c701 100644
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -36,7 +36,7 @@
system/media/audio_utils/include \
external/expat/lib \
$(call include-path-for, audio-route) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
+ $(call project-path-for,qcom-audio)/hal \
$(call include-path-for, audio-effects)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
@@ -94,8 +94,8 @@
system/media/audio_utils/include \
external/expat/lib \
$(call include-path-for, audio-route) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/$(AUDIO_PLATFORM) \
+ $(call project-path-for,qcom-audio)/hal \
+ $(call project-path-for,qcom-audio)/hal/$(AUDIO_PLATFORM) \
$(call include-path-for, audio-effects)
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
@@ -119,6 +119,7 @@
LOCAL_MODULE := libssrec
LOCAL_VENDOR_MODULE := true
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -127,6 +128,10 @@
MULTIPLE_HW_VARIANTS_ENABLED := true
endif
+ifeq ($(QCPATH),)
+ LOCAL_CFLAGS += -D_OSS
+endif
+
LOCAL_SRC_FILES:= ssr.c
LOCAL_CFLAGS += \
@@ -147,8 +152,8 @@
libprocessgroup
LOCAL_C_INCLUDES := \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/$(AUDIO_PLATFORM) \
+ $(PRIMARY_HAL_PATH) \
+ $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
external/tinyalsa/include \
external/tinycompress/include \
external/expat/lib \
@@ -180,7 +185,7 @@
LOCAL_MODULE_OWNER := third_party
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -235,6 +240,7 @@
#--------------------------------------------
include $(CLEAR_VARS)
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
@@ -271,9 +277,9 @@
system/media/audio_utils/include \
external/expat/lib \
$(call include-path-for, audio-route) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/audio_extn \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/$(AUDIO_PLATFORM) \
+ $(PRIMARY_HAL_PATH) \
+ $(PRIMARY_HAL_PATH)/audio_extn \
+ $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
vendor/qcom/opensource/audio-kernel/include/uapi/ \
$(call include-path-for, audio-effects)
@@ -290,6 +296,7 @@
include $(CLEAR_VARS)
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
# B-family platform uses msm8974 code base
AUDIO_PLATFORM := msm8974
@@ -326,9 +333,9 @@
system/media/audio_utils/include \
external/expat/lib \
$(call include-path-for, audio-route) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/audio_extn \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/$(AUDIO_PLATFORM) \
+ $(PRIMARY_HAL_PATH) \
+ $(PRIMARY_HAL_PATH)/audio_extn \
+ $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
vendor/qcom/opensource/audio-kernel/include/uapi/ \
$(call include-path-for, audio-effects)
@@ -348,7 +355,7 @@
LOCAL_MODULE := liba2dpoffload
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -408,7 +415,7 @@
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -467,7 +474,7 @@
LOCAL_MODULE := libhfp
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -521,12 +528,14 @@
#-------------------------------------------
# Build HDMI PASSTHROUGH
#-------------------------------------------
+ifneq ($(QCPATH),)
+
include $(CLEAR_VARS)
LOCAL_MODULE := libhdmipassthru
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -580,6 +589,8 @@
LOCAL_HEADER_LIBRARIES += libsystem_headers
include $(BUILD_SHARED_LIBRARY)
+endif
+
#-------------------------------------------
# Build BATTERY_LISTENER
#-------------------------------------------
@@ -588,7 +599,7 @@
LOCAL_MODULE := libbatterylistener
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -618,7 +629,6 @@
libdl \
libexpat \
libhidlbase \
- libhidltransport \
liblog \
libtinyalsa \
libtinycompress \
@@ -658,7 +668,7 @@
LOCAL_MODULE := libhwdepcal
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona lito atoll sdm660 msm8937 msm8998 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -717,7 +727,7 @@
LOCAL_MODULE:= libmaxxaudio
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona sdm660 msm8937 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
@@ -774,7 +784,7 @@
LOCAL_MODULE:= libaudiozoom
LOCAL_VENDOR_MODULE := true
-PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+PRIMARY_HAL_PATH := $(call project-path-for,qcom-audio)/hal
AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
ifneq ($(filter sdm845 sdm710 qcs605 sdmshrike msmnile kona sdm660 msm8937 $(MSMSTEPPE) $(TRINKET),$(TARGET_BOARD_PLATFORM)),)
diff --git a/hal/audio_extn/audio_amplifier.c b/hal/audio_extn/audio_amplifier.c
new file mode 100644
index 0000000..f452954
--- /dev/null
+++ b/hal/audio_extn/audio_amplifier.c
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "audio_amplifier"
+
+#include <stdbool.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <log/log.h>
+
+#include "audio_hw.h"
+#include "platform.h"
+
+struct amplifier_data {
+ struct audio_device *adev;
+ amplifier_device_t *hw;
+};
+
+struct amplifier_data amp;
+
+int amplifier_open(void* adev)
+{
+ int rc;
+ amplifier_module_t *module;
+ amp.adev = (struct audio_device *)adev;
+
+ rc = hw_get_module(AMPLIFIER_HARDWARE_MODULE_ID,
+ (const hw_module_t **) &module);
+ if (rc) {
+ ALOGV("%s: Failed to obtain reference to amplifier module: %s\n",
+ __func__, strerror(-rc));
+ return -ENODEV;
+ }
+
+ rc = amplifier_device_open((const hw_module_t *) module, &.hw);
+ if (rc) {
+ ALOGV("%s: Failed to open amplifier hardware device: %s\n",
+ __func__, strerror(-rc));
+ amp.hw = NULL;
+
+ return -ENODEV;
+ }
+
+ return 0;
+}
+
+int amplifier_set_input_devices(uint32_t devices)
+{
+ if (amp.hw && amp.hw->set_input_devices)
+ return amp.hw->set_input_devices(amp.hw, devices);
+
+ return 0;
+}
+
+int amplifier_set_output_devices(uint32_t devices)
+{
+ if (amp.hw && amp.hw->set_output_devices)
+ return amp.hw->set_output_devices(amp.hw, devices);
+
+ return 0;
+}
+
+int amplifier_enable_devices(uint32_t devices, bool enable)
+{
+ bool is_output = devices < SND_DEVICE_OUT_END;
+
+ if (amp.hw && amp.hw->enable_output_devices && is_output)
+ return amp.hw->enable_output_devices(amp.hw, devices, enable);
+
+ if (amp.hw && amp.hw->enable_input_devices && !is_output)
+ return amp.hw->enable_input_devices(amp.hw, devices, enable);
+
+ return 0;
+}
+
+int amplifier_set_mode(audio_mode_t mode)
+{
+ if (amp.hw && amp.hw->set_mode)
+ return amp.hw->set_mode(amp.hw, mode);
+
+ return 0;
+}
+
+int amplifier_output_stream_start(struct audio_stream_out *stream,
+ bool offload)
+{
+ if (amp.hw && amp.hw->output_stream_start)
+ return amp.hw->output_stream_start(amp.hw, stream, offload);
+
+ return 0;
+}
+
+int amplifier_input_stream_start(struct audio_stream_in *stream)
+{
+ if (amp.hw && amp.hw->input_stream_start)
+ return amp.hw->input_stream_start(amp.hw, stream);
+
+ return 0;
+}
+
+int amplifier_output_stream_standby(struct audio_stream_out *stream)
+{
+ if (amp.hw && amp.hw->output_stream_standby)
+ return amp.hw->output_stream_standby(amp.hw, stream);
+
+ return 0;
+}
+
+int amplifier_input_stream_standby(struct audio_stream_in *stream)
+{
+ if (amp.hw && amp.hw->input_stream_standby)
+ return amp.hw->input_stream_standby(amp.hw, stream);
+
+ return 0;
+}
+
+int amplifier_set_parameters(struct str_parms *parms)
+{
+ if (amp.hw && amp.hw->set_parameters)
+ return amp.hw->set_parameters(amp.hw, parms);
+
+ return 0;
+}
+
+int amplifier_out_set_parameters(struct str_parms *parms)
+{
+ if (amp.hw && amp.hw->out_set_parameters)
+ return amp.hw->out_set_parameters(amp.hw, parms);
+
+ return 0;
+}
+
+int amplifier_in_set_parameters(struct str_parms *parms)
+{
+ if (amp.hw && amp.hw->in_set_parameters)
+ return amp.hw->in_set_parameters(amp.hw, parms);
+
+ return 0;
+}
+
+int amplifier_set_feedback(void* adev, uint32_t devices, bool enable)
+{
+ amp.adev = (struct audio_device*)adev;
+ if (amp.hw && amp.hw->set_feedback)
+ return amp.hw->set_feedback(amp.hw, amp.adev, devices, enable);
+ return 0;
+}
+
+int amplifier_close(void)
+{
+ if (amp.hw)
+ amplifier_device_close(amp.hw);
+
+ amp.hw = NULL;
+
+ return 0;
+}
diff --git a/hal/audio_extn/audio_amplifier.h b/hal/audio_extn/audio_amplifier.h
new file mode 100644
index 0000000..07f8db5
--- /dev/null
+++ b/hal/audio_extn/audio_amplifier.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef EXTN_AMPLIFIER_H
+#define EXTN_AMPLIFIER_H
+
+#ifndef EXT_AMPLIFIER_ENABLED
+#define amplifier_open(adev) (0)
+#define amplifier_set_input_devices(devices) (0)
+#define amplifier_set_output_devices(devices) (0)
+#define amplifier_enable_devices(devices, enable) (0)
+#define amplifier_set_mode(mode) (0)
+#define amplifier_output_stream_start(stream, offload) (0)
+#define amplifier_input_stream_start(stream) (0)
+#define amplifier_output_stream_standby(stream) (0)
+#define amplifier_input_stream_standby(stream) (0)
+#define amplifier_set_parameters(parms) (0)
+#define amplifier_out_set_parameters(parms) (0)
+#define amplifier_in_set_parameters(parms) (0)
+#define amplifier_set_feedback(adev, devices, enable) (0)
+#define amplifier_close() (0)
+#else
+
+int amplifier_open(void* adev);
+int amplifier_set_input_devices(uint32_t devices);
+int amplifier_set_output_devices(uint32_t devices);
+int amplifier_enable_devices(uint32_t devices, bool enable);
+int amplifier_set_mode(audio_mode_t mode);
+int amplifier_output_stream_start(struct audio_stream_out *stream,
+ bool offload);
+int amplifier_input_stream_start(struct audio_stream_in *stream);
+int amplifier_output_stream_standby(struct audio_stream_out *stream);
+int amplifier_input_stream_standby(struct audio_stream_in *stream);
+int amplifier_set_parameters(struct str_parms *parms);
+int amplifier_out_set_parameters(struct str_parms *parms);
+int amplifier_in_set_parameters(struct str_parms *parms);
+int amplifier_set_feedback(void* adev, uint32_t devices, bool enable);
+int amplifier_close(void);
+#endif
+
+#endif
diff --git a/hal/audio_extn/gef.c b/hal/audio_extn/gef.c
index 83e9d45..4cee8ce 100644
--- a/hal/audio_extn/gef.c
+++ b/hal/audio_extn/gef.c
@@ -36,6 +36,7 @@
#include <log/log.h>
#include <fcntl.h>
#include <dirent.h>
+#include <pthread.h>
#include "audio_hw.h"
#include "platform.h"
#include "platform_api.h"
diff --git a/hal/audio_extn/ssr.c b/hal/audio_extn/ssr.c
index d83b508..c3b0bfe 100644
--- a/hal/audio_extn/ssr.c
+++ b/hal/audio_extn/ssr.c
@@ -36,7 +36,19 @@
#include "audio_extn.h"
#include "platform.h"
#include "platform_api.h"
+#ifndef _OSS
#include "surround_rec_interface.h"
+#else
+typedef struct {
+ const char *name;
+ char *(*get_param_fn)(void *h);
+} get_param_data_t;
+
+typedef struct {
+ const char *name;
+ void (*set_param_fn)(void *h, const char *val);
+} set_param_data_t;
+#endif
#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
diff --git a/hal/audio_extn/ultrasound.c b/hal/audio_extn/ultrasound.c
new file mode 100644
index 0000000..8e0ea89
--- /dev/null
+++ b/hal/audio_extn/ultrasound.c
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2017-2018 The LineageOS Project
+ * Copyright (c) 2017 Balázs Triszka <balika011@protonmail.ch>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "ultrasound"
+
+#include <errno.h>
+#include <stdlib.h>
+#include <log/log.h>
+#include "audio_hw.h"
+#include "platform_api.h"
+#include <platform.h>
+#include "ultrasound.h"
+
+#define ULTRASOUND_CALIBRATION_FILE "/mnt/vendor/persist/audio/us_cal"
+#define ULTRASOUND_CALIBRATION_MIXER "Ultrasound Calibration Data"
+
+enum {
+ ULTRASOUND_STATUS_DEFAULT,
+ ULTRASOUND_STATUS_STARTED,
+ ULTRASOUND_STATUS_STOPPED,
+};
+
+struct pcm_config pcm_config_us = {
+ .channels = 1,
+ .rate = 96000,
+ .period_size = 1024,
+ .period_count = 2,
+ .format = PCM_FORMAT_S16_LE,
+};
+
+struct ultrasound_device {
+ struct pcm *rx_pcm, *tx_pcm;
+ int state;
+ struct audio_device *adev;
+};
+
+static struct ultrasound_device *us = NULL;
+
+void us_cal_load(void)
+{
+ FILE *f;
+ char buff[5] = {0}, us_cal[64];
+ struct mixer_ctl * ctl;
+ int rc;
+
+ f = fopen(ULTRASOUND_CALIBRATION_FILE, "r");
+ if (!f) {
+ ALOGE("%s: Cannot open calibration file: %s",
+ __func__, ULTRASOUND_CALIBRATION_FILE);
+ return;
+ }
+
+ for (size_t i = 0; i < sizeof(us_cal); i++) {
+ fread(buff, 1, sizeof(buff), f);
+ us_cal[i] = strtol(buff, 0, 16);
+ }
+ fclose(f);
+
+ ctl = mixer_get_ctl_by_name(us->adev->mixer, ULTRASOUND_CALIBRATION_MIXER);
+ if (!ctl) {
+ ALOGE("%s: Could not get ctl for mixer cmd - %s",
+ __func__, ULTRASOUND_CALIBRATION_MIXER);
+ return;
+ }
+
+ rc = mixer_ctl_set_array(ctl, us_cal, sizeof(us_cal));
+ if (rc < 0)
+ ALOGE("%s: Could not set ctl, error:%d ", __func__, rc);
+}
+
+int us_init(struct audio_device *adev)
+{
+ ALOGD("%s: enter", __func__);
+
+ if (us) {
+ ALOGI("%s: ultrasound has been initialized!", __func__);
+ return 0;
+ }
+
+ us = calloc(1, sizeof(struct ultrasound_device));
+ if (!us) {
+ ALOGE("%s: Out of memory!", __func__);
+ return -ENOMEM;
+ }
+
+ us->adev = adev;
+
+ us_cal_load();
+
+ ALOGD("%s: exit, status(0)", __func__);
+
+ return 0;
+}
+
+void us_deinit(void)
+{
+ ALOGD("%s: enter", __func__);
+
+ if (us) {
+ free(us);
+ us = NULL;
+ }
+
+ ALOGD("%s: exit", __func__);
+}
+
+int stop_us(void)
+{
+ struct audio_usecase *rx_usecase, *tx_usecase;
+ int rc = 0;
+
+ ALOGD("%s: enter usecase: ultrasound", __func__);
+
+ us->state = ULTRASOUND_STATUS_STOPPED;
+ if (us->rx_pcm) {
+ pcm_close(us->rx_pcm);
+ us->rx_pcm = NULL;
+ }
+
+ if (us->tx_pcm) {
+ pcm_close(us->tx_pcm);
+ us->tx_pcm = NULL;
+ }
+
+ rx_usecase = get_usecase_from_list(us->adev, USECASE_AUDIO_ULTRASOUND_RX);
+ if (!rx_usecase) {
+ ALOGE("%s: Could not find the usecase (%d) in the list",
+ __func__, USECASE_AUDIO_ULTRASOUND_RX);
+ rc = -EINVAL;
+ } else {
+ disable_audio_route(us->adev, rx_usecase);
+ disable_snd_device(us->adev, rx_usecase->out_snd_device);
+ list_remove(&rx_usecase->list);
+ free(rx_usecase);
+ }
+
+ tx_usecase = get_usecase_from_list(us->adev, USECASE_AUDIO_ULTRASOUND_TX);
+ if (!rx_usecase) {
+ ALOGE("%s: Could not find the usecase (%d) in the list",
+ __func__, USECASE_AUDIO_ULTRASOUND_TX);
+ rc = -EINVAL;
+ } else {
+ disable_audio_route(us->adev, tx_usecase);
+ disable_snd_device(us->adev, tx_usecase->in_snd_device);
+ list_remove(&tx_usecase->list);
+ free(tx_usecase);
+ }
+
+ ALOGD("%s: exit: status(%d)", __func__, rc);
+
+ return rc;
+}
+
+int us_start(void)
+{
+ int rx_device_id, tx_device_id;
+ struct audio_usecase *rx_usecase, *tx_usecase;
+
+ ALOGD("%s: enter", __func__);
+
+ if (!us || us->state == ULTRASOUND_STATUS_STARTED)
+ return -EPERM;
+
+ ALOGD("%s: enter usecase: ultrasound", __func__);
+ rx_device_id = platform_get_pcm_device_id(USECASE_AUDIO_ULTRASOUND_RX, PCM_PLAYBACK);
+ tx_device_id = platform_get_pcm_device_id(USECASE_AUDIO_ULTRASOUND_TX, PCM_CAPTURE);
+ if (rx_device_id < 0 || tx_device_id < 0) {
+ ALOGE("%s: Invalid PCM devices (rx: %d tx: %d) for the usecase(ultrasound)",
+ __func__, rx_device_id, tx_device_id);
+ stop_us();
+ ALOGE("%s: exit: status(%d)", __func__, -EIO);
+ return -EIO;
+ }
+
+ rx_usecase = calloc(1, sizeof(struct audio_usecase));
+ if (!rx_usecase) {
+ ALOGE("%s: Out of memory!", __func__);
+ return -ENOMEM;
+ }
+
+ rx_usecase->type = PCM_PLAYBACK;
+ rx_usecase->out_snd_device = SND_DEVICE_OUT_ULTRASOUND_HANDSET;
+ rx_usecase->id = USECASE_AUDIO_ULTRASOUND_RX;
+ list_add_tail(&us->adev->usecase_list, &rx_usecase->list);
+
+ enable_snd_device(us->adev, SND_DEVICE_OUT_ULTRASOUND_HANDSET);
+ enable_audio_route(us->adev, rx_usecase);
+ ALOGV("%s: Opening PCM playback device card_id(%d) device_id(%d)",
+ __func__, us->adev->snd_card, rx_device_id);
+ us->rx_pcm = pcm_open(us->adev->snd_card, rx_device_id, PCM_OUT, &pcm_config_us);
+ if (us->rx_pcm && !pcm_is_ready(us->rx_pcm)) {
+ ALOGE("%s: %s", __func__, pcm_get_error(us->rx_pcm));
+ stop_us();
+ ALOGE("%s: exit: status(%d)", __func__, -EIO);
+ return -EIO;
+ }
+
+ tx_usecase = calloc(1, sizeof(struct audio_usecase));
+ if (!tx_usecase) {
+ ALOGE("%s: Out of memory!", __func__);
+ return -ENOMEM;
+ }
+
+ tx_usecase->type = PCM_CAPTURE;
+ tx_usecase->in_snd_device = SND_DEVICE_IN_ULTRASOUND_MIC;
+ tx_usecase->id = USECASE_AUDIO_ULTRASOUND_TX;
+ list_add_tail(&us->adev->usecase_list, &tx_usecase->list);
+
+ enable_snd_device(us->adev, SND_DEVICE_IN_ULTRASOUND_MIC);
+ enable_audio_route(us->adev, tx_usecase);
+ ALOGV("%s: Opening PCM capture device card_id(%d) device_id(%d)",
+ __func__, us->adev->snd_card, tx_device_id);
+ us->tx_pcm = pcm_open(us->adev->snd_card, tx_device_id, PCM_IN, &pcm_config_us);
+ if (us->tx_pcm && !pcm_is_ready(us->tx_pcm)) {
+ ALOGD("%s: %s", __func__, pcm_get_error(us->tx_pcm));
+ stop_us();
+ ALOGE("%s: exit: status(%d)", __func__, -EIO);
+ return -EIO;
+ }
+
+ pcm_start(us->rx_pcm);
+ pcm_start(us->tx_pcm);
+ us->state = ULTRASOUND_STATUS_STARTED;
+
+ ALOGD("%s: exit, status(0)", __func__);
+
+ return 0;
+}
+
+int us_stop(void)
+{
+ ALOGD("%s: enter", __func__);
+
+ if (!us || us->state != ULTRASOUND_STATUS_STARTED)
+ return -EPERM;
+
+ stop_us();
+
+ return 0;
+}
diff --git a/hal/audio_extn/ultrasound.h b/hal/audio_extn/ultrasound.h
new file mode 100644
index 0000000..0bb24ca
--- /dev/null
+++ b/hal/audio_extn/ultrasound.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2017-2018 The LineageOS Project
+ * Copyright (c) 2017 Balázs Triszka <balika011@protonmail.ch>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ULTRASOUND_H
+#define ULTRASOUND_H
+
+#ifndef ELLIPTIC_ULTRASOUND_ENABLED
+#define us_init(adev) (0)
+#define us_deinit() (0)
+#define us_start() (0)
+#define us_stop() (0)
+#else
+int us_init(struct audio_device *adev);
+void us_deinit(void);
+int us_start(void);
+int us_stop(void);
+#endif
+
+#endif
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index c3d7190..0177394 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -75,6 +75,8 @@
#include "audio_extn.h"
#include "voice_extn.h"
#include "ip_hdlr_intf.h"
+#include "audio_amplifier.h"
+#include "ultrasound.h"
#include "sound/compress_params.h"
#include "sound/asound.h"
@@ -407,6 +409,10 @@
[USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE] = "nav-guidance-playback",
[USECASE_AUDIO_PLAYBACK_PHONE] = "phone-playback",
[USECASE_AUDIO_FM_TUNER_EXT] = "fm-tuner-ext",
+
+ /* For Elliptic Ultrasound proximity sensor */
+ [USECASE_AUDIO_ULTRASOUND_RX] = "ultrasound-rx",
+ [USECASE_AUDIO_ULTRASOUND_TX] = "ultrasound-tx",
};
static const audio_usecase_t offload_usecases[] = {
@@ -1143,6 +1149,9 @@
audio_extn_utils_send_app_type_cfg(adev, usecase);
if (audio_extn_is_maxx_audio_enabled())
audio_extn_ma_set_device(usecase);
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ if (usecase->id != USECASE_AUDIO_ULTRASOUND_TX)
+#endif
audio_extn_utils_send_audio_calibration(adev, usecase);
if ((usecase->type == PCM_PLAYBACK) && is_offload_usecase(usecase->id)) {
out = usecase->stream.out;
@@ -1313,6 +1322,10 @@
ST_EVENT_SND_DEVICE_BUSY);
audio_extn_listen_update_device_status(snd_device,
LISTEN_EVENT_SND_DEVICE_BUSY);
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ if (snd_device != SND_DEVICE_OUT_ULTRASOUND_HANDSET &&
+ snd_device != SND_DEVICE_IN_ULTRASOUND_MIC)
+#endif
if (platform_get_snd_device_acdb_id(snd_device) < 0) {
audio_extn_sound_trigger_update_device_status(snd_device,
ST_EVENT_SND_DEVICE_FREE);
@@ -1321,7 +1334,9 @@
goto err;
}
audio_extn_dev_arbi_acquire(snd_device);
+ amplifier_enable_devices(snd_device, true);
audio_route_apply_and_update_path(adev->audio_route, device_name);
+ amplifier_set_feedback(adev, snd_device, true);
if (SND_DEVICE_OUT_HEADPHONES == snd_device &&
!adev->native_playback_enabled &&
@@ -1393,6 +1408,7 @@
platform_set_speaker_gain_in_combo(adev, snd_device, false);
} else {
audio_route_reset_and_update_path(adev->audio_route, device_name);
+ amplifier_enable_devices(snd_device, false);
}
if (snd_device == SND_DEVICE_OUT_BT_A2DP)
@@ -1422,6 +1438,7 @@
}
audio_extn_utils_release_snd_device(snd_device);
+ amplifier_set_feedback(adev, snd_device, false);
} else {
if (platform_split_snd_device(adev->platform,
snd_device,
@@ -1618,6 +1635,12 @@
platform_get_snd_device_name(snd_device),
platform_get_snd_device_name(usecase->out_snd_device),
platform_check_backends_match(snd_device, usecase->out_snd_device));
+
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ if (usecase->id == USECASE_AUDIO_ULTRASOUND_RX)
+ continue;
+#endif
+
if ((usecase->type != PCM_CAPTURE) && (usecase != uc_info) &&
(usecase->type != PCM_PASSTHROUGH)) {
uc_derive_snd_device = derive_playback_snd_device(adev->platform,
@@ -1763,6 +1786,12 @@
/*
* TODO: Enhance below condition to handle BT sco/USB multi recording
*/
+
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ if (usecase->id == USECASE_AUDIO_ULTRASOUND_TX)
+ continue;
+#endif
+
if (usecase->type != PCM_PLAYBACK &&
usecase != uc_info &&
(usecase->in_snd_device != snd_device || force_routing) &&
@@ -2773,6 +2802,10 @@
voice_set_sidetone(adev, out_snd_device, true);
}
+ /* Rely on amplifier_set_devices to distinguish between in/out devices */
+ amplifier_set_input_devices(in_snd_device);
+ amplifier_set_output_devices(out_snd_device);
+
/* Applicable only on the targets that has external modem.
* Enable device command should be sent to modem only after
* enabling voice call mixer controls
@@ -4226,6 +4259,9 @@
stop_compressed_output_l(out);
pthread_mutex_lock(&adev->lock);
+
+ amplifier_output_stream_standby((struct audio_stream_out *) stream);
+
out->standby = true;
if (out->usecase == USECASE_COMPRESS_VOIP_CALL) {
voice_extn_compress_voip_close_output_stream(stream);
@@ -4475,6 +4511,9 @@
parms = str_parms_create_str(kvpairs);
if (!parms)
goto error;
+
+ amplifier_out_set_parameters(parms);
+
err = str_parms_get_str(parms, AUDIO_PARAMETER_STREAM_ROUTING, value, sizeof(value));
if (err >= 0) {
val = atoi(value);
@@ -5476,6 +5515,11 @@
ret = voice_extn_compress_voip_start_output_stream(out);
else
ret = start_output_stream(out);
+
+ if (ret == 0)
+ amplifier_output_stream_start(stream,
+ is_offload_usecase(out->usecase));
+
pthread_mutex_unlock(&adev->lock);
/* ToDo: If use case is compress offload should return 0 */
if (ret != 0) {
@@ -6305,6 +6349,9 @@
adev->adm_deregister_stream(adev->adm_data, in->capture_handle);
pthread_mutex_lock(&adev->lock);
+
+ amplifier_input_stream_standby((struct audio_stream_in *) stream);
+
in->standby = true;
if (in->usecase == USECASE_COMPRESS_VOIP_CALL) {
do_stop = false;
@@ -6412,6 +6459,9 @@
if (!parms)
goto error;
+
+ amplifier_in_set_parameters(parms);
+
lock_input_stream(in);
pthread_mutex_lock(&adev->lock);
@@ -6607,6 +6657,10 @@
ret = start_input_stream(in);
if (!ret && in->source == AUDIO_SOURCE_VOICE_RECOGNITION)
adev->num_va_sessions++;
+
+ if (ret == 0)
+ amplifier_input_stream_start(stream);
+
pthread_mutex_unlock(&adev->lock);
if (ret != 0) {
goto exit;
@@ -8388,6 +8442,16 @@
}
}
+ ret = str_parms_get_int(parms, "ultrasound-sensor", &val);
+ if (ret >= 0) {
+ if (val == 1) {
+ us_start();
+ } else {
+ us_stop();
+ }
+ }
+
+ amplifier_set_parameters(parms);
audio_extn_set_parameters(adev, parms);
done:
str_parms_destroy(parms);
@@ -8514,6 +8578,8 @@
pthread_mutex_lock(&adev->lock);
if (adev->mode != mode) {
ALOGD("%s: mode %d\n", __func__, mode);
+ if (amplifier_set_mode(mode) != 0)
+ ALOGE("Failed setting amplifier mode");
adev->mode = mode;
if (voice_is_in_call(adev) &&
(mode == AUDIO_MODE_NORMAL ||
@@ -9380,6 +9446,8 @@
if ((--audio_device_ref_count) == 0) {
if (audio_extn_spkr_prot_is_enabled())
audio_extn_spkr_prot_deinit();
+ if (amplifier_close() != 0)
+ ALOGE("Amplifier close failed");
audio_extn_snd_mon_unregister_listener(adev);
audio_extn_sound_trigger_deinit(adev);
audio_extn_listen_deinit(adev);
@@ -9416,6 +9484,9 @@
free(device);
adev = NULL;
}
+
+ us_deinit();
+
pthread_mutex_unlock(&adev_init_lock);
enable_gcov();
return 0;
@@ -9802,6 +9873,12 @@
adev->vr_audio_mode_enabled = false;
audio_extn_ds2_enable(adev);
+
+ if (amplifier_open(adev) != 0)
+ ALOGE("Amplifier initialization failed");
+
+ us_init(adev);
+
*device = &adev->device.common;
if (k_enable_extended_precision)
@@ -9826,8 +9903,7 @@
configured_low_latency_capture_period_size = trial;
}
}
- if ((property_get("vendor.audio_hal.in_period_size", value, NULL) > 0) ||
- (property_get("audio_hal.in_period_size", value, NULL) > 0)) {
+ if (property_get("vendor.audio_hal.in_period_size", value, NULL) > 0) {
trial = atoi(value);
if (period_size_is_plausible_for_low_latency(trial)) {
configured_low_latency_capture_period_size = trial;
diff --git a/hal/audio_hw.h b/hal/audio_hw.h
index 9b7bf5b..33ee477 100644
--- a/hal/audio_hw.h
+++ b/hal/audio_hw.h
@@ -41,6 +41,7 @@
#include <stdlib.h>
#include <cutils/str_parms.h>
#include <cutils/list.h>
+#include <hardware/audio_amplifier.h>
#include <hardware/audio.h>
#include <tinyalsa/asoundlib.h>
#include <tinycompress/tinycompress.h>
@@ -230,6 +231,11 @@
/*Audio FM Tuner usecase*/
USECASE_AUDIO_FM_TUNER_EXT,
+
+ /* Elliptic Ultrasound */
+ USECASE_AUDIO_ULTRASOUND_RX,
+ USECASE_AUDIO_ULTRASOUND_TX,
+
AUDIO_USECASE_MAX
};
@@ -678,6 +684,8 @@
bool adm_routing_changed;
struct listnode audio_patch_record_list;
unsigned int audio_patch_index;
+
+ amplifier_device_t *amp;
};
struct audio_patch_record {
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 6e16e16..0946f7c 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -421,7 +421,7 @@
};
/* Array to store sound devices */
-static const char * const device_table[SND_DEVICE_MAX] = {
+static const char * device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_NONE] = "none",
/* Playback sound devices */
[SND_DEVICE_OUT_HANDSET] = "handset",
@@ -949,6 +949,7 @@
{TO_NAME_INDEX(USECASE_VOWLAN_CALL)},
{TO_NAME_INDEX(USECASE_VOICEMMODE1_CALL)},
{TO_NAME_INDEX(USECASE_VOICEMMODE2_CALL)},
+ {TO_NAME_INDEX(USECASE_COMPRESS_VOIP_CALL)},
{TO_NAME_INDEX(USECASE_INCALL_REC_UPLINK)},
{TO_NAME_INDEX(USECASE_INCALL_REC_DOWNLINK)},
{TO_NAME_INDEX(USECASE_INCALL_REC_UPLINK_AND_DOWNLINK)},
@@ -8040,6 +8041,21 @@
return snd_device;
}
+int platform_set_snd_device_name(snd_device_t device, const char *name)
+{
+ int ret = 0;
+
+ if ((device < SND_DEVICE_MIN) || (device >= SND_DEVICE_MAX)) {
+ ALOGE("%s:: Invalid snd_device = %d", __func__, device);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ device_table[device] = strdup(name);
+done:
+ return ret;
+}
+
int platform_set_sidetone(struct audio_device *adev,
snd_device_t out_snd_device,
bool enable,
diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c
index 90105cd..9317488 100644
--- a/hal/msm8960/platform.c
+++ b/hal/msm8960/platform.c
@@ -1281,6 +1281,12 @@
ALOGE("%s: Not implemented", __func__);
}
+int platform_set_snd_device_name(snd_device_t snd_device __unused,
+ const char * name __unused)
+{
+ return -ENOSYS;
+}
+
bool platform_can_enable_spkr_prot_on_device(snd_device_t snd_device __unused)
{
/* speaker protection not implemented for this platform*/
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 8032d68..f350c81 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -486,10 +486,13 @@
[USECASE_AUDIO_PLAYBACK_PHONE] = {PHONE_PCM_DEVICE,
PHONE_PCM_DEVICE},
[USECASE_AUDIO_FM_TUNER_EXT] = {-1, -1},
+ [USECASE_AUDIO_ULTRASOUND_RX] = {ULTRASOUND_PCM_DEVICE, -1},
+ [USECASE_AUDIO_ULTRASOUND_TX] = {-1, ULTRASOUND_PCM_DEVICE},
+
};
/* Array to store sound devices */
-static const char * const device_table[SND_DEVICE_MAX] = {
+static const char * device_table[SND_DEVICE_MAX] = {
[SND_DEVICE_NONE] = "none",
/* Playback sound devices */
[SND_DEVICE_OUT_HANDSET] = "handset",
@@ -590,6 +593,7 @@
[SND_DEVICE_OUT_BUS_SYS] = "bus-speaker",
[SND_DEVICE_OUT_BUS_NAV] = "bus-speaker",
[SND_DEVICE_OUT_BUS_PHN] = "bus-speaker",
+ [SND_DEVICE_OUT_ULTRASOUND_HANDSET] = "ultrasound-handset",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -728,6 +732,7 @@
[SND_DEVICE_IN_HANDSET_QMIC_AND_EC_REF_LOOPBACK] = "handset-qmic-and-ec-ref-loopback",
[SND_DEVICE_IN_HANDSET_6MIC_AND_EC_REF_LOOPBACK] = "handset-6mic-and-ec-ref-loopback",
[SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK] = "handset-8mic-and-ec-ref-loopback",
+ [SND_DEVICE_IN_ULTRASOUND_MIC] = "ultrasound-mic",
};
// Platform specific backend bit width table
@@ -1266,6 +1271,7 @@
{TO_NAME_INDEX(USECASE_VOWLAN_CALL)},
{TO_NAME_INDEX(USECASE_VOICEMMODE1_CALL)},
{TO_NAME_INDEX(USECASE_VOICEMMODE2_CALL)},
+ {TO_NAME_INDEX(USECASE_COMPRESS_VOIP_CALL)},
{TO_NAME_INDEX(USECASE_INCALL_REC_UPLINK)},
{TO_NAME_INDEX(USECASE_INCALL_REC_DOWNLINK)},
{TO_NAME_INDEX(USECASE_INCALL_REC_UPLINK_AND_DOWNLINK)},
@@ -1291,6 +1297,8 @@
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_SYS_NOTIFICATION)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_NAV_GUIDANCE)},
{TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_PHONE)},
+ {TO_NAME_INDEX(USECASE_AUDIO_ULTRASOUND_RX)},
+ {TO_NAME_INDEX(USECASE_AUDIO_ULTRASOUND_TX)},
};
static const struct name_to_index usecase_type_index[USECASE_TYPE_MAX] = {
@@ -1758,7 +1766,11 @@
usecase = node_to_item(node, struct audio_usecase, list);
if (usecase != NULL && usecase->stream.out &&
- usecase->type == PCM_PLAYBACK) {
+ usecase->type == PCM_PLAYBACK
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ && usecase->id != USECASE_AUDIO_ULTRASOUND_RX
+#endif
+ ) {
int new_snd_device[2] = {0};
int i, num_devices = 1;
@@ -2254,6 +2266,7 @@
hw_interface_table[SND_DEVICE_OUT_BUS_SYS] = strdup("TERT_TDM_RX_0");
hw_interface_table[SND_DEVICE_OUT_BUS_NAV] = strdup("TERT_TDM_RX_1");
hw_interface_table[SND_DEVICE_OUT_BUS_PHN] = strdup("TERT_TDM_RX_2");
+ hw_interface_table[SND_DEVICE_OUT_ULTRASOUND_HANDSET] = strdup("SLIMBUS_0_RX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_SB] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = strdup("SLIMBUS_0_TX");
@@ -2381,6 +2394,8 @@
hw_interface_table[SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_VOICE_HEARING_AID] = strdup("SLIMBUS_0_TX");
hw_interface_table[SND_DEVICE_IN_BUS] = strdup("TERT_TDM_TX_0");
+ hw_interface_table[SND_DEVICE_IN_ULTRASOUND_MIC] = strdup("SLIMBUS_0_TX");
+
my_data->max_mic_count = PLATFORM_DEFAULT_MIC_COUNT;
/*remove ALAC & APE from DSP decoder list based on software decoder availability*/
@@ -4180,12 +4195,12 @@
platform_get_snd_device_name(snd_device1),
platform_get_snd_device_name(snd_device2));
- if ((snd_device1 < SND_DEVICE_MIN) || (snd_device1 >= SND_DEVICE_OUT_END)) {
+ if ((snd_device1 < SND_DEVICE_MIN) || (snd_device1 >= SND_DEVICE_MAX)) {
ALOGE("%s: Invalid snd_device = %s", __func__,
platform_get_snd_device_name(snd_device1));
return false;
}
- if ((snd_device2 < SND_DEVICE_MIN) || (snd_device2 >= SND_DEVICE_OUT_END)) {
+ if ((snd_device2 < SND_DEVICE_MIN) || (snd_device2 >= SND_DEVICE_MAX)) {
ALOGE("%s: Invalid snd_device = %s", __func__,
platform_get_snd_device_name(snd_device2));
return false;
@@ -6646,37 +6661,52 @@
} else if (source == AUDIO_SOURCE_CAMCORDER) {
if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC ||
in_device & AUDIO_DEVICE_IN_BACK_MIC) {
- switch (adev->camera_orientation) {
- case CAMERA_BACK_LANDSCAPE:
- snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
- break;
- case CAMERA_BACK_INVERT_LANDSCAPE:
- snd_device = SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE;
- break;
- case CAMERA_BACK_PORTRAIT:
- snd_device = SND_DEVICE_IN_CAMCORDER_PORTRAIT;
- break;
- case CAMERA_FRONT_LANDSCAPE:
- snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE;
- break;
- case CAMERA_FRONT_INVERT_LANDSCAPE:
- snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE;
- break;
- case CAMERA_FRONT_PORTRAIT:
- snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT;
- break;
- default:
- ALOGW("%s: invalid camera orientation %08x", __func__, adev->camera_orientation);
- snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
- break;
- }
+
if (str_bitwidth == 16) {
if ((my_data->fluence_type & FLUENCE_DUAL_MIC) &&
(my_data->source_mic_type & SOURCE_DUAL_MIC) &&
(channel_count == 2))
- snd_device = SND_DEVICE_IN_HANDSET_DMIC_STEREO;
+ switch (adev->camera_orientation) {
+ case CAMERA_BACK_LANDSCAPE:
+ case CAMERA_FRONT_INVERT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_SPEAKER_DMIC_STEREO;
+ break;
+ case CAMERA_BACK_INVERT_LANDSCAPE:
+ case CAMERA_BACK_PORTRAIT:
+ case CAMERA_FRONT_LANDSCAPE:
+ case CAMERA_FRONT_PORTRAIT:
+ snd_device = SND_DEVICE_IN_HANDSET_DMIC_STEREO;
+ break;
+ default:
+ ALOGW("%s: invalid camera orientation %08x", __func__, adev->camera_orientation);
+ snd_device = SND_DEVICE_IN_HANDSET_DMIC_STEREO;
+ break;
+ }
else
- snd_device = SND_DEVICE_IN_CAMCORDER_MIC;
+ switch (adev->camera_orientation) {
+ case CAMERA_BACK_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
+ break;
+ case CAMERA_BACK_INVERT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_INVERT_LANDSCAPE;
+ break;
+ case CAMERA_BACK_PORTRAIT:
+ snd_device = SND_DEVICE_IN_CAMCORDER_PORTRAIT;
+ break;
+ case CAMERA_FRONT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_LANDSCAPE;
+ break;
+ case CAMERA_FRONT_INVERT_LANDSCAPE:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_INVERT_LANDSCAPE;
+ break;
+ case CAMERA_FRONT_PORTRAIT:
+ snd_device = SND_DEVICE_IN_CAMCORDER_SELFIE_PORTRAIT;
+ break;
+ default:
+ ALOGW("%s: invalid camera orientation %08x", __func__, adev->camera_orientation);
+ snd_device = SND_DEVICE_IN_CAMCORDER_LANDSCAPE;
+ break;
+ }
}
/*
* for other bit widths
@@ -10400,6 +10430,21 @@
return ret;
}
+int platform_set_snd_device_name(snd_device_t device, const char *name)
+{
+ int ret = 0;
+
+ if ((device < SND_DEVICE_MIN) || (device >= SND_DEVICE_MAX)) {
+ ALOGE("%s:: Invalid snd_device = %d", __func__, device);
+ ret = -EINVAL;
+ goto done;
+ }
+
+ device_table[device] = strdup(name);
+done:
+ return ret;
+}
+
int platform_set_sidetone(struct audio_device *adev,
snd_device_t out_snd_device,
bool enable,
@@ -10749,6 +10794,9 @@
list_for_each(node, &adev->usecase_list) {
usecase = node_to_item(node, struct audio_usecase, list);
+#ifdef ELLIPTIC_ULTRASOUND_ENABLED
+ if (usecase->id != USECASE_AUDIO_ULTRASOUND_RX)
+#endif
if (usecase->stream.out && usecase->type == PCM_PLAYBACK &&
usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
/*
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 7c807b4..8e8122a 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -183,6 +183,7 @@
SND_DEVICE_OUT_BUS_SYS,
SND_DEVICE_OUT_BUS_NAV,
SND_DEVICE_OUT_BUS_PHN,
+ SND_DEVICE_OUT_ULTRASOUND_HANDSET,
SND_DEVICE_OUT_END,
/*
@@ -325,6 +326,7 @@
SND_DEVICE_IN_HANDSET_QMIC_AND_EC_REF_LOOPBACK,
SND_DEVICE_IN_HANDSET_6MIC_AND_EC_REF_LOOPBACK,
SND_DEVICE_IN_HANDSET_8MIC_AND_EC_REF_LOOPBACK,
+ SND_DEVICE_IN_ULTRASOUND_MIC,
SND_DEVICE_IN_END,
SND_DEVICE_MAX = SND_DEVICE_IN_END,
@@ -648,6 +650,8 @@
#define AFE_PROXY_PLAYBACK_PCM_DEVICE 7
#define AFE_PROXY_RECORD_PCM_DEVICE 8
+#define ULTRASOUND_PCM_DEVICE 10
+
#ifdef PLATFORM_MSM8x26
#ifdef EXTERNAL_BT_SUPPORTED
#define HFP_SCO_RX 10 // AUXPCM Hostless
diff --git a/hal/platform_api.h b/hal/platform_api.h
index 30a10c5..932932b 100644
--- a/hal/platform_api.h
+++ b/hal/platform_api.h
@@ -247,6 +247,7 @@
void platform_add_app_type(const char *uc_type,
const char *mode,
int bw, int app_type, int max_sr);
+int platform_set_snd_device_name(snd_device_t snd_device, const char * name);
/* From platform_info.c */
int platform_info_init(const char *filename, void *, caller_t);
diff --git a/hal/platform_info.c b/hal/platform_info.c
index 1969f52..e99a418 100644
--- a/hal/platform_info.c
+++ b/hal/platform_info.c
@@ -40,6 +40,7 @@
#include "platform_api.h"
#include <platform.h>
#include <math.h>
+#include <pthread.h>
#ifdef DYNAMIC_LOG_ENABLED
#include <log_xml_parser.h>
@@ -75,6 +76,7 @@
EXTERNAL_DEVICE_SPECIFIC,
CUSTOM_MTMX_IN_PARAMS,
CUSTOM_MTMX_PARAM_IN_CH_INFO,
+ DEVICE_NAME,
} section_t;
typedef void (* section_process_fn)(const XML_Char **attr);
@@ -101,6 +103,7 @@
static void process_external_dev(const XML_Char **attr);
static void process_custom_mtmx_in_params(const XML_Char **attr);
static void process_custom_mtmx_param_in_ch_info(const XML_Char **attr);
+static void process_device_name(const XML_Char **attr);
static section_process_fn section_table[] = {
[ROOT] = process_root,
@@ -124,6 +127,7 @@
[EXTERNAL_DEVICE_SPECIFIC] = process_external_dev,
[CUSTOM_MTMX_IN_PARAMS] = process_custom_mtmx_in_params,
[CUSTOM_MTMX_PARAM_IN_CH_INFO] = process_custom_mtmx_param_in_ch_info,
+ [DEVICE_NAME] = process_device_name,
};
static section_t section;
@@ -274,6 +278,11 @@
* ...
* </operator_specific>
*
+ * <device_names>
+ * <device name="???" alias="???"/>
+ * ...
+ * ...
+ * </device_names>
* </audio_platform_info>
*/
@@ -1191,7 +1200,38 @@
}
platform_add_custom_mtmx_params((void *)my_data.platform, &mtmx_params_info);
+}
+static void process_device_name(const XML_Char **attr)
+{
+ int index;
+
+ if (strcmp(attr[0], "name") != 0) {
+ ALOGE("%s: 'name' not found, no alias set!", __func__);
+ goto done;
+ }
+
+ index = platform_get_snd_device_index((char *)attr[1]);
+ if (index < 0) {
+ ALOGE("%s: Device %s in platform info xml not found, no alias set!",
+ __func__, attr[1]);
+ goto done;
+ }
+
+ if (strcmp(attr[2], "alias") != 0) {
+ ALOGE("%s: Device %s in platform info xml has no alias, no alias set!",
+ __func__, attr[1]);
+ goto done;
+ }
+
+ if (platform_set_snd_device_name(index, attr[3]) < 0) {
+ ALOGE("%s: Device %s, alias %s was not set!",
+ __func__, attr[1], attr[3]);
+ goto done;
+ }
+
+done:
+ return;
}
static void start_tag(void *userdata __unused, const XML_Char *tag_name,
@@ -1236,11 +1276,14 @@
section = MICROPHONE_CHARACTERISTIC;
} else if (strcmp(tag_name, "snd_devices") == 0) {
section = SND_DEVICES;
+ } else if (strcmp(tag_name, "device_names") == 0) {
+ section = DEVICE_NAME;
} else if (strcmp(tag_name, "device") == 0) {
if ((section != ACDB) && (section != AEC) && (section != NS) &&
(section != BACKEND_NAME) && (section != BITWIDTH) &&
- (section != INTERFACE_NAME) && (section != OPERATOR_SPECIFIC)) {
- ALOGE("device tag only supported for acdb/backend names/bitwitdh/interface names");
+ (section != INTERFACE_NAME) && (section != OPERATOR_SPECIFIC) &&
+ (section != DEVICE_NAME)) {
+ ALOGE("device tag only supported for acdb/backend names/bitwitdh/interface/device names");
return;
}
@@ -1436,6 +1479,8 @@
section = ROOT;
} else if (strcmp(tag_name, "custom_mtmx_param_in_chs") == 0) {
section = CUSTOM_MTMX_IN_PARAMS;
+ } else if (strcmp(tag_name, "device_names") == 0) {
+ section = ROOT;
}
}
diff --git a/mm-audio/aenc-aac/qdsp6/Android.mk b/mm-audio/aenc-aac/qdsp6/Android.mk
index 5aa1f40..6351af9 100644
--- a/mm-audio/aenc-aac/qdsp6/Android.mk
+++ b/mm-audio/aenc-aac/qdsp6/Android.mk
@@ -24,7 +24,6 @@
include $(CLEAR_VARS)
libOmxAacEnc-inc := $(LOCAL_PATH)/inc
-libOmxAacEnc-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := libOmxAacEnc
LOCAL_MODULE_TAGS := optional
@@ -46,11 +45,10 @@
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+LOCAL_HEADER_LIBRARIES := libomxcore_headers
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
-endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
endif
@@ -64,7 +62,6 @@
mm-aac-enc-test-inc := $(LOCAL_PATH)/inc
mm-aac-enc-test-inc += $(LOCAL_PATH)/test
-mm-aac-enc-test-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := mm-aenc-omxaac-test
LOCAL_MODULE_TAGS := optional
diff --git a/mm-audio/aenc-amrnb/qdsp6/Android.mk b/mm-audio/aenc-amrnb/qdsp6/Android.mk
index 7e0007f..6887a39 100644
--- a/mm-audio/aenc-amrnb/qdsp6/Android.mk
+++ b/mm-audio/aenc-amrnb/qdsp6/Android.mk
@@ -25,7 +25,6 @@
include $(CLEAR_VARS)
libOmxAmrEnc-inc := $(LOCAL_PATH)/inc
-libOmxAmrEnc-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := libOmxAmrEnc
LOCAL_MODULE_TAGS := optional
@@ -48,11 +47,9 @@
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_HEADER_LIBRARIES := libomxcore_headers
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
-endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
endif
@@ -67,7 +64,6 @@
mm-amr-enc-test-inc := $(LOCAL_PATH)/inc
mm-amr-enc-test-inc += $(LOCAL_PATH)/test
-mm-amr-enc-test-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := mm-aenc-omxamr-test
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := $(libOmxAmrEnc-def)
diff --git a/mm-audio/aenc-evrc/qdsp6/Android.mk b/mm-audio/aenc-evrc/qdsp6/Android.mk
index 346ef81..406659f 100644
--- a/mm-audio/aenc-evrc/qdsp6/Android.mk
+++ b/mm-audio/aenc-evrc/qdsp6/Android.mk
@@ -25,7 +25,6 @@
include $(CLEAR_VARS)
libOmxEvrcEnc-inc := $(LOCAL_PATH)/inc
-libOmxEvrcEnc-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := libOmxEvrcEnc
LOCAL_MODULE_TAGS := optional
@@ -48,11 +47,9 @@
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_HEADER_LIBRARIES := libomxcore_headers
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
-endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
endif
@@ -66,7 +63,7 @@
mm-evrc-enc-test-inc := $(LOCAL_PATH)/inc
mm-evrc-enc-test-inc += $(LOCAL_PATH)/test
-mm-evrc-enc-test-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
+
LOCAL_MODULE := mm-aenc-omxevrc-test
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := $(libOmxEvrcEnc-def)
diff --git a/mm-audio/aenc-g711/qdsp6/Android.mk b/mm-audio/aenc-g711/qdsp6/Android.mk
index 8e4d9e7..353baf1 100644
--- a/mm-audio/aenc-g711/qdsp6/Android.mk
+++ b/mm-audio/aenc-g711/qdsp6/Android.mk
@@ -25,7 +25,6 @@
include $(CLEAR_VARS)
libOmxG711Enc-inc := $(LOCAL_PATH)/inc
-libOmxG711Enc-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := libOmxG711Enc
LOCAL_MODULE_TAGS := optional
@@ -49,11 +48,9 @@
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_HEADER_LIBRARIES := libomxcore_headers
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
-endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
endif
@@ -69,7 +66,6 @@
mm-g711-enc-test-inc := $(LOCAL_PATH)/inc
mm-g711-enc-test-inc += $(LOCAL_PATH)/test
-mm-g711-enc-test-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := mm-aenc-omxg711-test
LOCAL_MODULE_TAGS := optional
diff --git a/mm-audio/aenc-qcelp13/qdsp6/Android.mk b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
index 739ee82..c2c0897 100644
--- a/mm-audio/aenc-qcelp13/qdsp6/Android.mk
+++ b/mm-audio/aenc-qcelp13/qdsp6/Android.mk
@@ -25,7 +25,6 @@
include $(CLEAR_VARS)
libOmxQcelp13Enc-inc := $(LOCAL_PATH)/inc
-libOmxQcelp13Enc-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := libOmxQcelp13Enc
LOCAL_MODULE_TAGS := optional
@@ -48,11 +47,9 @@
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+LOCAL_HEADER_LIBRARIES := libomxcore_headers
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
-endif
-ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
- LOCAL_HEADER_LIBRARIES := audio_kernel_headers
+ LOCAL_HEADER_LIBRARIES += audio_kernel_headers
LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
endif
@@ -69,7 +66,6 @@
mm-qcelp13-enc-test-inc := $(LOCAL_PATH)/inc
mm-qcelp13-enc-test-inc += $(LOCAL_PATH)/test
-mm-qcelp13-enc-test-inc += $(TARGET_OUT_HEADERS)/mm-core/omxcore
LOCAL_MODULE := mm-aenc-omxqcelp13-test
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS := $(libOmxQcelp13Enc-def)
diff --git a/post_proc/Android.mk b/post_proc/Android.mk
index 76a42b1..008849b 100644
--- a/post_proc/Android.mk
+++ b/post_proc/Android.mk
@@ -78,11 +78,11 @@
LOCAL_C_INCLUDES := \
external/tinyalsa/include \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
+ $(call project-path-for,qcom-audio)/hal \
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
$(call include-path-for, audio-effects) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/audio_extn/
+ $(call project-path-for,qcom-audio)/hal/audio_extn/
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
LOCAL_HEADER_LIBRARIES += audio_kernel_headers
@@ -184,13 +184,13 @@
LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
LOCAL_C_INCLUDES := \
- vendor/qcom/opensource/audio-hal/primary-hal/hal \
+ $(call project-path-for,qcom-audio)/hal \
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include \
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include \
external/tinyalsa/include \
$(call include-path-for, audio-effects) \
$(call include-path-for, audio-route) \
- vendor/qcom/opensource/audio-hal/primary-hal/hal/audio_extn \
+ $(call project-path-for,qcom-audio)/hal/audio_extn \
external/tinycompress/include \
system/media/audio_utils/include
diff --git a/post_proc/bass_boost.c b/post_proc/bass_boost.c
index 1ce1c21..132fe08 100644
--- a/post_proc/bass_boost.c
+++ b/post_proc/bass_boost.c
@@ -203,6 +203,7 @@
ALOGV("%s: set PBE mode, device: %x", __func__, device);
} else if (device == AUDIO_DEVICE_OUT_WIRED_HEADSET ||
device == AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
+ device == AUDIO_DEVICE_OUT_USB_HEADSET ||
device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP ||
device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES) {
ALOGV("%s: set BB mode, device: %x", __func__, device);
@@ -346,6 +347,7 @@
bass_ctxt->device = device;
if (device == AUDIO_DEVICE_OUT_WIRED_HEADSET ||
device == AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
+ device == AUDIO_DEVICE_OUT_USB_HEADSET ||
device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP ||
device == AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES) {
if (bass_ctxt->temp_disabled) {
diff --git a/qahw/Android.mk b/qahw/Android.mk
index a64b913..d4bfd20 100644
--- a/qahw/Android.mk
+++ b/qahw/Android.mk
@@ -5,11 +5,9 @@
include $(CLEAR_VARS)
-libqahw-inc := $(LOCAL_PATH)/inc
-
LOCAL_MODULE := libqahwwrapper
LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := $(libqahw-inc)
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc
LOCAL_SRC_FILES := \
src/qahw.c \
@@ -23,19 +21,17 @@
LOCAL_CFLAGS += -Wall -Werror
-LOCAL_COPY_HEADERS_TO := mm-audio/qahw/inc
-LOCAL_COPY_HEADERS := inc/qahw.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_api.h
-
LOCAL_PRELINK_MODULE := false
LOCAL_VENDOR_MODULE := true
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_COPY_HEADERS_TO := mm-audio/qahw_api/inc
-LOCAL_COPY_HEADERS := inc/qahw_defs.h
-include $(BUILD_COPY_HEADERS)
+LOCAL_MODULE := libqahw_headers
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/inc
+LOCAL_PROPRIETARY_MODULE := true
+
+include $(BUILD_HEADER_LIBRARY)
endif
endif
diff --git a/qahw_api/Android.mk b/qahw_api/Android.mk
index 1cad75d..e1538ef 100644
--- a/qahw_api/Android.mk
+++ b/qahw_api/Android.mk
@@ -4,12 +4,9 @@
include $(CLEAR_VARS)
-libqahwapi-inc := $(LOCAL_PATH)/inc
-
LOCAL_MODULE := libqahw
LOCAL_MODULE_TAGS := optional
-LOCAL_C_INCLUDES := $(libqahwapi-inc)
-LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/qahw/inc
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc
LOCAL_SRC_FILES := \
src/qahw_api.cpp
@@ -20,6 +17,9 @@
LOCAL_STATIC_LIBRARIES += libprofile_rt
endif
+LOCAL_HEADER_LIBRARIES := \
+ libqahw_headers
+
LOCAL_SHARED_LIBRARIES := \
liblog \
libcutils \
@@ -29,21 +29,19 @@
LOCAL_CFLAGS += -Wall -Werror
-LOCAL_COPY_HEADERS_TO := mm-audio/qahw_api/inc
-LOCAL_COPY_HEADERS := inc/qahw_api.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_audiosphere.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_bassboost.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_environmentalreverb.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_equalizer.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_presetreverb.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_virtualizer.h
-LOCAL_COPY_HEADERS += inc/qahw_effect_visualizer.h
-
LOCAL_PRELINK_MODULE := false
LOCAL_VENDOR_MODULE := true
include $(BUILD_SHARED_LIBRARY)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libqahwapi_headers
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/inc
+LOCAL_PROPRIETARY_MODULE := true
+
+include $(BUILD_HEADER_LIBRARY)
+
#test app compilation
include $(LOCAL_PATH)/test/Android.mk
diff --git a/qahw_api/test/Android.mk b/qahw_api/test/Android.mk
index cca72f8..bd2f69d 100644
--- a/qahw_api/test/Android.mk
+++ b/qahw_api/test/Android.mk
@@ -7,12 +7,14 @@
qahw_effect_test.c
LOCAL_MODULE := hal_play_test
-hal-play-inc = $(TARGET_OUT_HEADERS)/mm-audio/qahw_api/inc
-hal-play-inc += $(TARGET_OUT_HEADERS)/mm-audio/qahw/inc
hal-play-inc += external/tinyalsa/include
LOCAL_CFLAGS += -Wall -Werror -Wno-sign-compare
+LOCAL_HEADER_LIBRARIES := \
+ libqahw_headers \
+ libqahwapi_headers
+
LOCAL_SHARED_LIBRARIES := \
libaudioutils\
libqahw \
@@ -39,6 +41,10 @@
LOCAL_SRC_FILES := qahw_multi_record_test.c
LOCAL_MODULE := hal_rec_test
LOCAL_CFLAGS += -Wall -Werror -Wno-sign-compare
+
+LOCAL_HEADER_LIBRARIES := \
+ libqahwapi_headers
+
LOCAL_SHARED_LIBRARIES := \
libaudioutils \
libqahw \
@@ -46,9 +52,6 @@
LOCAL_32_BIT_ONLY := true
-hal-rec-inc = $(TARGET_OUT_HEADERS)/mm-audio/qahw_api/inc
-
-LOCAL_C_INCLUDES += $(hal-rec-inc)
LOCAL_VENDOR_MODULE := true
include $(BUILD_EXECUTABLE)