Merge "config: modify DMIC configs for sdm660 qrd skus" into audio-userspace.lnx.2.2-dev
diff --git a/configs/msm8937/msm8937.mk b/configs/msm8937/msm8937.mk
index fcdcb04..8bdd095 100644
--- a/configs/msm8937/msm8937.mk
+++ b/configs/msm8937/msm8937.mk
@@ -24,7 +24,7 @@
 AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
 AUDIO_FEATURE_ENABLED_SSR := true
 AUDIO_FEATURE_ENABLED_DTS_EAGLE := false
-BOARD_USES_SRS_TRUEMEDIA := true
+BOARD_USES_SRS_TRUEMEDIA := false
 DTS_CODEC_M_ := true
 MM_AUDIO_ENABLED_SAFX := true
 AUDIO_FEATURE_ENABLED_HW_ACCELERATED_EFFECTS := false
diff --git a/configs/msm8953/msm8953.mk b/configs/msm8953/msm8953.mk
index 16f248c..3980d7d 100644
--- a/configs/msm8953/msm8953.mk
+++ b/configs/msm8953/msm8953.mk
@@ -22,7 +22,7 @@
 AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
 AUDIO_FEATURE_ENABLED_SSR := true
 AUDIO_FEATURE_ENABLED_DTS_EAGLE := false
-BOARD_USES_SRS_TRUEMEDIA := true
+BOARD_USES_SRS_TRUEMEDIA := false
 DTS_CODEC_M_ := true
 #AUDIO_FEATURE_ENABLED_MULTIPLE_TUNNEL := true
 MM_AUDIO_ENABLED_SAFX := true
diff --git a/configs/msm8996/msm8996.mk b/configs/msm8996/msm8996.mk
index afc656f..0335f48 100644
--- a/configs/msm8996/msm8996.mk
+++ b/configs/msm8996/msm8996.mk
@@ -23,7 +23,7 @@
 AUDIO_FEATURE_ENABLED_PROXY_DEVICE := true
 AUDIO_FEATURE_ENABLED_SSR := true
 AUDIO_FEATURE_ENABLED_DTS_EAGLE := false
-BOARD_USES_SRS_TRUEMEDIA := true
+BOARD_USES_SRS_TRUEMEDIA := false
 DTS_CODEC_M_ := true
 MM_AUDIO_ENABLED_SAFX := true
 AUDIO_FEATURE_ENABLED_HW_ACCELERATED_EFFECTS := false
diff --git a/configs/sdm660/audio_platform_info.xml b/configs/sdm660/audio_platform_info.xml
index 5e61540..a68d8c2 100644
--- a/configs/sdm660/audio_platform_info.xml
+++ b/configs/sdm660/audio_platform_info.xml
@@ -31,8 +31,8 @@
     <interface_names>
         <device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="SLIMBUS_0" codec_type="external"/>
         <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="SLIMBUS_0" codec_type="external"/>
-        <device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="TERT_MI2S" codec_type="internal"/>
-        <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="TERT_MI2S" codec_type="internal"/>
+        <device name="AUDIO_DEVICE_IN_BUILTIN_MIC" interface="INT3_MI2S" codec_type="internal"/>
+        <device name="AUDIO_DEVICE_IN_BACK_MIC" interface="INT3_MI2S" codec_type="internal"/>
     </interface_names>
     <pcm_ids>
         <usecase name="USECASE_AUDIO_PLAYBACK_LOW_LATENCY" type="out" id="13"/>
diff --git a/configs/sdm660/mixer_paths.xml b/configs/sdm660/mixer_paths.xml
index d591ed5..c0c788e 100644
--- a/configs/sdm660/mixer_paths.xml
+++ b/configs/sdm660/mixer_paths.xml
@@ -1761,6 +1761,9 @@
         <ctl name="RX1 MIX1 INP1" value="RX1" />
         <ctl name="RX2 MIX1 INP1" value="RX2" />
         <ctl name="RDAC2 MUX" value="RX2" />
+        <ctl name="RX HPH Mode" value="HD2" />
+        <ctl name="COMP0 RX1" value="1" />
+        <ctl name="COMP0 RX2" value="1" />
         <ctl name="HPHL" value="Switch" />
         <ctl name="HPHR" value="Switch" />
     </path>
