hal: add changes to support RAS
Receiver Aided Stereo(RAS) is a feature to support stereo
playback over receiver and speaker. Add new RAS property
and device to support this feature.
Change-Id: I8cd62a352b2847d6068285ea84e2d8f85e931619
diff --git a/configs/msm8998/msm8998.mk b/configs/msm8998/msm8998.mk
index 6a03696..88abb3a 100644
--- a/configs/msm8998/msm8998.mk
+++ b/configs/msm8998/msm8998.mk
@@ -56,6 +56,7 @@
AUDIO_FEATURE_ENABLED_SOURCE_TRACKING := true
AUDIO_FEATURE_ENABLED_GEF_SUPPORT := true
BOARD_SUPPORTS_QAHW := true
+AUDIO_FEATURE_ENABLED_RAS := true
##AUDIO_FEATURE_FLAGS
#Audio Specific device overlays
@@ -130,6 +131,10 @@
PRODUCT_PROPERTY_OVERRIDES += \
tunnel.audio.encode=false
+#Disable RAS Feature by default
+PRODUCT_PROPERTY_OVERRIDES += \
+persist.audio.ras.enabled=false
+
#Buffer size in kbytes for compress offload playback
PRODUCT_PROPERTY_OVERRIDES += \
audio.offload.buffer.size.kb=32
diff --git a/hal/Android.mk b/hal/Android.mk
index 0ab0b9e..4b41346 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -79,6 +79,10 @@
LOCAL_CFLAGS += -DHIFI_AUDIO_ENABLED
endif
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_RAS)),true)
+ LOCAL_CFLAGS += -DRAS_ENABLED
+endif
+
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_VBAT_MONITOR)),true)
LOCAL_CFLAGS += -DVBAT_MONITOR_ENABLED
endif
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index d50bea5..f159083 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -65,6 +65,7 @@
bool hpx_enabled;
bool vbat_enabled;
bool hifi_audio_enabled;
+ bool ras_enabled;
};
static struct audio_extn_module aextnmod;
@@ -381,6 +382,23 @@
}
#endif
+#ifdef RAS_ENABLED
+bool audio_extn_is_ras_enabled(void)
+{
+ ALOGD("%s: status: %d", __func__, aextnmod.ras_enabled);
+ return (aextnmod.ras_enabled ? true: false);
+}
+
+bool audio_extn_can_use_ras(void)
+{
+ if (property_get_bool("persist.audio.ras.enabled", false))
+ aextnmod.ras_enabled = 1;
+
+ ALOGD("%s: ras.enabled property is set to %d", __func__, aextnmod.ras_enabled);
+ return (aextnmod.ras_enabled ? true: false);
+}
+#endif
+
#ifndef ANC_HEADSET_ENABLED
#define audio_extn_set_anc_parameters(adev, parms) (0)
#else
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 77e03ca..6526f4f 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -135,6 +135,14 @@
bool audio_extn_can_use_vbat(void);
#endif
+#ifndef RAS_ENABLED
+#define audio_extn_is_ras_enabled() (0)
+#define audio_extn_can_use_ras() (0)
+#else
+bool audio_extn_is_ras_enabled(void);
+bool audio_extn_can_use_ras(void);
+#endif
+
#ifndef HIFI_AUDIO_ENABLED
#define audio_extn_is_hifi_audio_enabled() (0)
#define audio_extn_is_hifi_audio_supported() (0)
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 80f869c..74c429b 100755
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -401,6 +401,8 @@
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT] = "speaker-protected-vbat",
[SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT] = "voice-speaker-protected-vbat",
[SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT] = "voice-speaker-2-protected-vbat",
+ [SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = "speaker-protected",
+ [SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = "speaker-protected-vbat",
/* Capture sound devices */
[SND_DEVICE_IN_HANDSET_MIC] = "handset-mic",
@@ -528,7 +530,8 @@
[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT] = 124,
[SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT] = 101,
[SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT] = 101,
-
+ [SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS] = 134,
+ [SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS] = 134,
[SND_DEVICE_IN_HANDSET_MIC] = 4,
[SND_DEVICE_IN_HANDSET_MIC_EXTERNAL] = 4,
[SND_DEVICE_IN_HANDSET_MIC_AEC] = 106,
@@ -656,6 +659,8 @@
{TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_PROTECTED_VBAT)},
{TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER_2_PROTECTED_VBAT)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS)},
+ {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_EXTERNAL)},
{TO_NAME_INDEX(SND_DEVICE_IN_HANDSET_MIC_AEC)},
@@ -1765,6 +1770,17 @@
else
platform_info_init(PLATFORM_INFO_XML_PATH, my_data);
+ if (audio_extn_can_use_ras()) {
+ if (property_get_bool("persist.speaker.prot.enable", false)) {
+ platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED,
+ acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS]);
+ platform_set_snd_device_acdb_id(SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT,
+ acdb_device_table[SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS]);
+ } else {
+ ALOGD("%s: RAS Feature should be enabled with Speaker Protection", __func__);
+ }
+ }
+
/* If platform is apq8084 and baseband is MDM, load CSD Client specific
* symbols. Voice call is handled by MDM and apps processor talks to
* MDM through CSD Client
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 4279060..731d81c 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -130,6 +130,8 @@
SND_DEVICE_OUT_SPEAKER_WSA,
SND_DEVICE_OUT_VOICE_SPEAKER_WSA,
SND_DEVICE_OUT_VOICE_SPEAKER_2_WSA,
+ SND_DEVICE_OUT_SPEAKER_PROTECTED_RAS,
+ SND_DEVICE_OUT_SPEAKER_PROTECTED_VBAT_RAS,
SND_DEVICE_OUT_END,
/*