blob: cfc673ec474accbdb643f2abb81c2b3b786f3c0a [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());
65 handle = nullptr;
66 dlclose(handle);
67 }
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 */
101 true, /* EXT_HW_PLUGIN */
102 false, /* RECORD_PLAY_CONCURRENCY */
103 true, /* HDMI_PASSTHROUGH */
104 false, /* CONCURRENT_CAPTURE */
105 false, /* COMPRESS_IN */
106 false, /* BATTERY_LISTENER */
107 true, /* COMPRESS_METADATA_NEEDED */
108 false, /* INCALL_MUSIC */
109 false, /* COMPRESS_VOIP */
Arun Mirpurie008ed22019-03-21 11:21:04 -0700110 true /* DYNAMIC_ECNS */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800111 };
112#else
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800113 if (isVendorEnhancedFwk) {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800114 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800115 true, /* SND_MONITOR */
116 false, /* COMPRESS_CAPTURE */
117 true, /* SOURCE_TRACK */
118 true, /* SSREC */
119 true, /* AUDIOSPHERE */
120 true, /* AFE_PROXY */
121 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
122 true, /* HDMI_EDID */
123 true, /* KEEP_ALIVE */
124 false, /* HIFI_AUDIO */
125 true, /* RECEIVER_AIDED_STEREO */
126 true, /* KPI_OPTIMIZE */
127 true, /* DISPLAY_PORT */
128 true, /* FLUENCE */
129 true, /* CUSTOM_STEREO */
130 true, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800131 true, /* SPKR_PROT */
132 true, /* FM_POWER_OPT */
133 false, /* EXTERNAL_QDSP */
134 false, /* EXTERNAL_SPEAKER */
135 false, /* EXTERNAL_SPEAKER_TFA */
136 false, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800137 false, /* DSM_FEEDBACK */
138 true, /* USB_OFFLOAD */
139 false, /* USB_OFFLOAD_BURST_MODE */
140 false, /* USB_OFFLOAD_SIDETONE_VOLM */
141 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800142 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800143 true, /* VBAT */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800144 true, /* EXT_HW_PLUGIN */
145 false, /* RECORD_PLAY_CONCURRENCY */
146 true, /* HDMI_PASSTHROUGH */
147 true, /* CONCURRENT_CAPTURE */
148 true, /* COMPRESS_IN */
149 true, /* BATTERY_LISTENER */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800150 true, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800151 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800152 false, /* COMPRESS_VOIP */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800153 true, /* DYNAMIC_ECNS */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800154 };
155 } else {
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800156 defaultConfigs = {
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800157 true, /* SND_MONITOR */
158 false, /* COMPRESS_CAPTURE */
159 false, /* SOURCE_TRACK */
160 false, /* SSREC */
161 false, /* AUDIOSPHERE */
162 false, /* AFE_PROXY */
163 false, /* USE_DEEP_AS_PRIMARY_OUTPUT */
164 false, /* HDMI_EDID */
165 false, /* KEEP_ALIVE */
166 false, /* HIFI_AUDIO */
167 false, /* RECEIVER_AIDED_STEREO */
168 false, /* KPI_OPTIMIZE */
169 false, /* DISPLAY_PORT */
170 false, /* FLUENCE */
171 false, /* CUSTOM_STEREO */
172 false, /* ANC_HEADSET */
Arun Mirpuri5dc77802019-02-26 16:32:42 -0800173 true, /* SPKR_PROT */
174 false, /* FM_POWER_OPT */
175 true, /* EXTERNAL_QDSP */
176 true, /* EXTERNAL_SPEAKER */
177 false, /* EXTERNAL_SPEAKER_TFA */
178 true, /* HWDEP_CAL */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800179 false, /* DSM_FEEDBACK */
180 true, /* USB_OFFLOAD */
181 false, /* USB_OFFLOAD_BURST_MODE */
182 false, /* USB_OFFLOAD_SIDETONE_VOLM */
183 true, /* A2DP_OFFLOAD */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800184 true, /* HFP */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800185 false, /* VBAT */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800186 false, /* EXT_HW_PLUGIN */
187 false, /* RECORD_PLAY_CONCURRENCY */
188 false, /* HDMI_PASSTHROUGH */
189 true, /* CONCURRENT_CAPTURE */
190 false, /* COMPRESS_IN */
191 false, /* BATTERY_LISTENER */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800192 false, /* COMPRESS_METADATA_NEEDED */
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800193 true, /* INCALL_MUSIC */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800194 false, /* COMPRESS_VOIP */
Arun Mirpurie008ed22019-03-21 11:21:04 -0700195 false /* DYNAMIC_ECNS */
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800196 };
197 }
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800198#endif
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800199}
200
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800201void AHalConfigHelper::getAHalValues(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800202{
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800203 if (getAHalConfigs != nullptr)
204 *confValues = getAHalConfigs();
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800205
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800206 if (*confValues == nullptr) {
207 ALOGI("%s: Could not retrieve flags from configstore, setting defaults",
208 __FUNCTION__);
209 *confValues = &defaultConfigs;
210 }
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800211}
212
213extern "C" {
214
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800215void audio_extn_ahal_config_helper_init(bool is_vendor_enhanced_fwk)
216{
217 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800218 if (confInstance != nullptr)
219 confInstance->initConfigHelper(is_vendor_enhanced_fwk);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800220}
221
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800222void audio_extn_get_feature_values(AHalValues* *confValues)
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800223{
224 AHalConfigHelper* confInstance = AHalConfigHelper::getAHalConfInstance();
Aniket Kumar Latab91e4cf2019-02-11 18:55:23 -0800225 if (confInstance != nullptr)
226 confInstance->getAHalValues(confValues);
Aniket Kumar Lata808e8d62019-01-28 22:54:28 -0800227}
228
229} // extern C