hal: audio_extn: Add support to control AANC noise level

Add support to control AANC(Adaptive Active Noise Cancellation) noise
level from user interface.

Change-Id: Ib7dfe94e95e098e02da13eeeeeca9e3b30d68c46
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 28aa23a..5b388a8 100755
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -80,6 +80,7 @@
 
 static struct audio_extn_module aextnmod;
 
+#define AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL "aanc_noise_level"
 #define AUDIO_PARAMETER_KEY_ANC        "anc_enabled"
 #define AUDIO_PARAMETER_KEY_WFD        "wfd_channel_cap"
 #define AUDIO_PARAMETER_CAN_OPEN_PROXY "can_open_proxy"
@@ -467,6 +468,26 @@
   return false;
 }
 
+void audio_extn_set_aanc_noise_level(struct audio_device *adev,
+                                     struct str_parms *parms)
+{
+    int ret;
+    char value[32] = {0};
+    struct mixer_ctl *ctl = NULL;
+    const char *mixer_ctl_name = "AANC Noise Level";
+
+    ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL, value,
+                            sizeof(value));
+    if (ret >= 0) {
+        ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name);
+        if (ctl)
+            mixer_ctl_set_value(ctl, 0, atoi(value));
+        else
+            ALOGW("%s: Not able to get mixer ctl: %s",
+                  __func__, mixer_ctl_name);
+    }
+}
+
 void audio_extn_set_anc_parameters(struct audio_device *adev,
                                    struct str_parms *parms)
 {
@@ -816,6 +837,7 @@
 void audio_extn_set_parameters(struct audio_device *adev,
                                struct str_parms *parms)
 {
+   audio_extn_set_aanc_noise_level(adev, parms);
    audio_extn_set_anc_parameters(adev, parms);
    audio_extn_set_fluence_parameters(adev, parms);
    audio_extn_set_afe_proxy_parameters(adev, parms);