1 /* 2 * Copyright 2017- 2021 NXP 3 * All rights reserved. 4 * 5 * 6 * SPDX-License-Identifier: BSD-3-Clause 7 */ 8 9 #ifndef _FSL_CODEC_ADAPTER_H_ 10 #define _FSL_CODEC_ADAPTER_H_ 11 #include "fsl_common.h" 12 13 /*! 14 * @addtogroup codec_adapter CODEC Adapter 15 * @ingroup codec_common 16 * @{ 17 */ 18 19 #ifdef CODEC_WM8904_ENABLE 20 #include "fsl_codec_wm8904_adapter.h" 21 22 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8904_HANDLER_SIZE)) 23 #undef HAL_CODEC_HANDLER_SIZE 24 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8904_HANDLER_SIZE 25 #endif 26 27 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 28 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8904_HANDLER_SIZE 29 #endif 30 #endif /* CODEC_WM8904_ENABLE */ 31 32 #ifdef CODEC_WM8960_ENABLE 33 #include "fsl_codec_wm8960_adapter.h" 34 35 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8960_HANDLER_SIZE)) 36 #undef HAL_CODEC_HANDLER_SIZE 37 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8960_HANDLER_SIZE 38 #endif 39 40 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 41 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8960_HANDLER_SIZE 42 #endif 43 44 #endif /* CODEC_WM8960_ENABLE */ 45 46 #ifdef CODEC_WM8962_ENABLE 47 #include "fsl_codec_wm8962_adapter.h" 48 49 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8962_HANDLER_SIZE)) 50 #undef HAL_CODEC_HANDLER_SIZE 51 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8962_HANDLER_SIZE 52 #endif 53 54 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 55 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8962_HANDLER_SIZE 56 #endif 57 58 #endif /* CODEC_WM8962_ENABLE */ 59 60 #ifdef CODEC_WM8524_ENABLE 61 #include "fsl_codec_wm8524_adapter.h" 62 63 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_WM8524_HANDLER_SIZE)) 64 #undef HAL_CODEC_HANDLER_SIZE 65 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8524_HANDLER_SIZE 66 #endif 67 68 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 69 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_WM8524_HANDLER_SIZE 70 #endif 71 72 #endif /* CODEC_WM8524_ENABLE */ 73 74 #ifdef CODEC_SGTL5000_ENABLE 75 #include "fsl_codec_sgtl_adapter.h" 76 77 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_SGTL_HANDLER_SIZE)) 78 #undef HAL_CODEC_HANDLER_SIZE 79 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_SGTL_HANDLER_SIZE 80 #endif 81 82 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 83 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_SGTL_HANDLER_SIZE 84 #endif 85 86 #endif /* CODEC_SGTL5000_ENABLE */ 87 88 #ifdef CODEC_DA7212_ENABLE 89 #include "fsl_codec_da7212_adapter.h" 90 91 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_DA7212_HANDLER_SIZE)) 92 #undef HAL_CODEC_HANDLER_SIZE 93 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_DA7212_HANDLER_SIZE 94 #endif 95 96 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 97 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_DA7212_HANDLER_SIZE 98 #endif 99 100 #endif /* CODEC_DA7212_ENABLE */ 101 102 #ifdef CODEC_CS42888_ENABLE 103 #include "fsl_codec_cs42888_adapter.h" 104 105 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_CS42888_HANDLER_SIZE)) 106 #undef HAL_CODEC_HANDLER_SIZE 107 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42888_HANDLER_SIZE 108 #endif 109 110 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 111 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42888_HANDLER_SIZE 112 #endif 113 114 #endif /* CODEC_CS42888_ENABLE */ 115 116 #ifdef CODEC_CS42448_ENABLE 117 #include "fsl_codec_cs42448_adapter.h" 118 119 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_CS42448_HANDLER_SIZE)) 120 #undef HAL_CODEC_HANDLER_SIZE 121 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42448_HANDLER_SIZE 122 #endif 123 124 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 125 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_CS42448_HANDLER_SIZE 126 #endif 127 128 #endif /* CODEC_CS42448_ENABLE */ 129 130 #ifdef CODEC_AK4497_ENABLE 131 #include "fsl_codec_ak4497_adapter.h" 132 133 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_AK4497_HANDLER_SIZE)) 134 #undef HAL_CODEC_HANDLER_SIZE 135 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4497_HANDLER_SIZE 136 #endif 137 138 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 139 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4497_HANDLER_SIZE 140 #endif 141 142 #endif /* CODEC_AK4497_ENABLE */ 143 144 #ifdef CODEC_AK4458_ENABLE 145 #include "fsl_codec_ak4458_adapter.h" 146 147 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_AK4458_HANDLER_SIZE)) 148 #undef HAL_CODEC_HANDLER_SIZE 149 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4458_HANDLER_SIZE 150 #endif 151 152 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 153 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_AK4458_HANDLER_SIZE 154 #endif 155 156 #endif /* CODEC_AK4458_ENABLE */ 157 158 #ifdef CODEC_TFA9XXX_ENABLE 159 #include "fsl_codec_tfa9xxx_adapter.h" 160 161 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_TFA98XX_HANDLER_SIZE)) 162 #undef HAL_CODEC_HANDLER_SIZE 163 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA98XX_HANDLER_SIZE 164 #endif 165 166 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 167 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA98XX_HANDLER_SIZE 168 #endif 169 170 #endif /* CODEC_TFA9XXX_ENABLE */ 171 172 #ifdef CODEC_TFA9896_ENABLE 173 #include "fsl_codec_tfa9896_adapter.h" 174 175 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_TFA9896_HANDLER_SIZE)) 176 #undef HAL_CODEC_HANDLER_SIZE 177 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA9896_HANDLER_SIZE 178 #endif 179 180 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 181 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_TFA9896_HANDLER_SIZE 182 #endif 183 184 #endif /* CODEC_TFA9896_ENABLE */ 185 186 #ifdef CODEC_PCM512X_ENABLE 187 #include "fsl_codec_pcm512x_adapter.h" 188 189 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_PCM512X_HANDLER_SIZE)) 190 #undef HAL_CODEC_HANDLER_SIZE 191 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_PCM512X_HANDLER_SIZE 192 #endif 193 194 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 195 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_PCM512X_HANDLER_SIZE 196 #endif 197 198 #endif /* CODEC_PCM512X_ENABLE */ 199 200 #ifdef CODEC_PCM186X_ENABLE 201 #include "fsl_codec_pcm186x_adapter.h" 202 203 #if ((defined HAL_CODEC_HANDLER_SIZE) && (HAL_CODEC_HANDLER_SIZE < HAL_CODEC_PCM186X_HANDLER_SIZE)) 204 #undef HAL_CODEC_HANDLER_SIZE 205 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_PCM186X_HANDLER_SIZE 206 #endif 207 208 #if (!(defined HAL_CODEC_HANDLER_SIZE)) 209 #define HAL_CODEC_HANDLER_SIZE HAL_CODEC_PCM186X_HANDLER_SIZE 210 #endif 211 212 #endif /* CODEC_PCM186X_ENABLE */ 213 214 #ifndef HAL_CODEC_HANDLER_SIZE 215 #define HAL_CODEC_HANDLER_SIZE 128U 216 #endif 217 /******************************************************************************* 218 * Definitions 219 ******************************************************************************/ 220 /*! @brief codec type 221 * @anchor _codec_type 222 */ 223 enum 224 { 225 kCODEC_WM8904, /*!< wm8904 */ 226 kCODEC_WM8960, /*!< wm8960 */ 227 kCODEC_WM8524, /*!< wm8524 */ 228 kCODEC_SGTL5000, /*!< sgtl5000 */ 229 kCODEC_DA7212, /*!< da7212 */ 230 kCODEC_CS42888, /*!< CS42888 */ 231 kCODEC_CS42448, /*!< CS42448 */ 232 kCODEC_AK4497, /*!< AK4497 */ 233 kCODEC_AK4458, /*!< ak4458 */ 234 kCODEC_TFA9XXX, /*!< tfa9xxx */ 235 kCODEC_TFA9896, /*!< tfa9896 */ 236 kCODEC_PCM512X, /*!< pcm512x */ 237 kCODEC_PCM186X, /*!< pcm186x */ 238 kCODEC_WM8962, /*!< wm8962 */ 239 }; 240 /******************************************************************************* 241 * API 242 ******************************************************************************/ 243 244 #if defined(__cplusplus) 245 extern "C" { 246 #endif 247 #if (defined CODEC_MULTI_ADAPTERS && CODEC_MULTI_ADAPTERS) 248 /*! 249 * @brief Codec initilization. 250 * 251 * @param handle codec handle. 252 * @param config codec configuration. 253 * @return kStatus_Success is success, else initial failed. 254 */ 255 status_t HAL_CODEC_Init(void *handle, void *config); 256 257 /*! 258 * @brief Codec de-initilization. 259 * 260 * @param handle codec handle. 261 * @return kStatus_Success is success, else de-initial failed. 262 */ 263 status_t HAL_CODEC_Deinit(void *handle); 264 265 /*! 266 * @brief set audio data format. 267 * 268 * @param handle codec handle. 269 * @param mclk master clock frequency in HZ. 270 * @param sampleRate sample rate in HZ. 271 * @param bitWidth bit width. 272 * @return kStatus_Success is success, else configure failed. 273 */ 274 status_t HAL_CODEC_SetFormat(void *handle, uint32_t mclk, uint32_t sampleRate, uint32_t bitWidth); 275 276 /*! 277 * @brief set audio codec module volume. 278 * 279 * @param handle codec handle. 280 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel. 281 * @param volume volume value, support 0 ~ 100, 0 is mute, 100 is the maximum volume value. 282 * @return kStatus_Success is success, else configure failed. 283 */ 284 status_t HAL_CODEC_SetVolume(void *handle, uint32_t playChannel, uint32_t volume); 285 286 /*! 287 * @brief set audio codec module mute. 288 * 289 * @param handle codec handle. 290 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel. 291 * @param isMute true is mute, false is unmute. 292 * @return kStatus_Success is success, else configure failed. 293 */ 294 status_t HAL_CODEC_SetMute(void *handle, uint32_t playChannel, bool isMute); 295 296 /*! 297 * @brief set audio codec module power. 298 * 299 * @param handle codec handle. 300 * @param module audio codec module. 301 * @param powerOn true is power on, false is power down. 302 * @return kStatus_Success is success, else configure failed. 303 */ 304 status_t HAL_CODEC_SetPower(void *handle, uint32_t module, bool powerOn); 305 306 /*! 307 * @brief codec set record source. 308 * 309 * @param handle codec handle. 310 * @param recordSource audio codec record source, can be a value or combine value of _codec_record_source. 311 * 312 * @return kStatus_Success is success, else configure failed. 313 */ 314 status_t HAL_CODEC_SetRecord(void *handle, uint32_t recordSource); 315 316 /*! 317 * @brief codec set record channel. 318 * 319 * @param handle codec handle. 320 * @param leftRecordChannel audio codec record channel, reference _codec_record_channel, can be a value or combine value 321 of member in _codec_record_channel. 322 * @param rightRecordChannel audio codec record channel, reference _codec_record_channel, can be a value combine of 323 member in _codec_record_channel. 324 325 * @return kStatus_Success is success, else configure failed. 326 */ 327 status_t HAL_CODEC_SetRecordChannel(void *handle, uint32_t leftRecordChannel, uint32_t rightRecordChannel); 328 329 /*! 330 * @brief codec set play source. 331 * 332 * @param handle codec handle. 333 * @param playSource audio codec play source, can be a value or combine value of _codec_play_source. 334 * 335 * @return kStatus_Success is success, else configure failed. 336 */ 337 status_t HAL_CODEC_SetPlay(void *handle, uint32_t playSource); 338 339 /*! 340 * @brief codec module control. 341 * 342 * This function is used for codec module control, support switch digital interface cmd, can be expand to support codec 343 * module specific feature 344 * 345 * @param handle codec handle. 346 * @param cmd module control cmd, reference _codec_module_ctrl_cmd. 347 * @param data value to write, when cmd is kCODEC_ModuleRecordSourceChannel, the data should be a value combine 348 * of channel and source, please reference macro CODEC_MODULE_RECORD_SOURCE_CHANNEL(source, LP, LN, RP, RN), reference 349 * codec specific driver for detail configurations. 350 * @return kStatus_Success is success, else configure failed. 351 */ 352 status_t HAL_CODEC_ModuleControl(void *handle, uint32_t cmd, uint32_t data); 353 #endif 354 #if defined(__cplusplus) 355 } 356 #endif 357 358 /*! @} */ 359 360 #endif /* _FSL_CODEC_ADAPTER_H_ */ 361