1 /*
2 * Copyright 2021-2023 NXP
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #ifndef _FSL_CODEC_WM8960_ADAPTER_H_
8 #define _FSL_CODEC_WM8960_ADAPTER_H_
9
10 #include "fsl_wm8960.h"
11
12 /*!
13 * @addtogroup wm8960_adapter
14 * @ingroup codec_common
15 * @{
16 */
17
18 /*******************************************************************************
19 * Definitions
20 ******************************************************************************/
21 /*!@brief codec handler size */
22 #define HAL_CODEC_WM8960_HANDLER_SIZE (WM8960_I2C_HANDLER_SIZE + 4)
23 /*******************************************************************************
24 * API
25 ******************************************************************************/
26
27 #if defined(__cplusplus)
28 extern "C" {
29 #endif
30 /*!
31 * @brief Codec initilization.
32 *
33 * @param handle codec handle.
34 * @param config codec configuration.
35 * @return kStatus_Success is success, else initial failed.
36 */
37 status_t HAL_CODEC_WM8960_Init(void *handle, void *config);
38
39 /*!
40 * @brief Codec de-initilization.
41 *
42 * @param handle codec handle.
43 * @return kStatus_Success is success, else de-initial failed.
44 */
45 status_t HAL_CODEC_WM8960_Deinit(void *handle);
46
47 /*!
48 * @brief set audio data format.
49 *
50 * @param handle codec handle.
51 * @param mclk master clock frequency in HZ.
52 * @param sampleRate sample rate in HZ.
53 * @param bitWidth bit width.
54 * @return kStatus_Success is success, else configure failed.
55 */
56 status_t HAL_CODEC_WM8960_SetFormat(void *handle, uint32_t mclk, uint32_t sampleRate, uint32_t bitWidth);
57
58 /*!
59 * @brief set audio codec module volume.
60 *
61 * @param handle codec handle.
62 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
63 * @param volume volume value, support 0 ~ 100, 0 is mute, 100 is the maximum volume value.
64 * @return kStatus_Success is success, else configure failed.
65 */
66 status_t HAL_CODEC_WM8960_SetVolume(void *handle, uint32_t playChannel, uint32_t volume);
67
68 /*!
69 * @brief set audio codec module mute.
70 *
71 * @param handle codec handle.
72 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
73 * @param isMute true is mute, false is unmute.
74 * @return kStatus_Success is success, else configure failed.
75 */
76 status_t HAL_CODEC_WM8960_SetMute(void *handle, uint32_t playChannel, bool isMute);
77
78 /*!
79 * @brief set audio codec module power.
80 *
81 * @param handle codec handle.
82 * @param module audio codec module.
83 * @param powerOn true is power on, false is power down.
84 * @return kStatus_Success is success, else configure failed.
85 */
86 status_t HAL_CODEC_WM8960_SetPower(void *handle, uint32_t module, bool powerOn);
87
88 /*!
89 * @brief codec set record source.
90 *
91 * @param handle codec handle.
92 * @param recordSource audio codec record source, can be a value or combine value of _codec_record_source.
93 *
94 * @return kStatus_Success is success, else configure failed.
95 */
96 status_t HAL_CODEC_WM8960_SetRecord(void *handle, uint32_t recordSource);
97
98 /*!
99 * @brief codec set record channel.
100 *
101 * @param handle codec handle.
102 * @param leftRecordChannel audio codec record channel, reference _codec_record_channel, can be a value or combine value
103 of member in _codec_record_channel.
104 * @param rightRecordChannel audio codec record channel, reference _codec_record_channel, can be a value combine of
105 member in _codec_record_channel.
106
107 * @return kStatus_Success is success, else configure failed.
108 */
109 status_t HAL_CODEC_WM8960_SetRecordChannel(void *handle, uint32_t leftRecordChannel, uint32_t rightRecordChannel);
110
111 /*!
112 * @brief codec set play source.
113 *
114 * @param handle codec handle.
115 * @param playSource audio codec play source, can be a value or combine value of _codec_play_source.
116 *
117 * @return kStatus_Success is success, else configure failed.
118 */
119 status_t HAL_CODEC_WM8960_SetPlay(void *handle, uint32_t playSource);
120
121 /*!
122 * @brief codec module control.
123 *
124 * This function is used for codec module control, support switch digital interface cmd, can be expand to support codec
125 * module specific feature
126 *
127 * @param handle codec handle.
128 * @param cmd module control cmd, reference _codec_module_ctrl_cmd.
129 * @param data value to write, when cmd is kCODEC_ModuleRecordSourceChannel, the data should be a value combine
130 * of channel and source, please reference macro CODEC_MODULE_RECORD_SOURCE_CHANNEL(source, LP, LN, RP, RN), reference
131 * codec specific driver for detail configurations.
132 * @return kStatus_Success is success, else configure failed.
133 */
134 status_t HAL_CODEC_WM8960_ModuleControl(void *handle, uint32_t cmd, uint32_t data);
135
136 #if !(defined CODEC_MULTI_ADAPTERS && CODEC_MULTI_ADAPTERS)
137 /*!
138 * @brief Codec initilization.
139 *
140 * @param handle codec handle.
141 * @param config codec configuration.
142 * @return kStatus_Success is success, else initial failed.
143 */
HAL_CODEC_Init(void * handle,void * config)144 static inline status_t HAL_CODEC_Init(void *handle, void *config)
145 {
146 return HAL_CODEC_WM8960_Init(handle, config);
147 }
148
149 /*!
150 * @brief Codec de-initilization.
151 *
152 * @param handle codec handle.
153 * @return kStatus_Success is success, else de-initial failed.
154 */
HAL_CODEC_Deinit(void * handle)155 static inline status_t HAL_CODEC_Deinit(void *handle)
156 {
157 return HAL_CODEC_WM8960_Deinit(handle);
158 }
159
160 /*!
161 * @brief set audio data format.
162 *
163 * @param handle codec handle.
164 * @param mclk master clock frequency in HZ.
165 * @param sampleRate sample rate in HZ.
166 * @param bitWidth bit width.
167 * @return kStatus_Success is success, else configure failed.
168 */
HAL_CODEC_SetFormat(void * handle,uint32_t mclk,uint32_t sampleRate,uint32_t bitWidth)169 static inline status_t HAL_CODEC_SetFormat(void *handle, uint32_t mclk, uint32_t sampleRate, uint32_t bitWidth)
170 {
171 return HAL_CODEC_WM8960_SetFormat(handle, mclk, sampleRate, bitWidth);
172 }
173
174 /*!
175 * @brief set audio codec module volume.
176 *
177 * @param handle codec handle.
178 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
179 * @param volume volume value, support 0 ~ 100, 0 is mute, 100 is the maximum volume value.
180 * @return kStatus_Success is success, else configure failed.
181 */
HAL_CODEC_SetVolume(void * handle,uint32_t playChannel,uint32_t volume)182 static inline status_t HAL_CODEC_SetVolume(void *handle, uint32_t playChannel, uint32_t volume)
183 {
184 return HAL_CODEC_WM8960_SetVolume(handle, playChannel, volume);
185 }
186
187 /*!
188 * @brief set audio codec module mute.
189 *
190 * @param handle codec handle.
191 * @param playChannel audio codec play channel, can be a value or combine value of _codec_play_channel.
192 * @param isMute true is mute, false is unmute.
193 * @return kStatus_Success is success, else configure failed.
194 */
HAL_CODEC_SetMute(void * handle,uint32_t playChannel,bool isMute)195 static inline status_t HAL_CODEC_SetMute(void *handle, uint32_t playChannel, bool isMute)
196 {
197 return HAL_CODEC_WM8960_SetMute(handle, playChannel, isMute);
198 }
199
200 /*!
201 * @brief set audio codec module power.
202 *
203 * @param handle codec handle.
204 * @param module audio codec module.
205 * @param powerOn true is power on, false is power down.
206 * @return kStatus_Success is success, else configure failed.
207 */
HAL_CODEC_SetPower(void * handle,uint32_t module,bool powerOn)208 static inline status_t HAL_CODEC_SetPower(void *handle, uint32_t module, bool powerOn)
209 {
210 return HAL_CODEC_WM8960_SetPower(handle, module, powerOn);
211 }
212
213 /*!
214 * @brief codec set record source.
215 *
216 * @param handle codec handle.
217 * @param recordSource audio codec record source, can be a value or combine value of _codec_record_source.
218 *
219 * @return kStatus_Success is success, else configure failed.
220 */
HAL_CODEC_SetRecord(void * handle,uint32_t recordSource)221 static inline status_t HAL_CODEC_SetRecord(void *handle, uint32_t recordSource)
222 {
223 return HAL_CODEC_WM8960_SetRecord(handle, recordSource);
224 }
225
226 /*!
227 * @brief codec set record channel.
228 *
229 * @param handle codec handle.
230 * @param leftRecordChannel audio codec record channel, reference _codec_record_channel, can be a value or combine value
231 of member in _codec_record_channel.
232 * @param rightRecordChannel audio codec record channel, reference _codec_record_channel, can be a value combine of
233 member in _codec_record_channel.
234
235 * @return kStatus_Success is success, else configure failed.
236 */
HAL_CODEC_SetRecordChannel(void * handle,uint32_t leftRecordChannel,uint32_t rightRecordChannel)237 static inline status_t HAL_CODEC_SetRecordChannel(void *handle, uint32_t leftRecordChannel, uint32_t rightRecordChannel)
238 {
239 return HAL_CODEC_WM8960_SetRecordChannel(handle, leftRecordChannel, rightRecordChannel);
240 }
241
242 /*!
243 * @brief codec set play source.
244 *
245 * @param handle codec handle.
246 * @param playSource audio codec play source, can be a value or combine value of _codec_play_source.
247 *
248 * @return kStatus_Success is success, else configure failed.
249 */
HAL_CODEC_SetPlay(void * handle,uint32_t playSource)250 static inline status_t HAL_CODEC_SetPlay(void *handle, uint32_t playSource)
251 {
252 return HAL_CODEC_WM8960_SetPlay(handle, playSource);
253 }
254
255 /*!
256 * @brief codec module control.
257 *
258 * This function is used for codec module control, support switch digital interface cmd, can be expand to support codec
259 * module specific feature
260 *
261 * @param handle codec handle.
262 * @param cmd module control cmd, reference _codec_module_ctrl_cmd.
263 * @param data value to write, when cmd is kCODEC_ModuleRecordSourceChannel, the data should be a value combine
264 * of channel and source, please reference macro CODEC_MODULE_RECORD_SOURCE_CHANNEL(source, LP, LN, RP, RN), reference
265 * codec specific driver for detail configurations.
266 * @return kStatus_Success is success, else configure failed.
267 */
HAL_CODEC_ModuleControl(void * handle,uint32_t cmd,uint32_t data)268 static inline status_t HAL_CODEC_ModuleControl(void *handle, uint32_t cmd, uint32_t data)
269 {
270 return HAL_CODEC_WM8960_ModuleControl(handle, cmd, data);
271 }
272 #endif
273
274 #if defined(__cplusplus)
275 }
276 #endif
277
278 /*! @} */
279
280 #endif /* _FSL_WM8904_ADAPTER_H_ */
281