-
Notifications
You must be signed in to change notification settings - Fork 5
/
wm8994.h
231 lines (199 loc) · 7.41 KB
/
wm8994.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
/**
******************************************************************************
* @file wm8994.h
* @author MCD Application Team
* @brief This file contains all the functions prototypes for the
* wm8994.c driver.
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2014 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef WM8994_H
#define WM8994_H
/* Includes ------------------------------------------------------------------*/
#include "wm8994_reg.h"
#include <stddef.h>
/** @addtogroup BSP
* @{
*/
/** @addtogroup Component
* @{
*/
/** @addtogroup WM8994
* @{
*/
/** @defgroup WM8994_Exported_Types Exported Types
* @{
*/
typedef int32_t (*WM8994_Init_Func) (void);
typedef int32_t (*WM8994_DeInit_Func) (void);
typedef int32_t (*WM8994_GetTick_Func) (void);
typedef int32_t (*WM8994_Delay_Func) (uint32_t);
typedef int32_t (*WM8994_WriteReg_Func)(uint16_t, uint16_t, uint8_t*, uint16_t);
typedef int32_t (*WM8994_ReadReg_Func) (uint16_t, uint16_t, uint8_t*, uint16_t);
typedef struct
{
WM8994_Init_Func Init;
WM8994_DeInit_Func DeInit;
uint16_t Address;
WM8994_WriteReg_Func WriteReg;
WM8994_ReadReg_Func ReadReg;
WM8994_GetTick_Func GetTick;
} WM8994_IO_t;
typedef struct
{
WM8994_IO_t IO;
wm8994_ctx_t Ctx;
uint8_t IsInitialized;
} WM8994_Object_t;
typedef struct
{
uint32_t InputDevice;
uint32_t OutputDevice;
uint32_t Frequency;
uint32_t Resolution;
uint32_t Volume;
} WM8994_Init_t;
typedef struct
{
int32_t ( *Init ) ( WM8994_Object_t *, WM8994_Init_t* );
int32_t ( *DeInit ) ( WM8994_Object_t * );
int32_t ( *ReadID ) ( WM8994_Object_t *, uint32_t * );
int32_t ( *Play ) ( WM8994_Object_t * );
int32_t ( *Pause ) ( WM8994_Object_t * );
int32_t ( *Resume ) ( WM8994_Object_t * );
int32_t ( *Stop ) ( WM8994_Object_t *, uint32_t );
int32_t ( *SetFrequency ) ( WM8994_Object_t *, uint32_t );
int32_t ( *GetFrequency ) ( WM8994_Object_t *, uint32_t*);
int32_t ( *SetVolume ) ( WM8994_Object_t *, uint32_t, uint8_t );
int32_t ( *GetVolume ) ( WM8994_Object_t *, uint32_t, uint8_t*);
int32_t ( *SetMute ) ( WM8994_Object_t *, uint32_t );
int32_t ( *SetOutputMode ) ( WM8994_Object_t *, uint32_t );
int32_t ( *SetResolution ) ( WM8994_Object_t *, uint32_t );
int32_t ( *GetResolution ) ( WM8994_Object_t *, uint32_t*);
int32_t ( *SetProtocol ) ( WM8994_Object_t *, uint32_t );
int32_t ( *GetProtocol ) ( WM8994_Object_t *, uint32_t*);
int32_t ( *Reset ) ( WM8994_Object_t * );
} WM8994_Drv_t;
/**
* @}
*/
/** @defgroup WM8994_Exported_Constants Exported Constants
* @{
*/
#define WM8994_OK (0)
#define WM8994_ERROR (-1)
/******************************************************************************/
/*************************** Codec User defines ******************************/
/******************************************************************************/
/* Audio Input Device */
#define WM8994_IN_NONE 0x00U
#define WM8994_IN_MIC1 0x01U
#define WM8994_IN_MIC2 0x02U
#define WM8994_IN_LINE1 0x03U
#define WM8994_IN_LINE2 0x04U
#define WM8994_IN_MIC1_MIC2 0x05U
/* Audio Output Device */
#define WM8994_OUT_NONE 0x00U
#define WM8994_OUT_SPEAKER 0x01U
#define WM8994_OUT_HEADPHONE 0x02U
#define WM8994_OUT_BOTH 0x03U
#define WM8994_OUT_AUTO 0x04U
/* AUDIO FREQUENCY */
#define WM8994_FREQUENCY_192K 192000
#define WM8994_FREQUENCY_176K 176400
#define WM8994_FREQUENCY_96K 96000
#define WM8994_FREQUENCY_88K 88200
#define WM8994_FREQUENCY_48K 48000
#define WM8994_FREQUENCY_44K 44100
#define WM8994_FREQUENCY_32K 32000
#define WM8994_FREQUENCY_22K 22050
#define WM8994_FREQUENCY_16K 16000
#define WM8994_FREQUENCY_11K 11025
#define WM8994_FREQUENCY_8K 8000
/* AUDIO RESOLUTION */
#define WM8994_RESOLUTION_16b 0x00U
#define WM8994_RESOLUTION_20b 0x01U
#define WM8994_RESOLUTION_24b 0x02U
#define WM8994_RESOLUTION_32b 0x03U
/* Codec stop options */
#define WM8994_PDWN_HW 0x00U
#define WM8994_PDWN_SW 0x01U
/* Volume Input Output selection */
#define VOLUME_INPUT 0U
#define VOLUME_OUTPUT 1U
/* MUTE commands */
#define WM8994_MUTE_ON 1U
#define WM8994_MUTE_OFF 0U
/* AUDIO PROTOCOL */
#define WM8994_PROTOCOL_R_JUSTIFIED ((uint16_t)0x0000)
#define WM8994_PROTOCOL_L_JUSTIFIED ((uint16_t)0x0001)
#define WM8994_PROTOCOL_I2S ((uint16_t)0x0002)
#define WM8994_PROTOCOL_DSP ((uint16_t)0x0003)
#define VOLUME_OUT_INVERT(Volume) ((uint8_t)(((Volume) * 100) / 63))
#define VOLUME_IN_INVERT(Volume) ((uint8_t)(((Volume) * 100) / 239))
/**
* @brief WM8994 ID
*/
#define WM8994_ID 0x8994U
/**
* @}
*/
/** @addtogroup WM8994_Exported_Variables
* @{
*/
/* Audio driver structure */
extern WM8994_Drv_t WM8994_Driver;
/**
* @}
*/
/** @addtogroup WM8994_Exported_Functions
* @{
*/
/*------------------------------------------------------------------------------
Audio Codec functions
------------------------------------------------------------------------------*/
/* High Layer codec functions */
int32_t WM8994_RegisterBusIO (WM8994_Object_t *pObj, WM8994_IO_t *pIO);
int32_t WM8994_Init(WM8994_Object_t *pObj, WM8994_Init_t *pInit);
int32_t WM8994_DeInit(WM8994_Object_t *pObj);
int32_t WM8994_ReadID(WM8994_Object_t *pObj, uint32_t *Id);
int32_t WM8994_Play(WM8994_Object_t *pObj);
int32_t WM8994_Pause(WM8994_Object_t *pObj);
int32_t WM8994_Resume(WM8994_Object_t *pObj);
int32_t WM8994_Stop(WM8994_Object_t *pObj, uint32_t CodecPdwnMode);
int32_t WM8994_SetVolume(WM8994_Object_t *pObj, uint32_t InputOutput, uint8_t Volume);
int32_t WM8994_GetVolume(WM8994_Object_t *pObj, uint32_t InputOutput, uint8_t *Volume);
int32_t WM8994_SetMute(WM8994_Object_t *pObj, uint32_t Cmd);
int32_t WM8994_SetOutputMode(WM8994_Object_t *pObj, uint32_t Output);
int32_t WM8994_SetResolution(WM8994_Object_t *pObj, uint32_t Resolution);
int32_t WM8994_GetResolution(WM8994_Object_t *pObj, uint32_t *Resolution);
int32_t WM8994_SetProtocol(WM8994_Object_t *pObj, uint32_t Protocol);
int32_t WM8994_GetProtocol(WM8994_Object_t *pObj, uint32_t *Protocol);
int32_t WM8994_SetFrequency(WM8994_Object_t *pObj, uint32_t AudioFreq);
int32_t WM8994_GetFrequency(WM8994_Object_t *pObj, uint32_t *AudioFreq);
int32_t WM8994_Reset(WM8994_Object_t *pObj);
/**
* @}
*/
#endif /* WM8994_H */
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/