hal: Convert maxxaudio feature to runtime library

Add changes to convert compile time macro for maxxaudio to
dynamic feature enable controlled by config store. Default value
is true for stock framework and false for vendor enhanced fwks.

Change-Id: I2732dd6beec7193a1847148224d44205819a3004
diff --git a/configs/kona/audio_configs.xml b/configs/kona/audio_configs.xml
index fa07ca2..8c24bb2 100644
--- a/configs/kona/audio_configs.xml
+++ b/configs/kona/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="true" />
         <flag name="keep_alive_enabled" value="true" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="true" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/configs/msm8937/audio_configs.xml b/configs/msm8937/audio_configs.xml
index e221be7..ed3ed8d 100644
--- a/configs/msm8937/audio_configs.xml
+++ b/configs/msm8937/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="false" />
         <flag name="keep_alive_enabled" value="false" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="false" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/configs/msmnile/audio_configs.xml b/configs/msmnile/audio_configs.xml
index fa07ca2..8c24bb2 100644
--- a/configs/msmnile/audio_configs.xml
+++ b/configs/msmnile/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="true" />
         <flag name="keep_alive_enabled" value="true" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="true" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/configs/msmnile/audio_configs_stock.xml b/configs/msmnile/audio_configs_stock.xml
index b9ecf45..6414675 100644
--- a/configs/msmnile/audio_configs_stock.xml
+++ b/configs/msmnile/audio_configs_stock.xml
@@ -57,6 +57,7 @@
         <flag name="incall_music_enabled" value="true" />
         <flag name="keep_alive_enabled" value="false" />
         <flag name="kpi_optimize_enabled" value="false" />
+        <flag name="maxx_audio_enabled" value="true" />
         <flag name="receiver_aided_stereo" value="false" />
         <flag name="record_play_concurrency" value="false" />
         <flag name="snd_monitor_enabled" value="true" />
diff --git a/configs/sdm660/audio_configs.xml b/configs/sdm660/audio_configs.xml
index 853f7e7..3688697 100644
--- a/configs/sdm660/audio_configs.xml
+++ b/configs/sdm660/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="false" />
         <flag name="keep_alive_enabled" value="false" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="true" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/configs/sdm710/audio_configs.xml b/configs/sdm710/audio_configs.xml
index 0410f4b..6a6fb7d 100644
--- a/configs/sdm710/audio_configs.xml
+++ b/configs/sdm710/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="false" />
         <flag name="keep_alive_enabled" value="false" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="true" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/configs/sdm845/audio_configs.xml b/configs/sdm845/audio_configs.xml
index 95b7d97..4b0159d 100644
--- a/configs/sdm845/audio_configs.xml
+++ b/configs/sdm845/audio_configs.xml
@@ -92,6 +92,7 @@
         <flag name="incall_music_enabled" value="false" />
         <flag name="keep_alive_enabled" value="false" />
         <flag name="kpi_optimize_enabled" value="true" />
+        <flag name="maxx_audio_enabled" value="false" />
         <flag name="receiver_aided_stereo" value="true" />
         <flag name="snd_monitor_enabled" value="true" />
         <flag name="source_track_enabled" value="true" />
diff --git a/hal/ahal_config_helper.cpp b/hal/ahal_config_helper.cpp
index 753d8a8..e46b8f3 100644
--- a/hal/ahal_config_helper.cpp
+++ b/hal/ahal_config_helper.cpp
@@ -105,6 +105,7 @@
         false,       /* CONCURRENT_CAPTURE */
         false,       /* COMPRESS_IN */
         false,       /* BATTERY_LISTENER */
+        false,       /* MAXX_AUDIO */
         true,        /* COMPRESS_METADATA_NEEDED */
         false,       /* INCALL_MUSIC */
         false,       /* COMPRESS_VOIP */
@@ -149,6 +150,7 @@
             true,        /* CONCURRENT_CAPTURE */
             true,        /* COMPRESS_IN */
             true,        /* BATTERY_LISTENER */
+            false,       /* MAXX_AUDIO */
             true,        /* COMPRESS_METADATA_NEEDED */
             true,        /* INCALL_MUSIC */
             false,       /* COMPRESS_VOIP */
