Merge "hal: Convert maxxaudio feature to runtime library"
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 9939e20..24ed4c5 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"
@@ -4748,6 +4749,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)
 {
@@ -4857,6 +4986,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 c80666a..e1e3ca0 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -326,7 +326,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 0c6ad5a..2294b0c 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -7638,33 +7638,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) {