blob: 753d8a85022abc7d1c43fff9aac3618f1d8534af [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 */
108 true, /* COMPRESS_METADATA_NEEDED */
109 false, /* INCALL_MUSIC */
110 false, /* COMPRESS_VOIP */
Arun Mirpurie008ed22019-03-21 11:21:04 -0700111 true /* DYNAMIC_ECNS */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800112 };
113#else
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800114 if (isVendorEnhancedFwk) {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800115 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800116 true, /* SND_MONITOR */
117 false, /* COMPRESS_CAPTURE */
118 true, /* SOURCE_TRACK */
119 true, /* SSREC */
120 true, /* AUDIOSPHERE */
121 true, /* AFE_PROXY */
122 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
123 true, /* HDMI_EDID */
124 true, /* KEEP_ALIVE */
125 false, /* HIFI_AUDIO */
126 true, /* RECEIVER_AIDED_STEREO */
127 true, /* KPI_OPTIMIZE */
128 true, /* DISPLAY_PORT */
129 true, /* FLUENCE */
130 true, /* CUSTOM_STEREO */
131 true, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800132 true, /* SPKR_PROT */
133 true, /* FM_POWER_OPT */
134 false, /* EXTERNAL_QDSP */
135 false, /* EXTERNAL_SPEAKER */
136 false, /* EXTERNAL_SPEAKER_TFA */
137 false, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800138 false, /* DSM_FEEDBACK */
139 true, /* USB_OFFLOAD */
140 false, /* USB_OFFLOAD_BURST_MODE */
141 false, /* USB_OFFLOAD_SIDETONE_VOLM */
142 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800143 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800144 true, /* VBAT */
Sujin Panickerb904fbe2019-04-04 13:28:07 +0530145 false, /* WSA*/
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800146 true, /* EXT_HW_PLUGIN */
147 false, /* RECORD_PLAY_CONCURRENCY */
148 true, /* HDMI_PASSTHROUGH */
149 true, /* CONCURRENT_CAPTURE */
150 true, /* COMPRESS_IN */
151 true, /* BATTERY_LISTENER */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800152 true, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800153 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800154 false, /* COMPRESS_VOIP */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800155 true, /* DYNAMIC_ECNS */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800156 };
157 } else {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800158 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800159 true, /* SND_MONITOR */
160 false, /* COMPRESS_CAPTURE */
161 false, /* SOURCE_TRACK */
162 false, /* SSREC */
163 false, /* AUDIOSPHERE */
164 false, /* AFE_PROXY */
165 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
166 false, /* HDMI_EDID */
167 false, /* KEEP_ALIVE */
168 false, /* HIFI_AUDIO */
169 false, /* RECEIVER_AIDED_STEREO */
170 false, /* KPI_OPTIMIZE */
171 false, /* DISPLAY_PORT */
172 false, /* FLUENCE */
173 false, /* CUSTOM_STEREO */
174 false, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800175 true, /* SPKR_PROT */
176 false, /* FM_POWER_OPT */
177 true, /* EXTERNAL_QDSP */
178 true, /* EXTERNAL_SPEAKER */
179 false, /* EXTERNAL_SPEAKER_TFA */
180 true, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800181 false, /* DSM_FEEDBACK */
182 true, /* USB_OFFLOAD */
183 false, /* USB_OFFLOAD_BURST_MODE */
184 false, /* USB_OFFLOAD_SIDETONE_VOLM */
185 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800186 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800187 false, /* VBAT */
Sujin Panickerb904fbe2019-04-04 13:28:07 +0530188 false, /* WSA*/
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800189 false, /* EXT_HW_PLUGIN */
190 false, /* RECORD_PLAY_CONCURRENCY */
191 false, /* HDMI_PASSTHROUGH */
192 true, /* CONCURRENT_CAPTURE */
193 false, /* COMPRESS_IN */
194 false, /* BATTERY_LISTENER */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800195 false, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800196 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800197 false, /* COMPRESS_VOIP */
Arun Mirpurie008ed22019-03-21 11:21:04 -0700198 false /* DYNAMIC_ECNS */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800199 };
200 }
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800201#endif
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800202}
203
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800204void AHalConfigHelper::getAHalValues(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800205{
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800206 if (getAHalConfigs != nullptr)
207 *confValues = getAHalConfigs();
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800208
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800209 if (*confValues == nullptr) {
210 ALOGI("%s: Could not retrieve flags from configstore, setting defaults",
211 __FUNCTION__);
212 *confValues = &defaultConfigs;
213 }
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800214}
215
216extern "C" {
217
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800218void audio_extn_ahal_config_helper_init(bool is_vendor_enhanced_fwk)
219{
220 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800221 if (confInstance != nullptr)
222 confInstance->initConfigHelper(is_vendor_enhanced_fwk);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800223}
224
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800225void audio_extn_get_feature_values(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800226{
227 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800228 if (confInstance != nullptr)
229 confInstance->getAHalValues(confValues);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800230}
231
232} // extern C