@@ -192,6 +194,7 @@
             true,        /* CONCURRENT_CAPTURE */
             false,       /* COMPRESS_IN */
             false,       /* BATTERY_LISTENER */
+            true,        /* MAXX_AUDIO */
             false,       /* COMPRESS_METADATA_NEEDED */
             true,        /* INCALL_MUSIC */
             false,       /* COMPRESS_VOIP */
diff --git a/hal/ahal_config_helper.h b/hal/ahal_config_helper.h
index 3251961..39ed68e 100644
--- a/hal/ahal_config_helper.h
+++ b/hal/ahal_config_helper.h
@@ -71,6 +71,7 @@
     bool concurrent_capture_enabled;
     bool compress_in_enabled;
     bool battery_listener_enabled;
+    bool maxx_audio_enabled;
     bool compress_metadata_needed;
     bool incall_music_enabled;
     bool compress_voip_enabled;
diff --git a/hal/audio_extn/Android.mk b/hal/audio_extn/Android.mk
old mode 100755
new mode 100644
index 59b18a2..117ee27
--- a/hal/audio_extn/Android.mk
+++ b/hal/audio_extn/Android.mk
@@ -398,11 +398,13 @@
 include $(BUILD_SHARED_LIBRARY)
 
 #-------------------------------------------
+
 #            Build EXT_HW_PLUGIN LIB
 #-------------------------------------------
 include $(CLEAR_VARS)
 
 LOCAL_MODULE := libexthwplugin
+
 LOCAL_VENDOR_MODULE := true
 
 PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
@@ -705,3 +707,61 @@
 LOCAL_HEADER_LIBRARIES += libhardware_headers
 LOCAL_HEADER_LIBRARIES += libsystem_headers
 #include $(BUILD_SHARED_LIBRARY)
+
+#-------------------------------------------
+#            Build MAXX_AUDIO
+#-------------------------------------------
+include $(CLEAR_VARS)
+
+LOCAL_MODULE:= libmaxxaudio
+LOCAL_VENDOR_MODULE := true
+
+PRIMARY_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal/hal
+AUDIO_PLATFORM := $(TARGET_BOARD_PLATFORM)
+
+ifneq ($(filter sdm845 sdm710 msmnile kona sdm660 msm8937 $(MSMSTEPPE),$(TARGET_BOARD_PLATFORM)),)
+  # B-family platform uses msm8974 code base
+  AUDIO_PLATFORM = msm8974
+  MULTIPLE_HW_VARIANTS_ENABLED := true
+endif
+
+LOCAL_SRC_FILES:= \
+        maxxaudio.c
+
+LOCAL_CFLAGS += \
+    -Wall \
+    -Werror \
+    -Wno-unused-function \
+    -Wno-unused-variable
+
+LOCAL_SHARED_LIBRARIES := \
+    libaudioutils \
+    libcutils \
+    liblog \
+    libtinyalsa \
+    libtinycompress \
+    libaudioroute \
+    libdl \
+    libexpat
+
+LOCAL_C_INCLUDES := \
+    $(PRIMARY_HAL_PATH) \
+    $(PRIMARY_HAL_PATH)/$(AUDIO_PLATFORM) \
+    external/tinyalsa/include \
+    external/tinycompress/include \
+    external/expat/lib \
+    system/media/audio_utils/include \
+    $(call include-path-for, audio-route) \
+
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/techpack/audio/include
+LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
+ifeq ($(strip $(AUDIO_FEATURE_ENABLED_DLKM)),true)
+  LOCAL_HEADER_LIBRARIES += audio_kernel_headers
+  LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/vendor/qcom/opensource/audio-kernel/include
+endif
+
+LOCAL_HEADER_LIBRARIES += libhardware_headers
+LOCAL_HEADER_LIBRARIES += libsystem_headers
+include $(BUILD_SHARED_LIBRARY)
diff --git a/hal/audio_extn/audio_extn.c b/hal/audio_extn/audio_extn.c
index 431c248..6afcc65 100644
--- a/hal/audio_extn/audio_extn.c
+++ b/hal/audio_extn/audio_extn.c
@@ -189,6 +189,7 @@
 static bool audio_extn_concurrent_capture_enabled = false;
 static bool audio_extn_compress_in_enabled = false;
 static bool audio_extn_battery_listener_enabled = false;
