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