summaryrefslogtreecommitdiff
path: root/firmware/export/wm8975.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/export/wm8975.h')
-rw-r--r--firmware/export/wm8975.h278
1 files changed, 258 insertions, 20 deletions
diff --git a/firmware/export/wm8975.h b/firmware/export/wm8975.h
index 722c4b1965..881e7110bd 100644
--- a/firmware/export/wm8975.h
+++ b/firmware/export/wm8975.h
@@ -35,26 +35,264 @@ extern void audiohw_set_lineout_vol(int vol_l, int vol_r);
35extern void audiohw_set_nsorder(int order); 35extern void audiohw_set_nsorder(int order);
36extern void audiohw_set_sample_rate(int sampling_control); 36extern void audiohw_set_sample_rate(int sampling_control);
37 37
38/* Register addresses */ 38/* Register addresses and bits */
39#define LOUT1VOL 0x02 39
40#define ROUT1VOL 0x03 40#define LINVOL 0x00
41#define DACCTRL 0x05 41#define LINVOL_MASK 0x3f
42#define AINTFCE 0x07 42#define LINVOL_LZCEN (1 << 6)
43#define BASSCTRL 0x0c 43#define LINVOL_LINMUTE (1 << 7)
44#define TREBCTRL 0x0d 44#define LINVOL_LIVU (1 << 8)
45#define RESET 0x0f 45
46#define PWRMGMT1 0x19 46#define RINVOL 0x01
47#define PWRMGMT2 0x1a 47#define RINVOL_MASK 0x3f
48#define LOUTMIX1 0x22 48#define RINVOL_RZCEN (1 << 6)
49#define LOUTMIX2 0x23 49#define RINVOL_RINMUTE (1 << 7)
50#define ROUTMIX1 0x24 50#define RINVOL_RIVU (1 << 8)
51#define ROUTMIX2 0x25 51
52#define MOUTMIX1 0x26 52#define LOUT1VOL 0x02
53#define MOUTMIX2 0x27 53#define LOUT1VOL_MASK 0x7f
54#define LOUT2VOL 0x28 54#define LOUT1VOL_LO1ZC (1 << 7)
55#define ROUT2VOL 0x29 55#define LOUT1VOL_LO1VU (1 << 8)
56 56
57/* Register settings for the supported samplerates: */ 57#define ROUT1VOL 0x03
58#define ROUT1VOL_MASK 0x7f
59#define ROUT1VOL_RO1ZC (1 << 7)
60#define ROUT1VOL_RO1VU (1 << 8)
61
62#define DAPCTRL 0x05 /* Digital audio path control */
63#define DAPCTRL_ADCHPD (1 << 0)
64#define DAPCTRL_DEEMP_DISABLE (0 << 1)
65#define DAPCTRL_DEEMP_32KHz (1 << 1)
66#define DAPCTRL_DEEMP_44KHz (2 << 1)
67#define DAPCTRL_DEEMP_48KHz (3 << 1)
68#define DAPCTRL_DEEMP_MASK (3 << 1)
69#define DAPCTRL_DACMU (1 << 3)
70#define DAPCTRL_HPOR (1 << 4)
71#define DAPCTRL_ADCPOL_NORMAL (0 << 5)
72#define DAPCTRL_ADCPOL_LINVERT (1 << 5)
73#define DAPCTRL_ADCPOL_RINVERT (2 << 5)
74#define DAPCTRL_ADCPOL_LRINVERT (3 << 5)
75#define DAPCTRL_ADCPOL_MASK (3 << 5)
76#define DAPCTRL_DACDIV2 (1 << 7)
77#define DAPCTRL_ADCDIV2 (1 << 8)
78
79#define AINTFCE 0x07
80#define AINTFCE_FORMAT_MSB_RJUST (0 << 0)
81#define AINTFCE_FORMAT_MSB_LJUST (1 << 0)
82#define AINTFCE_FORMAT_I2S (2 << 0)
83#define AINTFCE_FORMAT_DSP (3 << 0)
84#define AINTFCE_FORMAT_MASK (3 << 0)
85#define AINTFCE_IWL_16BIT (0 << 2)
86#define AINTFCE_IWL_20BIT (1 << 2)
87#define AINTFCE_IWL_24BIT (2 << 2)
88#define AINTFCE_IWL_32BIT (3 << 2)
89#define AINTFCE_IWL_MASK (3 << 2)
90#define AINTFCE_LRP_I2S_RLO (0 << 4)
91#define AINTFCE_LRP_I2S_RHI (1 << 4)
92#define AINTFCE_DSP_MODE_B (0 << 4)
93#define AINTFCE_DSP_MODE_A (1 << 4)
94#define AINTFCE_LRSWAP (1 << 5)
95#define AINTFCE_MS (1 << 6)
96#define AINTFCE_BCLKINV (1 << 7)
97
98#define SAMPCTRL 0x08
99#define SAMPCTRL_USB (1 << 0)
100/* Bits 1-5:
101 * Sample rate setting are device-specific. See datasheet
102 * for proper settings for the device's clocking */
103#define SAMPCTRL_SR_MASK (0x1f << 1)
104#define SAMPCTRL_CLKDIV2 (1 << 6)
105#define SAMPCTRL_BCM_OFF (0 << 7)
106#define SAMPCTRL_BCM_MCLK_4 (1 << 7)
107#define SAMPCTRL_BCM_MCLK_8 (2 << 7)
108#define SAMPCTRL_BCM_MCLK_16 (3 << 7)
109
110#define LDACVOL 0x0a
111#define LDACVOL_MASK 0xff
112#define LDACVOL_LDVU (1 << 8)
113
114#define RDACVOL 0x0b
115#define RDACVOL_MASK 0xff
116#define RDACVOL_RDVU (1 << 8)
117
118#define BASSCTRL 0x0c
119#define BASSCTRL_MASK 0x0f
120#define BASSCTRL_BC (1 << 6)
121#define BASSCTRL_BB (1 << 7)
122
123#define TREBCTRL 0x0d
124#define TREBCTRL_MASK 0x0f
125#define TREBCTRL_TC (1 << 6)
126
127#define RESET 0x0f
128#define RESET_RESET 0x0
129
130/* not used atm */
131#define ALC1 0x11
132#define ALC2 0x12
133#define ALC3 0x13
134#define NOISEGATE 0x14
135
136#define LADCVOL 0x15
137#define LADCVOL_MASK 0xff
138#define LADCVOL_LAVU (1 << 8)
139
140#define RADCVOL 0x16
141#define RADCVOL_MASK 0xff
142#define RADCVOL_RAVU (1 << 8)
143
144#define ADDCTRL1 0x17
145#define ADDCTRL1_TOEN (1 << 0)
146#define ADDCTRL1DACINV (1 << 1)
147#define ADDCTRL1_DATSEL_NORMAL (0 << 2)
148#define ADDCTRL1_DATSEL_LADC (1 << 2)
149#define ADDCTRL1_DATSEL_RADC (2 << 2)
150#define ADDCTRL1_DATSEL_SWAPPED (3 << 2)
151#define ADDCTRL1_DMONOMIX_STEREO (0 << 4)
152#define ADDCTRL1_DMONOMIX_MONOLEFT (1 << 4)
153#define ADDCTRL1_DMONOMIX_MONORIGHT (2 << 4)
154#define ADDCTRL1_DMONOMIX_MONO (3 << 4)
155#define ADDCTRL1_VSEL_HIGHBIAS (0 << 6)
156#define ADDCTRL1_VSEL_MEDBIAS (1 << 6)
157#define ADDCTRL1_VSEL_LOWBIAS (3 << 6)
158#define ADDCTRL1_TSDEN (1 << 8)
159
160#define ADDCTRL2 0x18
161#define ADDCTRL2_DACOSR (1 << 0)
162#define ADDCTRL2_ADCOSR (1 << 1)
163#define ADDCTRL2_LRCM (1 << 2)
164#define ADDCTRL2_TRI (1 << 3)
165#define ADDCTRL2_ROUT2INV (1 << 4)
166#define ADDCTRL2_HPSWPOL (1 << 5)
167#define ADDCTRL2_HPSWEN (1 << 6)
168#define ADDCTRL2_OUT3SW_VREF (0 << 7)
169#define ADDCTRL2_OUT3SW_ROUT1 (1 << 7)
170#define ADDCTRL2_OUT3SW_MONOOUT (2 << 7)
171#define ADDCTRL2_OUT3SW_ROUTMIX (3 << 7)
172
173#define PWRMGMT1 0x19
174#define PWRMGMT1_DIGENB (1 << 0)
175#define PWRMGMT1_MICB (1 << 1)
176#define PWRMGMT1_ADCR (1 << 2)
177#define PWRMGMT1_ADCL (1 << 3)
178#define PWRMGMT1_AINR (1 << 4)
179#define PWRMGMT1_AINL (1 << 5)
180#define PWRMGMT1_VREF (1 << 6)
181#define PWRMGMT1_VMIDSEL_OFF (0 << 7)
182#define PWRMGMT1_VMIDSEL_50K (1 << 7)
183#define PWRMGMT1_VMIDSEL_500K (2 << 7)
184#define PWRMGMT1_VMIDSEL_5K (3 << 7)
185#define PWRMGMT1_VMIDSEL_MASK (3 << 7)
186
187#define PWRMGMT2 0x1a
188#define PWRMGMT2_OUT3 (1 << 1)
189#define PWRMGMT2_MONO (1 << 2)
190#define PWRMGMT2_ROUT2 (1 << 3)
191#define PWRMGMT2_LOUT2 (1 << 4)
192#define PWRMGMT2_ROUT1 (1 << 5)
193#define PWRMGMT2_LOUT1 (1 << 6)
194#define PWRMGMT2_DACR (1 << 7)
195#define PWRMGMT2_DACL (1 << 8)
196
197#define ADDCTRL3 0x1b
198#define ADDCTRL3_HPFLREN (1 << 5)
199#define ADDCTRL3_VROI (1 << 6)
200#define ADDCTRL3_ADCLRM_IN (0 << 7)
201#define ADDCTRL3_ADCLRM_MCLK (1 << 7)
202#define ADDCTRL3_ADCLRM_MCLK_55 (2 << 7)
203#define ADDCTRL3_ADCLRM_MCLK_6 (3 << 7)
204
205#define ADCINMODE 0x1f
206#define ADCINMODE_LDCM (1 << 4)
207#define ADCINMODE_RDCM (1 << 5)
208#define ADCINMODE_MONOMIX_STEREO (0 << 6)
209#define ADCINMODE_MONOMIX_LADC (1 << 6)
210#define ADCINMODE_MONOMIX_RADC (2 << 6)
211#define ADCINMODE_MONOMIX_DIGITAL (3 << 6)
212#define ADCINMODE_DS (1 << 8)
213
214#define ADCLPATH 0x20
215#define ADCLPATH_LMICBOOST_OFF (0 << 4)
216#define ADCLPATH_LMICBOOST_13dB (1 << 4)
217#define ADCLPATH_LMICBOOST_20dB (2 << 4)
218#define ADCLPATH_LMICBOOST_29dB (3 << 4)
219#define ADCLPATH_LINSEL_LIN1 (0 << 6)
220#define ADCLPATH_LINSEL_LIN2 (1 << 6)
221#define ADCLPATH_LINSEL_LIN3 (2 << 6)
222#define ADCLPATH_LINSEL_DIFF (3 << 6)
223
224#define ADCRPATH 0x21
225#define ADCRPATH_RMICBOOST_OFF (0 << 4)
226#define ADCRPATH_RMICBOOST_13dB (1 << 4)
227#define ADCRPATH_RMICBOOST_20dB (2 << 4)
228#define ADCRPATH_RMICBOOST_29dB (3 << 4)
229#define ADCRPATH_RINSEL_RIN1 (0 << 6)
230#define ADCRPATH_RINSEL_RIN2 (1 << 6)
231#define ADCRPATH_RINSEL_RIN3 (2 << 6)
232#define ADCRPATH_RINSEL_DIFF (3 << 6)
233
234#define LOUTMIX1 0x22
235#define LOUTMIX1_LMIXSEL_LIN1 (0 << 0)
236#define LOUTMIX1_LMIXSEL_LIN2 (1 << 0)
237#define LOUTMIX1_LMIXSEL_LIN3 (2 << 0)
238#define LOUTMIX1_LMIXSEL_LADCIN (3 << 0)
239#define LOUTMIX1_LMIXSEL_DIFF (4 << 0)
240#define LOUTMIX1_LI2LOVOL(x) ((x & 7) << 4)
241#define LOUTMIX1_LI2LOVOL_MASK (7 << 4)
242#define LOUTMIX1_LI2LO (1 << 7)
243#define LOUTMIX1_LD2LO (1 << 8)
244
245#define LOUTMIX2 0x23
246#define LOUTMIX2_RI2LOVOL(x) ((x & 7) << 4)
247#define LOUTMIX2_RI2LOVOL_MASK (7 << 4)
248#define LOUTMIX2_RI2LO (1 << 7)
249#define LOUTMIX2_RD2LO (1 << 8)
250
251#define ROUTMIX1 0x24
252#define ROUTMIX1_RMIXSEL_RIN1 (0 << 0)
253#define ROUTMIX1_RMIXSEL_RIN2 (1 << 0)
254#define ROUTMIX1_RMIXSEL_RIN3 (2 << 0)
255#define ROUTMIX1_RMIXSEL_RADCIN (3 << 0)
256#define ROUTMIX1_RMIXSEL_DIFF (4 << 0)
257#define ROUTMIX1_LI2ROVOL(x) ((x & 7) << 4)
258#define ROUTMIX1_LI2ROVOL_MASK (7 << 4)
259#define ROUTMIX1_LI2RO (1 << 7)
260#define ROUTMIX1_LD2RO (1 << 8)
261
262#define ROUTMIX2 0x25
263#define ROUTMIX2_RI2ROVOL(x) ((x & 7) << 4)
264#define ROUTMIX2_RI2ROVOL_MASK (7 << 4)
265#define ROUTMIX2_RI2RO (1 << 7)
266#define ROUTMIX2_RD2RO (1 << 8)
267
268#define MOUTMIX1 0x26
269#define MOUTMIX1_LI2MOVOL(x) ((x & 7) << 4)
270#define MOUTMIX1_LI2MOVOL_MASK (7 << 4)
271#define MOUTMIX1_LI2MO (1 << 7)
272#define MOUTMIX1_LD2MO (1 << 8)
273
274#define MOUTMIX2 0x27
275#define MOUTMIX2_RI2MOVOL(x) ((x & 7) << 4)
276#define MOUTMIX2_RI2MOVOL_MASK (7 << 4)
277#define MOUTMIX2_RI2MO (1 << 7)
278#define MOUTMIX2_RD2MO (1 << 8)
279
280#define LOUT2VOL 0x28
281#define LOUT2VOL_MASK 0x7f
282#define LOUT2VOL_LO2ZC (1 << 7)
283#define LOUT2VOL_LO2VU (1 << 8)
284
285#define ROUT2VOL 0x29
286#define ROUT2VOL_MASK 0x7f
287#define ROUT2VOL_RO2ZC (1 << 7)
288#define ROUT2VOL_RO2VU (1 << 8)
289
290#define MOUTVOL 0x2a
291#define MOUTVOL_MASK 0x7f
292#define MOUTVOL_MOZC (1 << 7)
293
294
295/* SAMPCTRL values for the supported samplerates: */
58#define WM8975_8000HZ 0x4d 296#define WM8975_8000HZ 0x4d
59#define WM8975_12000HZ 0x61 297#define WM8975_12000HZ 0x61
60#define WM8975_16000HZ 0x55 298#define WM8975_16000HZ 0x55