+static bool audio_extn_maxx_audio_enabled = false;
 
 #define AUDIO_PARAMETER_KEY_AANC_NOISE_LEVEL "aanc_noise_level"
 #define AUDIO_PARAMETER_KEY_ANC        "anc_enabled"
@@ -4722,6 +4723,134 @@
 {
     return (batt_prop_is_charging)? batt_prop_is_charging(): false;
 }
+// END: BATTERY_LISTENER ================================================================
+
+// START: MAXX_AUDIO =====================================================================
+#ifdef __LP64__
+#define MAXX_AUDIO_LIB_PATH "/vendor/lib64/libmaxxaudio.so"
+#else
+#define MAXX_AUDIO_LIB_PATH "/vendor/lib/libmaxxaudio.so"
+#endif
+
+static void *maxxaudio_lib_handle = NULL;
+
+typedef void (*maxxaudio_init_t)(void *, maxx_audio_init_config_t);
+static maxxaudio_init_t maxxaudio_init;
+
+typedef void (*maxxaudio_deinit_t)();
+static maxxaudio_deinit_t maxxaudio_deinit;
+
+typedef bool (*maxxaudio_set_state_t)(struct audio_device*, int,
+                             float, bool);
+static maxxaudio_set_state_t maxxaudio_set_state;
+
+typedef void (*maxxaudio_set_device_t)(struct audio_usecase *);
+static maxxaudio_set_device_t maxxaudio_set_device;
+
+typedef void (*maxxaudio_set_parameters_t)(struct audio_device *,
+                                  struct str_parms *);
+static maxxaudio_set_parameters_t maxxaudio_set_parameters;
+
+typedef bool (*maxxaudio_supported_usb_t)();
+static maxxaudio_supported_usb_t maxxaudio_supported_usb;
+
+int maxx_audio_feature_init(bool is_feature_enabled)
+{
+    audio_extn_maxx_audio_enabled = is_feature_enabled;
+    ALOGD("%s: Called with feature %s", __func__,
+                  is_feature_enabled ? "Enabled" : "NOT Enabled");
+    if (is_feature_enabled) {
+        // dlopen lib
+        maxxaudio_lib_handle = dlopen(MAXX_AUDIO_LIB_PATH, RTLD_NOW);
+
+        if (!maxxaudio_lib_handle) {
+            ALOGE("%s: dlopen failed", __func__);
+            goto feature_disabled;
+        }
+
+        if (!(maxxaudio_init =
+                    (maxxaudio_init_t)dlsym(maxxaudio_lib_handle, "ma_init")) ||
+            !(maxxaudio_deinit =
+                 (maxxaudio_deinit_t)dlsym(maxxaudio_lib_handle, "ma_deinit")) ||
+            !(maxxaudio_set_state =
+                 (maxxaudio_set_state_t)dlsym(maxxaudio_lib_handle, "ma_set_state")) ||
+            !(maxxaudio_set_device =
+                 (maxxaudio_set_device_t)dlsym(maxxaudio_lib_handle, "ma_set_device")) ||
+            !(maxxaudio_set_parameters =
+                 (maxxaudio_set_parameters_t)dlsym(maxxaudio_lib_handle, "ma_set_parameters")) ||
+            !(maxxaudio_supported_usb =
+                 (maxxaudio_supported_usb_t)dlsym(
+                                    maxxaudio_lib_handle, "ma_supported_usb"))) {
+            ALOGE("%s: dlsym failed", __func__);
+            goto feature_disabled;
+        }
+        ALOGD("%s:: ---- Feature MAXX_AUDIO is Enabled ----", __func__);
+        return 0;
+    }
+
+feature_disabled:
+    if (maxxaudio_lib_handle) {
+        dlclose(maxxaudio_lib_handle);
+        maxxaudio_lib_handle = NULL;
+    }
+
+    maxxaudio_init = NULL;
+    maxxaudio_deinit = NULL;
+    maxxaudio_set_state = NULL;
+    maxxaudio_set_device = NULL;
+    maxxaudio_set_parameters = NULL;
+    maxxaudio_supported_usb = NULL;
+    ALOGW(":: %s: ---- Feature MAXX_AUDIO is disabled ----", __func__);
+    return -ENOSYS;
+}
+
+bool audio_extn_is_maxx_audio_enabled()
+{
+    return audio_extn_maxx_audio_enabled;
+}
+
+void audio_extn_ma_init(void *platform)
+{
+
+     if (maxxaudio_init) {
+        maxx_audio_init_config_t init_config;
+        init_config.fp_platform_set_parameters = platform_set_parameters;
+        init_config.fp_audio_extn_get_snd_card_split = audio_extn_get_snd_card_split;
+        maxxaudio_init(platform, init_config);
+     }
+}
+
+void audio_extn_ma_deinit()
+{
+     if (maxxaudio_deinit)
+        maxxaudio_deinit();
+}
+
+bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+                             float vol, bool active)
+{
+    return (maxxaudio_set_state ?
+                maxxaudio_set_state(adev, stream_type, vol, active): false);
+}
+
+void audio_extn_ma_set_device(struct audio_usecase *usecase)
+{
+    if (maxxaudio_set_device)
+        maxxaudio_set_device(usecase);
+}
+
+void audio_extn_ma_set_parameters(struct audio_device *adev,
+                                  struct str_parms *parms)
+{
+    if (maxxaudio_set_parameters)
+        maxxaudio_set_parameters(adev, parms);
+}
+
+bool audio_extn_ma_supported_usb()
+{
+    return (maxxaudio_supported_usb ? maxxaudio_supported_usb(): false);
+}
+// END: MAXX_AUDIO =====================================================================
 
 void audio_extn_feature_init(int is_running_with_enhanced_fwk)
 {
@@ -4831,6 +4960,9 @@
             case BATTERY_LISTENER:
                 battery_listener_feature_init(enable);
                 break;
+            case MAXX_AUDIO:
+                maxx_audio_feature_init(enable);
+                break;
             default:
                 break;
         }
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 51e3ba2..adcb459 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -323,7 +323,24 @@
 };
 typedef struct a2dp_offload_init_config a2dp_offload_init_config_t;
 // END: A2DP_OFFLOAD FEATURE ====================================================
