Merge "hal: Add Makefile and configure file for hal" into audio-userspace.lnx.2.1-dev
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..05ef119
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = hal
+ACLOCAL_AMFLAGS = -I m4
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..2968f4b
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,83 @@
+# -*- Autoconf -*-
+# configure.ac -- Autoconf script for halinterface
+#
+
+# Process this file with autoconf to produce a configure script.
+
+# Requires autoconf tool later than 2.61
+AC_PREREQ([2.69])
+# Initialize the hal-interface package version 1.0.0
+AC_INIT(halinterface,1.0.0)
+# Does not strictly follow GNU Coding standards
+AM_INIT_AUTOMAKE([foreign])
+# Disables auto rebuilding of configure, Makefile.ins
+#AM_MAINTAINER_MODE
+# defines some macros variable to be included by source
+AC_CONFIG_HEADERS([config.h])
+# defines some macros variable to be included by source
+AC_CONFIG_MACRO_DIR([m4])
+
+# Checks for programs.
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_CXX
+AC_PROG_LIBTOOL
+AC_PROG_AWK
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+PKG_PROG_PKG_CONFIG
+
+PKG_CHECK_MODULES([AUDIOROUTE], [audio_route])
+AC_SUBST([AUDIOROUTE_CFLAGS])
+
+AC_ARG_WITH(sanitized-headers,
+ AS_HELP_STRING([--with-sanitized-headers=DIR],
+ [Specify the location of the sanitized Linux headers]),
+ [CPPFLAGS="$CPPFLAGS -idirafter $withval"])
+
+
+AC_ARG_WITH([glib],
+ AC_HELP_STRING([--with-glib],
+ [enable glib, Build against glib. Use this when building for HLOS systems which use glib]))
+
+if (test "x${with_glib}" = "xyes"); then
+ PKG_CHECK_MODULES(GTHREAD, gthread-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GThread >= 2.16 is required))
+ PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, dummy=yes,
+ AC_MSG_ERROR(GLib >= 2.16 is required))
+ GLIB_CFLAGS="$GLIB_CFLAGS $GTHREAD_CFLAGS"
+ GLIB_LIBS="$GLIB_LIBS $GTHREAD_LIBS"
+
+ AC_SUBST(GLIB_CFLAGS)
+ AC_SUBST(GLIB_LIBS)
+fi
+
+AM_CONDITIONAL(USE_GLIB, test "x${with_glib}" = "xyes")
+
+AM_CONDITIONAL([HDMI_EDID], [test x$AUDIO_FEATURE_ENABLED_HDMI_EDID = xtrue])
+AM_CONDITIONAL([FM_POWER_OPT], [test x$AUDIO_FEATURE_ENABLED_FM_POWER_OPT = xtrue])
+AM_CONDITIONAL([USBAUDIO], [test x$AUDIO_FEATURE_ENABLED_USBAUDIO = xtrue])
+AM_CONDITIONAL([HFP], [test x$AUDIO_FEATURE_ENABLED_HFP = xtrue])
+AM_CONDITIONAL([SSR], [test x$AUDIO_FEATURE_ENABLED_SSR = xtrue])
+AM_CONDITIONAL([MULTI_VOICE_SESSIONS], [test x$AUDIO_FEATURE_ENABLED_MULTI_VOICE_SESSIONS = xtrue])
+AM_CONDITIONAL([COMPRESS_VOIP], [test x$AUDIO_FEATURE_ENABLED_COMPRESS_VOIP = xtrue])
+AM_CONDITIONAL([SPKR_PROTECTION], [test x$AUDIO_FEATURE_ENABLED_SPKR_PROTECTION = xtrue])
+AM_CONDITIONAL([HW_VARIANTS], [test x$MULTIPLE_HW_VARIANTS_ENABLED = xtrue])
+AM_CONDITIONAL([COMPRESS_CAPTURE], [test x$AUDIO_FEATURE_ENABLED_COMPRESS_CAPTURE = xtrue])
+AM_CONDITIONAL([DTS_EAGLE], [test x$AUDIO_FEATURE_ENABLED_DTS_EAGLE = xtrue])
+AM_CONDITIONAL([DOLBY_DDP], [test x$DOLBY_DDP = xtrue])
+AM_CONDITIONAL([DS1_DOLBY_DAP], [test x$DS1_DOLBY_DAP = xtrue])
+AM_CONDITIONAL([DEV_ARBI], [test x$AUDIO_FEATURE_ENABLED_DEV_ARBI = xtrue])
+AM_CONDITIONAL([SOURCE_TRACKING], [test x$AUDIO_FEATURE_ENABLED_SOURCE_TRACKING = xtrue])
+AM_CONDITIONAL([LISTEN], [test x$AUDIO_FEATURE_ENABLED_LISTEN = xtrue])
+AM_CONDITIONAL([SOUND_TRIGGER], [test x$BOARD_SUPPORTS_SOUND_TRIGGER = xtrue])
+AM_CONDITIONAL([PM_SUPPORT], [test x$AUDIO_FEATURE_ENABLED_PM_SUPPORT = xtrue])
+
+AC_CONFIG_FILES([ \
+ Makefile \
+ hal/Makefile \
+ ])
+
+AC_OUTPUT
diff --git a/hal/Makefile.am b/hal/Makefile.am
new file mode 100644
index 0000000..516770a
--- /dev/null
+++ b/hal/Makefile.am
@@ -0,0 +1,123 @@
+AM_CFLAGS = -I ${WORKSPACE}/external/tinyalsa/include \
+ -I ${WORKSPACE}/system/media/audio_effects/include \
+ -I ${WORKSPACE}/system/media/audio_utils/include \
+ -I $(top_srcdir)/hal \
+ -I $(top_srcdir)/hal/audio_extn \
+ -I $(top_srcdir)/hal/voice_extn \
+ -I $(top_srcdir)/hal/msm8916
+
+c_sources = audio_hw.c \
+ voice.c \
+ platform_info.c \
+ msm8916/platform.c \
+ audio_extn/audio_extn.c \
+ audio_extn/utils.c
+
+if HDMI_EDID
+AM_CFLAGS += -DHDMI_EDID
+c_sources += edid.c
+endif
+
+if FM_POWER_OPT
+AM_CFLAGS += -DFM_POWER_OPT
+c_sources += audio_extn/fm.c
+endif
+
+if USBAUDIO
+AM_CFLAGS += -DUSB_HEADSET_ENABLED
+c_sources += audio_extn/usb.c
+endif
+
+if HFP
+AM_CFLAGS += -DHFP_ENABLED
+c_sources += audio_extn/hfp.c
+endif
+
+if SSR
+AM_CFLAGS += -DSSR_ENABLED
+c_sources += audio_extn/ssr.c
+AM_CFLAGS += -I ${WORKSPACE}/audio/mm-audio-noship/surround_sound_3mic/libsurround_3mic_proc/surround_rec_interface/inc/
+endif
+
+if MULTI_VOICE_SESSIONS
+AM_CFLAGS += -DMULTI_VOICE_SESSION_ENABLED
+c_sources += voice_extn/voice_extn.c
+endif
+
+if COMPRESS_VOIP
+AM_CFLAGS += -DCOMPRESS_VOIP_ENABLED
+c_sources += voice_extn/compress_voip.c
+endif
+
+if SPKR_PROTECTION
+AM_CFLAGS += -DSPKR_PROT_ENABLED
+c_sources += audio_extn/spkr_protection.c
+endif
+
+if HW_VARIANTS
+AM_CFLAGS += -DHW_VARIANTS_ENABLED
+c_sources += msm8916/hw_info.c
+endif
+
+if COMPRESS_CAPTURE
+AM_CFLAGS += -DCOMPRESS_CAPTURE_ENABLED
+c_sources += audio_extn/compress_capture.c
+endif
+
+if DTS_EAGLE
+AM_CFLAGS += -DDTS_EAGLE
+c_sources += audio_extn/dts_eagle.c
+endif
+
+if DOLBY_DDP
+AM_CFLAGS += -DDS1_DOLBY_DDP_ENABLED
+c_sources += audio_extn/dolby.c
+endif
+
+if DS1_DOLBY_DAP
+AM_CFLAGS += -DDS1_DOLBY_DAP_ENABLED
+if DOLBY_DDP
+c_sources += audio_extn/dolby.c
+endif
+endif
+
+if DEV_ARBI
+AM_CFLAGS += -DDEV_ARBI_ENABLED
+c_sources += audio_extn/dev_arbi.c
+endif
+
+if SOURCE_TRACKING
+AM_CFLAGS += -DSOURCE_TRACKING_ENABLED
+c_sources += audio_extn/source_track.c
+endif
+
+if LISTEN
+AM_CFLAGS += -DAUDIO_LISTEN_ENABLED
+AM_CFLAGS += -I ${WORKSPACE}/audio/mm-audio-noship/audio-listen
+c_sources += audio_extn/listen.c
+endif
+
+if SOUND_TRIGGER
+AM_CFLAGS += -DSOUND_TRIGGER_ENABLED
+AM_CFLAGS += -I ${WORKSPACE}/audio/mm-audio/sound_trigger/
+c_sources += audio_extn/soundtrigger.c
+endif
+
+h_sources = audio_extn/audio_defs.h \
+ audio_extn/audio_extn.h \
+ audio_hw.h \
+ voice.h
+
+library_include_HEADERS = $(h_sources)
+library_includedir = $(includedir)
+
+lib_LTLIBRARIES = audio_primary_default.la
+audio_primary_default_la_SOURCES = $(c_sources)
+audio_primary_default_la_LIBADD = $(GLIB_LIBS) -llog -lcutils -ltinyalsa
+audio_primary_default_la_LIBADD += -ltinycompress -laudioroute -ldl -lexpat -laudioutils
+audio_primary_default_la_CFLAGS = $(AM_CFLAGS) $(GLIB_CFLAGS)
+audio_primary_default_la_CFLAGS += -Dstrlcat=g_strlcat
+audio_primary_default_la_CFLAGS += -DINT_MAX=0x7fffffff
+audio_primary_default_la_CFLAGS += -D__unused=__attribute__\(\(__unused__\)\)
+audio_primary_default_la_CFLAGS += -DLINUX_ENABLED
+audio_primary_default_la_LDFLAGS = -module -shared -avoid-version
diff --git a/hal/audio_extn/soundtrigger.c b/hal/audio_extn/soundtrigger.c
index 6142e86..70f6d06 100644
--- a/hal/audio_extn/soundtrigger.c
+++ b/hal/audio_extn/soundtrigger.c
@@ -43,6 +43,7 @@
#define XSTR(x) STR(x)
#define STR(x) #x
+#define MAX_LIBRARY_PATH 100
struct sound_trigger_info {
struct sound_trigger_session_info st_ses;
@@ -60,6 +61,21 @@
static struct sound_trigger_audio_device *st_dev;
+#if LINUX_ENABLED
+static void get_library_path(char *lib_path)
+{
+ snprintf(lib_path, MAX_LIBRARY_PATH,
+ "/usr/lib/sound_trigger.primary.default.so");
+}
+#else
+static void get_library_path(char *lib_path)
+{
+ snprintf(lib_path, MAX_LIBRARY_PATH,
+ "/system/vendor/lib/hw/sound_trigger.primary.%s.so",
+ XSTR(SOUND_TRIGGER_PLATFORM_NAME));
+}
+#endif
+
static struct sound_trigger_info *
get_sound_trigger_info(int capture_handle)
{
@@ -349,10 +365,7 @@
return -ENOMEM;
}
- snprintf(sound_trigger_lib, sizeof(sound_trigger_lib),
- "/system/vendor/lib/hw/sound_trigger.primary.%s.so",
- XSTR(SOUND_TRIGGER_PLATFORM_NAME));
-
+ get_library_path(sound_trigger_lib);
st_dev->lib_handle = dlopen(sound_trigger_lib, RTLD_NOW);
if (st_dev->lib_handle == NULL) {
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index eb3213c..90b39b5 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -41,7 +41,11 @@
#endif
#endif
+#ifdef LINUX_ENABLED
+#define AUDIO_OUTPUT_POLICY_VENDOR_CONFIG_FILE "/etc/audio_output_policy.conf"
+#else
#define AUDIO_OUTPUT_POLICY_VENDOR_CONFIG_FILE "/vendor/etc/audio_output_policy.conf"
+#endif
#define OUTPUTS_TAG "outputs"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index bf2908f..bd393f2 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -3625,7 +3625,8 @@
if (bytes % 4 == 0) {
/* data from DSP comes in 24_8 format, convert it to 8_24 */
int_buf_stream = buffer;
- for (size_t itt=0; itt < bytes/4 ; itt++) {
+ size_t itt = 0;
+ for (itt = 0; itt < bytes/4 ; itt++) {
int_buf_stream[itt] >>= 8;
}
} else {
diff --git a/hal/msm8916/hw_info.c b/hal/msm8916/hw_info.c
index 28b2397..ea3ff09 100644
--- a/hal/msm8916/hw_info.c
+++ b/hal/msm8916/hw_info.c
@@ -303,6 +303,18 @@
hw_info->snd_devices = NULL;
hw_info->num_snd_devices = 0;
strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
+ } else if (!strcmp(snd_card_name, "apq8009-tashalite-snd-card")) {
+ strlcpy(hw_info->type, "", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "apq8009", sizeof(hw_info->name));
+ hw_info->snd_devices = NULL;
+ hw_info->num_snd_devices = 0;
+ strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
+ } else if (!strcmp(snd_card_name, "mdm9607-tomtom-i2s-snd-card")) {
+ strlcpy(hw_info->type, "", sizeof(hw_info->type));
+ strlcpy(hw_info->name, "mdm9607", sizeof(hw_info->name));
+ hw_info->snd_devices = NULL;
+ hw_info->num_snd_devices = 0;
+ strlcpy(hw_info->dev_extn, "", sizeof(hw_info->dev_extn));
} else {
ALOGW("%s: Not an 8x16/8909/8917/8920/8937/8939/8940/8952/8953/falcon device", __func__);
}
@@ -325,7 +337,8 @@
strstr(snd_card_name, "msm8976") || strstr(snd_card_name, "msm8953") ||
strstr(snd_card_name, "msm8937") || strstr(snd_card_name, "msm8917") ||
strstr(snd_card_name, "msm8940") || strstr(snd_card_name, "msm8920") ||
- strstr(snd_card_name, "msmfalcon")) {
+ strstr(snd_card_name, "msmfalcon") || strstr(snd_card_name, "apq8009") ||
+ strstr(snd_card_name, "mdm9607")) {
ALOGV("8x16 - variant soundcard");
update_hardware_info_8x16(hw_info, snd_card_name);
} else {
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 9416887..012638c 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -39,10 +39,6 @@
#include <dirent.h>
#define SOUND_TRIGGER_DEVICE_HANDSET_MONO_LOW_POWER_ACDB_ID (100)
#define MAX_MIXER_XML_PATH 100
-#define MIXER_XML_PATH "/system/etc/mixer_paths.xml"
-#define MIXER_XML_PATH_MTP "/system/etc/mixer_paths_mtp.xml"
-#define MIXER_XML_PATH_SBC "/system/etc/mixer_paths_sbc.xml"
-#define MIXER_XML_PATH_MSM8909_PM8916 "/system/etc/mixer_paths_msm8909_pm8916.xml"
#define MIXER_XML_PATH_QRD_SKUH "/system/etc/mixer_paths_qrd_skuh.xml"
#define MIXER_XML_PATH_QRD_SKUI "/system/etc/mixer_paths_qrd_skui.xml"
#define MIXER_XML_PATH_QRD_SKUHF "/system/etc/mixer_paths_qrd_skuhf.xml"
@@ -53,7 +49,6 @@
#define MIXER_XML_PATH_SKUL "/system/etc/mixer_paths_skul.xml"
#define MIXER_XML_PATH_SKUM "/system/etc/mixer_paths_qrd_skum.xml"
#define MIXER_XML_PATH_SKU1 "/system/etc/mixer_paths_qrd_sku1.xml"
-#define MIXER_XML_PATH_SKU2 "/system/etc/mixer_paths_qrd_sku2.xml"
#define MIXER_XML_PATH_SKUN_CAJON "/system/etc/mixer_paths_qrd_skun_cajon.xml"
#define MIXER_XML_PATH_SKU3 "/system/etc/mixer_paths_qrd_sku3.xml"
#define MIXER_XML_PATH_AUXPCM "/system/etc/mixer_paths_auxpcm.xml"
@@ -62,10 +57,30 @@
#define MIXER_XML_PATH_WCD9306 "/system/etc/mixer_paths_wcd9306.xml"
#define MIXER_XML_PATH_WCD9330 "/system/etc/mixer_paths_wcd9330.xml"
#define MIXER_XML_PATH_WCD9335 "/system/etc/mixer_paths_wcd9335.xml"
-#define MIXER_XML_PATH_WCD9326 "/system/etc/mixer_paths_wcd9326.xml"
-#define MIXER_XML_PATH_SKUN "/system/etc/mixer_paths_qrd_skun.xml"
-#define PLATFORM_INFO_XML_PATH "/system/etc/audio_platform_info.xml"
+#ifdef LINUX_ENABLED
+#define MIXER_XML_PATH "/etc/mixer_paths.xml"
+#define MIXER_XML_PATH_MSM8909_PM8916 "/etc/mixer_paths_msm8909_pm8916.xml"
+#define MIXER_XML_PATH_MTP "/etc/mixer_paths_mtp.xml"
+#define MIXER_XML_PATH_SKU2 "/etc/mixer_paths_qrd_sku2.xml"
+#define MIXER_XML_PATH_WCD9326 "/etc/mixer_paths_wcd9326.xml"
+#define PLATFORM_INFO_XML_PATH_EXTCODEC "/etc/audio_platform_info_extcodec.xml"
+#define PLATFORM_INFO_XML_PATH "/etc/audio_platform_info.xml"
+#define MIXER_XML_PATH_WCD9326_I2S "/etc/mixer_paths_wcd9326_i2s.xml"
+#define MIXER_XML_PATH_WCD9330_I2S "/etc/mixer_paths_wcd9330_i2s.xml"
+#define MIXER_XML_PATH_SBC "/etc/mixer_paths_sbc.xml"
+#else
+#define MIXER_XML_PATH "/system/etc/mixer_paths.xml"
+#define MIXER_XML_PATH_MSM8909_PM8916 "/system/etc/mixer_paths_msm8909_pm8916.xml"
+#define MIXER_XML_PATH_MTP "/system/etc/mixer_paths_mtp.xml"
+#define MIXER_XML_PATH_SKU2 "/system/etc/mixer_paths_qrd_sku2.xml"
#define PLATFORM_INFO_XML_PATH_EXTCODEC "/system/etc/audio_platform_info_extcodec.xml"
+#define MIXER_XML_PATH_WCD9326 "/system/etc/mixer_paths_wcd9326.xml"
+#define PLATFORM_INFO_XML_PATH "/system/etc/audio_platform_info.xml"
+#define MIXER_XML_PATH_WCD9326_I2S "/system/etc/mixer_paths_wcd9326_i2s.xml"
+#define MIXER_XML_PATH_WCD9330_I2S "/system/etc/mixer_paths_wcd9330_i2s.xml"
+#define MIXER_XML_PATH_SBC "/system/etc/mixer_paths_sbc.xml"
+#endif
+#define MIXER_XML_PATH_SKUN "/system/etc/mixer_paths_qrd_skun.xml"
#define LIB_ACDB_LOADER "libacdbloader.so"
#define CVD_VERSION_MIXER_CTL "CVD Version"
@@ -850,7 +865,11 @@
!strncmp(snd_card_name, "msm8953-tashalite-snd-card",
sizeof("msm8953-tashalite-snd-card")) ||
!strncmp(snd_card_name, "msmfalcon-tasha-snd-card",
- sizeof("msmfalcon-tasha-snd-card")))
+ sizeof("msmfalcon-tasha-snd-card")) ||
+ !strncmp(snd_card_name, "apq8009-tashalite-snd-card",
+ sizeof("apq8009-tashalite-snd-card")) ||
+ !strncmp(snd_card_name, "mdm9607-tomtom-i2s-snd-card",
+ sizeof("mdm9607-tomtom-i2s-snd-card")))
{
ALOGI("%s: snd_card_name: %s",__func__,snd_card_name);
is_external_codec = true;
@@ -1152,6 +1171,20 @@
msm_device_to_be_id = msm_device_to_be_id_internal_codec;
msm_be_id_array_len =
sizeof(msm_device_to_be_id_internal_codec) / sizeof(msm_device_to_be_id_internal_codec[0]);
+ } else if (!strncmp(snd_card_name, "apq8009-tashalite-snd-card",
+ sizeof("apq8009-tashalite-snd-card"))) {
+ strlcpy(mixer_xml_path, MIXER_XML_PATH_WCD9326_I2S,
+ MAX_MIXER_XML_PATH);
+ msm_device_to_be_id = msm_device_to_be_id_external_codec;
+ msm_be_id_array_len =
+ sizeof(msm_device_to_be_id_external_codec) / sizeof(msm_device_to_be_id_external_codec[0]);
+ } else if (!strncmp(snd_card_name, "mdm9607-tomtom-i2s-snd-card",
+ sizeof("mdm9607-tomtom-i2s-snd-card"))) {
+ strlcpy(mixer_xml_path, MIXER_XML_PATH_WCD9330_I2S,
+ sizeof(MIXER_XML_PATH_WCD9330_I2S));
+ msm_device_to_be_id = msm_device_to_be_id_external_codec;
+ msm_be_id_array_len =
+ sizeof(msm_device_to_be_id_external_codec) / sizeof(msm_device_to_be_id_external_codec[0]);
} else {
strlcpy(mixer_xml_path, MIXER_XML_PATH,
sizeof(MIXER_XML_PATH));