diff --git a/configs/sdm660/mixer_paths_mtp.xml b/configs/sdm660/mixer_paths_mtp.xml
index 2921857..307e557 100644
--- a/configs/sdm660/mixer_paths_mtp.xml
+++ b/configs/sdm660/mixer_paths_mtp.xml
@@ -1763,6 +1763,9 @@
         <ctl name="RX1 MIX1 INP1" value="RX1" />
         <ctl name="RX2 MIX1 INP1" value="RX2" />
         <ctl name="RDAC2 MUX" value="RX2" />
+        <ctl name="RX HPH Mode" value="HD2" />
+        <ctl name="COMP0 RX1" value="1" />
+        <ctl name="COMP0 RX2" value="1" />
         <ctl name="HPHL" value="Switch" />
         <ctl name="HPHR" value="Switch" />
     </path>
diff --git a/configs/sdm660/sound_trigger_platform_info.xml b/configs/sdm660/sound_trigger_platform_info.xml
index 80d62d9..271f99d 100644
--- a/configs/sdm660/sound_trigger_platform_info.xml
+++ b/configs/sdm660/sound_trigger_platform_info.xml
@@ -86,10 +86,10 @@
         </gcs_usecase>
         <!-- Module and param ids with which the algorithm is integrated
             in non-graphite firmware (note these must come after gcs params)
-            Extends flexibility to have different ids based on execution type.
-            valid execution_type values: "WDSP" "ADSP" -->
+            Extends flexibility to have different ids based on execution mode.
+            valid execution_mode values: "WDSP" "ADSP" -->
         <lsm_usecase>
-            <param execution_type="ADSP" />
+            <param execution_mode="ADSP" />
             <param load_sound_model_ids="0x00012C1C, 0x00012C14" />
             <param unload_sound_model_ids="0x00012C1C, 0x00012C15" />
             <param confidence_levels_ids="0x00012C1C, 0x00012C07" />
@@ -98,7 +98,7 @@
         </lsm_usecase>
 
         <lsm_usecase>
-            <param execution_type="WDSP" />
+            <param execution_mode="WDSP" />
             <param load_sound_model_ids="0x00012C0D, 0x00012C14" />
             <param unload_sound_model_ids="0x00012C0D, 0x00012C15" />
             <param confidence_levels_ids="0x00012C0D, 0x00012C07" />
diff --git a/hal/audio_extn/a2dp.c b/hal/audio_extn/a2dp.c
index 3dc00fb..40632bc 100644
--- a/hal/audio_extn/a2dp.c
+++ b/hal/audio_extn/a2dp.c
@@ -79,6 +79,7 @@
 typedef void (*clear_a2dpsuspend_flag_t)(void);
 typedef void * (*audio_get_codec_config_t)(uint8_t *multicast_status,uint8_t *num_dev,
                                audio_format_t *codec_type);
+typedef int (*audio_check_a2dp_ready_t)(void);
 
 enum A2DP_STATE {
     A2DP_STATE_CONNECTED,
@@ -102,6 +103,7 @@
     audio_handoff_triggered_t audio_handoff_triggered;
     clear_a2dpsuspend_flag_t clear_a2dpsuspend_flag;
     audio_get_codec_config_t audio_get_codec_config;
+    audio_check_a2dp_ready_t audio_check_a2dp_ready;
     enum A2DP_STATE bt_state;
     audio_format_t bt_encoder_format;
     uint32_t enc_sampling_rate;
@@ -244,6 +246,8 @@
                           dlsym(a2dp.bt_lib_handle, "audio_stop_stream");
             a2dp.audio_stream_close = (audio_stream_close_t)
                           dlsym(a2dp.bt_lib_handle, "audio_stream_close");
+            a2dp.audio_check_a2dp_ready = (audio_check_a2dp_ready_t)
+                        dlsym(a2dp.bt_lib_handle,"audio_check_a2dp_ready");
         }
     }
 
@@ -279,27 +283,17 @@
         ALOGE("a2dp handle is not identified, Ignoring close request");
         return -ENOSYS;
     }
