HPM SDK
HPMicro Software Development Kit
hpm_wm8960_regs.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2022 HPMicro
3
*
4
* SPDX-License-Identifier: BSD-3-Clause
5
*
6
*/
7
8
#ifndef _HPM_WM8960_REG_H_
9
#define _HPM_WM8960_REG_H_
10
11
/* WM8960 register number */
12
#define WM8960_REG_NUM 56U
13
14
/* Define the register address of WM8960 */
15
#define WM8960_LINVOL 0x0U
/* Left Input Volume */
16
#define WM8960_RINVOL 0x1U
/* Right Input Volume */
17
#define WM8960_LOUT1 0x2U
/* LOUT1 Volume */
18
#define WM8960_ROUT1 0x3U
/* ROUT1 Volume */
19
#define WM8960_CLOCK1 0x4U
/* Clocking(1) */
20
#define WM8960_DACCTL1 0x5U
/* ADC and DAC Control (1) */
21
#define WM8960_DACCTL2 0x6U
/* ADC and DAC Control (2) */
22
#define WM8960_IFACE1 0x7U
/* Audio Interface */
23
#define WM8960_CLOCK2 0x8U
/* Clocking(2) */
24
#define WM8960_IFACE2 0x9U
/* Audio Interface */
25
#define WM8960_LDAC 0xaU
/* Left DAC */
26
#define WM8960_RDAC 0xbU
/* Right DAC Volume */
27
#define WM8960_RESET 0xfU
/* RESET */
28
#define WM8960_3D 0x10U
/* 3D Control */
29
#define WM8960_ALC1 0x11U
/* ALC (1) */
30
#define WM8960_ALC2 0x12U
/* ALC (2) */
31
#define WM8960_ALC3 0x13U
/* ALC (3) */
32
#define WM8960_NOISEG 0x14U
/* Noise Gate */
33
#define WM8960_LADC 0x15U
/* Left ADC Volume */
34
#define WM8960_RADC 0x16U
/* Right ADC Volume */
35
#define WM8960_ADDCTL1 0x17U
/* Additional Control (1) */
36
#define WM8960_ADDCTL2 0x18U
/* Additional Control (2) */
37
#define WM8960_POWER1 0x19U
/* Power Mgmt (1) */
38
#define WM8960_POWER2 0x1aU
/* Power Mgmt (2) */
39
#define WM8960_ADDCTL3 0x1bU
/* Additional Control (3) */
40
#define WM8960_APOP1 0x1cU
/* Anti-Pop 1 */
41
#define WM8960_APOP2 0x1dU
/* Anti-pop 2 */
42
#define WM8960_LINPATH 0x20U
/* ADCL Signal Path */
43
#define WM8960_RINPATH 0x21U
/* ADCR Signal Path */
44
#define WM8960_LOUTMIX 0x22U
/* Left Out Mix */
45
#define WM8960_ROUTMIX 0x25U
/* Right Out Mix */
46
#define WM8960_MONOMIX1 0x26U
/* Mono Out Mix (1) */
47
#define WM8960_MONOMIX2 0x27U
/* Mono Out Mix (2) */
48
#define WM8960_LOUT2 0x28U
/* Left Speaker Volume */
49
#define WM8960_ROUT2 0x29U
/* Right Speaker Volume */
50
#define WM8960_MONO 0x2aU
/* OUT3 Volume */
51
#define WM8960_INBMIX1 0x2bU
/* Left Input Boost Mixer */
52
#define WM8960_INBMIX2 0x2cU
/* Right Input Boost Mixer */
53
#define WM8960_BYPASS1 0x2dU
/* Left Bypass */
54
#define WM8960_BYPASS2 0x2eU
/* Right Bypass */
55
#define WM8960_POWER3 0x2fU
/* Power Mgmt (3) */
56
#define WM8960_ADDCTL4 0x30U
/* Additional Control (4) */
57
#define WM8960_CLASSD1 0x31U
/* Class D Control (1) */
58
#define WM8960_CLASSD3 0x33U
/* Class D Control (2) */
59
#define WM8960_PLL1 0x34U
/* PLL (1) */
60
#define WM8960_PLL2 0x35U
/* PLL (2) */
61
#define WM8960_PLL3 0x36U
/* PLL (3) */
62
#define WM8960_PLL4 0x37U
/* PLL (4) */
63
64
/* Bitfield definition for register: LINVO */
65
/*
66
* IPVU (RW)
67
*
68
* Input PGA Volume Update
69
* Writing a 1 to this bit will cause left and right input PGA volumes to be updated (LINVOL and RINVOL)
70
*/
71
#define WM8960_LINVO_IPVU_MASK (0x100U)
72
#define WM8960_LINVO_IPVU_SHIFT (8U)
73
#define WM8960_LINVO_IPVU_SET(x) (((uint16_t)(x) << WM8960_LINVO_IPVU_SHIFT) & WM8960_LINVO_IPVU_MASK)
74
#define WM8960_LINVO_IPVU_GET(x) (((uint16_t)(x) & WM8960_LINVO_IPVU_MASK) >> WM8960_LINVO_IPVU_SHIFT)
75
76
/*
77
* LINMUTE (RW)
78
*
79
* Left Input PGA Analogue Mute 1 = Enable Mute 0 = Disable Mute Note: IPVU must be set to un-mute.
80
*/
81
#define WM8960_LINVO_LINMUTE_MASK (0x80U)
82
#define WM8960_LINVO_LINMUTE_SHIFT (7U)
83
#define WM8960_LINVO_LINMUTE_SET(x) (((uint16_t)(x) << WM8960_LINVO_LINMUTE_SHIFT) & WM8960_LINVO_LINMUTE_MASK)
84
#define WM8960_LINVO_LINMUTE_GET(x) (((uint16_t)(x) & WM8960_LINVO_LINMUTE_MASK) >> WM8960_LINVO_LINMUTE_SHIFT)
85
86
/*
87
* LIZC (RW)
88
*
89
* Left Input PGA Zero Cross Detector 1 = Change gain on zero cross only 0 = Change gain immediately
90
*/
91
#define WM8960_LINVO_LIZC_MASK (0x40U)
92
#define WM8960_LINVO_LIZC_SHIFT (6U)
93
#define WM8960_LINVO_LIZC_SET(x) (((uint16_t)(x) << WM8960_LINVO_LIZC_SHIFT) & WM8960_LINVO_LIZC_MASK)
94
#define WM8960_LINVO_LIZC_GET(x) (((uint16_t)(x) & WM8960_LINVO_LIZC_MASK) >> WM8960_LINVO_LIZC_SHIFT)
95
96
/*
97
* LINVOL (RW)
98
*
99
* Left Input PGA Volume Control
100
* 111111 = +30dB
101
* 111110 = +29.25dB
102
* . . 0.75dB steps down to
103
* 000000 = -17.25dB
104
*/
105
#define WM8960_LINVO_LINVOL_MASK (0x3FU)
106
#define WM8960_LINVO_LINVOL_SHIFT (0U)
107
#define WM8960_LINVO_LINVOL_SET(x) (((uint16_t)(x) << WM8960_LINVO_LINVOL_SHIFT) & WM8960_LINVO_LINVOL_MASK)
108
#define WM8960_LINVO_LINVOL_GET(x) (((uint16_t)(x) & WM8960_LINVO_LINVOL_MASK) >> WM8960_LINVO_LINVOL_SHIFT)
109
110
/* Bitfield definition for register: RINVOL */
111
/*
112
* IPVU (RW)
113
*
114
* Input PGA Volume Update
115
* Writing a 1 to this bit will cause left and right
116
* input PGA volumes to be updated (LINVOL and RINVOL)
117
*/
118
#define WM8960_RINVOL_IPVU_MASK (0x100U)
119
#define WM8960_RINVOL_IPVU_SHIFT (8U)
120
#define WM8960_RINVOL_IPVU_SET(x) (((uint16_t)(x) << WM8960_RINVOL_IPVU_SHIFT) & WM8960_RINVOL_IPVU_MASK)
121
#define WM8960_RINVOL_IPVU_GET(x) (((uint16_t)(x) & WM8960_RINVOL_IPVU_MASK) >> WM8960_RINVOL_IPVU_SHIFT)
122
123
/*
124
* RINMUTE (RW)
125
*
126
* Right Input PGA Analogue Mute
127
* 1 = Enable Mute
128
* 0 = Disable Mute
129
* Note: IPVU must be set to un-mute.
130
*/
131
#define WM8960_RINVOL_RINMUTE_MASK (0x80U)
132
#define WM8960_RINVOL_RINMUTE_SHIFT (7U)
133
#define WM8960_RINVOL_RINMUTE_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RINMUTE_SHIFT) & WM8960_RINVOL_RINMUTE_MASK)
134
#define WM8960_RINVOL_RINMUTE_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RINMUTE_MASK) >> WM8960_RINVOL_RINMUTE_SHIFT)
135
136
/*
137
* RIZC (RW)
138
*
139
* Right Input PGA Zero Cross Detector
140
* 1 = Change gain on zero cross only
141
* 0 = Change gain immediately
142
*/
143
#define WM8960_RINVOL_RIZC_MASK (0x40U)
144
#define WM8960_RINVOL_RIZC_SHIFT (6U)
145
#define WM8960_RINVOL_RIZC_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RIZC_SHIFT) & WM8960_RINVOL_RIZC_MASK)
146
#define WM8960_RINVOL_RIZC_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RIZC_MASK) >> WM8960_RINVOL_RIZC_SHIFT)
147
148
/*
149
* RINVOL (RW)
150
*
151
* Right Input PGA Volume Control
152
* 111111 = +30dB
153
* 111110 = +29.25dB
154
* . . 0.75dB steps down to
155
* 000000 = -17.25dB
156
*/
157
#define WM8960_RINVOL_RINVOL_MASK (0x3FU)
158
#define WM8960_RINVOL_RINVOL_SHIFT (0U)
159
#define WM8960_RINVOL_RINVOL_SET(x) (((uint16_t)(x) << WM8960_RINVOL_RINVOL_SHIFT) & WM8960_RINVOL_RINVOL_MASK)
160
#define WM8960_RINVOL_RINVOL_GET(x) (((uint16_t)(x) & WM8960_RINVOL_RINVOL_MASK) >> WM8960_RINVOL_RINVOL_SHIFT)
161
162
/* Bitfield definition for register: LOUT1 */
163
/*
164
* OUT1VU (RW)
165
*
166
* Headphone Output PGA Volume Update
167
* Writing a 1 to this bit will cause left and right
168
* headphone output volumes to be updated
169
* (LOUT1VOL and ROUT1VOL)
170
*/
171
#define WM8960_LOUT1_OUT1VU_MASK (0x100U)
172
#define WM8960_LOUT1_OUT1VU_SHIFT (8U)
173
#define WM8960_LOUT1_OUT1VU_SET(x) (((uint16_t)(x) << WM8960_LOUT1_OUT1VU_SHIFT) & WM8960_LOUT1_OUT1VU_MASK)
174
#define WM8960_LOUT1_OUT1VU_GET(x) (((uint16_t)(x) & WM8960_LOUT1_OUT1VU_MASK) >> WM8960_LOUT1_OUT1VU_SHIFT)
175
176
/*
177
* LO1ZC (RW)
178
*
179
* Left Headphone Output Zero Cross Enable
180
* 0 = Change gain immediately
181
* 1 = Change gain on zero cross only
182
*/
183
#define WM8960_LOUT1_LO1ZC_MASK (0x80U)
184
#define WM8960_LOUT1_LO1ZC_SHIFT (7U)
185
#define WM8960_LOUT1_LO1ZC_SET(x) (((uint16_t)(x) << WM8960_LOUT1_LO1ZC_SHIFT) & WM8960_LOUT1_LO1ZC_MASK)
186
#define WM8960_LOUT1_LO1ZC_GET(x) (((uint16_t)(x) & WM8960_LOUT1_LO1ZC_MASK) >> WM8960_LOUT1_LO1ZC_SHIFT)
187
188
/*
189
* LOUT1VOL (RW)
190
*
191
* LOUT1 Volume
192
* 1111111 = +6dB
193
* … 1dB steps down to
194
* 0110000 = -73dB
195
* 0101111 to 0000000 = Analogue MUTE
196
*/
197
#define WM8960_LOUT1_LOUT1VOL_MASK (0x7FU)
198
#define WM8960_LOUT1_LOUT1VOL_SHIFT (0U)
199
#define WM8960_LOUT1_LOUT1VOL_SET(x) (((uint16_t)(x) << WM8960_LOUT1_LOUT1VOL_SHIFT) & WM8960_LOUT1_LOUT1VOL_MASK)
200
#define WM8960_LOUT1_LOUT1VOL_GET(x) (((uint16_t)(x) & WM8960_LOUT1_LOUT1VOL_MASK) >> WM8960_LOUT1_LOUT1VOL_SHIFT)
201
202
/* Bitfield definition for register: ROUT1 */
203
/*
204
* OUT1VU (RW)
205
*
206
* Headphone Output PGA Volume Update
207
* Writing a 1 to this bit will cause left and right
208
* headphone output volumes to be updated
209
* (LOUT1VOL and ROUT1VOL)
210
*/
211
#define WM8960_ROUT1_OUT1VU_MASK (0x100U)
212
#define WM8960_ROUT1_OUT1VU_SHIFT (8U)
213
#define WM8960_ROUT1_OUT1VU_SET(x) (((uint16_t)(x) << WM8960_ROUT1_OUT1VU_SHIFT) & WM8960_ROUT1_OUT1VU_MASK)
214
#define WM8960_ROUT1_OUT1VU_GET(x) (((uint16_t)(x) & WM8960_ROUT1_OUT1VU_MASK) >> WM8960_ROUT1_OUT1VU_SHIFT)
215
216
/*
217
* RO1ZC (RW)
218
*
219
* Right Headphone Output Zero Cross Enable
220
* 0 = Change gain immediately
221
* 1 = Change gain on zero cross only
222
*/
223
#define WM8960_ROUT1_RO1ZC_MASK (0x80U)
224
#define WM8960_ROUT1_RO1ZC_SHIFT (7U)
225
#define WM8960_ROUT1_RO1ZC_SET(x) (((uint16_t)(x) << WM8960_ROUT1_RO1ZC_SHIFT) & WM8960_ROUT1_RO1ZC_MASK)
226
#define WM8960_ROUT1_RO1ZC_GET(x) (((uint16_t)(x) & WM8960_ROUT1_RO1ZC_MASK) >> WM8960_ROUT1_RO1ZC_SHIFT)
227
228
/*
229
* ROUT1VOL (RW)
230
*
231
* ROUT1 Volume
232
* 1111111 = +6dB
233
* … 1dB steps down to
234
* 0110000 = -73dB
235
* 0101111 to 0000000 = Analogue MUTE
236
*/
237
#define WM8960_ROUT1_ROUT1VOL_MASK (0x7FU)
238
#define WM8960_ROUT1_ROUT1VOL_SHIFT (0U)
239
#define WM8960_ROUT1_ROUT1VOL_SET(x) (((uint16_t)(x) << WM8960_ROUT1_ROUT1VOL_SHIFT) & WM8960_ROUT1_ROUT1VOL_MASK)
240
#define WM8960_ROUT1_ROUT1VOL_GET(x) (((uint16_t)(x) & WM8960_ROUT1_ROUT1VOL_MASK) >> WM8960_ROUT1_ROUT1VOL_SHIFT)
241
242
/* Bitfield definition for register: CLOCK1 */
243
/*
244
* ADCDIV (RW)
245
*
246
* ADC Sample rate divider (Also determines
247
* ADCLRC in master mode)
248
* 000 = SYSCLK / (1.0 * 256)
249
* 001 = SYSCLK / (1.5 * 256)
250
* 010 = SYSCLK / (2 * 256)
251
* 011 = SYSCLK / (3 * 256)
252
* 100 = SYSCLK / (4 * 256)
253
* 101 = SYSCLK / (5.5 * 256)
254
* 110 = SYSCLK / (6 * 256)
255
* 111 = Reserved
256
*/
257
#define WM8960_CLOCK1_ADCDIV_MASK (0x1C0U)
258
#define WM8960_CLOCK1_ADCDIV_SHIFT (6U)
259
#define WM8960_CLOCK1_ADCDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_ADCDIV_SHIFT) & WM8960_CLOCK1_ADCDIV_MASK)
260
#define WM8960_CLOCK1_ADCDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_ADCDIV_MASK) >> WM8960_CLOCK1_ADCDIV_SHIFT)
261
262
/*
263
* DACDIV (RW)
264
*
265
* DAC Sample rate divider (Also determines
266
* DACLRC in master mode)
267
* 000 = SYSCLK / (1.0 * 256)
268
* 001 = SYSCLK / (1.5 * 256)
269
* 010 = SYSCLK / (2 * 256)
270
* 011 = SYSCLK / (3 * 256)
271
* 100 = SYSCLK / (4 * 256)
272
* 101 = SYSCLK / (5.5 * 256)
273
* 110 = SYSCLK / (6 * 256)
274
* 111 = Reserved
275
*/
276
#define WM8960_CLOCK1_DACDIV_MASK (0x38U)
277
#define WM8960_CLOCK1_DACDIV_SHIFT (3U)
278
#define WM8960_CLOCK1_DACDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_DACDIV_SHIFT) & WM8960_CLOCK1_DACDIV_MASK)
279
#define WM8960_CLOCK1_DACDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_DACDIV_MASK) >> WM8960_CLOCK1_DACDIV_SHIFT)
280
281
/*
282
* SYSCLKDIV (RW)
283
*
284
* SYSCLK Pre-divider. Clock source (MCLK or
285
* PLL output) will be divided by this value to
286
* generate SYSCLK.
287
* 00 = Divide SYSCLK by 1
288
* 01 = Reserved
289
* 10 = Divide SYSCLK by 2
290
* 11 = Reserved
291
*/
292
#define WM8960_CLOCK1_SYSCLKDIV_MASK (0x6U)
293
#define WM8960_CLOCK1_SYSCLKDIV_SHIFT (1U)
294
#define WM8960_CLOCK1_SYSCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_SYSCLKDIV_SHIFT) & WM8960_CLOCK1_SYSCLKDIV_MASK)
295
#define WM8960_CLOCK1_SYSCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_SYSCLKDIV_MASK) >> WM8960_CLOCK1_SYSCLKDIV_SHIFT)
296
297
/*
298
* CLKSEL (RW)
299
*
300
* SYSCLK Selection
301
* 0 = SYSCLK derived from MCLK
302
* 1 = SYSCLK derived from PLL output
303
*/
304
#define WM8960_CLOCK1_CLKSEL_MASK (0x1U)
305
#define WM8960_CLOCK1_CLKSEL_SHIFT (0U)
306
#define WM8960_CLOCK1_CLKSEL_SET(x) (((uint16_t)(x) << WM8960_CLOCK1_CLKSEL_SHIFT) & WM8960_CLOCK1_CLKSEL_MASK)
307
#define WM8960_CLOCK1_CLKSEL_GET(x) (((uint16_t)(x) & WM8960_CLOCK1_CLKSEL_MASK) >> WM8960_CLOCK1_CLKSEL_SHIFT)
308
309
/* Bitfield definition for register: DACCTL1 */
310
/*
311
* DACDIV2 (RW)
312
*
313
* DAC 6dB Attenuate Enable
314
* 0 = Disabled (0dB)
315
* 1 = -6dB Enabled
316
*/
317
#define WM8960_DACCTL1_DACDIV2_MASK (0x80U)
318
#define WM8960_DACCTL1_DACDIV2_SHIFT (7U)
319
#define WM8960_DACCTL1_DACDIV2_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DACDIV2_SHIFT) & WM8960_DACCTL1_DACDIV2_MASK)
320
#define WM8960_DACCTL1_DACDIV2_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DACDIV2_MASK) >> WM8960_DACCTL1_DACDIV2_SHIFT)
321
322
/*
323
* ADCPOL (RW)
324
*
325
* ADC polarity control:
326
* 00 = Polarity not inverted
327
* 01 = ADC L inverted
328
* 10 = ADC R inverted
329
* 11 = ADC L and R inverted
330
*/
331
#define WM8960_DACCTL1_ADCPOL_MASK (0x60U)
332
#define WM8960_DACCTL1_ADCPOL_SHIFT (5U)
333
#define WM8960_DACCTL1_ADCPOL_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_ADCPOL_SHIFT) & WM8960_DACCTL1_ADCPOL_MASK)
334
#define WM8960_DACCTL1_ADCPOL_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_ADCPOL_MASK) >> WM8960_DACCTL1_ADCPOL_SHIFT)
335
336
/*
337
* DACMU (RW)
338
*
339
* DAC Digital Soft Mute
340
* 1 = Mute
341
* 0 = No mute (signal active)
342
*/
343
#define WM8960_DACCTL1_DACMU_MASK (0x8U)
344
#define WM8960_DACCTL1_DACMU_SHIFT (3U)
345
#define WM8960_DACCTL1_DACMU_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DACMU_SHIFT) & WM8960_DACCTL1_DACMU_MASK)
346
#define WM8960_DACCTL1_DACMU_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DACMU_MASK) >> WM8960_DACCTL1_DACMU_SHIFT)
347
348
/*
349
* DEEMPH (RW)
350
*
351
* De-emphasis Control
352
* 11 = 48kHz sample rate
353
* 10 = 44.1kHz sample rate
354
* 01 = 32kHz sample rate
355
* 00 = No de-emphasis
356
*/
357
#define WM8960_DACCTL1_DEEMPH_MASK (0x6U)
358
#define WM8960_DACCTL1_DEEMPH_SHIFT (1U)
359
#define WM8960_DACCTL1_DEEMPH_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_DEEMPH_SHIFT) & WM8960_DACCTL1_DEEMPH_MASK)
360
#define WM8960_DACCTL1_DEEMPH_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_DEEMPH_MASK) >> WM8960_DACCTL1_DEEMPH_SHIFT)
361
362
/*
363
* ADCHPD (RW)
364
*
365
* ADC High Pass Filter Disable
366
* 0 = Enable high pass filter on left and right channels
367
* 1 = Disable high pass filter on left and right channels
368
*/
369
#define WM8960_DACCTL1_ADCHPD_MASK (0x1U)
370
#define WM8960_DACCTL1_ADCHPD_SHIFT (0U)
371
#define WM8960_DACCTL1_ADCHPD_SET(x) (((uint16_t)(x) << WM8960_DACCTL1_ADCHPD_SHIFT) & WM8960_DACCTL1_ADCHPD_MASK)
372
#define WM8960_DACCTL1_ADCHPD_GET(x) (((uint16_t)(x) & WM8960_DACCTL1_ADCHPD_MASK) >> WM8960_DACCTL1_ADCHPD_SHIFT)
373
374
/* Bitfield definition for register: DACCTL2 */
375
/*
376
* DACPOL (RW)
377
*
378
* DAC polarity control:
379
* 00 = Polarity not inverted
380
* 01 = DAC L inverted
381
* 10 = DAC R inverted
382
* 11 = DAC L and R inverted
383
*/
384
#define WM8960_DACCTL2_DACPOL_MASK (0x60U)
385
#define WM8960_DACCTL2_DACPOL_SHIFT (5U)
386
#define WM8960_DACCTL2_DACPOL_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACPOL_SHIFT) & WM8960_DACCTL2_DACPOL_MASK)
387
#define WM8960_DACCTL2_DACPOL_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACPOL_MASK) >> WM8960_DACCTL2_DACPOL_SHIFT)
388
389
/*
390
* DACSMM (RW)
391
*
392
* DAC Soft Mute Mode
393
* 0 = Disabling soft-mute (DACMU=0) will cause
394
* the volume to change immediately to the
395
* LDACVOL / RDACVOL settings
396
* 1 = Disabling soft-mute (DACMU=0) will cause
397
* the volume to ramp up gradually to the
398
* LDACVOL / RDACVOL settings
399
*/
400
#define WM8960_DACCTL2_DACSMM_MASK (0x8U)
401
#define WM8960_DACCTL2_DACSMM_SHIFT (3U)
402
#define WM8960_DACCTL2_DACSMM_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACSMM_SHIFT) & WM8960_DACCTL2_DACSMM_MASK)
403
#define WM8960_DACCTL2_DACSMM_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACSMM_MASK) >> WM8960_DACCTL2_DACSMM_SHIFT)
404
405
/*
406
* DACMR (RW)
407
*
408
* DAC Soft Mute Ramp Rate
409
* 0 = Fast ramp (24kHz at fs=48k, providing
410
* maximum delay of 10.7ms)
411
* 1 = Slow ramp (1.5kHz at fs=48k, providing
412
* maximum delay of 171ms)
413
*/
414
#define WM8960_DACCTL2_DACMR_MASK (0x4U)
415
#define WM8960_DACCTL2_DACMR_SHIFT (2U)
416
#define WM8960_DACCTL2_DACMR_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACMR_SHIFT) & WM8960_DACCTL2_DACMR_MASK)
417
#define WM8960_DACCTL2_DACMR_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACMR_MASK) >> WM8960_DACCTL2_DACMR_SHIFT)
418
419
/*
420
* DACSLOPE (RW)
421
*
422
* Selects DAC filter characteristics
423
* 0 = Normal mode
424
* 1 = Sloping stopband
425
*/
426
#define WM8960_DACCTL2_DACSLOPE_MASK (0x2U)
427
#define WM8960_DACCTL2_DACSLOPE_SHIFT (1U)
428
#define WM8960_DACCTL2_DACSLOPE_SET(x) (((uint16_t)(x) << WM8960_DACCTL2_DACSLOPE_SHIFT) & WM8960_DACCTL2_DACSLOPE_MASK)
429
#define WM8960_DACCTL2_DACSLOPE_GET(x) (((uint16_t)(x) & WM8960_DACCTL2_DACSLOPE_MASK) >> WM8960_DACCTL2_DACSLOPE_SHIFT)
430
431
/* Bitfield definition for register: IFACE1 */
432
/*
433
* ALRSWAP (RW)
434
*
435
* Left/Right ADC Channel Swap
436
* 1 = Swap left and right ADC data in audio
437
* interface
438
* 0 = Output left and right data as normal
439
*/
440
#define WM8960_IFACE1_ALRSWAP_MASK (0x100U)
441
#define WM8960_IFACE1_ALRSWAP_SHIFT (8U)
442
#define WM8960_IFACE1_ALRSWAP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_ALRSWAP_SHIFT) & WM8960_IFACE1_ALRSWAP_MASK)
443
#define WM8960_IFACE1_ALRSWAP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_ALRSWAP_MASK) >> WM8960_IFACE1_ALRSWAP_SHIFT)
444
445
/*
446
* BCLKINV (RW)
447
*
448
* BCLK invert bit (for master and slave modes)
449
* 0 = BCLK not inverted
450
* 1 = BCLK inverted
451
*/
452
#define WM8960_IFACE1_BCLKINV_MASK (0x80U)
453
#define WM8960_IFACE1_BCLKINV_SHIFT (7U)
454
#define WM8960_IFACE1_BCLKINV_SET(x) (((uint16_t)(x) << WM8960_IFACE1_BCLKINV_SHIFT) & WM8960_IFACE1_BCLKINV_MASK)
455
#define WM8960_IFACE1_BCLKINV_GET(x) (((uint16_t)(x) & WM8960_IFACE1_BCLKINV_MASK) >> WM8960_IFACE1_BCLKINV_SHIFT)
456
457
/*
458
* MS (RW)
459
*
460
* Master / Slave Mode Control
461
* 0 = Enable slave mode
462
* 1 = Enable master mode
463
*/
464
#define WM8960_IFACE1_MS_MASK (0x40U)
465
#define WM8960_IFACE1_MS_SHIFT (6U)
466
#define WM8960_IFACE1_MS_SET(x) (((uint16_t)(x) << WM8960_IFACE1_MS_SHIFT) & WM8960_IFACE1_MS_MASK)
467
#define WM8960_IFACE1_MS_GET(x) (((uint16_t)(x) & WM8960_IFACE1_MS_MASK) >> WM8960_IFACE1_MS_SHIFT)
468
469
/*
470
* DLRSWAP (RW)
471
*
472
* Left/Right DAC Channel Swap
473
* 0 = Output left and right data as normal
474
* 1 = Swap left and right DAC data in audio interface
475
*/
476
#define WM8960_IFACE1_DLRSWAP_MASK (0x20U)
477
#define WM8960_IFACE1_DLRSWAP_SHIFT (5U)
478
#define WM8960_IFACE1_DLRSWAP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_DLRSWAP_SHIFT) & WM8960_IFACE1_DLRSWAP_MASK)
479
#define WM8960_IFACE1_DLRSWAP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_DLRSWAP_MASK) >> WM8960_IFACE1_DLRSWAP_SHIFT)
480
481
/*
482
* LRP (RW)
483
*
484
* Right, left and I2S modes – LRCLK polarity
485
* 0 = normal LRCLK polarity
486
* 1 = invert LRCLK polarity
487
* DSP Mode – mode A/B select
488
* 0 = MSB is available on 2nd BCLK rising edge after LRC rising edge (mode A)
489
* 1 = MSB is available on 1st BCLK rising edge after LRC rising edge (mode B)
490
*/
491
#define WM8960_IFACE1_LRP_MASK (0x10U)
492
#define WM8960_IFACE1_LRP_SHIFT (4U)
493
#define WM8960_IFACE1_LRP_SET(x) (((uint16_t)(x) << WM8960_IFACE1_LRP_SHIFT) & WM8960_IFACE1_LRP_MASK)
494
#define WM8960_IFACE1_LRP_GET(x) (((uint16_t)(x) & WM8960_IFACE1_LRP_MASK) >> WM8960_IFACE1_LRP_SHIFT)
495
496
/*
497
* WL (RW)
498
*
499
* Audio Data Word Length
500
* 00 = 16 bits
501
* 01 = 20 bits
502
* 10 = 24 bits
503
* 11 = 32 bits (see Note)
504
*/
505
#define WM8960_IFACE1_WL_MASK (0xCU)
506
#define WM8960_IFACE1_WL_SHIFT (2U)
507
#define WM8960_IFACE1_WL_SET(x) (((uint16_t)(x) << WM8960_IFACE1_WL_SHIFT) & WM8960_IFACE1_WL_MASK)
508
#define WM8960_IFACE1_WL_GET(x) (((uint16_t)(x) & WM8960_IFACE1_WL_MASK) >> WM8960_IFACE1_WL_SHIFT)
509
510
/*
511
* FORMAT (RW)
512
*
513
* 00 = Right justified
514
* 01 = Left justified
515
* 10 = I2S Format
516
* 11 = DSP Mode
517
*/
518
#define WM8960_IFACE1_FORMAT_MASK (0x3U)
519
#define WM8960_IFACE1_FORMAT_SHIFT (0U)
520
#define WM8960_IFACE1_FORMAT_SET(x) (((uint16_t)(x) << WM8960_IFACE1_FORMAT_SHIFT) & WM8960_IFACE1_FORMAT_MASK)
521
#define WM8960_IFACE1_FORMAT_GET(x) (((uint16_t)(x) & WM8960_IFACE1_FORMAT_MASK) >> WM8960_IFACE1_FORMAT_SHIFT)
522
523
/* Bitfield definition for register: CLOCK2 */
524
/*
525
* DCLKDIV (RW)
526
*
527
* Class D switching clock divider.
528
* 000 = SYSCLK / 1.5 (Not recommended)
529
* 001 = SYSCLK / 2
530
* 010 = SYSCLK / 3
531
* 011 = SYSCLK / 4
532
* 100 = SYSCLK / 6
533
* 101 = SYSCLK / 8
534
* 110 = SYSCLK / 12
535
* 111 = SYSCLK / 16
536
*/
537
#define WM8960_CLOCK2_DCLKDIV_MASK (0x1C0U)
538
#define WM8960_CLOCK2_DCLKDIV_SHIFT (6U)
539
#define WM8960_CLOCK2_DCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK2_DCLKDIV_SHIFT) & WM8960_CLOCK2_DCLKDIV_MASK)
540
#define WM8960_CLOCK2_DCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK2_DCLKDIV_MASK) >> WM8960_CLOCK2_DCLKDIV_SHIFT)
541
542
/*
543
* BCLKDIV (RW)
544
*
545
* BCLK Frequency (Master Mode)
546
* 0000 = SYSCLK
547
* 0001 = SYSCLK / 1.5
548
* 0010 = SYSCLK / 2
549
* 0011 = SYSCLK / 3
550
* 0100 = SYSCLK / 4
551
* 0101 = SYSCLK / 5.5
552
* 0110 = SYSCLK / 6
553
* 0111 = SYSCLK / 8
554
* 1000 = SYSCLK / 11
555
* 1001 = SYSCLK / 12
556
* 1010 = SYSCLK / 16
557
* 1011 = SYSCLK / 22
558
* 1100 = SYSCLK / 24
559
* 1101 to 1111 = SYSCLK / 32
560
*/
561
#define WM8960_CLOCK2_BCLKDIV_MASK (0xFU)
562
#define WM8960_CLOCK2_BCLKDIV_SHIFT (0U)
563
#define WM8960_CLOCK2_BCLKDIV_SET(x) (((uint16_t)(x) << WM8960_CLOCK2_BCLKDIV_SHIFT) & WM8960_CLOCK2_BCLKDIV_MASK)
564
#define WM8960_CLOCK2_BCLKDIV_GET(x) (((uint16_t)(x) & WM8960_CLOCK2_BCLKDIV_MASK) >> WM8960_CLOCK2_BCLKDIV_SHIFT)
565
566
/* Bitfield definition for register: IFACE2 */
567
/*
568
* ALRCGPIO (RW)
569
*
570
* ADCLRC/GPIO1 Pin Function Select
571
* 0 = ADCLRC frame clock for ADC
572
* 1 = GPIO pin
573
*/
574
#define WM8960_IFACE2_ALRCGPIO_MASK (0x40U)
575
#define WM8960_IFACE2_ALRCGPIO_SHIFT (6U)
576
#define WM8960_IFACE2_ALRCGPIO_SET(x) (((uint16_t)(x) << WM8960_IFACE2_ALRCGPIO_SHIFT) & WM8960_IFACE2_ALRCGPIO_MASK)
577
#define WM8960_IFACE2_ALRCGPIO_GET(x) (((uint16_t)(x) & WM8960_IFACE2_ALRCGPIO_MASK) >> WM8960_IFACE2_ALRCGPIO_SHIFT)
578
579
/*
580
* WL8 (RW)
581
*
582
* 8-Bit Word Length Select (Used with
583
* companding)
584
* 0 = Off
585
* 1 = Device operates in 8-bit mode.
586
*/
587
#define WM8960_IFACE2_WL8_MASK (0x20U)
588
#define WM8960_IFACE2_WL8_SHIFT (5U)
589
#define WM8960_IFACE2_WL8_SET(x) (((uint16_t)(x) << WM8960_IFACE2_WL8_SHIFT) & WM8960_IFACE2_WL8_MASK)
590
#define WM8960_IFACE2_WL8_GET(x) (((uint16_t)(x) & WM8960_IFACE2_WL8_MASK) >> WM8960_IFACE2_WL8_SHIFT)
591
592
/*
593
* DACCOMP (RW)
594
*
595
* DAC companding
596
* 00 = off
597
* 01 = reserved
598
* 10 = μ-law
599
* 11 = A-law
600
*/
601
#define WM8960_IFACE2_DACCOMP_MASK (0x18U)
602
#define WM8960_IFACE2_DACCOMP_SHIFT (3U)
603
#define WM8960_IFACE2_DACCOMP_SET(x) (((uint16_t)(x) << WM8960_IFACE2_DACCOMP_SHIFT) & WM8960_IFACE2_DACCOMP_MASK)
604
#define WM8960_IFACE2_DACCOMP_GET(x) (((uint16_t)(x) & WM8960_IFACE2_DACCOMP_MASK) >> WM8960_IFACE2_DACCOMP_SHIFT)
605
606
/*
607
* ADCCOMP (RW)
608
*
609
* ADC companding
610
* 00 = off
611
* 01 = reserved
612
* 10 = μ-law
613
* 11 = A-law
614
*/
615
#define WM8960_IFACE2_ADCCOMP_MASK (0x6U)
616
#define WM8960_IFACE2_ADCCOMP_SHIFT (1U)
617
#define WM8960_IFACE2_ADCCOMP_SET(x) (((uint16_t)(x) << WM8960_IFACE2_ADCCOMP_SHIFT) & WM8960_IFACE2_ADCCOMP_MASK)
618
#define WM8960_IFACE2_ADCCOMP_GET(x) (((uint16_t)(x) & WM8960_IFACE2_ADCCOMP_MASK) >> WM8960_IFACE2_ADCCOMP_SHIFT)
619
620
/*
621
* LOOPBACK (RW)
622
*
623
* Digital Loopback Function
624
* 0 = No loopback.
625
* 1 = Loopback enabled, ADC data output is fed
626
* directly into DAC data input
627
*/
628
#define WM8960_IFACE2_LOOPBACK_MASK (0x1U)
629
#define WM8960_IFACE2_LOOPBACK_SHIFT (0U)
630
#define WM8960_IFACE2_LOOPBACK_SET(x) (((uint16_t)(x) << WM8960_IFACE2_LOOPBACK_SHIFT) & WM8960_IFACE2_LOOPBACK_MASK)
631
#define WM8960_IFACE2_LOOPBACK_GET(x) (((uint16_t)(x) & WM8960_IFACE2_LOOPBACK_MASK) >> WM8960_IFACE2_LOOPBACK_SHIFT)
632
633
/* Bitfield definition for register: LDAC */
634
/*
635
* DACVU (RW)
636
*
637
* DAC Volume Update
638
* Writing a 1 to this bit will cause left and right
639
* DAC volumes to be updated (LDACVOL and RDACVOL)
640
*/
641
#define WM8960_LDAC_DACVU_MASK (0x100U)
642
#define WM8960_LDAC_DACVU_SHIFT (8U)
643
#define WM8960_LDAC_DACVU_SET(x) (((uint16_t)(x) << WM8960_LDAC_DACVU_SHIFT) & WM8960_LDAC_DACVU_MASK)
644
#define WM8960_LDAC_DACVU_GET(x) (((uint16_t)(x) & WM8960_LDAC_DACVU_MASK) >> WM8960_LDAC_DACVU_SHIFT)
645
646
/*
647
* LDACVOL (RW)
648
*
649
* Left DAC Digital Volume Control
650
* 0000 0000 = Digital Mute
651
* 0000 0001 = -127dB
652
* 0000 0010 = -126.5dB
653
* ... 0.5dB steps up to
654
* 1111 1111 = 0dB
655
*/
656
#define WM8960_LDAC_LDACVOL_MASK (0xFFU)
657
#define WM8960_LDAC_LDACVOL_SHIFT (0U)
658
#define WM8960_LDAC_LDACVOL_SET(x) (((uint16_t)(x) << WM8960_LDAC_LDACVOL_SHIFT) & WM8960_LDAC_LDACVOL_MASK)
659
#define WM8960_LDAC_LDACVOL_GET(x) (((uint16_t)(x) & WM8960_LDAC_LDACVOL_MASK) >> WM8960_LDAC_LDACVOL_SHIFT)
660
661
/* Bitfield definition for register: RDAC */
662
/*
663
* DACVU (RW)
664
*
665
* DAC Volume Update
666
* Writing a 1 to this bit will cause left and right
667
* DAC volumes to be updated (LDACVOL and RDACVOL)
668
*/
669
#define WM8960_RDAC_DACVU_MASK (0x100U)
670
#define WM8960_RDAC_DACVU_SHIFT (8U)
671
#define WM8960_RDAC_DACVU_SET(x) (((uint16_t)(x) << WM8960_RDAC_DACVU_SHIFT) & WM8960_RDAC_DACVU_MASK)
672
#define WM8960_RDAC_DACVU_GET(x) (((uint16_t)(x) & WM8960_RDAC_DACVU_MASK) >> WM8960_RDAC_DACVU_SHIFT)
673
674
/*
675
* RDACVOL (RW)
676
*
677
* Right DAC Digital Volume Control
678
* 0000 0000 = Digital Mute
679
* 0000 0001 = -127dB
680
* 0000 0010 = -126.5dB
681
* ... 0.5dB steps up to
682
* 1111 1111 = 0dB
683
*/
684
#define WM8960_RDAC_RDACVOL_MASK (0xFFU)
685
#define WM8960_RDAC_RDACVOL_SHIFT (0U)
686
#define WM8960_RDAC_RDACVOL_SET(x) (((uint16_t)(x) << WM8960_RDAC_RDACVOL_SHIFT) & WM8960_RDAC_RDACVOL_MASK)
687
#define WM8960_RDAC_RDACVOL_GET(x) (((uint16_t)(x) & WM8960_RDAC_RDACVOL_MASK) >> WM8960_RDAC_RDACVOL_SHIFT)
688
689
/* Bitfield definition for register: RESET */
690
/*
691
* RESET (RW)
692
*
693
* Writing to this register resets all registers to their default state.
694
*/
695
#define WM8960_RESET_RESET_MASK (0x1FFU)
696
#define WM8960_RESET_RESET_SHIFT (0U)
697
#define WM8960_RESET_RESET_SET(x) (((uint16_t)(x) << WM8960_RESET_RESET_SHIFT) & WM8960_RESET_RESET_MASK)
698
#define WM8960_RESET_RESET_GET(x) (((uint16_t)(x) & WM8960_RESET_RESET_MASK) >> WM8960_RESET_RESET_SHIFT)
699
700
/* Bitfield definition for register: 3D */
701
/*
702
* 3DUC (RW)
703
*
704
* 3D Enhance Filter Upper Cut-Off Frequency
705
* 0 = High (Recommended for fs>=32kHz)
706
* 1 = Low (Recommended for fs<32kHz)
707
*/
708
#define WM8960_3D_3DUC_MASK (0x40U)
709
#define WM8960_3D_3DUC_SHIFT (6U)
710
#define WM8960_3D_3DUC_SET(x) (((uint16_t)(x) << WM8960_3D_3DUC_SHIFT) & WM8960_3D_3DUC_MASK)
711
#define WM8960_3D_3DUC_GET(x) (((uint16_t)(x) & WM8960_3D_3DUC_MASK) >> WM8960_3D_3DUC_SHIFT)
712
713
/*
714
* 3DLC (RW)
715
*
716
* 3D Enhance Filter Lower Cut-Off Frequency
717
* 0 = Low (Recommended for fs>=32kHz)
718
* 1 = High (Recommended for fs<32kHz)
719
*/
720
#define WM8960_3D_3DLC_MASK (0x20U)
721
#define WM8960_3D_3DLC_SHIFT (5U)
722
#define WM8960_3D_3DLC_SET(x) (((uint16_t)(x) << WM8960_3D_3DLC_SHIFT) & WM8960_3D_3DLC_MASK)
723
#define WM8960_3D_3DLC_GET(x) (((uint16_t)(x) & WM8960_3D_3DLC_MASK) >> WM8960_3D_3DLC_SHIFT)
724
725
/*
726
* 3DDEPTH (RW)
727
*
728
* 3D Stereo Depth
729
* 0000 = 0% (minimum 3D effect)
730
* 0001 = 6.67%
731
* ....
732
* 1110 = 93.3%
733
* 1111 = 100% (maximum 3D effect)
734
*/
735
#define WM8960_3D_3DDEPTH_MASK (0x1EU)
736
#define WM8960_3D_3DDEPTH_SHIFT (1U)
737
#define WM8960_3D_3DDEPTH_SET(x) (((uint16_t)(x) << WM8960_3D_3DDEPTH_SHIFT) & WM8960_3D_3DDEPTH_MASK)
738
#define WM8960_3D_3DDEPTH_GET(x) (((uint16_t)(x) & WM8960_3D_3DDEPTH_MASK) >> WM8960_3D_3DDEPTH_SHIFT)
739
740
/*
741
* 3DEN (RW)
742
*
743
* 3D Stereo Enhancement Enable
744
* 0 = Disabled
745
* 1 = Enabled
746
*/
747
#define WM8960_3D_3DEN_MASK (0x1U)
748
#define WM8960_3D_3DEN_SHIFT (0U)
749
#define WM8960_3D_3DEN_SET(x) (((uint16_t)(x) << WM8960_3D_3DEN_SHIFT) & WM8960_3D_3DEN_MASK)
750
#define WM8960_3D_3DEN_GET(x) (((uint16_t)(x) & WM8960_3D_3DEN_MASK) >> WM8960_3D_3DEN_SHIFT)
751
752
/* Bitfield definition for register: ALC1 */
753
/*
754
* ALCSEL (RW)
755
*
756
* ALC Function Select
757
* 00 = ALC off (PGA gain set by register)
758
* 01 = Right channel only
759
* 10 = Left channel only
760
* 11 = Stereo (PGA registers unused) Note:
761
* ensure that LINVOL and RINVOL settings
762
* (reg. 0 and 1) are the same before entering this mode.
763
*/
764
#define WM8960_ALC1_ALCSEL_MASK (0x180U)
765
#define WM8960_ALC1_ALCSEL_SHIFT (7U)
766
#define WM8960_ALC1_ALCSEL_SET(x) (((uint16_t)(x) << WM8960_ALC1_ALCSEL_SHIFT) & WM8960_ALC1_ALCSEL_MASK)
767
#define WM8960_ALC1_ALCSEL_GET(x) (((uint16_t)(x) & WM8960_ALC1_ALCSEL_MASK) >> WM8960_ALC1_ALCSEL_SHIFT)
768
769
/*
770
* MAXGAIN (RW)
771
*
772
* Set Maximum Gain of PGA (During ALC
773
* operation)
774
* 111 : +30dB
775
* 110 : +24dB
776
* ….(-6dB steps)
777
* 001 : -6dB
778
* 000 : -12dB
779
*/
780
#define WM8960_ALC1_MAXGAIN_MASK (0x70U)
781
#define WM8960_ALC1_MAXGAIN_SHIFT (4U)
782
#define WM8960_ALC1_MAXGAIN_SET(x) (((uint16_t)(x) << WM8960_ALC1_MAXGAIN_SHIFT) & WM8960_ALC1_MAXGAIN_MASK)
783
#define WM8960_ALC1_MAXGAIN_GET(x) (((uint16_t)(x) & WM8960_ALC1_MAXGAIN_MASK) >> WM8960_ALC1_MAXGAIN_SHIFT)
784
785
/*
786
* ALCL (RW)
787
*
788
* ALC Target (Sets signal level at ADC input)
789
* 0000 = -22.5dB FS
790
* 0001 = -21.0dB FS
791
* … (1.5dB steps)
792
* 1101 = -3.0dB FS
793
* 1110 = -1.5dB FS
794
* 1111 = -1.5dB FS
795
*/
796
#define WM8960_ALC1_ALCL_MASK (0xFU)
797
#define WM8960_ALC1_ALCL_SHIFT (0U)
798
#define WM8960_ALC1_ALCL_SET(x) (((uint16_t)(x) << WM8960_ALC1_ALCL_SHIFT) & WM8960_ALC1_ALCL_MASK)
799
#define WM8960_ALC1_ALCL_GET(x) (((uint16_t)(x) & WM8960_ALC1_ALCL_MASK) >> WM8960_ALC1_ALCL_SHIFT)
800
801
/* Bitfield definition for register: ALC2 */
802
/*
803
* MINGAIN (RW)
804
*
805
* Set Minimum Gain of PGA (During ALC
806
* operation)
807
* 000 = -17.25dB
808
* 001 = -11.25dB
809
* 010 = -5.25dB
810
* 011 = +0.75dB
811
* 100 = +6.75dB
812
* 101 = +12.75dB
813
* 110 = +18.75dB
814
* 111 = +24.75dB
815
*/
816
#define WM8960_ALC2_MINGAIN_MASK (0x70U)
817
#define WM8960_ALC2_MINGAIN_SHIFT (4U)
818
#define WM8960_ALC2_MINGAIN_SET(x) (((uint16_t)(x) << WM8960_ALC2_MINGAIN_SHIFT) & WM8960_ALC2_MINGAIN_MASK)
819
#define WM8960_ALC2_MINGAIN_GET(x) (((uint16_t)(x) & WM8960_ALC2_MINGAIN_MASK) >> WM8960_ALC2_MINGAIN_SHIFT)
820
821
/*
822
* HLD (RW)
823
*
824
* ALC hold time before gain is increased.
825
* 0000 = 0ms
826
* 0001 = 2.67ms
827
* 0010 = 5.33ms
828
* … (time doubles with every step)
829
* 1111 = 43.691s
830
*/
831
#define WM8960_ALC2_HLD_MASK (0xFU)
832
#define WM8960_ALC2_HLD_SHIFT (0U)
833
#define WM8960_ALC2_HLD_SET(x) (((uint16_t)(x) << WM8960_ALC2_HLD_SHIFT) & WM8960_ALC2_HLD_MASK)
834
#define WM8960_ALC2_HLD_GET(x) (((uint16_t)(x) & WM8960_ALC2_HLD_MASK) >> WM8960_ALC2_HLD_SHIFT)
835
836
/* Bitfield definition for register: ALC3 */
837
/*
838
* ALCMODE (RW)
839
*
840
* Determines the ALC mode of operation:
841
* 0 = ALC mode
842
* 1 = Limiter mode
843
*/
844
#define WM8960_ALC3_ALCMODE_MASK (0x100U)
845
#define WM8960_ALC3_ALCMODE_SHIFT (8U)
846
#define WM8960_ALC3_ALCMODE_SET(x) (((uint16_t)(x) << WM8960_ALC3_ALCMODE_SHIFT) & WM8960_ALC3_ALCMODE_MASK)
847
#define WM8960_ALC3_ALCMODE_GET(x) (((uint16_t)(x) & WM8960_ALC3_ALCMODE_MASK) >> WM8960_ALC3_ALCMODE_SHIFT)
848
849
/*
850
* DCY (RW)
851
*
852
* ALC decay (gain ramp-up) time
853
* 0000 = 24ms
854
* 0001 = 48ms
855
* 0010 = 96ms
856
* … (time doubles with every step)
857
* 1010 or higher = 24.58s
858
*/
859
#define WM8960_ALC3_DCY_MASK (0xF0U)
860
#define WM8960_ALC3_DCY_SHIFT (4U)
861
#define WM8960_ALC3_DCY_SET(x) (((uint16_t)(x) << WM8960_ALC3_DCY_SHIFT) & WM8960_ALC3_DCY_MASK)
862
#define WM8960_ALC3_DCY_GET(x) (((uint16_t)(x) & WM8960_ALC3_DCY_MASK) >> WM8960_ALC3_DCY_SHIFT)
863
864
/*
865
* ATK (RW)
866
*
867
* ALC attack (gain ramp-down) time
868
* 0000 = 6ms
869
* 0001 = 12ms
870
* 0010 = 24ms
871
* … (time doubles with every step)
872
* 1010 or higher = 6.14s
873
*/
874
#define WM8960_ALC3_ATK_MASK (0xFU)
875
#define WM8960_ALC3_ATK_SHIFT (0U)
876
#define WM8960_ALC3_ATK_SET(x) (((uint16_t)(x) << WM8960_ALC3_ATK_SHIFT) & WM8960_ALC3_ATK_MASK)
877
#define WM8960_ALC3_ATK_GET(x) (((uint16_t)(x) & WM8960_ALC3_ATK_MASK) >> WM8960_ALC3_ATK_SHIFT)
878
879
/* Bitfield definition for register: NOISEG */
880
/*
881
* NGTH (RW)
882
*
883
* Noise gate threshold
884
* 00000 -76.5dBfs
885
* 00001 -75dBfs
886
* … 1.5 dB steps
887
* 11110 -31.5dBfs
888
* 11111 -30dBfs
889
*/
890
#define WM8960_NOISEG_NGTH_MASK (0xF8U)
891
#define WM8960_NOISEG_NGTH_SHIFT (3U)
892
#define WM8960_NOISEG_NGTH_SET(x) (((uint16_t)(x) << WM8960_NOISEG_NGTH_SHIFT) & WM8960_NOISEG_NGTH_MASK)
893
#define WM8960_NOISEG_NGTH_GET(x) (((uint16_t)(x) & WM8960_NOISEG_NGTH_MASK) >> WM8960_NOISEG_NGTH_SHIFT)
894
895
/*
896
* NGAT (RW)
897
*
898
* Noise gate function enable
899
* 0 = disable
900
* 1 = enable
901
*/
902
#define WM8960_NOISEG_NGAT_MASK (0x1U)
903
#define WM8960_NOISEG_NGAT_SHIFT (0U)
904
#define WM8960_NOISEG_NGAT_SET(x) (((uint16_t)(x) << WM8960_NOISEG_NGAT_SHIFT) & WM8960_NOISEG_NGAT_MASK)
905
#define WM8960_NOISEG_NGAT_GET(x) (((uint16_t)(x) & WM8960_NOISEG_NGAT_MASK) >> WM8960_NOISEG_NGAT_SHIFT)
906
907
/* Bitfield definition for register: LADC */
908
/*
909
* ADCVU (RW)
910
*
911
* ADC Volume Update
912
* Writing a 1 to this bit will cause left and right
913
* ADC volumes to be updated (LADCVOL and
914
* RADCVOL)
915
*/
916
#define WM8960_LADC_ADCVU_MASK (0x100U)
917
#define WM8960_LADC_ADCVU_SHIFT (8U)
918
#define WM8960_LADC_ADCVU_SET(x) (((uint16_t)(x) << WM8960_LADC_ADCVU_SHIFT) & WM8960_LADC_ADCVU_MASK)
919
#define WM8960_LADC_ADCVU_GET(x) (((uint16_t)(x) & WM8960_LADC_ADCVU_MASK) >> WM8960_LADC_ADCVU_SHIFT)
920
921
/*
922
* LADCVOL (RW)
923
*
924
* Left ADC Digital Volume Control
925
* 0000 0000 = Digital Mute
926
* 0000 0001 = -97dB
927
* 0000 0010 = -96.5dB
928
* ... 0.5dB steps up to
929
* 1111 1111 = +30dB
930
*/
931
#define WM8960_LADC_LADCVOL_MASK (0xFFU)
932
#define WM8960_LADC_LADCVOL_SHIFT (0U)
933
#define WM8960_LADC_LADCVOL_SET(x) (((uint16_t)(x) << WM8960_LADC_LADCVOL_SHIFT) & WM8960_LADC_LADCVOL_MASK)
934
#define WM8960_LADC_LADCVOL_GET(x) (((uint16_t)(x) & WM8960_LADC_LADCVOL_MASK) >> WM8960_LADC_LADCVOL_SHIFT)
935
936
/* Bitfield definition for register: RADC */
937
/*
938
* ADCVU (RW)
939
*
940
* ADC Volume Update
941
* Writing a 1 to this bit will cause left and right
942
* ADC volumes to be updated (LADCVOL and RADCVOL)
943
*/
944
#define WM8960_RADC_ADCVU_MASK (0x100U)
945
#define WM8960_RADC_ADCVU_SHIFT (8U)
946
#define WM8960_RADC_ADCVU_SET(x) (((uint16_t)(x) << WM8960_RADC_ADCVU_SHIFT) & WM8960_RADC_ADCVU_MASK)
947
#define WM8960_RADC_ADCVU_GET(x) (((uint16_t)(x) & WM8960_RADC_ADCVU_MASK) >> WM8960_RADC_ADCVU_SHIFT)
948
949
/*
950
* RADCVOL (RW)
951
*
952
* Right ADC Digital Volume Control
953
* 0000 0000 = Digital Mute
954
* 0000 0001 = -97dB
955
* 0000 0010 = -96.5dB
956
* ... 0.5dB steps up to
957
* 1111 1111 = +30dB
958
*/
959
#define WM8960_RADC_RADCVOL_MASK (0xFFU)
960
#define WM8960_RADC_RADCVOL_SHIFT (0U)
961
#define WM8960_RADC_RADCVOL_SET(x) (((uint16_t)(x) << WM8960_RADC_RADCVOL_SHIFT) & WM8960_RADC_RADCVOL_MASK)
962
#define WM8960_RADC_RADCVOL_GET(x) (((uint16_t)(x) & WM8960_RADC_RADCVOL_MASK) >> WM8960_RADC_RADCVOL_SHIFT)
963
964
/* Bitfield definition for register: ADDCTL1 */
965
/*
966
* TSDEN (RW)
967
*
968
* Thermal Shutdown Enable
969
* 0 = Thermal shutdown disabled
970
* 1 = Thermal shutdown enabled
971
* (TSENSEN must be enabled for this function to work)
972
*/
973
#define WM8960_ADDCTL1_TSDEN_MASK (0x100U)
974
#define WM8960_ADDCTL1_TSDEN_SHIFT (8U)
975
#define WM8960_ADDCTL1_TSDEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TSDEN_SHIFT) & WM8960_ADDCTL1_TSDEN_MASK)
976
#define WM8960_ADDCTL1_TSDEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TSDEN_MASK) >> WM8960_ADDCTL1_TSDEN_SHIFT)
977
978
/*
979
* VSEL (RW)
980
*
981
* Analogue Bias Optimisation
982
* 00 = Reserved
983
* 01 = Increased bias current optimized for
984
* AVDD=2.7V
985
* 1X = Lowest bias current, optimized for
986
* AVDD=3.3V
987
*/
988
#define WM8960_ADDCTL1_VSEL_MASK (0xC0U)
989
#define WM8960_ADDCTL1_VSEL_SHIFT (6U)
990
#define WM8960_ADDCTL1_VSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_VSEL_SHIFT) & WM8960_ADDCTL1_VSEL_MASK)
991
#define WM8960_ADDCTL1_VSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_VSEL_MASK) >> WM8960_ADDCTL1_VSEL_SHIFT)
992
993
/*
994
* DMONOMIX (RW)
995
*
996
* DAC Mono Mix
997
* 0 = Stereo
998
* 1 = Mono (Mono MIX output on enabled DACs
999
*/
1000
#define WM8960_ADDCTL1_DMONOMIX_MASK (0x10U)
1001
#define WM8960_ADDCTL1_DMONOMIX_SHIFT (4U)
1002
#define WM8960_ADDCTL1_DMONOMIX_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_DMONOMIX_SHIFT) & WM8960_ADDCTL1_DMONOMIX_MASK)
1003
#define WM8960_ADDCTL1_DMONOMIX_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_DMONOMIX_MASK) >> WM8960_ADDCTL1_DMONOMIX_SHIFT)
1004
1005
/*
1006
* DATSEL (RW)
1007
*
1008
* ADC Data Output Select
1009
* 00: left data = left ADC; right data =right ADC
1010
* 01: left data = left ADC; right data = left ADC
1011
* 10: left data = right ADC; right data =right ADC
1012
* 11: left data = right ADC; right data = left ADC
1013
*/
1014
#define WM8960_ADDCTL1_DATSEL_MASK (0xCU)
1015
#define WM8960_ADDCTL1_DATSEL_SHIFT (2U)
1016
#define WM8960_ADDCTL1_DATSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_DATSEL_SHIFT) & WM8960_ADDCTL1_DATSEL_MASK)
1017
#define WM8960_ADDCTL1_DATSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_DATSEL_MASK) >> WM8960_ADDCTL1_DATSEL_SHIFT)
1018
1019
/*
1020
* TOCLKSEL (RW)
1021
*
1022
* Slow Clock Select (Used for volume update
1023
* timeouts and for jack detect debounce)
1024
* 0 = SYSCLK / 221 (Slower Response)
1025
* 1 = SYSCLK / 219 (Faster Response)
1026
*/
1027
#define WM8960_ADDCTL1_TOCLKSEL_MASK (0x2U)
1028
#define WM8960_ADDCTL1_TOCLKSEL_SHIFT (1U)
1029
#define WM8960_ADDCTL1_TOCLKSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TOCLKSEL_SHIFT) & WM8960_ADDCTL1_TOCLKSEL_MASK)
1030
#define WM8960_ADDCTL1_TOCLKSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TOCLKSEL_MASK) >> WM8960_ADDCTL1_TOCLKSEL_SHIFT)
1031
1032
/*
1033
* TOEN (RW)
1034
*
1035
* Enables Slow Clock for Volume Update Timeout
1036
* and Jack Detect Debounce
1037
* 0 = Slow clock disabled
1038
* 1 = Slow clock enabled
1039
*/
1040
#define WM8960_ADDCTL1_TOEN_MASK (0x1U)
1041
#define WM8960_ADDCTL1_TOEN_SHIFT (0U)
1042
#define WM8960_ADDCTL1_TOEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL1_TOEN_SHIFT) & WM8960_ADDCTL1_TOEN_MASK)
1043
#define WM8960_ADDCTL1_TOEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL1_TOEN_MASK) >> WM8960_ADDCTL1_TOEN_SHIFT)
1044
1045
/* Bitfield definition for register: ADDCTL2 */
1046
/*
1047
* HPSWEN (RW)
1048
*
1049
* Headphone Switch Enable
1050
* 0 = Headphone switch disabled
1051
* 1 = Headphone switch enabled
1052
*/
1053
#define WM8960_ADDCTL2_HPSWEN_MASK (0x40U)
1054
#define WM8960_ADDCTL2_HPSWEN_SHIFT (6U)
1055
#define WM8960_ADDCTL2_HPSWEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_HPSWEN_SHIFT) & WM8960_ADDCTL2_HPSWEN_MASK)
1056
#define WM8960_ADDCTL2_HPSWEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_HPSWEN_MASK) >> WM8960_ADDCTL2_HPSWEN_SHIFT)
1057
1058
/*
1059
* HPSWPOL (RW)
1060
*
1061
* Headphone Switch Polarity
1062
* 0 = HPDETECT high = headphone
1063
* 1 = HPDETECT high = speaker
1064
*/
1065
#define WM8960_ADDCTL2_HPSWPOL_MASK (0x20U)
1066
#define WM8960_ADDCTL2_HPSWPOL_SHIFT (5U)
1067
#define WM8960_ADDCTL2_HPSWPOL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_HPSWPOL_SHIFT) & WM8960_ADDCTL2_HPSWPOL_MASK)
1068
#define WM8960_ADDCTL2_HPSWPOL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_HPSWPOL_MASK) >> WM8960_ADDCTL2_HPSWPOL_SHIFT)
1069
1070
/*
1071
* TRIS (RW)
1072
*
1073
* Tristates ADCDAT and switches ADCLRC,
1074
* DACLRC and BCLK to inputs.
1075
* 0 = ADCDAT is an output; ADCLRC, DACLRC
1076
* and BCLK are inputs (slave mode) or outputs
1077
* (master mode)
1078
* 1 = ADCDAT is tristated; DACLRC and BCLK
1079
* are inputs; ADCLRC is an input (when not
1080
* configured as a GPIO)
1081
*/
1082
#define WM8960_ADDCTL2_TRIS_MASK (0x8U)
1083
#define WM8960_ADDCTL2_TRIS_SHIFT (3U)
1084
#define WM8960_ADDCTL2_TRIS_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_TRIS_SHIFT) & WM8960_ADDCTL2_TRIS_MASK)
1085
#define WM8960_ADDCTL2_TRIS_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_TRIS_MASK) >> WM8960_ADDCTL2_TRIS_SHIFT)
1086
1087
/*
1088
* LRCM (RW)
1089
*
1090
* Selects disable mode for ADCLRC and DACLRC
1091
* (Master mode)
1092
* 0 = ADCLRC disabled when ADC (Left and
1093
* Right) disabled; DACLRC disabled when
1094
* DAC (Left and Right) disabled.
1095
* 1 = ADCLRC and DACLRC disabled only when
1096
* ADC (Left and Right) and DAC (Left and Right)
1097
* are disabled.
1098
*/
1099
#define WM8960_ADDCTL2_LRCM_MASK (0x4U)
1100
#define WM8960_ADDCTL2_LRCM_SHIFT (2U)
1101
#define WM8960_ADDCTL2_LRCM_SET(x) (((uint16_t)(x) << WM8960_ADDCTL2_LRCM_SHIFT) & WM8960_ADDCTL2_LRCM_MASK)
1102
#define WM8960_ADDCTL2_LRCM_GET(x) (((uint16_t)(x) & WM8960_ADDCTL2_LRCM_MASK) >> WM8960_ADDCTL2_LRCM_SHIFT)
1103
1104
/* Bitfield definition for register: POWER1 */
1105
/*
1106
* VMIDSEL (RW)
1107
*
1108
* Vmid Divider Enable and Select
1109
* 00 = Vmid disabled (for OFF mode)
1110
* 01 = 2 x 50k divider enabled (for playback /
1111
* record)
1112
* 10 = 2 x 250k divider enabled (for low-power
1113
* standby)
1114
* 11 = 2 x 5k divider enabled (for fast start-up)
1115
*/
1116
#define WM8960_POWER1_VMIDSEL_MASK (0x180U)
1117
#define WM8960_POWER1_VMIDSEL_SHIFT (7U)
1118
#define WM8960_POWER1_VMIDSEL_SET(x) (((uint16_t)(x) << WM8960_POWER1_VMIDSEL_SHIFT) & WM8960_POWER1_VMIDSEL_MASK)
1119
#define WM8960_POWER1_VMIDSEL_GET(x) (((uint16_t)(x) & WM8960_POWER1_VMIDSEL_MASK) >> WM8960_POWER1_VMIDSEL_SHIFT)
1120
1121
/*
1122
* VREF (RW)
1123
*
1124
* VREF (necessary for all other functions)
1125
* 0 = Power down
1126
* 1 = Power up
1127
*/
1128
#define WM8960_POWER1_VREF_MASK (0x40U)
1129
#define WM8960_POWER1_VREF_SHIFT (6U)
1130
#define WM8960_POWER1_VREF_SET(x) (((uint16_t)(x) << WM8960_POWER1_VREF_SHIFT) & WM8960_POWER1_VREF_MASK)
1131
#define WM8960_POWER1_VREF_GET(x) (((uint16_t)(x) & WM8960_POWER1_VREF_MASK) >> WM8960_POWER1_VREF_SHIFT)
1132
1133
/*
1134
* AINL (RW)
1135
*
1136
* Analogue in PGA Left
1137
* 0 = Power down
1138
* 1 = Power up
1139
*/
1140
#define WM8960_POWER1_AINL_MASK (0x20U)
1141
#define WM8960_POWER1_AINL_SHIFT (5U)
1142
#define WM8960_POWER1_AINL_SET(x) (((uint16_t)(x) << WM8960_POWER1_AINL_SHIFT) & WM8960_POWER1_AINL_MASK)
1143
#define WM8960_POWER1_AINL_GET(x) (((uint16_t)(x) & WM8960_POWER1_AINL_MASK) >> WM8960_POWER1_AINL_SHIFT)
1144
1145
/*
1146
* AINR (RW)
1147
*
1148
* Analogue in PGA Right
1149
* 0 = Power down
1150
* 1 = Power up
1151
*/
1152
#define WM8960_POWER1_AINR_MASK (0x10U)
1153
#define WM8960_POWER1_AINR_SHIFT (4U)
1154
#define WM8960_POWER1_AINR_SET(x) (((uint16_t)(x) << WM8960_POWER1_AINR_SHIFT) & WM8960_POWER1_AINR_MASK)
1155
#define WM8960_POWER1_AINR_GET(x) (((uint16_t)(x) & WM8960_POWER1_AINR_MASK) >> WM8960_POWER1_AINR_SHIFT)
1156
1157
/*
1158
* ADCL (RW)
1159
*
1160
* ADC Left
1161
* 0 = Power down
1162
* 1 = Power up
1163
*/
1164
#define WM8960_POWER1_ADCL_MASK (0x8U)
1165
#define WM8960_POWER1_ADCL_SHIFT (3U)
1166
#define WM8960_POWER1_ADCL_SET(x) (((uint16_t)(x) << WM8960_POWER1_ADCL_SHIFT) & WM8960_POWER1_ADCL_MASK)
1167
#define WM8960_POWER1_ADCL_GET(x) (((uint16_t)(x) & WM8960_POWER1_ADCL_MASK) >> WM8960_POWER1_ADCL_SHIFT)
1168
1169
/*
1170
* ADCR (RW)
1171
*
1172
* ADC Right
1173
* 0 = Power down
1174
* 1 = Power up
1175
*/
1176
#define WM8960_POWER1_ADCR_MASK (0x4U)
1177
#define WM8960_POWER1_ADCR_SHIFT (2U)
1178
#define WM8960_POWER1_ADCR_SET(x) (((uint16_t)(x) << WM8960_POWER1_ADCR_SHIFT) & WM8960_POWER1_ADCR_MASK)
1179
#define WM8960_POWER1_ADCR_GET(x) (((uint16_t)(x) & WM8960_POWER1_ADCR_MASK) >> WM8960_POWER1_ADCR_SHIFT)
1180
1181
/*
1182
* MICB (RW)
1183
*
1184
* MICBIAS
1185
* 0 = Power down
1186
* 1 = Power up
1187
*/
1188
#define WM8960_POWER1_MICB_MASK (0x2U)
1189
#define WM8960_POWER1_MICB_SHIFT (1U)
1190
#define WM8960_POWER1_MICB_SET(x) (((uint16_t)(x) << WM8960_POWER1_MICB_SHIFT) & WM8960_POWER1_MICB_MASK)
1191
#define WM8960_POWER1_MICB_GET(x) (((uint16_t)(x) & WM8960_POWER1_MICB_MASK) >> WM8960_POWER1_MICB_SHIFT)
1192
1193
/*
1194
* DIGENB (RW)
1195
*
1196
* Master Clock Disable
1197
* 0 = Master clock enabled
1198
* 1 = Master clock disabled
1199
*/
1200
#define WM8960_POWER1_DIGENB_MASK (0x1U)
1201
#define WM8960_POWER1_DIGENB_SHIFT (0U)
1202
#define WM8960_POWER1_DIGENB_SET(x) (((uint16_t)(x) << WM8960_POWER1_DIGENB_SHIFT) & WM8960_POWER1_DIGENB_MASK)
1203
#define WM8960_POWER1_DIGENB_GET(x) (((uint16_t)(x) & WM8960_POWER1_DIGENB_MASK) >> WM8960_POWER1_DIGENB_SHIFT)
1204
1205
/* Bitfield definition for register: POWER2 */
1206
/*
1207
* DACL (RW)
1208
*
1209
* DAC Left
1210
* 0 = Power down
1211
* 1 = Power up
1212
*/
1213
#define WM8960_POWER2_DACL_MASK (0x100U)
1214
#define WM8960_POWER2_DACL_SHIFT (8U)
1215
#define WM8960_POWER2_DACL_SET(x) (((uint16_t)(x) << WM8960_POWER2_DACL_SHIFT) & WM8960_POWER2_DACL_MASK)
1216
#define WM8960_POWER2_DACL_GET(x) (((uint16_t)(x) & WM8960_POWER2_DACL_MASK) >> WM8960_POWER2_DACL_SHIFT)
1217
1218
/*
1219
* DACR (RW)
1220
*
1221
* DAC Right
1222
* 0 = Power down
1223
* 1 = Power up
1224
*/
1225
#define WM8960_POWER2_DACR_MASK (0x80U)
1226
#define WM8960_POWER2_DACR_SHIFT (7U)
1227
#define WM8960_POWER2_DACR_SET(x) (((uint16_t)(x) << WM8960_POWER2_DACR_SHIFT) & WM8960_POWER2_DACR_MASK)
1228
#define WM8960_POWER2_DACR_GET(x) (((uint16_t)(x) & WM8960_POWER2_DACR_MASK) >> WM8960_POWER2_DACR_SHIFT)
1229
1230
/*
1231
* LOUT1 (RW)
1232
*
1233
* LOUT1 Output Buffer
1234
* 0 = Power down
1235
* 1 = Power up
1236
*/
1237
#define WM8960_POWER2_LOUT1_MASK (0x40U)
1238
#define WM8960_POWER2_LOUT1_SHIFT (6U)
1239
#define WM8960_POWER2_LOUT1_SET(x) (((uint16_t)(x) << WM8960_POWER2_LOUT1_SHIFT) & WM8960_POWER2_LOUT1_MASK)
1240
#define WM8960_POWER2_LOUT1_GET(x) (((uint16_t)(x) & WM8960_POWER2_LOUT1_MASK) >> WM8960_POWER2_LOUT1_SHIFT)
1241
1242
/*
1243
* ROUT1 (RW)
1244
*
1245
* ROUT1 Output Buffer
1246
* 0 = Power down
1247
* 1 = Power up
1248
*/
1249
#define WM8960_POWER2_ROUT1_MASK (0x20U)
1250
#define WM8960_POWER2_ROUT1_SHIFT (5U)
1251
#define WM8960_POWER2_ROUT1_SET(x) (((uint16_t)(x) << WM8960_POWER2_ROUT1_SHIFT) & WM8960_POWER2_ROUT1_MASK)
1252
#define WM8960_POWER2_ROUT1_GET(x) (((uint16_t)(x) & WM8960_POWER2_ROUT1_MASK) >> WM8960_POWER2_ROUT1_SHIFT)
1253
1254
/*
1255
* SPKL (RW)
1256
*
1257
* SPK_LP/SPK_LN Output Buffers
1258
* 0 = Power down
1259
* 1 = Power up
1260
*/
1261
#define WM8960_POWER2_SPKL_MASK (0x10U)
1262
#define WM8960_POWER2_SPKL_SHIFT (4U)
1263
#define WM8960_POWER2_SPKL_SET(x) (((uint16_t)(x) << WM8960_POWER2_SPKL_SHIFT) & WM8960_POWER2_SPKL_MASK)
1264
#define WM8960_POWER2_SPKL_GET(x) (((uint16_t)(x) & WM8960_POWER2_SPKL_MASK) >> WM8960_POWER2_SPKL_SHIFT)
1265
1266
/*
1267
* SPKR (RW)
1268
*
1269
* SPK_RP/SPK_RN Output Buffers
1270
* 0 = Power down
1271
* 1 = Power up
1272
*/
1273
#define WM8960_POWER2_SPKR_MASK (0x8U)
1274
#define WM8960_POWER2_SPKR_SHIFT (3U)
1275
#define WM8960_POWER2_SPKR_SET(x) (((uint16_t)(x) << WM8960_POWER2_SPKR_SHIFT) & WM8960_POWER2_SPKR_MASK)
1276
#define WM8960_POWER2_SPKR_GET(x) (((uint16_t)(x) & WM8960_POWER2_SPKR_MASK) >> WM8960_POWER2_SPKR_SHIFT)
1277
1278
/*
1279
* OUT3 (RW)
1280
*
1281
* OUT3 Output Buffer
1282
* 0 = Power down
1283
* 1 = Power up
1284
*/
1285
#define WM8960_POWER2_OUT3_MASK (0x2U)
1286
#define WM8960_POWER2_OUT3_SHIFT (1U)
1287
#define WM8960_POWER2_OUT3_SET(x) (((uint16_t)(x) << WM8960_POWER2_OUT3_SHIFT) & WM8960_POWER2_OUT3_MASK)
1288
#define WM8960_POWER2_OUT3_GET(x) (((uint16_t)(x) & WM8960_POWER2_OUT3_MASK) >> WM8960_POWER2_OUT3_SHIFT)
1289
1290
/*
1291
* PLL_EN (RW)
1292
*
1293
* PLL Enable
1294
* 0 = Power down
1295
* 1 = Power up
1296
*/
1297
#define WM8960_POWER2_PLL_EN_MASK (0x1U)
1298
#define WM8960_POWER2_PLL_EN_SHIFT (0U)
1299
#define WM8960_POWER2_PLL_EN_SET(x) (((uint16_t)(x) << WM8960_POWER2_PLL_EN_SHIFT) & WM8960_POWER2_PLL_EN_MASK)
1300
#define WM8960_POWER2_PLL_EN_GET(x) (((uint16_t)(x) & WM8960_POWER2_PLL_EN_MASK) >> WM8960_POWER2_PLL_EN_SHIFT)
1301
1302
/* Bitfield definition for register: ADDCTL3 */
1303
/*
1304
* VROI (RW)
1305
*
1306
* VREF to Analogue Output Resistance (Disabled
1307
* Outputs)
1308
* 0 = 500 VMID to output
1309
* 1 = 20k VMID to output
1310
*/
1311
#define WM8960_ADDCTL3_VROI_MASK (0x40U)
1312
#define WM8960_ADDCTL3_VROI_SHIFT (6U)
1313
#define WM8960_ADDCTL3_VROI_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_VROI_SHIFT) & WM8960_ADDCTL3_VROI_MASK)
1314
#define WM8960_ADDCTL3_VROI_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_VROI_MASK) >> WM8960_ADDCTL3_VROI_SHIFT)
1315
1316
/*
1317
* OUT3CAP (RW)
1318
*
1319
* Capless Mode Headphone Switch Enable
1320
* 0 = OUT3 unaffected by jack detect events
1321
* 1 = OUT3 enabled and disabled together with
1322
* HP_L and HP_R in response to jack detect
1323
* events
1324
*/
1325
#define WM8960_ADDCTL3_OUT3CAP_MASK (0x8U)
1326
#define WM8960_ADDCTL3_OUT3CAP_SHIFT (3U)
1327
#define WM8960_ADDCTL3_OUT3CAP_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_OUT3CAP_SHIFT) & WM8960_ADDCTL3_OUT3CAP_MASK)
1328
#define WM8960_ADDCTL3_OUT3CAP_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_OUT3CAP_MASK) >> WM8960_ADDCTL3_OUT3CAP_SHIFT)
1329
1330
/*
1331
* ADC_ALC_SR (RW)
1332
*
1333
* ALC Sample Rate
1334
* 000 = 44.1k / 48k
1335
* 001 = 32k
1336
* 010 = 22.05k / 24k
1337
* 011 = 16k
1338
* 100 = 11.25k / 12k
1339
* 101 = 8k
1340
* 110 and 111 = Reserved
1341
*/
1342
#define WM8960_ADDCTL3_ADC_ALC_SR_MASK (0x7U)
1343
#define WM8960_ADDCTL3_ADC_ALC_SR_SHIFT (0U)
1344
#define WM8960_ADDCTL3_ADC_ALC_SR_SET(x) (((uint16_t)(x) << WM8960_ADDCTL3_ADC_ALC_SR_SHIFT) & WM8960_ADDCTL3_ADC_ALC_SR_MASK)
1345
#define WM8960_ADDCTL3_ADC_ALC_SR_GET(x) (((uint16_t)(x) & WM8960_ADDCTL3_ADC_ALC_SR_MASK) >> WM8960_ADDCTL3_ADC_ALC_SR_SHIFT)
1346
1347
/* Bitfield definition for register: APOP1 */
1348
/*
1349
* POBCTRL (RW)
1350
*
1351
* Selects the bias current source for output
1352
* amplifiers and VMID buffer
1353
* 0 = VMID / R bias
1354
* 1 = VGS / R bias
1355
*/
1356
#define WM8960_APOP1_POBCTRL_MASK (0x80U)
1357
#define WM8960_APOP1_POBCTRL_SHIFT (7U)
1358
#define WM8960_APOP1_POBCTRL_SET(x) (((uint16_t)(x) << WM8960_APOP1_POBCTRL_SHIFT) & WM8960_APOP1_POBCTRL_MASK)
1359
#define WM8960_APOP1_POBCTRL_GET(x) (((uint16_t)(x) & WM8960_APOP1_POBCTRL_MASK) >> WM8960_APOP1_POBCTRL_SHIFT)
1360
1361
/*
1362
* BUFDCOPEN (RW)
1363
*
1364
* Enables the VGS / R current generator
1365
* 0 = Disabled
1366
* 1 = Enabled
1367
*/
1368
#define WM8960_APOP1_BUFDCOPEN_MASK (0x10U)
1369
#define WM8960_APOP1_BUFDCOPEN_SHIFT (4U)
1370
#define WM8960_APOP1_BUFDCOPEN_SET(x) (((uint16_t)(x) << WM8960_APOP1_BUFDCOPEN_SHIFT) & WM8960_APOP1_BUFDCOPEN_MASK)
1371
#define WM8960_APOP1_BUFDCOPEN_GET(x) (((uint16_t)(x) & WM8960_APOP1_BUFDCOPEN_MASK) >> WM8960_APOP1_BUFDCOPEN_SHIFT)
1372
1373
/*
1374
* BUFIOEN (RW)
1375
*
1376
* Enables the VGS / R current generator and the
1377
* analogue input and output bias
1378
* 0 = Disabled
1379
* 1 = Enabled
1380
*/
1381
#define WM8960_APOP1_BUFIOEN_MASK (0x8U)
1382
#define WM8960_APOP1_BUFIOEN_SHIFT (3U)
1383
#define WM8960_APOP1_BUFIOEN_SET(x) (((uint16_t)(x) << WM8960_APOP1_BUFIOEN_SHIFT) & WM8960_APOP1_BUFIOEN_MASK)
1384
#define WM8960_APOP1_BUFIOEN_GET(x) (((uint16_t)(x) & WM8960_APOP1_BUFIOEN_MASK) >> WM8960_APOP1_BUFIOEN_SHIFT)
1385
1386
/*
1387
* SOFT_ST (RW)
1388
*
1389
* Enables VMID soft start
1390
* 0 = Disabled
1391
* 1 = Enabled
1392
*/
1393
#define WM8960_APOP1_SOFT_ST_MASK (0x4U)
1394
#define WM8960_APOP1_SOFT_ST_SHIFT (2U)
1395
#define WM8960_APOP1_SOFT_ST_SET(x) (((uint16_t)(x) << WM8960_APOP1_SOFT_ST_SHIFT) & WM8960_APOP1_SOFT_ST_MASK)
1396
#define WM8960_APOP1_SOFT_ST_GET(x) (((uint16_t)(x) & WM8960_APOP1_SOFT_ST_MASK) >> WM8960_APOP1_SOFT_ST_SHIFT)
1397
1398
/*
1399
* HPSTBY (RW)
1400
*
1401
* Headphone Amplifier Standby
1402
* 0 = Standby mode disabled (Normal operation)
1403
* 1 = Standby mode enabled
1404
*/
1405
#define WM8960_APOP1_HPSTBY_MASK (0x1U)
1406
#define WM8960_APOP1_HPSTBY_SHIFT (0U)
1407
#define WM8960_APOP1_HPSTBY_SET(x) (((uint16_t)(x) << WM8960_APOP1_HPSTBY_SHIFT) & WM8960_APOP1_HPSTBY_MASK)
1408
#define WM8960_APOP1_HPSTBY_GET(x) (((uint16_t)(x) & WM8960_APOP1_HPSTBY_MASK) >> WM8960_APOP1_HPSTBY_SHIFT)
1409
1410
/* Bitfield definition for register: APOP2 */
1411
/*
1412
* DISOP (RW)
1413
*
1414
* Discharges the DC-blocking headphone
1415
* capacitors on HP_L and HP_R
1416
* 0 = Disabled
1417
* 1 = Enabled
1418
*/
1419
#define WM8960_APOP2_DISOP_MASK (0x40U)
1420
#define WM8960_APOP2_DISOP_SHIFT (6U)
1421
#define WM8960_APOP2_DISOP_SET(x) (((uint16_t)(x) << WM8960_APOP2_DISOP_SHIFT) & WM8960_APOP2_DISOP_MASK)
1422
#define WM8960_APOP2_DISOP_GET(x) (((uint16_t)(x) & WM8960_APOP2_DISOP_MASK) >> WM8960_APOP2_DISOP_SHIFT)
1423
1424
/*
1425
* DRES (RW)
1426
*
1427
* DRES determines the value of the resistors used
1428
* to discharge the DC-blocking headphone
1429
* capacitors when DISOP=1
1430
* DRES[1:0] Resistance (Ohms)
1431
* 0 0 400
1432
* 0 1 200
1433
* 1 0 600
1434
* 1 1 150
1435
*/
1436
#define WM8960_APOP2_DRES_MASK (0x30U)
1437
#define WM8960_APOP2_DRES_SHIFT (4U)
1438
#define WM8960_APOP2_DRES_SET(x) (((uint16_t)(x) << WM8960_APOP2_DRES_SHIFT) & WM8960_APOP2_DRES_MASK)
1439
#define WM8960_APOP2_DRES_GET(x) (((uint16_t)(x) & WM8960_APOP2_DRES_MASK) >> WM8960_APOP2_DRES_SHIFT)
1440
1441
/* Bitfield definition for register: LINPATH */
1442
/*
1443
* LMN1 (RW)
1444
*
1445
* Connect LINPUT1 to inverting input of Left Input
1446
* PGA
1447
* 0 = LINPUT1 not connected to PGA
1448
* 1 = LINPUT1 connected to PGA
1449
*/
1450
#define WM8960_LINPATH_LMN1_MASK (0x100U)
1451
#define WM8960_LINPATH_LMN1_SHIFT (8U)
1452
#define WM8960_LINPATH_LMN1_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMN1_SHIFT) & WM8960_LINPATH_LMN1_MASK)
1453
#define WM8960_LINPATH_LMN1_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMN1_MASK) >> WM8960_LINPATH_LMN1_SHIFT)
1454
1455
/*
1456
* LMP3 (RW)
1457
*
1458
* Connect LINPUT3 to non-inverting input of Left
1459
* Input PGA
1460
* 0 = LINPUT3 not connected to PGA
1461
* 1 = LINPUT3 connected to PGA (Constant input
1462
* impedance)
1463
*/
1464
#define WM8960_LINPATH_LMP3_MASK (0x80U)
1465
#define WM8960_LINPATH_LMP3_SHIFT (7U)
1466
#define WM8960_LINPATH_LMP3_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMP3_SHIFT) & WM8960_LINPATH_LMP3_MASK)
1467
#define WM8960_LINPATH_LMP3_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMP3_MASK) >> WM8960_LINPATH_LMP3_SHIFT)
1468
1469
/*
1470
* LMP2 (RW)
1471
*
1472
* Connect LINPUT2 to non-inverting input of Left
1473
* Input PGA
1474
* 0 = LINPUT2 not connected to PGA
1475
* 1 = LINPUT2 connected to PGA (Constant input impedance)
1476
*/
1477
#define WM8960_LINPATH_LMP2_MASK (0x40U)
1478
#define WM8960_LINPATH_LMP2_SHIFT (6U)
1479
#define WM8960_LINPATH_LMP2_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMP2_SHIFT) & WM8960_LINPATH_LMP2_MASK)
1480
#define WM8960_LINPATH_LMP2_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMP2_MASK) >> WM8960_LINPATH_LMP2_SHIFT)
1481
1482
/*
1483
* LMICBOOST (RW)
1484
*
1485
* Left Channel Input PGA Boost Gain
1486
* 00 = +0dB
1487
* 01 = +13dB
1488
* 10 = +20dB
1489
* 11 = +29dB
1490
*/
1491
#define WM8960_LINPATH_LMICBOOST_MASK (0x30U)
1492
#define WM8960_LINPATH_LMICBOOST_SHIFT (4U)
1493
#define WM8960_LINPATH_LMICBOOST_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMICBOOST_SHIFT) & WM8960_LINPATH_LMICBOOST_MASK)
1494
#define WM8960_LINPATH_LMICBOOST_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMICBOOST_MASK) >> WM8960_LINPATH_LMICBOOST_SHIFT)
1495
1496
/*
1497
* LMIC2B (RW)
1498
*
1499
* Connect Left Input PGA to Left Input Boost Mixer
1500
* 0 = Not connected
1501
* 1 = Connected
1502
*/
1503
#define WM8960_LINPATH_LMIC2B_MASK (0x8U)
1504
#define WM8960_LINPATH_LMIC2B_SHIFT (3U)
1505
#define WM8960_LINPATH_LMIC2B_SET(x) (((uint16_t)(x) << WM8960_LINPATH_LMIC2B_SHIFT) & WM8960_LINPATH_LMIC2B_MASK)
1506
#define WM8960_LINPATH_LMIC2B_GET(x) (((uint16_t)(x) & WM8960_LINPATH_LMIC2B_MASK) >> WM8960_LINPATH_LMIC2B_SHIFT)
1507
1508
/* Bitfield definition for register: RINPATH */
1509
/*
1510
* RMN1 (RW)
1511
*
1512
* Connect RINPUT1 to inverting input of Right
1513
* Input PGA
1514
* 0 = RINPUT1 not connected to PGA
1515
* 1 = RINPUT1 connected to PGA
1516
*/
1517
#define WM8960_RINPATH_RMN1_MASK (0x100U)
1518
#define WM8960_RINPATH_RMN1_SHIFT (8U)
1519
#define WM8960_RINPATH_RMN1_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMN1_SHIFT) & WM8960_RINPATH_RMN1_MASK)
1520
#define WM8960_RINPATH_RMN1_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMN1_MASK) >> WM8960_RINPATH_RMN1_SHIFT)
1521
1522
/*
1523
* RMP3 (RW)
1524
*
1525
* Connect RINPUT3 to non-inverting input of Right
1526
* Input PGA
1527
* 0 = RINPUT3 not connected to PGA
1528
* 1 = RINPUT3 connected to PGA (Constant input impedance)
1529
*/
1530
#define WM8960_RINPATH_RMP3_MASK (0x80U)
1531
#define WM8960_RINPATH_RMP3_SHIFT (7U)
1532
#define WM8960_RINPATH_RMP3_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMP3_SHIFT) & WM8960_RINPATH_RMP3_MASK)
1533
#define WM8960_RINPATH_RMP3_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMP3_MASK) >> WM8960_RINPATH_RMP3_SHIFT)
1534
1535
/*
1536
* RMP2 (RW)
1537
*
1538
* Connect RINPUT2 to non-inverting input of Right
1539
* Input PGA
1540
* 0 = RINPUT2 not connected to PGA
1541
* 1 = RINPUT2 connected to PGA (Constant input
1542
* impedance)
1543
*/
1544
#define WM8960_RINPATH_RMP2_MASK (0x40U)
1545
#define WM8960_RINPATH_RMP2_SHIFT (6U)
1546
#define WM8960_RINPATH_RMP2_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMP2_SHIFT) & WM8960_RINPATH_RMP2_MASK)
1547
#define WM8960_RINPATH_RMP2_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMP2_MASK) >> WM8960_RINPATH_RMP2_SHIFT)
1548
1549
/*
1550
* RMICBOOST (RW)
1551
*
1552
* Right Channel Input PGA Boost Gain
1553
* 00 = +0dB
1554
* 01 = +13dB
1555
* 10 = +20dB
1556
* 11 = +29dB
1557
*/
1558
#define WM8960_RINPATH_RMICBOOST_MASK (0x30U)
1559
#define WM8960_RINPATH_RMICBOOST_SHIFT (4U)
1560
#define WM8960_RINPATH_RMICBOOST_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMICBOOST_SHIFT) & WM8960_RINPATH_RMICBOOST_MASK)
1561
#define WM8960_RINPATH_RMICBOOST_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMICBOOST_MASK) >> WM8960_RINPATH_RMICBOOST_SHIFT)
1562
1563
/*
1564
* RMIC2B (RW)
1565
*
1566
* Connect Right Input PGA to Right Input Boost
1567
* Mixer
1568
* 0 = Not connected
1569
* 1 = Connected
1570
*/
1571
#define WM8960_RINPATH_RMIC2B_MASK (0x8U)
1572
#define WM8960_RINPATH_RMIC2B_SHIFT (3U)
1573
#define WM8960_RINPATH_RMIC2B_SET(x) (((uint16_t)(x) << WM8960_RINPATH_RMIC2B_SHIFT) & WM8960_RINPATH_RMIC2B_MASK)
1574
#define WM8960_RINPATH_RMIC2B_GET(x) (((uint16_t)(x) & WM8960_RINPATH_RMIC2B_MASK) >> WM8960_RINPATH_RMIC2B_SHIFT)
1575
1576
/* Bitfield definition for register: LOUTMIX */
1577
/*
1578
* LD2LO (RW)
1579
*
1580
* Left DAC to Left Output Mixer
1581
* 0 = Disable (Mute)
1582
* 1 = Enable Path
1583
*/
1584
#define WM8960_LOUTMIX_LD2LO_MASK (0x100U)
1585
#define WM8960_LOUTMIX_LD2LO_SHIFT (8U)
1586
#define WM8960_LOUTMIX_LD2LO_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LD2LO_SHIFT) & WM8960_LOUTMIX_LD2LO_MASK)
1587
#define WM8960_LOUTMIX_LD2LO_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LD2LO_MASK) >> WM8960_LOUTMIX_LD2LO_SHIFT)
1588
1589
/*
1590
* LI2LO (RW)
1591
*
1592
* LINPUT3 to Left Output Mixer
1593
* 0 = Disable (Mute)
1594
* 1 = Enable Path
1595
*/
1596
#define WM8960_LOUTMIX_LI2LO_MASK (0x80U)
1597
#define WM8960_LOUTMIX_LI2LO_SHIFT (7U)
1598
#define WM8960_LOUTMIX_LI2LO_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LI2LO_SHIFT) & WM8960_LOUTMIX_LI2LO_MASK)
1599
#define WM8960_LOUTMIX_LI2LO_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LI2LO_MASK) >> WM8960_LOUTMIX_LI2LO_SHIFT)
1600
1601
/*
1602
* LI2LOVOL (RW)
1603
*
1604
* LINPUT3 to Left Output Mixer Volume
1605
* 000 = 0dB
1606
* ...(3dB steps)
1607
* 111 = -21dB
1608
*/
1609
#define WM8960_LOUTMIX_LI2LOVOL_MASK (0x70U)
1610
#define WM8960_LOUTMIX_LI2LOVOL_SHIFT (4U)
1611
#define WM8960_LOUTMIX_LI2LOVOL_SET(x) (((uint16_t)(x) << WM8960_LOUTMIX_LI2LOVOL_SHIFT) & WM8960_LOUTMIX_LI2LOVOL_MASK)
1612
#define WM8960_LOUTMIX_LI2LOVOL_GET(x) (((uint16_t)(x) & WM8960_LOUTMIX_LI2LOVOL_MASK) >> WM8960_LOUTMIX_LI2LOVOL_SHIFT)
1613
1614
/* Bitfield definition for register: ROUTMIX */
1615
/*
1616
* RD2RO (RW)
1617
*
1618
* Right DAC to Right Output Mixer
1619
* 0 = Disable (Mute)
1620
* 1 = Enable Path
1621
*/
1622
#define WM8960_ROUTMIX_RD2RO_MASK (0x100U)
1623
#define WM8960_ROUTMIX_RD2RO_SHIFT (8U)
1624
#define WM8960_ROUTMIX_RD2RO_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RD2RO_SHIFT) & WM8960_ROUTMIX_RD2RO_MASK)
1625
#define WM8960_ROUTMIX_RD2RO_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RD2RO_MASK) >> WM8960_ROUTMIX_RD2RO_SHIFT)
1626
1627
/*
1628
* RI2RO (RW)
1629
*
1630
* RINPUT3 to Right Output Mixer
1631
* 0 = Disable (Mute)
1632
* 1 = Enable Path
1633
*/
1634
#define WM8960_ROUTMIX_RI2RO_MASK (0x80U)
1635
#define WM8960_ROUTMIX_RI2RO_SHIFT (7U)
1636
#define WM8960_ROUTMIX_RI2RO_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RI2RO_SHIFT) & WM8960_ROUTMIX_RI2RO_MASK)
1637
#define WM8960_ROUTMIX_RI2RO_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RI2RO_MASK) >> WM8960_ROUTMIX_RI2RO_SHIFT)
1638
1639
/*
1640
* RI2ROVOL (RW)
1641
*
1642
* RINPUT3 to Right Output Mixer Volume
1643
* 000 = 0dB
1644
* ...(3dB steps)
1645
* 111 = -21dB
1646
*/
1647
#define WM8960_ROUTMIX_RI2ROVOL_MASK (0x70U)
1648
#define WM8960_ROUTMIX_RI2ROVOL_SHIFT (4U)
1649
#define WM8960_ROUTMIX_RI2ROVOL_SET(x) (((uint16_t)(x) << WM8960_ROUTMIX_RI2ROVOL_SHIFT) & WM8960_ROUTMIX_RI2ROVOL_MASK)
1650
#define WM8960_ROUTMIX_RI2ROVOL_GET(x) (((uint16_t)(x) & WM8960_ROUTMIX_RI2ROVOL_MASK) >> WM8960_ROUTMIX_RI2ROVOL_SHIFT)
1651
1652
/* Bitfield definition for register: MONOMIX1 */
1653
/*
1654
* L2MO (RW)
1655
*
1656
* Left Output Mixer to Mono Output Mixer Control
1657
* 0 = Left channel mix disabled
1658
* 1 = Left channel mix enabled
1659
*/
1660
#define WM8960_MONOMIX1_L2MO_MASK (0x80U)
1661
#define WM8960_MONOMIX1_L2MO_SHIFT (7U)
1662
#define WM8960_MONOMIX1_L2MO_SET(x) (((uint16_t)(x) << WM8960_MONOMIX1_L2MO_SHIFT) & WM8960_MONOMIX1_L2MO_MASK)
1663
#define WM8960_MONOMIX1_L2MO_GET(x) (((uint16_t)(x) & WM8960_MONOMIX1_L2MO_MASK) >> WM8960_MONOMIX1_L2MO_SHIFT)
1664
1665
/* Bitfield definition for register: MONOMIX2 */
1666
/*
1667
* R2MO (RW)
1668
*
1669
* Right Output Mixer to Mono Output Mixer Control
1670
* 0 = Right channel mix disabled
1671
* 1 = Right channel mix enabled
1672
*/
1673
#define WM8960_MONOMIX2_R2MO_MASK (0x80U)
1674
#define WM8960_MONOMIX2_R2MO_SHIFT (7U)
1675
#define WM8960_MONOMIX2_R2MO_SET(x) (((uint16_t)(x) << WM8960_MONOMIX2_R2MO_SHIFT) & WM8960_MONOMIX2_R2MO_MASK)
1676
#define WM8960_MONOMIX2_R2MO_GET(x) (((uint16_t)(x) & WM8960_MONOMIX2_R2MO_MASK) >> WM8960_MONOMIX2_R2MO_SHIFT)
1677
1678
/* Bitfield definition for register: LOUT2 */
1679
/*
1680
* SPKVU (RW)
1681
*
1682
* Speaker Volume Update
1683
* Writing a 1 to this bit will cause left and right speaker volumes to be updated (SPKLVOL and SPKRVOL)
1684
*/
1685
#define WM8960_LOUT2_SPKVU_MASK (0x100U)
1686
#define WM8960_LOUT2_SPKVU_SHIFT (8U)
1687
#define WM8960_LOUT2_SPKVU_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKVU_SHIFT) & WM8960_LOUT2_SPKVU_MASK)
1688
#define WM8960_LOUT2_SPKVU_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKVU_MASK) >> WM8960_LOUT2_SPKVU_SHIFT)
1689
1690
/*
1691
* SPKLZC (RW)
1692
*
1693
* Left Speaker Zero Cross Enable
1694
* 1 = Change gain on zero cross only
1695
* 0 = Change gain immediately
1696
*/
1697
#define WM8960_LOUT2_SPKLZC_MASK (0x80U)
1698
#define WM8960_LOUT2_SPKLZC_SHIFT (7U)
1699
#define WM8960_LOUT2_SPKLZC_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKLZC_SHIFT) & WM8960_LOUT2_SPKLZC_MASK)
1700
#define WM8960_LOUT2_SPKLZC_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKLZC_MASK) >> WM8960_LOUT2_SPKLZC_SHIFT)
1701
1702
/*
1703
* SPKLVOL (RW)
1704
*
1705
* SPK_LP/SPK_LN Volume
1706
* 1111111 = +6dB
1707
* … 1dB steps down to
1708
* 0110000 = -73dB
1709
* 0101111 to 0000000 = Analogue MUTE
1710
*/
1711
#define WM8960_LOUT2_SPKLVOL_MASK (0x7FU)
1712
#define WM8960_LOUT2_SPKLVOL_SHIFT (0U)
1713
#define WM8960_LOUT2_SPKLVOL_SET(x) (((uint16_t)(x) << WM8960_LOUT2_SPKLVOL_SHIFT) & WM8960_LOUT2_SPKLVOL_MASK)
1714
#define WM8960_LOUT2_SPKLVOL_GET(x) (((uint16_t)(x) & WM8960_LOUT2_SPKLVOL_MASK) >> WM8960_LOUT2_SPKLVOL_SHIFT)
1715
1716
/* Bitfield definition for register: ROUT2 */
1717
/*
1718
* SPKVU (RW)
1719
*
1720
* Speaker Volume Update
1721
* Writing a 1 to this bit will cause left and right
1722
* speaker volumes to be updated (SPKLVOL and SPKRVOL)
1723
*/
1724
#define WM8960_ROUT2_SPKVU_MASK (0x100U)
1725
#define WM8960_ROUT2_SPKVU_SHIFT (8U)
1726
#define WM8960_ROUT2_SPKVU_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKVU_SHIFT) & WM8960_ROUT2_SPKVU_MASK)
1727
#define WM8960_ROUT2_SPKVU_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKVU_MASK) >> WM8960_ROUT2_SPKVU_SHIFT)
1728
1729
/*
1730
* SPKRZC (RW)
1731
*
1732
* Right Speaker Zero Cross Enable
1733
* 1 = Change gain on zero cross only
1734
* 0 = Change gain immediately
1735
*/
1736
#define WM8960_ROUT2_SPKRZC_MASK (0x80U)
1737
#define WM8960_ROUT2_SPKRZC_SHIFT (7U)
1738
#define WM8960_ROUT2_SPKRZC_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKRZC_SHIFT) & WM8960_ROUT2_SPKRZC_MASK)
1739
#define WM8960_ROUT2_SPKRZC_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKRZC_MASK) >> WM8960_ROUT2_SPKRZC_SHIFT)
1740
1741
/*
1742
* SPKRVOL (RW)
1743
*
1744
* SPK_RP/SPK_RN Volume
1745
* 1111111 = +6dB
1746
* … 1dB steps down to
1747
* 0110000 = -73dB
1748
* 0101111 to 0000000 = Analogue MUTE
1749
*/
1750
#define WM8960_ROUT2_SPKRVOL_MASK (0x7FU)
1751
#define WM8960_ROUT2_SPKRVOL_SHIFT (0U)
1752
#define WM8960_ROUT2_SPKRVOL_SET(x) (((uint16_t)(x) << WM8960_ROUT2_SPKRVOL_SHIFT) & WM8960_ROUT2_SPKRVOL_MASK)
1753
#define WM8960_ROUT2_SPKRVOL_GET(x) (((uint16_t)(x) & WM8960_ROUT2_SPKRVOL_MASK) >> WM8960_ROUT2_SPKRVOL_SHIFT)
1754
1755
/* Bitfield definition for register: MONO */
1756
/*
1757
* MOUTVOL (RW)
1758
*
1759
* Mono Output Mixer Volume Control
1760
* 0 = 0dB
1761
* 1 = -6dB
1762
*/
1763
#define WM8960_MONO_MOUTVOL_MASK (0x40U)
1764
#define WM8960_MONO_MOUTVOL_SHIFT (6U)
1765
#define WM8960_MONO_MOUTVOL_SET(x) (((uint16_t)(x) << WM8960_MONO_MOUTVOL_SHIFT) & WM8960_MONO_MOUTVOL_MASK)
1766
#define WM8960_MONO_MOUTVOL_GET(x) (((uint16_t)(x) & WM8960_MONO_MOUTVOL_MASK) >> WM8960_MONO_MOUTVOL_SHIFT)
1767
1768
/* Bitfield definition for register: INBMIX1 */
1769
/*
1770
* LIN3BOOST (RW)
1771
*
1772
* LINPUT3 to Boost Mixer Gain
1773
* 000 = Mute
1774
* 001 = -12dB
1775
* ...3dB steps up to
1776
* 111 = +6dB
1777
*/
1778
#define WM8960_INBMIX1_LIN3BOOST_MASK (0x70U)
1779
#define WM8960_INBMIX1_LIN3BOOST_SHIFT (4U)
1780
#define WM8960_INBMIX1_LIN3BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX1_LIN3BOOST_SHIFT) & WM8960_INBMIX1_LIN3BOOST_MASK)
1781
#define WM8960_INBMIX1_LIN3BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX1_LIN3BOOST_MASK) >> WM8960_INBMIX1_LIN3BOOST_SHIFT)
1782
1783
/*
1784
* LIN2BOOST (RW)
1785
*
1786
* LINPUT2 to Boost Mixer Gain
1787
* 000 = Mute
1788
* 001 = -12dB
1789
* ...3dB steps up to
1790
* 111 = +6dB
1791
*/
1792
#define WM8960_INBMIX1_LIN2BOOST_MASK (0xEU)
1793
#define WM8960_INBMIX1_LIN2BOOST_SHIFT (1U)
1794
#define WM8960_INBMIX1_LIN2BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX1_LIN2BOOST_SHIFT) & WM8960_INBMIX1_LIN2BOOST_MASK)
1795
#define WM8960_INBMIX1_LIN2BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX1_LIN2BOOST_MASK) >> WM8960_INBMIX1_LIN2BOOST_SHIFT)
1796
1797
/* Bitfield definition for register: INBMIX2 */
1798
/*
1799
* RIN3BOOST (RW)
1800
*
1801
* RINPUT3 to Boost Mixer Gain
1802
* 000 = Mute
1803
* 001 = -12dB
1804
* ...3dB steps up to
1805
* 111 = +6dB
1806
*/
1807
#define WM8960_INBMIX2_RIN3BOOST_MASK (0x70U)
1808
#define WM8960_INBMIX2_RIN3BOOST_SHIFT (4U)
1809
#define WM8960_INBMIX2_RIN3BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX2_RIN3BOOST_SHIFT) & WM8960_INBMIX2_RIN3BOOST_MASK)
1810
#define WM8960_INBMIX2_RIN3BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX2_RIN3BOOST_MASK) >> WM8960_INBMIX2_RIN3BOOST_SHIFT)
1811
1812
/*
1813
* RIN2BOOST (RW)
1814
*
1815
* RINPUT2 to Boost Mixer Gain
1816
* 000 = Mute
1817
* 001 = -12dB
1818
* ...3dB steps up to
1819
* 111 = +6dB
1820
*/
1821
#define WM8960_INBMIX2_RIN2BOOST_MASK (0xEU)
1822
#define WM8960_INBMIX2_RIN2BOOST_SHIFT (1U)
1823
#define WM8960_INBMIX2_RIN2BOOST_SET(x) (((uint16_t)(x) << WM8960_INBMIX2_RIN2BOOST_SHIFT) & WM8960_INBMIX2_RIN2BOOST_MASK)
1824
#define WM8960_INBMIX2_RIN2BOOST_GET(x) (((uint16_t)(x) & WM8960_INBMIX2_RIN2BOOST_MASK) >> WM8960_INBMIX2_RIN2BOOST_SHIFT)
1825
1826
/* Bitfield definition for register: BYPASS1 */
1827
/*
1828
* LB2LO (RW)
1829
*
1830
* Left Input Boost Mixer to Left Output Mixer
1831
* 0 = Disable (Mute)
1832
* 1 = Enable Path
1833
*/
1834
#define WM8960_BYPASS1_LB2LO_MASK (0x80U)
1835
#define WM8960_BYPASS1_LB2LO_SHIFT (7U)
1836
#define WM8960_BYPASS1_LB2LO_SET(x) (((uint16_t)(x) << WM8960_BYPASS1_LB2LO_SHIFT) & WM8960_BYPASS1_LB2LO_MASK)
1837
#define WM8960_BYPASS1_LB2LO_GET(x) (((uint16_t)(x) & WM8960_BYPASS1_LB2LO_MASK) >> WM8960_BYPASS1_LB2LO_SHIFT)
1838
1839
/*
1840
* LB2LOVOL (RW)
1841
*
1842
* Left Input Boost Mixer to Left Output Mixer
1843
* Volume
1844
* 000 = 0dB
1845
* ...(3dB steps)
1846
* 111 = -21dB
1847
*/
1848
#define WM8960_BYPASS1_LB2LOVOL_MASK (0x70U)
1849
#define WM8960_BYPASS1_LB2LOVOL_SHIFT (4U)
1850
#define WM8960_BYPASS1_LB2LOVOL_SET(x) (((uint16_t)(x) << WM8960_BYPASS1_LB2LOVOL_SHIFT) & WM8960_BYPASS1_LB2LOVOL_MASK)
1851
#define WM8960_BYPASS1_LB2LOVOL_GET(x) (((uint16_t)(x) & WM8960_BYPASS1_LB2LOVOL_MASK) >> WM8960_BYPASS1_LB2LOVOL_SHIFT)
1852
1853
/* Bitfield definition for register: BYPASS2 */
1854
/*
1855
* RB2RO (RW)
1856
*
1857
* Right Input Boost Mixer to Right Output Mixer
1858
* 0 = Disable (Mute)
1859
* 1 = Enable Path
1860
*/
1861
#define WM8960_BYPASS2_RB2RO_MASK (0x80U)
1862
#define WM8960_BYPASS2_RB2RO_SHIFT (7U)
1863
#define WM8960_BYPASS2_RB2RO_SET(x) (((uint16_t)(x) << WM8960_BYPASS2_RB2RO_SHIFT) & WM8960_BYPASS2_RB2RO_MASK)
1864
#define WM8960_BYPASS2_RB2RO_GET(x) (((uint16_t)(x) & WM8960_BYPASS2_RB2RO_MASK) >> WM8960_BYPASS2_RB2RO_SHIFT)
1865
1866
/*
1867
* RB2ROVOL (RW)
1868
*
1869
* Right Input Boost Mixer to Right Output Mixer
1870
* Volume
1871
* 000 = 0dB
1872
* ...(3dB steps)
1873
* 111 = -21dB
1874
*/
1875
#define WM8960_BYPASS2_RB2ROVOL_MASK (0x70U)
1876
#define WM8960_BYPASS2_RB2ROVOL_SHIFT (4U)
1877
#define WM8960_BYPASS2_RB2ROVOL_SET(x) (((uint16_t)(x) << WM8960_BYPASS2_RB2ROVOL_SHIFT) & WM8960_BYPASS2_RB2ROVOL_MASK)
1878
#define WM8960_BYPASS2_RB2ROVOL_GET(x) (((uint16_t)(x) & WM8960_BYPASS2_RB2ROVOL_MASK) >> WM8960_BYPASS2_RB2ROVOL_SHIFT)
1879
1880
/* Bitfield definition for register: POWER3 */
1881
/*
1882
* LMIC (RW)
1883
*
1884
* Left Channel Input PGA Enable
1885
* 0 = PGA disabled
1886
* 1 = PGA enabled (if AINL = 1)
1887
*/
1888
#define WM8960_POWER3_LMIC_MASK (0x20U)
1889
#define WM8960_POWER3_LMIC_SHIFT (5U)
1890
#define WM8960_POWER3_LMIC_SET(x) (((uint16_t)(x) << WM8960_POWER3_LMIC_SHIFT) & WM8960_POWER3_LMIC_MASK)
1891
#define WM8960_POWER3_LMIC_GET(x) (((uint16_t)(x) & WM8960_POWER3_LMIC_MASK) >> WM8960_POWER3_LMIC_SHIFT)
1892
1893
/*
1894
* RMIC (RW)
1895
*
1896
* Right Channel Input PGA Enable
1897
* 0 = PGA disabled
1898
* 1 = PGA enabled (if AINR = 1)
1899
*/
1900
#define WM8960_POWER3_RMIC_MASK (0x10U)
1901
#define WM8960_POWER3_RMIC_SHIFT (4U)
1902
#define WM8960_POWER3_RMIC_SET(x) (((uint16_t)(x) << WM8960_POWER3_RMIC_SHIFT) & WM8960_POWER3_RMIC_MASK)
1903
#define WM8960_POWER3_RMIC_GET(x) (((uint16_t)(x) & WM8960_POWER3_RMIC_MASK) >> WM8960_POWER3_RMIC_SHIFT)
1904
1905
/*
1906
* LOMIX (RW)
1907
*
1908
* Left Output Mixer Enable Control
1909
* 0 = Disabled
1910
* 1 = Enabled
1911
*/
1912
#define WM8960_POWER3_LOMIX_MASK (0x8U)
1913
#define WM8960_POWER3_LOMIX_SHIFT (3U)
1914
#define WM8960_POWER3_LOMIX_SET(x) (((uint16_t)(x) << WM8960_POWER3_LOMIX_SHIFT) & WM8960_POWER3_LOMIX_MASK)
1915
#define WM8960_POWER3_LOMIX_GET(x) (((uint16_t)(x) & WM8960_POWER3_LOMIX_MASK) >> WM8960_POWER3_LOMIX_SHIFT)
1916
1917
/*
1918
* ROMIX (RW)
1919
*
1920
* Right Output Mixer Enable Control
1921
* 0 = Disabled
1922
* 1 = Enabled
1923
*/
1924
#define WM8960_POWER3_ROMIX_MASK (0x4U)
1925
#define WM8960_POWER3_ROMIX_SHIFT (2U)
1926
#define WM8960_POWER3_ROMIX_SET(x) (((uint16_t)(x) << WM8960_POWER3_ROMIX_SHIFT) & WM8960_POWER3_ROMIX_MASK)
1927
#define WM8960_POWER3_ROMIX_GET(x) (((uint16_t)(x) & WM8960_POWER3_ROMIX_MASK) >> WM8960_POWER3_ROMIX_SHIFT)
1928
1929
/* Bitfield definition for register: ADDCTL4 */
1930
/*
1931
* GPIOPOL (RW)
1932
*
1933
* GPIO Polarity Invert
1934
* 0 = Non inverted
1935
* 1 = Inverted
1936
*/
1937
#define WM8960_ADDCTL4_GPIOPOL_MASK (0x80U)
1938
#define WM8960_ADDCTL4_GPIOPOL_SHIFT (7U)
1939
#define WM8960_ADDCTL4_GPIOPOL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_GPIOPOL_SHIFT) & WM8960_ADDCTL4_GPIOPOL_MASK)
1940
#define WM8960_ADDCTL4_GPIOPOL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_GPIOPOL_MASK) >> WM8960_ADDCTL4_GPIOPOL_SHIFT)
1941
1942
/*
1943
* GPIOSEL (RW)
1944
*
1945
* ADCLRC/GPIO1 GPIO Function Select:
1946
* 000 = Jack detect input
1947
* 001 = Reserved
1948
* 010 = Temperature ok
1949
* 011 = Debounced jack detect output
1950
* 100 = SYSCLK output
1951
* 101 = PLL lock
1952
* 110 = Logic 0
1953
* 111 = Logic 1
1954
*/
1955
#define WM8960_ADDCTL4_GPIOSEL_MASK (0x70U)
1956
#define WM8960_ADDCTL4_GPIOSEL_SHIFT (4U)
1957
#define WM8960_ADDCTL4_GPIOSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_GPIOSEL_SHIFT) & WM8960_ADDCTL4_GPIOSEL_MASK)
1958
#define WM8960_ADDCTL4_GPIOSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_GPIOSEL_MASK) >> WM8960_ADDCTL4_GPIOSEL_SHIFT)
1959
1960
/*
1961
* HPSEL (RW)
1962
*
1963
* Headphone Switch Input Select
1964
* 0X = GPIO1 used for jack detect input (Requires
1965
* ADCLRC pin to be configured as a GPIO)
1966
* 10 = JD2 used for jack detect input
1967
* 11 = JD3 used for jack detect input
1968
*/
1969
#define WM8960_ADDCTL4_HPSEL_MASK (0xCU)
1970
#define WM8960_ADDCTL4_HPSEL_SHIFT (2U)
1971
#define WM8960_ADDCTL4_HPSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_HPSEL_SHIFT) & WM8960_ADDCTL4_HPSEL_MASK)
1972
#define WM8960_ADDCTL4_HPSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_HPSEL_MASK) >> WM8960_ADDCTL4_HPSEL_SHIFT)
1973
1974
/*
1975
* TSENSEN (RW)
1976
*
1977
* Temperature Sensor Enable
1978
* 0 = Temperature sensor disabled
1979
* 1 = Temperature sensor enabled
1980
*/
1981
#define WM8960_ADDCTL4_TSENSEN_MASK (0x2U)
1982
#define WM8960_ADDCTL4_TSENSEN_SHIFT (1U)
1983
#define WM8960_ADDCTL4_TSENSEN_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_TSENSEN_SHIFT) & WM8960_ADDCTL4_TSENSEN_MASK)
1984
#define WM8960_ADDCTL4_TSENSEN_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_TSENSEN_MASK) >> WM8960_ADDCTL4_TSENSEN_SHIFT)
1985
1986
/*
1987
* MBSEL (RW)
1988
*
1989
* Microphone Bias Voltage Control
1990
* 0 = 0.9 * AVDD
1991
* 1 = 0.65 * AVDD
1992
*/
1993
#define WM8960_ADDCTL4_MBSEL_MASK (0x1U)
1994
#define WM8960_ADDCTL4_MBSEL_SHIFT (0U)
1995
#define WM8960_ADDCTL4_MBSEL_SET(x) (((uint16_t)(x) << WM8960_ADDCTL4_MBSEL_SHIFT) & WM8960_ADDCTL4_MBSEL_MASK)
1996
#define WM8960_ADDCTL4_MBSEL_GET(x) (((uint16_t)(x) & WM8960_ADDCTL4_MBSEL_MASK) >> WM8960_ADDCTL4_MBSEL_SHIFT)
1997
1998
/* Bitfield definition for register: CLASSD1 */
1999
/*
2000
* SPK_OP_EN (RW)
2001
*
2002
* Enable Class D Speaker Outputs
2003
* 00 = Off
2004
* 01 = Left speaker only
2005
* 10 = Right speaker only
2006
* 11 = Left and right speakers enabled
2007
*/
2008
#define WM8960_CLASSD1_SPK_OP_EN_MASK (0xC0U)
2009
#define WM8960_CLASSD1_SPK_OP_EN_SHIFT (6U)
2010
#define WM8960_CLASSD1_SPK_OP_EN_SET(x) (((uint16_t)(x) << WM8960_CLASSD1_SPK_OP_EN_SHIFT) & WM8960_CLASSD1_SPK_OP_EN_MASK)
2011
#define WM8960_CLASSD1_SPK_OP_EN_GET(x) (((uint16_t)(x) & WM8960_CLASSD1_SPK_OP_EN_MASK) >> WM8960_CLASSD1_SPK_OP_EN_SHIFT)
2012
2013
/* Bitfield definition for register: CLASSD3 */
2014
/*
2015
* DCGAIN (RW)
2016
*
2017
* DC Speaker Boost (Boosts speaker DC output
2018
* level by up to 1.8 x on left and right channels)
2019
* 000 = 1.00x boost (+0dB)
2020
* 001 = 1.27x boost (+2.1dB)
2021
* 010 = 1.40x boost (+2.9dB)
2022
* 011 = 1.52x boost (+3.6dB)
2023
* 100 = 1.67x boost (+4.5dB)
2024
* 101 = 1.8x boost (+5.1dB)
2025
* 110 to 111 = Reserved
2026
*/
2027
#define WM8960_CLASSD3_DCGAIN_MASK (0x38U)
2028
#define WM8960_CLASSD3_DCGAIN_SHIFT (3U)
2029
#define WM8960_CLASSD3_DCGAIN_SET(x) (((uint16_t)(x) << WM8960_CLASSD3_DCGAIN_SHIFT) & WM8960_CLASSD3_DCGAIN_MASK)
2030
#define WM8960_CLASSD3_DCGAIN_GET(x) (((uint16_t)(x) & WM8960_CLASSD3_DCGAIN_MASK) >> WM8960_CLASSD3_DCGAIN_SHIFT)
2031
2032
/*
2033
* ACGAIN (RW)
2034
*
2035
* AC Speaker Boost (Boosts speaker AC output
2036
* signal by up to 1.8 x on left and right channels)
2037
* 000 = 1.00x boost (+0dB)
2038
* 001 = 1.27x boost (+2.1dB)
2039
* 010 = 1.40x boost (+2.9dB)
2040
* 011 = 1.52x boost (+3.6dB)
2041
* 100 = 1.67x boost (+4.5dB)
2042
* 101 = 1.8x boost (+5.1dB)
2043
* 110 to 111 = Reserved
2044
*/
2045
#define WM8960_CLASSD3_ACGAIN_MASK (0x7U)
2046
#define WM8960_CLASSD3_ACGAIN_SHIFT (0U)
2047
#define WM8960_CLASSD3_ACGAIN_SET(x) (((uint16_t)(x) << WM8960_CLASSD3_ACGAIN_SHIFT) & WM8960_CLASSD3_ACGAIN_MASK)
2048
#define WM8960_CLASSD3_ACGAIN_GET(x) (((uint16_t)(x) & WM8960_CLASSD3_ACGAIN_MASK) >> WM8960_CLASSD3_ACGAIN_SHIFT)
2049
2050
/* Bitfield definition for register: PLL1 */
2051
/*
2052
* OPCLKDIV (RW)
2053
*
2054
* SYSCLK Output to GPIO Clock Division ratio
2055
* 000 = SYSCLK
2056
* 001 = SYSCLK / 2
2057
* 010 = SYSCLK / 3
2058
* 011 = SYSCLK / 4
2059
* 100 = SYSCLK / 5.5
2060
* 101 = SYSCLK / 6
2061
*/
2062
#define WM8960_PLL1_OPCLKDIV_MASK (0x1C0U)
2063
#define WM8960_PLL1_OPCLKDIV_SHIFT (6U)
2064
#define WM8960_PLL1_OPCLKDIV_SET(x) (((uint16_t)(x) << WM8960_PLL1_OPCLKDIV_SHIFT) & WM8960_PLL1_OPCLKDIV_MASK)
2065
#define WM8960_PLL1_OPCLKDIV_GET(x) (((uint16_t)(x) & WM8960_PLL1_OPCLKDIV_MASK) >> WM8960_PLL1_OPCLKDIV_SHIFT)
2066
2067
/*
2068
* SDM (RW)
2069
*
2070
* Enable Integer Mode
2071
* 0 = Integer mode
2072
* 1 = Fractional mode
2073
*/
2074
#define WM8960_PLL1_SDM_MASK (0x20U)
2075
#define WM8960_PLL1_SDM_SHIFT (5U)
2076
#define WM8960_PLL1_SDM_SET(x) (((uint16_t)(x) << WM8960_PLL1_SDM_SHIFT) & WM8960_PLL1_SDM_MASK)
2077
#define WM8960_PLL1_SDM_GET(x) (((uint16_t)(x) & WM8960_PLL1_SDM_MASK) >> WM8960_PLL1_SDM_SHIFT)
2078
2079
/*
2080
* PLLPRESCALE (RW)
2081
*
2082
* Divide MCLK by 2 before input to PLL
2083
* 0 = Divide by 1
2084
* 1 = Divide by 2
2085
*/
2086
#define WM8960_PLL1_PLLPRESCALE_MASK (0x10U)
2087
#define WM8960_PLL1_PLLPRESCALE_SHIFT (4U)
2088
#define WM8960_PLL1_PLLPRESCALE_SET(x) (((uint16_t)(x) << WM8960_PLL1_PLLPRESCALE_SHIFT) & WM8960_PLL1_PLLPRESCALE_MASK)
2089
#define WM8960_PLL1_PLLPRESCALE_GET(x) (((uint16_t)(x) & WM8960_PLL1_PLLPRESCALE_MASK) >> WM8960_PLL1_PLLPRESCALE_SHIFT)
2090
2091
/*
2092
* PLLN (RW)
2093
*
2094
* Integer (N) part of PLL input/output frequency
2095
* ratio. Use values greater than 5 and less than 13
2096
*/
2097
#define WM8960_PLL1_PLLN_MASK (0xFU)
2098
#define WM8960_PLL1_PLLN_SHIFT (0U)
2099
#define WM8960_PLL1_PLLN_SET(x) (((uint16_t)(x) << WM8960_PLL1_PLLN_SHIFT) & WM8960_PLL1_PLLN_MASK)
2100
#define WM8960_PLL1_PLLN_GET(x) (((uint16_t)(x) & WM8960_PLL1_PLLN_MASK) >> WM8960_PLL1_PLLN_SHIFT)
2101
2102
/* Bitfield definition for register: PLL2 */
2103
/*
2104
* PLLK (RW)
2105
*
2106
* Fractional (K) part of PLL1 input/output
2107
* frequency ratio (treat as one 24-digit binary number).
2108
*/
2109
#define WM8960_PLL2_PLLK_MASK (0xFFU)
2110
#define WM8960_PLL2_PLLK_SHIFT (0U)
2111
#define WM8960_PLL2_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL2_PLLK_SHIFT) & WM8960_PLL2_PLLK_MASK)
2112
#define WM8960_PLL2_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL2_PLLK_MASK) >> WM8960_PLL2_PLLK_SHIFT)
2113
2114
/* Bitfield definition for register: PLL3 */
2115
/*
2116
* PLLK (RW)
2117
*
2118
* Fractional (K) part of PLL1 input/output
2119
* frequency ratio (treat as one 24-digit binary number).
2120
*/
2121
#define WM8960_PLL3_PLLK_MASK (0xFFU)
2122
#define WM8960_PLL3_PLLK_SHIFT (0U)
2123
#define WM8960_PLL3_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL3_PLLK_SHIFT) & WM8960_PLL3_PLLK_MASK)
2124
#define WM8960_PLL3_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL3_PLLK_MASK) >> WM8960_PLL3_PLLK_SHIFT)
2125
2126
/* Bitfield definition for register: PLL4 */
2127
/*
2128
* PLLK (RW)
2129
*
2130
* Fractional (K) part of PLL1 input/output
2131
* frequency ratio (treat as one 24-digit binary number).
2132
*/
2133
#define WM8960_PLL4_PLLK_MASK (0xFFU)
2134
#define WM8960_PLL4_PLLK_SHIFT (0U)
2135
#define WM8960_PLL4_PLLK_SET(x) (((uint16_t)(x) << WM8960_PLL4_PLLK_SHIFT) & WM8960_PLL4_PLLK_MASK)
2136
#define WM8960_PLL4_PLLK_GET(x) (((uint16_t)(x) & WM8960_PLL4_PLLK_MASK) >> WM8960_PLL4_PLLK_SHIFT)
2137
2138
2139
#endif
/* _HPM_WM8960_REG_H_ */
components
codec
wm8960
hpm_wm8960_regs.h
Generated on Tue Dec 31 2024 02:57:16 for HPM SDK by
1.9.1