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