-
+// START: MAXX_AUDIO FEATURE ==================================================
+void audio_extn_ma_init(void *platform);
+void audio_extn_ma_deinit();
+bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+                             float vol, bool active);
+void audio_extn_ma_set_device(struct audio_usecase *usecase);
+void audio_extn_ma_set_parameters(struct audio_device *adev,
+                                  struct str_parms *parms);
+bool audio_extn_ma_supported_usb();
+bool audio_extn_is_maxx_audio_enabled();
+typedef int (*fp_platform_set_parameters_t)(void*, struct str_parms*);
+// --- Function pointers from audio_extn needed by MAXX_AUDIO
+struct maxx_audio_init_config {
+    fp_platform_set_parameters_t fp_platform_set_parameters;
+    fp_audio_extn_get_snd_card_split_t fp_audio_extn_get_snd_card_split;
+};
+typedef struct maxx_audio_init_config maxx_audio_init_config_t;
+// START: MAXX_AUDIO FEATURE ==================================================
 //START: SSRRC_FEATURE ==========================================================
 bool audio_extn_ssr_check_usecase(struct stream_in *in);
 int audio_extn_ssr_set_usecase(struct stream_in *in,
diff --git a/hal/audio_extn/audio_feature_manager.c b/hal/audio_extn/audio_feature_manager.c
index a3120df..e121426 100644
--- a/hal/audio_extn/audio_feature_manager.c
+++ b/hal/audio_extn/audio_feature_manager.c
@@ -168,6 +168,8 @@
             return confValues->compress_in_enabled;
         case BATTERY_LISTENER:
             return confValues->battery_listener_enabled;
+        case MAXX_AUDIO:
+            return confValues->maxx_audio_enabled;
         case COMPRESS_METADATA_NEEDED:
             return confValues->compress_metadata_needed;
         case INCALL_MUSIC:
diff --git a/hal/audio_extn/audio_feature_manager.h b/hal/audio_extn/audio_feature_manager.h
index 9e3c541..8df076c 100644
--- a/hal/audio_extn/audio_feature_manager.h
+++ b/hal/audio_extn/audio_feature_manager.h
@@ -70,6 +70,7 @@
     COMPRESS_IN_CAPTURE,
     BATTERY_LISTENER,
     COMPRESS_METADATA_NEEDED,
+    MAXX_AUDIO,
     COMPRESS_VOIP,
     VOICE_START = COMPRESS_VOIP,
     DYNAMIC_ECNS,
diff --git a/hal/audio_extn/maxxaudio.c b/hal/audio_extn/maxxaudio.c
index 5f2a7f0..8830486 100644
--- a/hal/audio_extn/maxxaudio.c
+++ b/hal/audio_extn/maxxaudio.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2018-2019 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -156,12 +156,15 @@
 static uint16_t g_supported_dev = 0;
 static struct ma_state ma_cur_state_table[STREAM_MAX_TYPES];
 static struct ma_platform_data *my_data = NULL;
+// --- external function dependency ---
+fp_platform_set_parameters_t fp_platform_set_parameters;
+fp_audio_extn_get_snd_card_split_t fp_audio_extn_get_snd_card_split;
 
 static int set_audio_cal(const char *audio_cal)
 {
     ALOGV("set_audio_cal: %s", audio_cal);
 
-    return platform_set_parameters(my_data->platform,
+    return fp_platform_set_parameters(my_data->platform,
                                    str_parms_create_str(audio_cal));
 }
 
@@ -200,7 +203,7 @@
         ((usecase->devices & AUDIO_DEVICE_OUT_SPEAKER) ||
          (usecase->devices & AUDIO_DEVICE_OUT_SPEAKER_SAFE) ||
          (audio_is_usb_out_device(usecase->devices) &&
-          audio_extn_ma_supported_usb())))
+          ma_supported_usb())))
         /* TODO: enable A2DP when it is ready */
 
         return true;