-    if ((a2dp.bt_state == A2DP_STATE_CONNECTED) &&
-        (a2dp.bt_state == A2DP_STATE_STARTED) &&
-        (a2dp.bt_state == A2DP_STATE_STOPPED)) {
+    if (a2dp.bt_state != A2DP_STATE_DISCONNECTED) {
         ALOGD("calling BT stream close");
         if(a2dp.audio_stream_close() == false)
             ALOGE("failed close a2dp control path from BT library");
-        a2dp.a2dp_started = false;
-        a2dp.a2dp_total_active_session_request = 0;
-        a2dp.a2dp_suspended = false;
-        a2dp.bt_encoder_format = AUDIO_FORMAT_INVALID;
-        a2dp.enc_sampling_rate = 48000;
-        a2dp.bt_state = A2DP_STATE_DISCONNECTED;
-    } else {
-        ALOGD("close a2dp called in improper state");
-        a2dp.a2dp_started = false;
-        a2dp.a2dp_total_active_session_request = 0;
-        a2dp.a2dp_suspended = false;
-        a2dp.bt_encoder_format = AUDIO_FORMAT_INVALID;
-        a2dp.enc_sampling_rate = 48000;
-        a2dp.bt_state = A2DP_STATE_DISCONNECTED;
     }
+    a2dp.a2dp_started = false;
+    a2dp.a2dp_total_active_session_request = 0;
+    a2dp.a2dp_suspended = false;
+    a2dp.bt_encoder_format = AUDIO_FORMAT_INVALID;
+    a2dp.enc_sampling_rate = 48000;
+    a2dp.bt_state = A2DP_STATE_DISCONNECTED;
 
     return 0;
 }
