hal: Add matrix limiter support

Matrix limiter is used to prevent saturation
when mixing multiple audio streams. It is
enabled when both the BD output flag is set
and the property audio.matrix.limiter.enable
is set to true.

Change-Id: Ibf06bd2444874ae555e98a26ed645f2455a3e1a3
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 5707742..a1b1344 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -103,6 +103,10 @@
 #define AUDIO_OUTPUT_FLAG_TIMESTAMP 0x10000
 #endif
 
+#ifndef AUDIO_OUTPUT_FLAG_BD10
+#define AUDIO_OUTPUT_FLAG_BD10 0x20000
+#endif
+
 #ifndef AUDIO_OUTPUT_FLAG_INTERACTIVE
 #define AUDIO_OUTPUT_FLAG_INTERACTIVE 0x40000
 #endif
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 48d20ee..8c4f313 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -126,6 +126,7 @@
     STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH),
     STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_TIMESTAMP),
     STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_VOIP_RX),
+    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_BD),
     STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_INTERACTIVE),
     STRING_TO_ENUM(AUDIO_INPUT_FLAG_NONE),
     STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST),
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 6029c4a..5cfc3f8 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -4998,6 +4998,10 @@
     out->a2dp_compress_mute = false;
     out->dynamic_pm_qos_enabled = 0;
 
+    if ((flags & AUDIO_OUTPUT_FLAG_BD10) &&
+        (property_get_bool("audio.matrix.limiter.enable", false)))
+        platform_set_device_params(out, DEVICE_PARAM_LIMITER_ID, 1);
+
     if (out->devices & AUDIO_DEVICE_OUT_AUX_DIGITAL &&
         (flags & AUDIO_OUTPUT_FLAG_DIRECT)) {
         pthread_mutex_lock(&adev->lock);
diff --git a/hal/msm8916/platform.h b/hal/msm8916/platform.h
index b0433b0..a53a38f 100644
--- a/hal/msm8916/platform.h
+++ b/hal/msm8916/platform.h
@@ -428,6 +428,7 @@
  */
 #define DEVICE_PARAM_MUTE_ID    0
 #define DEVICE_PARAM_LATENCY_ID 1
+#define DEVICE_PARAM_LIMITER_ID 2
 
 #define ENUM_TO_STRING(X) #X
 
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index 340d1cb..a15c399 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -546,6 +546,7 @@
  */
 #define DEVICE_PARAM_MUTE_ID    0
 #define DEVICE_PARAM_LATENCY_ID 1
+#define DEVICE_PARAM_LIMITER_ID 2
 
 #define ENUM_TO_STRING(X) #X