@@ -390,7 +393,7 @@
 }
 
 // adev_init lock held
-void audio_extn_ma_init(void *platform)
+void ma_init(void *platform, maxx_audio_init_config_t init_config)
 {
     ma_stream_type_t i = 0;
     int ret = 0;
@@ -398,7 +401,11 @@
     char mps_path[128] = {0};
     char cnf_path[128] = {0};
     struct snd_card_split *snd_split_handle = NULL;
-    snd_split_handle = audio_extn_get_snd_card_split();
+
+    fp_platform_set_parameters = init_config.fp_platform_set_parameters;
+    fp_audio_extn_get_snd_card_split = init_config.fp_audio_extn_get_snd_card_split;
+
+    snd_split_handle = fp_audio_extn_get_snd_card_split();
 
     if (platform == NULL) {
         ALOGE("%s: platform is NULL", __func__);
@@ -549,7 +556,7 @@
 }
 
 //adev_init lock held
-void audio_extn_ma_deinit()
+void ma_deinit()
 {
     if (my_data) {
         /* deinit ma parameter */
@@ -566,7 +573,7 @@
 }
 
 // adev_init and adev lock held
-bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+bool ma_set_state(struct audio_device *adev, int stream_type,
                              float vol, bool active)
 {
     bool ret = false;
@@ -613,7 +620,7 @@
     return ret;
 }
 
-void audio_extn_ma_set_device(struct audio_usecase *usecase)
+void ma_set_device(struct audio_usecase *usecase)
 {
     int i = 0;
     struct ma_audio_cal_settings ma_cal;
@@ -663,7 +670,7 @@
     pthread_mutex_unlock(&my_data->lock);
 }
 
-void audio_extn_ma_set_parameters(struct audio_device *adev,
+void ma_set_parameters(struct audio_device *adev,
                                   struct str_parms *parms)
 {
     int ret;
@@ -720,7 +727,7 @@
     }
 }
 
-bool audio_extn_ma_supported_usb()
+bool ma_supported_usb()
 {
     ALOGV("%s: current support 0x%x", __func__, g_supported_dev);
     return (g_supported_dev & SUPPORTED_USB) ? true : false;
diff --git a/hal/audio_extn/maxxaudio.h b/hal/audio_extn/maxxaudio.h
index 4c91107..1ab7f80 100644
--- a/hal/audio_extn/maxxaudio.h
+++ b/hal/audio_extn/maxxaudio.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2018-2019 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,23 +17,12 @@
 #ifndef MAXXAUDIO_H_
 #define MAXXAUDIO_H_
 
-#ifndef MAXXAUDIO_QDSP_ENABLED
-#define audio_extn_ma_init(platform)                                (0)
-#define audio_extn_ma_deinit()                                      (0)
-#define audio_extn_ma_set_state(adev, type, vol, active)            (false)
-#define audio_extn_ma_set_device(usecase)                           (0)
-#define audio_extn_ma_set_parameters(adev, param)                   (0)
-#define audio_extn_ma_supported_usb()                               (false)
-#else
-void audio_extn_ma_init(void *platform);
-void audio_extn_ma_deinit();
-bool audio_extn_ma_set_state(struct audio_device *adev, int stream_type,
+void ma_init(void *platform, maxx_audio_init_config_t init_config);
+void ma_deinit();
+bool ma_set_state(struct audio_device *adev, int stream_type,
                              float vol, bool active);
-void audio_extn_ma_set_device(struct audio_usecase *usecase);
-void audio_extn_ma_set_parameters(struct audio_device *adev,
+void ma_set_device(struct audio_usecase *usecase);
+void ma_set_parameters(struct audio_device *adev,
                                   struct str_parms *parms);
-bool audio_extn_ma_supported_usb();
-#endif /* MAXXAUDIO_QDSP_ENABLED */
-
-#endif /* MAXXAUDIO_H_ */
-
+bool ma_supported_usb();
+#endif /* MAXXAUDIO_H_ */
\ No newline at end of file
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 7a9022e..254ecb1 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -7537,33 +7537,34 @@
             adev->screen_off = true;
     }
 
-#ifndef MAXXAUDIO_QDSP_ENABLED
-    ret = str_parms_get_int(parms, "rotation", &val);
-    if (ret >= 0) {
-        bool reverse_speakers = false;
-        switch(val) {
-        // FIXME: note that the code below assumes that the speakers are in the correct placement
-        //   relative to the user when the device is rotated 90deg from its default rotation. This
-        //   assumption is device-specific, not platform-specific like this code.
-        case 270:
-            reverse_speakers = true;
-            break;
-        case 0:
-        case 90:
-        case 180:
-            break;
-        default:
-            ALOGE("%s: unexpected rotation of %d", __func__, val);
-            status = -EINVAL;
+   if(!audio_extn_is_maxx_audio_enabled()) {
+        ret = str_parms_get_int(parms, "rotation", &val);
+        if (ret >= 0) {
+            bool reverse_speakers = false;
+            switch(val) {
+            // FIXME: note that the code below assumes that the speakers are
+            // in the correct placement relative to the user when the device
+            // is rotated 90deg from its default rotation. This assumption
+            // is device-specific, not platform-specific like this code.
+            case 270:
+                reverse_speakers = true;
+                break;
+            case 0:
+            case 90:
+            case 180:
+                break;
+            default:
+                ALOGE("%s: unexpected rotation of %d", __func__, val);
+                status = -EINVAL;
+            }
+            if (status == 0) {
+                // check and set swap
+                //   - check if orientation changed and speaker active
+                //   - set rotation and cache the rotation value
+                platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
+            }
         }
-        if (status == 0) {
-            // check and set swap
-            //   - check if orientation changed and speaker active
-            //   - set rotation and cache the rotation value
-            platform_check_and_set_swap_lr_channels(adev, reverse_speakers);
-        }
-    }
-#endif
+   }
 
     ret = str_parms_get_str(parms, AUDIO_PARAMETER_KEY_BT_SCO_WB, value, sizeof(value));
     if (ret >= 0) {