@@ -631,7 +625,6 @@
         if (ret != 0 ) {
            ALOGE("BT controller start failed");
            a2dp.a2dp_started = false;
-           ret = -ETIMEDOUT;
         } else {
            if(configure_a2dp_encoder_format() == true) {
                 a2dp.a2dp_started = true;
@@ -692,7 +685,7 @@
         return -ENOSYS;
     }
 
-    if (a2dp.a2dp_started && (a2dp.a2dp_total_active_session_request > 0))
+    if (a2dp.a2dp_total_active_session_request > 0)
         a2dp.a2dp_total_active_session_request--;
 
     if ( a2dp.a2dp_started && !a2dp.a2dp_total_active_session_request) {
@@ -810,6 +803,17 @@
         *bit_width = 16;
     *sample_rate = a2dp.enc_sampling_rate;
 }
+
+bool audio_extn_a2dp_is_ready()
+{
+    bool ret = false;
+
+    if ((a2dp.is_a2dp_offload_supported) &&
+        (a2dp.audio_check_a2dp_ready))
+           ret = a2dp.audio_check_a2dp_ready();
+    return ret;
+}
+
 void audio_extn_a2dp_init (void *adev)
 {
   a2dp.adev = (struct audio_device*)adev;
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index c114d2d..93036af 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -206,7 +206,7 @@
 #define audio_extn_a2dp_set_handoff_mode(is_on)          (0)
 #define audio_extn_a2dp_get_apptype_params(sample_rate,bit_width)    (0)
 #define audio_extn_a2dp_get_encoder_latency()            (0)
-
+#define audio_extn_a2dp_is_ready()                       (0)
 #else
 void audio_extn_a2dp_init(void *adev);
 int audio_extn_a2dp_start_playback();
@@ -217,7 +217,7 @@
 void audio_extn_a2dp_get_apptype_params(uint32_t *sample_rate,
                                         uint32_t *bit_width);
 uint32_t audio_extn_a2dp_get_encoder_latency();
-
+bool audio_extn_a2dp_is_ready();
 #endif
 
 #ifndef SSR_ENABLED
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 262fec5..9da81e6 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2185,6 +2185,19 @@
         goto error_config;
     }
 
+    if (out->devices & AUDIO_DEVICE_OUT_ALL_A2DP) {
+        if (!audio_extn_a2dp_is_ready()) {
+            if (out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
+                //combo usecase just by pass a2dp
+                ALOGW("%s: A2DP profile is not ready, route it to speaker", __func__);
+                out->devices = AUDIO_DEVICE_OUT_SPEAKER;
+            } else {
+                ALOGE("%s: A2DP profile is not ready, return error", __func__);
+                ret = -EAGAIN;
+                goto error_config;
+            }
+        }
+    }
     out->pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
     if (out->pcm_device_id < 0) {
         ALOGE("%s: Invalid PCM device id(%d) for the usecase(%d)",
@@ -2647,17 +2660,27 @@
                 (val == AUDIO_DEVICE_NONE)) {
                 val = AUDIO_DEVICE_OUT_SPEAKER;
         }
-        /* To avoid a2dp to sco overlapping force route BT usecases
-         * to speaker based on Phone state
+        /* To avoid a2dp to sco overlapping / BT device improper state
+         * check with BT lib about a2dp streaming support before routing
          */
-        if ((((val & AUDIO_DEVICE_OUT_SPEAKER) &&
-                  (val & AUDIO_DEVICE_OUT_ALL_A2DP)) ||
-              ((adev->snd_dev_ref_cnt[SND_DEVICE_OUT_BT_A2DP] == 0) &&
-                  (val & AUDIO_DEVICE_OUT_ALL_A2DP))) &&
-            ((adev->mode == AUDIO_MODE_RINGTONE) ||
-            (adev->mode == AUDIO_MODE_IN_CALL))) {
-            ALOGD("Forcing a2dp routing to speaker for ring/call mode");
-            val = AUDIO_DEVICE_OUT_SPEAKER;
+        if (val & AUDIO_DEVICE_OUT_ALL_A2DP) {
+            if (!audio_extn_a2dp_is_ready()) {
+                if (val & AUDIO_DEVICE_OUT_SPEAKER) {
+                    //combo usecase just by pass a2dp
+                    ALOGW("%s: A2DP profile is not ready,routing to speaker only", __func__);
+                    val = AUDIO_DEVICE_OUT_SPEAKER;
+                } else {
+                    ALOGE("%s: A2DP profile is not ready,ignoring routing request", __func__);
+                    /* update device to a2dp and don't route as BT returned error
+                     * However it is still possible a2dp routing called because
+                     * of current active device disconnection (like wired headset)
+                     */
+                    out->devices = val;
+                    pthread_mutex_unlock(&out->lock);
+                    pthread_mutex_unlock(&adev->lock);
+                    goto error;
+                }
+            }
         }
         /*
          * select_devices() call below switches all the usecases on the same
diff --git a/qahw_api/inc/qahw_effect_audiosphere.h b/qahw_api/inc/qahw_effect_audiosphere.h
index 4947d68..2d294de 100644
--- a/qahw_api/inc/qahw_effect_audiosphere.h
+++ b/qahw_api/inc/qahw_effect_audiosphere.h
@@ -40,11 +40,11 @@
 
 static const qahw_effect_uuid_t SL_IID_AUDIOSPHERE_ = { 0x2f03ade8, 0xd92b, 0x4172, 0x9eea,
         { 0x52, 0x0c, 0xde, 0xfa, 0x3c, 0x1d } };
-const qahw_effect_uuid_t * const SL_IID_AUDIOSPHERE = &SL_IID_AUDIOSPHERE_;
+static const qahw_effect_uuid_t * const SL_IID_AUDIOSPHERE = &SL_IID_AUDIOSPHERE_;
 
 static const qahw_effect_uuid_t SL_IID_AUDIOSPHERE_UUID_ = { 0x184e62ab, 0x2d19, 0x4364, 0x9d1b,
         { 0xc0, 0xa4, 0x07, 0x33, 0x86, 0x6c } };
-const qahw_effect_uuid_t * const SL_IID_AUDIOSPHERE_UUID = &SL_IID_AUDIOSPHERE_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_AUDIOSPHERE_UUID = &SL_IID_AUDIOSPHERE_UUID_;
 
 /* enumerated parameter settings for BassBoost effect */
 typedef enum
diff --git a/qahw_api/inc/qahw_effect_bassboost.h b/qahw_api/inc/qahw_effect_bassboost.h
index 376c4a7..24b02e1 100644
--- a/qahw_api/inc/qahw_effect_bassboost.h
+++ b/qahw_api/inc/qahw_effect_bassboost.h
@@ -30,11 +30,11 @@
 
 static const qahw_effect_uuid_t SL_IID_BASSBOOST_ = { 0x0634f220, 0xddd4, 0x11db, 0xa0fc,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_BASSBOOST = &SL_IID_BASSBOOST_;
+static const qahw_effect_uuid_t * const SL_IID_BASSBOOST = &SL_IID_BASSBOOST_;
 
 static const qahw_effect_uuid_t SL_IID_BASSBOOST_UUID_ = { 0x2c4a8c24, 0x1581, 0x487f, 0x94f6,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_BASSBOOST_UUID = &SL_IID_BASSBOOST_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_BASSBOOST_UUID = &SL_IID_BASSBOOST_UUID_;
 
 /* enumerated parameter settings for BassBoost effect */
 typedef enum
diff --git a/qahw_api/inc/qahw_effect_environmentalreverb.h b/qahw_api/inc/qahw_effect_environmentalreverb.h
index 89d8404..a47eb28 100644
--- a/qahw_api/inc/qahw_effect_environmentalreverb.h
+++ b/qahw_api/inc/qahw_effect_environmentalreverb.h
@@ -30,15 +30,15 @@
 
 static const qahw_effect_uuid_t SL_IID_ENVIRONMENTALREVERB_ = { 0xc2e5d5f0, 0x94bd, 0x4763, 0x9cac,
         { 0x4e, 0x23, 0x4d, 0x6, 0x83, 0x9e } };
-const qahw_effect_uuid_t * const SL_IID_ENVIRONMENTALREVERB = &SL_IID_ENVIRONMENTALREVERB_;
+static const qahw_effect_uuid_t * const SL_IID_ENVIRONMENTALREVERB = &SL_IID_ENVIRONMENTALREVERB_;
 
 static const qahw_effect_uuid_t SL_IID_INS_ENVIRONMENTALREVERB_UUID_ = { 0xeb64ea04, 0x973b, 0x43d2, 0x8f5e,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_INS_ENVIRONMENTALREVERB_UUID = &SL_IID_INS_ENVIRONMENTALREVERB_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_INS_ENVIRONMENTALREVERB_UUID = &SL_IID_INS_ENVIRONMENTALREVERB_UUID_;
 
 static const qahw_effect_uuid_t SL_IID_AUX_ENVIRONMENTALREVERB_UUID_ = { 0x79a18026, 0x18fd, 0x4185, 0x8233,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_AUX_ENVIRONMENTALREVERB_UUID = &SL_IID_AUX_ENVIRONMENTALREVERB_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_AUX_ENVIRONMENTALREVERB_UUID = &SL_IID_AUX_ENVIRONMENTALREVERB_UUID_;
 
 /* enumerated parameter settings for environmental reverb effect */
 typedef enum
diff --git a/qahw_api/inc/qahw_effect_equalizer.h b/qahw_api/inc/qahw_effect_equalizer.h
index b024d5e..4f9e8f3 100644
--- a/qahw_api/inc/qahw_effect_equalizer.h
+++ b/qahw_api/inc/qahw_effect_equalizer.h
@@ -30,11 +30,11 @@
 
 static const qahw_effect_uuid_t SL_IID_EQUALIZER_ = { 0x0bed4300, 0xddd6, 0x11db, 0x8f34,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_EQUALIZER = &SL_IID_EQUALIZER_;
+static const qahw_effect_uuid_t * const SL_IID_EQUALIZER = &SL_IID_EQUALIZER_;
 
 static const qahw_effect_uuid_t SL_IID_EQUALIZER_UUID_ = { 0xa0dac280, 0x401c, 0x11e3, 0x9379,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_EQUALIZER_UUID = &SL_IID_EQUALIZER_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_EQUALIZER_UUID = &SL_IID_EQUALIZER_UUID_;
 
 /* enumerated parameters for Equalizer effect */
 typedef enum
diff --git a/qahw_api/inc/qahw_effect_presetreverb.h b/qahw_api/inc/qahw_effect_presetreverb.h
index 0eca70d..1edd0a5 100644
--- a/qahw_api/inc/qahw_effect_presetreverb.h
+++ b/qahw_api/inc/qahw_effect_presetreverb.h
@@ -30,15 +30,15 @@
 
 static const qahw_effect_uuid_t SL_IID_PRESETREVERB_ = { 0x47382d60, 0xddd8, 0x11db, 0xbf3a,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_PRESETREVERB = &SL_IID_PRESETREVERB_;
+static const qahw_effect_uuid_t * const SL_IID_PRESETREVERB = &SL_IID_PRESETREVERB_;
 
 static const qahw_effect_uuid_t SL_IID_INS_PRESETREVERB_UUID_ = { 0xaa2bebf6, 0x47cf, 0x4613, 0x9bca,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_INS_PRESETREVERB_UUID = &SL_IID_INS_PRESETREVERB_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_INS_PRESETREVERB_UUID = &SL_IID_INS_PRESETREVERB_UUID_;
 
 static const qahw_effect_uuid_t SL_IID_AUX_PRESETREVERB_UUID_ = { 0x6987be09, 0xb142, 0x4b41, 0x9056,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_AUX_PRESETREVERB_UUID = &SL_IID_AUX_PRESETREVERB_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_AUX_PRESETREVERB_UUID = &SL_IID_AUX_PRESETREVERB_UUID_;
 
 /* enumerated parameter settings for preset reverb effect */
 typedef enum
diff --git a/qahw_api/inc/qahw_effect_virtualizer.h b/qahw_api/inc/qahw_effect_virtualizer.h
index 138b850..73af232 100644
--- a/qahw_api/inc/qahw_effect_virtualizer.h
+++ b/qahw_api/inc/qahw_effect_virtualizer.h
@@ -30,11 +30,11 @@
 
 static const qahw_effect_uuid_t SL_IID_VIRTUALIZER_ = { 0x37cc2c00, 0xdddd, 0x11db, 0x8577,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_VIRTUALIZER = &SL_IID_VIRTUALIZER_;
+static const qahw_effect_uuid_t * const SL_IID_VIRTUALIZER = &SL_IID_VIRTUALIZER_;
 
 static const qahw_effect_uuid_t SL_IID_VIRTUALIZER_UUID_ = { 0x509a4498, 0x561a, 0x4bea, 0xb3b1,
         { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_VIRTUALIZER_UUID = &SL_IID_VIRTUALIZER_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_VIRTUALIZER_UUID = &SL_IID_VIRTUALIZER_UUID_;
 
 /* enumerated parameter settings for virtualizer effect */
 /* to keep in sync with frameworks/base/media/java/android/media/audiofx/Virtualizer.java */
diff --git a/qahw_api/inc/qahw_effect_visualizer.h b/qahw_api/inc/qahw_effect_visualizer.h
index ce79bab..54ee787 100644
--- a/qahw_api/inc/qahw_effect_visualizer.h
+++ b/qahw_api/inc/qahw_effect_visualizer.h
@@ -30,11 +30,11 @@
 
 static const qahw_effect_uuid_t SL_IID_VISUALIZATION_ =
     { 0xe46b26a0, 0xdddd, 0x11db, 0x8afd, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_VISUALIZATION = &SL_IID_VISUALIZATION_;
+static const qahw_effect_uuid_t * const SL_IID_VISUALIZATION = &SL_IID_VISUALIZATION_;
 
 static const qahw_effect_uuid_t SL_IID_VISUALIZATION_UUID_ =
     { 0x7a8044a0, 0x1a71, 0x11e3, 0xa184, { 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b } };
-const qahw_effect_uuid_t * const SL_IID_VISUALIZATION_UUID = &SL_IID_VISUALIZATION_UUID_;
+static const qahw_effect_uuid_t * const SL_IID_VISUALIZATION_UUID = &SL_IID_VISUALIZATION_UUID_;
 
 #define VISUALIZER_CAPTURE_SIZE_MAX 1024  // maximum capture size in samples
 #define VISUALIZER_CAPTURE_SIZE_MIN 128   // minimum capture size in samples
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 4a7a382..b3e5291 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -398,6 +398,8 @@
     stream_config *params = (stream_config*) stream_data;
     const char* stream_name = "output_stream";
 
+    if (params->output_device & AUDIO_DEVICE_OUT_ALL_A2DP)
+        params->output_device = AUDIO_DEVICE_OUT_PROXY;
     rc = qahw_open_output_stream(params->qahw_mod_handle,
                              params->handle,
                              params->output_device,
@@ -504,8 +506,7 @@
         }
     }
 
-    if (params->output_device & AUDIO_DEVICE_OUT_ALL_A2DP) {
-        params->output_device = AUDIO_DEVICE_OUT_PROXY;
+    if (params->output_device & AUDIO_DEVICE_OUT_PROXY) {
         proxy_params.acp.qahw_mod_handle = params->qahw_mod_handle;
         proxy_params.acp.handle = stream_handle;
         stream_handle--;