Go to the documentation of this file.
10 #define _FSL_WM8960_H_
26 #define FSL_WM8960_DRIVER_VERSION (MAKE_VERSION(2, 1, 1))
30 #ifndef WM8960_I2C_HANDLER_SIZE
31 #define WM8960_I2C_HANDLER_SIZE CODEC_I2C_MASTER_HANDLER_SIZE
35 #define WM8960_LINVOL 0x0
36 #define WM8960_RINVOL 0x1
37 #define WM8960_LOUT1 0x2
38 #define WM8960_ROUT1 0x3
39 #define WM8960_CLOCK1 0x4
40 #define WM8960_DACCTL1 0x5
41 #define WM8960_DACCTL2 0x6
42 #define WM8960_IFACE1 0x7
43 #define WM8960_CLOCK2 0x8
44 #define WM8960_IFACE2 0x9
45 #define WM8960_LDAC 0xa
46 #define WM8960_RDAC 0xb
48 #define WM8960_RESET 0xf
49 #define WM8960_3D 0x10
50 #define WM8960_ALC1 0x11
51 #define WM8960_ALC2 0x12
52 #define WM8960_ALC3 0x13
53 #define WM8960_NOISEG 0x14
54 #define WM8960_LADC 0x15
55 #define WM8960_RADC 0x16
56 #define WM8960_ADDCTL1 0x17
57 #define WM8960_ADDCTL2 0x18
58 #define WM8960_POWER1 0x19
59 #define WM8960_POWER2 0x1a
60 #define WM8960_ADDCTL3 0x1b
61 #define WM8960_APOP1 0x1c
62 #define WM8960_APOP2 0x1d
64 #define WM8960_LINPATH 0x20
65 #define WM8960_RINPATH 0x21
66 #define WM8960_LOUTMIX 0x22
68 #define WM8960_ROUTMIX 0x25
69 #define WM8960_MONOMIX1 0x26
70 #define WM8960_MONOMIX2 0x27
71 #define WM8960_LOUT2 0x28
72 #define WM8960_ROUT2 0x29
73 #define WM8960_MONO 0x2a
74 #define WM8960_INBMIX1 0x2b
75 #define WM8960_INBMIX2 0x2c
76 #define WM8960_BYPASS1 0x2d
77 #define WM8960_BYPASS2 0x2e
78 #define WM8960_POWER3 0x2f
79 #define WM8960_ADDCTL4 0x30
80 #define WM8960_CLASSD1 0x31
82 #define WM8960_CLASSD3 0x33
83 #define WM8960_PLL1 0x34
84 #define WM8960_PLL2 0x35
85 #define WM8960_PLL3 0x36
86 #define WM8960_PLL4 0x37
89 #define WM8960_CACHEREGNUM 56
92 #define WM8960_IFACE1_FORMAT_MASK 0x03
93 #define WM8960_IFACE1_FORMAT_SHIFT 0x00
94 #define WM8960_IFACE1_FORMAT_RJ 0x00
95 #define WM8960_IFACE1_FORMAT_LJ 0x01
96 #define WM8960_IFACE1_FORMAT_I2S 0x02
97 #define WM8960_IFACE1_FORMAT_DSP 0x03
98 #define WM8960_IFACE1_FORMAT(x) ((x << WM8960_IFACE1_FORMAT_SHIFT) & WM8960_IFACE1_FORMAT_MASK)
101 #define WM8960_IFACE1_WL_MASK 0x0C
102 #define WM8960_IFACE1_WL_SHIFT 0x02
103 #define WM8960_IFACE1_WL_16BITS 0x00
104 #define WM8960_IFACE1_WL_20BITS 0x01
105 #define WM8960_IFACE1_WL_24BITS 0x02
106 #define WM8960_IFACE1_WL_32BITS 0x03
107 #define WM8960_IFACE1_WL(x) ((x << WM8960_IFACE1_WL_SHIFT) & WM8960_IFACE1_WL_MASK)
110 #define WM8960_IFACE1_LRP_MASK 0x10
111 #define WM8960_IFACE1_LRP_SHIFT 0x04
112 #define WM8960_IFACE1_LRCLK_NORMAL_POL 0x00
113 #define WM8960_IFACE1_LRCLK_INVERT_POL 0x01
114 #define WM8960_IFACE1_DSP_MODEA 0x00
115 #define WM8960_IFACE1_DSP_MODEB 0x01
116 #define WM8960_IFACE1_LRP(x) ((x << WM8960_IFACE1_LRP_SHIFT) & WM8960_IFACE1_LRP_MASK)
119 #define WM8960_IFACE1_DLRSWAP_MASK 0x20
120 #define WM8960_IFACE1_DLRSWAP_SHIFT 0x05
121 #define WM8960_IFACE1_DACCH_NORMAL 0x00
122 #define WM8960_IFACE1_DACCH_SWAP 0x01
123 #define WM8960_IFACE1_DLRSWAP(x) ((x << WM8960_IFACE1_DLRSWAP_SHIFT) & WM8960_IFACE1_DLRSWAP_MASK)
126 #define WM8960_IFACE1_MS_MASK 0x40
127 #define WM8960_IFACE1_MS_SHIFT 0x06
128 #define WM8960_IFACE1_SLAVE 0x00
129 #define WM8960_IFACE1_MASTER 0x01
130 #define WM8960_IFACE1_MS(x) ((x << WM8960_IFACE1_MS_SHIFT) & WM8960_IFACE1_MS_MASK)
133 #define WM8960_IFACE1_BCLKINV_MASK 0x80
134 #define WM8960_IFACE1_BCLKINV_SHIFT 0x07
135 #define WM8960_IFACE1_BCLK_NONINVERT 0x00
136 #define WM8960_IFACE1_BCLK_INVERT 0x01
137 #define WM8960_IFACE1_BCLKINV(x) ((x << WM8960_IFACE1_BCLKINV_SHIFT) & WM8960_IFACE1_BCLKINV_MASK)
140 #define WM8960_IFACE1_ALRSWAP_MASK 0x100
141 #define WM8960_IFACE1_ALRSWAP_SHIFT 0x08
142 #define WM8960_IFACE1_ADCCH_NORMAL 0x00
143 #define WM8960_IFACE1_ADCCH_SWAP 0x01
144 #define WM8960_IFACE1_ALRSWAP(x) ((x << WM8960_IFACE1_ALRSWAP_SHIFT) & WM8960_IFACE1_ALRSWAP_MASK)
147 #define WM8960_POWER1_VREF_MASK 0x40
148 #define WM8960_POWER1_VREF_SHIFT 0x06
150 #define WM8960_POWER1_AINL_MASK 0x20
151 #define WM8960_POWER1_AINL_SHIFT 0x05
153 #define WM8960_POWER1_AINR_MASK 0x10
154 #define WM8960_POWER1_AINR_SHIFT 0x04
156 #define WM8960_POWER1_ADCL_MASK 0x08
157 #define WM8960_POWER1_ADCL_SHIFT 0x03
159 #define WM8960_POWER1_ADCR_MASK 0x0
160 #define WM8960_POWER1_ADCR_SHIFT 0x02
162 #define WM8960_POWER1_MICB_MASK 0x02
163 #define WM8960_POWER1_MICB_SHIFT 0x01
165 #define WM8960_POWER1_DIGENB_MASK 0x01
166 #define WM8960_POWER1_DIGENB_SHIFT 0x00
169 #define WM8960_POWER2_DACL_MASK 0x100
170 #define WM8960_POWER2_DACL_SHIFT 0x08
172 #define WM8960_POWER2_DACR_MASK 0x80
173 #define WM8960_POWER2_DACR_SHIFT 0x07
175 #define WM8960_POWER2_LOUT1_MASK 0x40
176 #define WM8960_POWER2_LOUT1_SHIFT 0x06
178 #define WM8960_POWER2_ROUT1_MASK 0x20
179 #define WM8960_POWER2_ROUT1_SHIFT 0x05
181 #define WM8960_POWER2_SPKL_MASK 0x10
182 #define WM8960_POWER2_SPKL_SHIFT 0x04
184 #define WM8960_POWER2_SPKR_MASK 0x08
185 #define WM8960_POWER2_SPKR_SHIFT 0x03
187 #define WM8960_POWER3_LMIC_MASK 0x20
188 #define WM8960_POWER3_LMIC_SHIFT 0x05
189 #define WM8960_POWER3_RMIC_MASK 0x10
190 #define WM8960_POWER3_RMIC_SHIFT 0x04
191 #define WM8960_POWER3_LOMIX_MASK 0x08
192 #define WM8960_POWER3_LOMIX_SHIFT 0x03
193 #define WM8960_POWER3_ROMIX_MASK 0x04
194 #define WM8960_POWER3_ROMIX_SHIFT 0x02
196 #define WM8960_I2C_ADDR 0x1A
198 #define WM8960_I2C_BAUDRATE (100000U)
328 #if defined(__cplusplus)
505 #if defined(__cplusplus)
@ kWM8960_BusLeftJustified
status_t WM8960_SetVolume(wm8960_handle_t *handle, wm8960_module_t module, uint32_t volume)
Set the volume of different modules in WM8960.
status_t WM8960_SetProtocol(wm8960_handle_t *handle, wm8960_protocol_t protocol)
Set the audio transfer protocol.
wm8960_audio_format_t format
_wm8960_audio_bit_width
audio bit width
@ kWM8960_AudioSampleRate48KHz
wm8960_play_source_t playSource
_wm8960_sample_rate
audio sample rate definition
status_t WM8960_WriteReg(wm8960_handle_t *handle, uint8_t reg, uint16_t val)
Write register to WM8960 using I2C.
status_t WM8960_SetLeftInput(wm8960_handle_t *handle, wm8960_input_t input)
Set left audio input source in WM8960.
const wm8960_config_t * config
wm8960_input_t rightInputSource
status_t WM8960_SetMute(wm8960_handle_t *handle, wm8960_module_t module, bool isEnabled)
Mute modules in WM8960.
uint32_t WM8960_GetVolume(wm8960_handle_t *handle, wm8960_module_t module)
Get the volume of different modules in WM8960.
enum _wm8960_route wm8960_route_t
WM8960 data route. Only provide some typical data route, not all route listed. Note: Users cannot com...
enum _wm8960_input wm8960_input_t
wm8960 input source
status_t WM8960_SetModule(wm8960_handle_t *handle, wm8960_module_t module, bool isEnabled)
Enable/disable expected devices.
@ kWM8960_InputDifferentialMicInput3
@ kWM8960_AudioSampleRate192KHz
@ kWM8960_AudioBitWidth24bit
@ kWM8960_AudioSampleRate44100Hz
@ kWM8960_AudioSampleRate24KHz
status_t WM8960_SetRightInput(wm8960_handle_t *handle, wm8960_input_t input)
Set right audio input source in WM8960.
@ kWM8960_AudioSampleRate96KHz
struct _wm8960_audio_format wm8960_audio_format_t
wm8960 audio format
codec_i2c_config_t i2cConfig
enum _wm8960_play_source wm8960_play_source_t
wm8960 play source
_wm8960_play_source
wm8960 play source
status_t WM8960_ReadReg(uint8_t reg, uint16_t *val)
Read register from WM8960 using I2C.
wm8960_input_t leftInputSource
@ kWM8960_AudioSampleRate12KHz
@ kWM8960_AudioSampleRate8KHz
void WM8960_SetMasterSlave(wm8960_handle_t *handle, bool master)
Set WM8960 as master or slave.
status_t WM8960_ConfigDataFormat(wm8960_handle_t *handle, uint32_t sysclk, uint32_t sample_rate, uint32_t bits)
Configure the data format of audio data.
CODEC I2C configurations structure.
@ kWM8960_BusRightJustified
@ kWM8960_InputLineINPUT2
_wm8960_module
Modules in WM8960 board.
enum _wm8960_module wm8960_module_t
Modules in WM8960 board.
@ kWM8960_InputSingleEndedMic
struct _wm8960_handle wm8960_handle_t
wm8960 codec handler
@ kWM8960_InputLineINPUT3
#define WM8960_I2C_HANDLER_SIZE
wm8960 handle size
@ kWM8960_AudioSampleRate22050Hz
enum _wm8960_protocol wm8960_protocol_t
The audio data transfer protocol choice. WM8960 only supports I2S format and PCM format.
@ kWM8960_InputDifferentialMicInput2
status_t WM8960_SetPlay(wm8960_handle_t *handle, uint32_t playSource)
SET the WM8960 play source.
Initialize structure of WM8960.
@ kWM8960_RoutePlaybackandRecord
status_t WM8960_Init(wm8960_handle_t *handle, const wm8960_config_t *wm8960Config)
WM8960 initialize function.
@ kWM8960_AudioSampleRate11025Hz
@ kWM8960_AudioBitWidth16bit
uint8_t i2cHandle[WM8960_I2C_HANDLER_SIZE]
@ kWM8960_AudioBitWidth32bit
@ kWM8960_AudioBitWidth20bit
@ kWM8960_AudioSampleRate384KHz
_wm8960_input
wm8960 input source
status_t WM8960_ModifyReg(wm8960_handle_t *handle, uint8_t reg, uint16_t mask, uint16_t val)
Modify some bits in the register using I2C.
_wm8960_route
WM8960 data route. Only provide some typical data route, not all route listed. Note: Users cannot com...
_wm8960_protocol
The audio data transfer protocol choice. WM8960 only supports I2S format and PCM format.
struct wm8960_config wm8960_config_t
Initialize structure of WM8960.
@ kWM8960_AudioSampleRate16KHz
@ kWM8960_AudioSampleRate32KHz
_wm8960_play_channel
wm8960 play channel
status_t WM8960_SetDataRoute(wm8960_handle_t *handle, wm8960_route_t route)
Set audio data route in WM8960.
int32_t status_t
Type used for all status and error return values.
@ kWM8960_PlaySourceInput
status_t WM8960_SetJackDetect(wm8960_handle_t *handle, bool isEnabled)
Enable/disable jack detect feature.
status_t WM8960_Deinit(wm8960_handle_t *handle)
Deinit the WM8960 codec.