blob: 9313e5ffb9c6828b4d534e3b51e9166bb81be77d [file] [log] [blame]
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -08001/*
2 * Copyright (c) 2019, The Linux Foundation. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of The Linux Foundation nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30//#define LOG_NDEBUG 0
31#define LOG_TAG "ahal_config_helper"
32
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080033#include <cutils/properties.h>
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080034#include <dlfcn.h>
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080035#include <log/log.h>
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080036#include "ahal_config_helper.h"
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080037
38struct AHalConfigHelper {
39 static AHalConfigHelper* mConfigHelper;
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080040 AHalConfigHelper() {};
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080041
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080042 static AHalConfigHelper* getAHalConfInstance() {
43 if (!mConfigHelper)
44 mConfigHelper = new AHalConfigHelper();
45 return mConfigHelper;
46 }
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080047 void initConfigHelper(bool isVendorEnhancedFwk);
48 void getAHalValues(AHalValues* *confValues);
49 AHalValues defaultConfigs;
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080050};
51
52AHalConfigHelper* AHalConfigHelper::mConfigHelper;
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080053static AHalValues* (*getAHalConfigs)() = nullptr;
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080054
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080055void AHalConfigHelper::initConfigHelper(bool isVendorEnhancedFwk)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -080056{
57 ALOGV("%s: enter", __FUNCTION__);
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080058
59 void *handle = dlopen(AUDIO_CONFIGSTORE_LIB_PATH, RTLD_NOW);
60 if (handle != nullptr) {
61 getAHalConfigs = (AHalValues*(*)())
62 dlsym(handle, "getAudioHalExtConfigs");
63 if (!getAHalConfigs) {
64 ALOGE("%s: Could not find symbol: %s", __FUNCTION__, dlerror());
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080065 dlclose(handle);
Weiyin Jiang2995f662019-04-17 14:25:12 +080066 handle = nullptr;
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -080067 }
68 }
69
70#ifdef LINUX_ENABLED
71 defaultConfigs = {
72 true, /* SND_MONITOR */
73 false, /* COMPRESS_CAPTURE */
74 true, /* SOURCE_TRACK */
75 true, /* SSREC */
76 true, /* AUDIOSPHERE */
77 true, /* AFE_PROXY */
78 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
79 true, /* HDMI_EDID */
80 false, /* KEEP_ALIVE */
81 false, /* HIFI_AUDIO */
82 true, /* RECEIVER_AIDED_STEREO */
83 true, /* KPI_OPTIMIZE */
84 true, /* DISPLAY_PORT */
85 true, /* FLUENCE */
86 false, /* CUSTOM_STEREO */
87 true, /* ANC_HEADSET */
88 true, /* SPKR_PROT */
89 true, /* FM_POWER_OPT */
90 false, /* EXTERNAL_QDSP */
91 false, /* EXTERNAL_SPEAKER */
92 false, /* EXTERNAL_SPEAKER_TFA */
93 false, /* HWDEP_CAL */
94 false, /* DSM_FEEDBACK */
95 true, /* USB_OFFLOAD */
96 false, /* USB_OFFLOAD_BURST_MODE */
97 false, /* USB_OFFLOAD_SIDETONE_VOLM */
98 true, /* A2DP_OFFLOAD */
99 true, /* HFP */
100 true, /* VBAT */
Sujin Panickerb904fbe2019-04-04 13:28:07 +0530101 false, /* WSA*/
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800102 true, /* EXT_HW_PLUGIN */
103 false, /* RECORD_PLAY_CONCURRENCY */
104 true, /* HDMI_PASSTHROUGH */
105 false, /* CONCURRENT_CAPTURE */
106 false, /* COMPRESS_IN */
107 false, /* BATTERY_LISTENER */
Arun Mirpurid750ac52019-04-12 18:33:55 -0700108 false, /* MAXX_AUDIO */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800109 true, /* COMPRESS_METADATA_NEEDED */
110 false, /* INCALL_MUSIC */
111 false, /* COMPRESS_VOIP */
vivek mehtaba5ed152019-05-03 17:28:25 -0700112 true, /* DYNAMIC_ECNS */
113 false, /* AUDIO_ZOOM */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800114 };
115#else
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800116 if (isVendorEnhancedFwk) {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800117 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800118 true, /* SND_MONITOR */
119 false, /* COMPRESS_CAPTURE */
120 true, /* SOURCE_TRACK */
121 true, /* SSREC */
122 true, /* AUDIOSPHERE */
123 true, /* AFE_PROXY */
124 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
125 true, /* HDMI_EDID */
126 true, /* KEEP_ALIVE */
127 false, /* HIFI_AUDIO */
128 true, /* RECEIVER_AIDED_STEREO */
129 true, /* KPI_OPTIMIZE */
130 true, /* DISPLAY_PORT */
131 true, /* FLUENCE */
132 true, /* CUSTOM_STEREO */
133 true, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800134 true, /* SPKR_PROT */
135 true, /* FM_POWER_OPT */
136 false, /* EXTERNAL_QDSP */
137 false, /* EXTERNAL_SPEAKER */
138 false, /* EXTERNAL_SPEAKER_TFA */
139 false, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800140 false, /* DSM_FEEDBACK */
141 true, /* USB_OFFLOAD */
142 false, /* USB_OFFLOAD_BURST_MODE */
143 false, /* USB_OFFLOAD_SIDETONE_VOLM */
144 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800145 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800146 true, /* VBAT */
Sujin Panickerb904fbe2019-04-04 13:28:07 +0530147 false, /* WSA*/
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800148 true, /* EXT_HW_PLUGIN */
149 false, /* RECORD_PLAY_CONCURRENCY */
150 true, /* HDMI_PASSTHROUGH */
151 true, /* CONCURRENT_CAPTURE */
152 true, /* COMPRESS_IN */
153 true, /* BATTERY_LISTENER */
Arun Mirpurid750ac52019-04-12 18:33:55 -0700154 false, /* MAXX_AUDIO */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800155 true, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800156 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800157 false, /* COMPRESS_VOIP */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800158 true, /* DYNAMIC_ECNS */
vivek mehtaba5ed152019-05-03 17:28:25 -0700159 false, /* AUDIO_ZOOM */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800160 };
161 } else {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800162 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800163 true, /* SND_MONITOR */
164 false, /* COMPRESS_CAPTURE */
165 false, /* SOURCE_TRACK */
166 false, /* SSREC */
167 false, /* AUDIOSPHERE */
168 false, /* AFE_PROXY */
169 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
170 false, /* HDMI_EDID */
171 false, /* KEEP_ALIVE */
172 false, /* HIFI_AUDIO */
173 false, /* RECEIVER_AIDED_STEREO */
174 false, /* KPI_OPTIMIZE */
175 false, /* DISPLAY_PORT */
176 false, /* FLUENCE */
177 false, /* CUSTOM_STEREO */
178 false, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800179 true, /* SPKR_PROT */
180 false, /* FM_POWER_OPT */
181 true, /* EXTERNAL_QDSP */
182 true, /* EXTERNAL_SPEAKER */
183 false, /* EXTERNAL_SPEAKER_TFA */
184 true, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800185 false, /* DSM_FEEDBACK */
186 true, /* USB_OFFLOAD */
187 false, /* USB_OFFLOAD_BURST_MODE */
188 false, /* USB_OFFLOAD_SIDETONE_VOLM */
189 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800190 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800191 false, /* VBAT */
Sujin Panickerb904fbe2019-04-04 13:28:07 +0530192 false, /* WSA*/
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800193 false, /* EXT_HW_PLUGIN */
194 false, /* RECORD_PLAY_CONCURRENCY */
195 false, /* HDMI_PASSTHROUGH */
196 true, /* CONCURRENT_CAPTURE */
197 false, /* COMPRESS_IN */
198 false, /* BATTERY_LISTENER */
Arun Mirpurid750ac52019-04-12 18:33:55 -0700199 true, /* MAXX_AUDIO */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800200 false, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800201 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800202 false, /* COMPRESS_VOIP */
vivek mehtaba5ed152019-05-03 17:28:25 -0700203 false, /* DYNAMIC_ECNS */
204 true, /* AUDIO_ZOOM */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800205 };
206 }
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800207#endif
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800208}
209
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800210void AHalConfigHelper::getAHalValues(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800211{
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800212 if (getAHalConfigs != nullptr)
213 *confValues = getAHalConfigs();
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800214
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800215 if (*confValues == nullptr) {
216 ALOGI("%s: Could not retrieve flags from configstore, setting defaults",
217 __FUNCTION__);
218 *confValues = &defaultConfigs;
219 }
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800220}
221
222extern "C" {
223
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800224void audio_extn_ahal_config_helper_init(bool is_vendor_enhanced_fwk)
225{
226 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800227 if (confInstance != nullptr)
228 confInstance->initConfigHelper(is_vendor_enhanced_fwk);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800229}
230
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800231void audio_extn_get_feature_values(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800232{
233 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800234 if (confInstance != nullptr)
235 confInstance->getAHalValues(confValues);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800236}
237
238} // extern C