xref: /linux/sound/soc/codecs/aw88261.h (revision e5c91aac491def6ab3f90c4cc246e3fcb0f8f058)
1 // SPDX-License-Identifier: GPL-2.0-only
2 //
3 // aw88261.h  --  AW88261 ALSA SoC Audio driver
4 //
5 // Copyright (c) 2023 awinic Technology CO., LTD
6 //
7 // Author: Jimmy Zhang <zhangjianming@awinic.com>
8 // Author: Weidong Wang <wangweidong.a@awinic.com>
9 //
10 
11 #ifndef __AW88261_H__
12 #define __AW88261_H__
13 
14 #define AW88261_ID_REG			(0x00)
15 #define AW88261_SYSST_REG		(0x01)
16 #define AW88261_SYSINT_REG		(0x02)
17 #define AW88261_SYSINTM_REG		(0x03)
18 #define AW88261_SYSCTRL_REG		(0x04)
19 #define AW88261_SYSCTRL2_REG		(0x05)
20 #define AW88261_I2SCTRL1_REG		(0x06)
21 #define AW88261_I2SCTRL2_REG		(0x07)
22 #define AW88261_I2SCTRL3_REG		(0x08)
23 #define AW88261_DACCFG1_REG		(0x09)
24 #define AW88261_DACCFG2_REG		(0x0A)
25 #define AW88261_DACCFG3_REG		(0x0B)
26 #define AW88261_DACCFG4_REG		(0x0C)
27 #define AW88261_DACCFG5_REG		(0x0D)
28 #define AW88261_DACCFG6_REG		(0x0E)
29 #define AW88261_DACCFG7_REG		(0x0F)
30 #define AW88261_DACCFG8_REG		(0x10)
31 #define AW88261_PWMCTRL1_REG		(0x11)
32 #define AW88261_PWMCTRL2_REG		(0x12)
33 #define AW88261_I2SCFG1_REG		(0x13)
34 #define AW88261_DBGCTRL_REG		(0x14)
35 #define AW88261_DACCFG9_REG		(0x15)
36 #define AW88261_DACCFG10_REG		(0x16)
37 #define AW88261_DACST_REG		(0x20)
38 #define AW88261_VBAT_REG		(0x21)
39 #define AW88261_TEMP_REG		(0x22)
40 #define AW88261_PVDD_REG		(0x23)
41 #define AW88261_ISNDAT_REG		(0x24)
42 #define AW88261_VSNDAT_REG		(0x25)
43 #define AW88261_I2SINT_REG		(0x26)
44 #define AW88261_I2SCAPCNT_REG		(0x27)
45 #define AW88261_ANASTA1_REG		(0x28)
46 #define AW88261_ANASTA2_REG		(0x29)
47 #define AW88261_ANASTA3_REG		(0x2A)
48 #define AW88261_TESTDET_REG		(0x2B)
49 #define AW88261_DSMCFG1_REG		(0x30)
50 #define AW88261_DSMCFG2_REG		(0x31)
51 #define AW88261_DSMCFG3_REG		(0x32)
52 #define AW88261_DSMCFG4_REG		(0x33)
53 #define AW88261_DSMCFG5_REG		(0x34)
54 #define AW88261_DSMCFG6_REG		(0x35)
55 #define AW88261_DSMCFG7_REG		(0x36)
56 #define AW88261_DSMCFG8_REG		(0x37)
57 #define AW88261_TESTIN_REG		(0x38)
58 #define AW88261_TESTOUT_REG		(0x39)
59 #define AW88261_SADCCTRL1_REG		(0x3A)
60 #define AW88261_SADCCTRL2_REG		(0x3B)
61 #define AW88261_SADCCTRL3_REG		(0x3C)
62 #define AW88261_SADCCTRL4_REG		(0x3D)
63 #define AW88261_SADCCTRL5_REG		(0x3E)
64 #define AW88261_SADCCTRL6_REG		(0x3F)
65 #define AW88261_SADCCTRL7_REG		(0x40)
66 #define AW88261_VSNTM1_REG		(0x50)
67 #define AW88261_VSNTM2_REG		(0x51)
68 #define AW88261_ISNCTRL1_REG		(0x52)
69 #define AW88261_ISNCTRL2_REG		(0x53)
70 #define AW88261_PLLCTRL1_REG		(0x54)
71 #define AW88261_PLLCTRL2_REG		(0x55)
72 #define AW88261_PLLCTRL3_REG		(0x56)
73 #define AW88261_CDACTRL1_REG		(0x57)
74 #define AW88261_CDACTRL2_REG		(0x58)
75 #define AW88261_DITHERCFG1_REG		(0x59)
76 #define AW88261_DITHERCFG2_REG		(0x5A)
77 #define AW88261_DITHERCFG3_REG		(0x5B)
78 #define AW88261_CPCTRL_REG		(0x5C)
79 #define AW88261_BSTCTRL1_REG		(0x60)
80 #define AW88261_BSTCTRL2_REG		(0x61)
81 #define AW88261_BSTCTRL3_REG		(0x62)
82 #define AW88261_BSTCTRL4_REG		(0x63)
83 #define AW88261_BSTCTRL5_REG		(0x64)
84 #define AW88261_BSTCTRL6_REG		(0x65)
85 #define AW88261_BSTCTRL7_REG		(0x66)
86 #define AW88261_BSTCTRL8_REG		(0x67)
87 #define AW88261_BSTCTRL9_REG		(0x68)
88 #define AW88261_TM_REG			(0x6F)
89 #define AW88261_TESTCTRL1_REG		(0x70)
90 #define AW88261_TESTCTRL2_REG		(0x71)
91 #define AW88261_EFCTRL1_REG		(0x72)
92 #define AW88261_EFCTRL2_REG		(0x73)
93 #define AW88261_EFWH_REG		(0x74)
94 #define AW88261_EFWM2_REG		(0x75)
95 #define AW88261_EFWM1_REG		(0x76)
96 #define AW88261_EFWL_REG		(0x77)
97 #define AW88261_EFRH4_REG		(0x78)
98 #define AW88261_EFRH3_REG		(0x79)
99 #define AW88261_EFRH2_REG		(0x7A)
100 #define AW88261_EFRH1_REG		(0x7B)
101 #define AW88261_EFRL4_REG		(0x7C)
102 #define AW88261_EFRL3_REG		(0x7D)
103 #define AW88261_EFRL2_REG		(0x7E)
104 #define AW88261_EFRL1_REG		(0x7F)
105 
106 #define AW88261_REG_MAX		(0x80)
107 #define AW88261_EF_DBMD_MASK		(0xfff7)
108 #define AW88261_OR_VALUE		(0x0008)
109 
110 #define AW88261_TEMH_MASK		(0x83ff)
111 #define AW88261_TEML_MASK		(0x83ff)
112 #define AW88261_DEFAULT_CFG		(0x0000)
113 
114 #define AW88261_ICALK_SHIFT		(0)
115 #define AW88261_ICALKL_SHIFT		(0)
116 #define AW88261_VCALK_SHIFT		(0)
117 #define AW88261_VCALKL_SHIFT		(0)
118 
119 #define AW88261_BCKINV_START_BIT	(4)
120 #define AW88261_BCKINV_BITS_LEN	(1)
121 #define AW88261_BCKINV_MASK	\
122 	(~(((1<<AW88261_BCKINV_BITS_LEN)-1) << AW88261_BCKINV_START_BIT))
123 
124 #define AW88261_BCKINV_NOT_INVERT	(0)
125 #define AW88261_BCKINV_NOT_INVERT_VALUE	\
126 	(AW88261_BCKINV_NOT_INVERT << AW88261_BCKINV_START_BIT)
127 
128 #define AW88261_BCKINV_INVERTED	(1)
129 #define AW88261_BCKINV_INVERTED_VALUE	\
130 	(AW88261_BCKINV_INVERTED << AW88261_BCKINV_START_BIT)
131 
132 #define AW88261_AMPPD_START_BIT	(1)
133 #define AW88261_AMPPD_BITS_LEN		(1)
134 #define AW88261_AMPPD_MASK		\
135 	(~(((1<<AW88261_AMPPD_BITS_LEN)-1) << AW88261_AMPPD_START_BIT))
136 
137 #define AW88261_UVLS_START_BIT		(14)
138 #define AW88261_UVLS_NORMAL		(0)
139 #define AW88261_UVLS_NORMAL_VALUE	\
140 	(AW88261_UVLS_NORMAL << AW88261_UVLS_START_BIT)
141 
142 #define AW88261_BSTOCS_START_BIT	(11)
143 #define AW88261_BSTOCS_OVER_CURRENT	(1)
144 #define AW88261_BSTOCS_OVER_CURRENT_VALUE	\
145 	(AW88261_BSTOCS_OVER_CURRENT << AW88261_BSTOCS_START_BIT)
146 
147 #define AW88261_BSTS_START_BIT		(9)
148 #define AW88261_BSTS_FINISHED		(1)
149 #define AW88261_BSTS_FINISHED_VALUE	\
150 	(AW88261_BSTS_FINISHED << AW88261_BSTS_START_BIT)
151 
152 #define AW88261_SWS_START_BIT		(8)
153 #define AW88261_SWS_SWITCHING		(1)
154 #define AW88261_SWS_SWITCHING_VALUE	\
155 	(AW88261_SWS_SWITCHING << AW88261_SWS_START_BIT)
156 
157 #define AW88261_NOCLKS_START_BIT	(5)
158 #define AW88261_NOCLKS_NO_CLOCK	(1)
159 #define AW88261_NOCLKS_NO_CLOCK_VALUE	\
160 	(AW88261_NOCLKS_NO_CLOCK << AW88261_NOCLKS_START_BIT)
161 
162 #define AW88261_CLKS_START_BIT		(4)
163 #define AW88261_CLKS_STABLE		(1)
164 #define AW88261_CLKS_STABLE_VALUE	\
165 	(AW88261_CLKS_STABLE << AW88261_CLKS_START_BIT)
166 
167 #define AW88261_OCDS_START_BIT		(3)
168 #define AW88261_OCDS_OC		(1)
169 #define AW88261_OCDS_OC_VALUE		\
170 	(AW88261_OCDS_OC << AW88261_OCDS_START_BIT)
171 
172 #define AW88261_OTHS_START_BIT		(1)
173 #define AW88261_OTHS_OT		(1)
174 #define AW88261_OTHS_OT_VALUE		\
175 	(AW88261_OTHS_OT << AW88261_OTHS_START_BIT)
176 
177 #define AW88261_PLLS_START_BIT		(0)
178 #define AW88261_PLLS_LOCKED		(1)
179 #define AW88261_PLLS_LOCKED_VALUE	\
180 	(AW88261_PLLS_LOCKED << AW88261_PLLS_START_BIT)
181 
182 #define AW88261_BIT_PLL_CHECK \
183 		(AW88261_CLKS_STABLE_VALUE | \
184 		AW88261_PLLS_LOCKED_VALUE)
185 
186 #define AW88261_BIT_SYSST_CHECK_MASK \
187 		(~(AW88261_UVLS_NORMAL_VALUE | \
188 		AW88261_BSTOCS_OVER_CURRENT_VALUE | \
189 		AW88261_BSTS_FINISHED_VALUE | \
190 		AW88261_SWS_SWITCHING_VALUE | \
191 		AW88261_NOCLKS_NO_CLOCK_VALUE | \
192 		AW88261_CLKS_STABLE_VALUE | \
193 		AW88261_OCDS_OC_VALUE | \
194 		AW88261_OTHS_OT_VALUE | \
195 		AW88261_PLLS_LOCKED_VALUE))
196 
197 #define AW88261_ULS_HMUTE_START_BIT	(14)
198 #define AW88261_ULS_HMUTE_BITS_LEN	(1)
199 #define AW88261_ULS_HMUTE_MASK		\
200 	(~(((1<<AW88261_ULS_HMUTE_BITS_LEN)-1) << AW88261_ULS_HMUTE_START_BIT))
201 
202 #define AW88261_ULS_HMUTE_DISABLE	(0)
203 #define AW88261_ULS_HMUTE_DISABLE_VALUE	\
204 	(AW88261_ULS_HMUTE_DISABLE << AW88261_ULS_HMUTE_START_BIT)
205 
206 #define AW88261_ULS_HMUTE_ENABLE	(1)
207 #define AW88261_ULS_HMUTE_ENABLE_VALUE	\
208 	(AW88261_ULS_HMUTE_ENABLE << AW88261_ULS_HMUTE_START_BIT)
209 
210 #define AW88261_HMUTE_START_BIT	(8)
211 #define AW88261_HMUTE_BITS_LEN		(1)
212 #define AW88261_HMUTE_MASK		\
213 	(~(((1<<AW88261_HMUTE_BITS_LEN)-1) << AW88261_HMUTE_START_BIT))
214 
215 #define AW88261_HMUTE_DISABLE		(0)
216 #define AW88261_HMUTE_DISABLE_VALUE	\
217 	(AW88261_HMUTE_DISABLE << AW88261_HMUTE_START_BIT)
218 
219 #define AW88261_HMUTE_ENABLE		(1)
220 #define AW88261_HMUTE_ENABLE_VALUE	\
221 	(AW88261_HMUTE_ENABLE << AW88261_HMUTE_START_BIT)
222 
223 #define AW88261_AMPPD_START_BIT	(1)
224 #define AW88261_AMPPD_BITS_LEN		(1)
225 #define AW88261_AMPPD_MASK		\
226 	(~(((1<<AW88261_AMPPD_BITS_LEN)-1) << AW88261_AMPPD_START_BIT))
227 
228 #define AW88261_AMPPD_WORKING		(0)
229 #define AW88261_AMPPD_WORKING_VALUE	\
230 	(AW88261_AMPPD_WORKING << AW88261_AMPPD_START_BIT)
231 
232 #define AW88261_AMPPD_POWER_DOWN	(1)
233 #define AW88261_AMPPD_POWER_DOWN_VALUE	\
234 	(AW88261_AMPPD_POWER_DOWN << AW88261_AMPPD_START_BIT)
235 
236 #define AW88261_PWDN_START_BIT		(0)
237 #define AW88261_PWDN_BITS_LEN		(1)
238 #define AW88261_PWDN_MASK		\
239 	(~(((1<<AW88261_PWDN_BITS_LEN)-1) << AW88261_PWDN_START_BIT))
240 
241 #define AW88261_PWDN_WORKING		(0)
242 #define AW88261_PWDN_WORKING_VALUE	\
243 	(AW88261_PWDN_WORKING << AW88261_PWDN_START_BIT)
244 
245 #define AW88261_PWDN_POWER_DOWN	(1)
246 #define AW88261_PWDN_POWER_DOWN_VALUE	\
247 	(AW88261_PWDN_POWER_DOWN << AW88261_PWDN_START_BIT)
248 
249 #define AW88261_MUTE_VOL		(90 * 8)
250 #define AW88261_VOLUME_STEP_DB		(6 * 8)
251 
252 #define AW88261_VOL_6DB_START		(6)
253 
254 #define AW88261_VOL_START_BIT		(0)
255 #define AW88261_VOL_BITS_LEN		(10)
256 #define AW88261_VOL_MASK		\
257 	(~(((1<<AW88261_VOL_BITS_LEN)-1) << AW88261_VOL_START_BIT))
258 
259 #define AW88261_CTL_MAX_VOL		(AW88261_MUTE_VOL / 2)
260 #define AW88261_CTL_DEFAULT_VOL		(AW88261_CTL_MAX_VOL / 2)
261 
262 #define AW88261_I2STXEN_START_BIT	(6)
263 #define AW88261_I2STXEN_BITS_LEN	(1)
264 #define AW88261_I2STXEN_MASK		\
265 	(~(((1<<AW88261_I2STXEN_BITS_LEN)-1) << AW88261_I2STXEN_START_BIT))
266 
267 #define AW88261_I2STXEN_DISABLE	(0)
268 #define AW88261_I2STXEN_DISABLE_VALUE	\
269 	(AW88261_I2STXEN_DISABLE << AW88261_I2STXEN_START_BIT)
270 
271 #define AW88261_I2STXEN_ENABLE		(1)
272 #define AW88261_I2STXEN_ENABLE_VALUE	\
273 	(AW88261_I2STXEN_ENABLE << AW88261_I2STXEN_START_BIT)
274 
275 #define AW88261_I2SMD_START_BIT	(8)
276 #define AW88261_I2SMD_BITS_LEN	(2)
277 #define AW88261_I2SMD_MASK	\
278 	(~(((1<<AW88261_I2SMD_BITS_LEN)-1) << AW88261_I2SMD_START_BIT))
279 
280 #define AW88261_I2SMD_PHILIPS_STANDARD	(0)
281 #define AW88261_I2SMD_PHILIPS_STANDARD_VALUE	\
282 	(AW88261_I2SMD_PHILIPS_STANDARD << AW88261_I2SMD_START_BIT)
283 
284 #define AW88261_I2SMD_MSB_JUSTIFIED	(1)
285 #define AW88261_I2SMD_MSB_JUSTIFIED_VALUE	\
286 	(AW88261_I2SMD_MSB_JUSTIFIED << AW88261_I2SMD_START_BIT)
287 
288 #define AW88261_I2SMD_LSB_JUSTIFIED	(2)
289 #define AW88261_I2SMD_LSB_JUSTIFIED_VALUE	\
290 	(AW88261_I2SMD_LSB_JUSTIFIED << AW88261_I2SMD_START_BIT)
291 
292 #define AW88261_I2SFS_START_BIT			(6)
293 #define AW88261_I2SFS_BITS_LEN			(2)
294 #define AW88261_I2SFS_MASK				\
295 	(~(((1<<AW88261_I2SFS_BITS_LEN)-1)<<AW88261_I2SFS_START_BIT))
296 
297 #define AW88261_I2SFS_16_BITS			(0)
298 #define AW88261_I2SFS_16_BITS_VALUE		\
299 	(AW88261_I2SFS_16_BITS << AW88261_I2SFS_START_BIT)
300 #define AW88261_I2SFS_20_BITS			(1)
301 #define AW88261_I2SFS_20_BITS_VALUE		\
302 	(AW88261_I2SFS_20_BITS << AW88261_I2SFS_START_BIT)
303 #define AW88261_I2SFS_24_BITS			(2)
304 #define AW88261_I2SFS_24_BITS_VALUE		\
305 	(AW88261_I2SFS_24_BITS << AW88261_I2SFS_START_BIT)
306 #define AW88261_I2SFS_32_BITS			(3)
307 #define AW88261_I2SFS_32_BITS_VALUE		\
308 	(AW88261_I2SFS_32_BITS << AW88261_I2SFS_START_BIT)
309 
310 #define AW88261_I2SBCK_START_BIT	(4)
311 #define AW88261_I2SBCK_BITS_LEN	(2)
312 #define AW88261_I2SBCK_MASK	\
313 	(~(((1<<AW88261_I2SBCK_BITS_LEN)-1) << AW88261_I2SBCK_START_BIT))
314 
315 #define AW88261_I2SBCK_32FS	(0)
316 #define AW88261_I2SBCK_32FS_VALUE	\
317 	(AW88261_I2SBCK_32FS << AW88261_I2SBCK_START_BIT)
318 
319 #define AW88261_I2SBCK_48FS	(1)
320 #define AW88261_I2SBCK_48FS_VALUE	\
321 	(AW88261_I2SBCK_48FS << AW88261_I2SBCK_START_BIT)
322 
323 #define AW88261_I2SBCK_64FS	(2)
324 #define AW88261_I2SBCK_64FS_VALUE	\
325 	(AW88261_I2SBCK_64FS << AW88261_I2SBCK_START_BIT)
326 
327 #define AW88261_TDM_BCK_UNSET			UINT_MAX
328 
329 #define AW88261_I2SSR_START_BIT			(0)
330 #define AW88261_I2SSR_BITS_LEN			(4)
331 #define AW88261_I2SSR_MASK				\
332 	(~(((1<<AW88261_I2SSR_BITS_LEN)-1) << AW88261_I2SSR_START_BIT))
333 
334 #define AW88261_I2SSR_8KHZ				(0)
335 #define AW88261_I2SSR_8KHZ_VALUE		\
336 	(AW88261_I2SSR_8KHZ << AW88261_I2SSR_START_BIT)
337 #define AW88261_I2SSR_11P025KHZ			(1)
338 #define AW88261_I2SSR_11P025KHZ_VALUE	\
339 	(AW88261_I2SSR_11P025KHZ << AW88261_I2SSR_START_BIT)
340 #define AW88261_I2SSR_12KHZ				(2)
341 #define AW88261_I2SSR_12KHZ_VALUE		\
342 	(AW88261_I2SSR_12KHZ << AW88261_I2SSR_START_BIT)
343 #define AW88261_I2SSR_16KHZ				(3)
344 #define AW88261_I2SSR_16KHZ_VALUE		\
345 	(AW88261_I2SSR_16KHZ << AW88261_I2SSR_START_BIT)
346 #define AW88261_I2SSR_22P05KHZ			(4)
347 #define AW88261_I2SSR_22P05KHZ_VALUE	\
348 	(AW88261_I2SSR_22P05KHZ << AW88261_I2SSR_START_BIT)
349 #define AW88261_I2SSR_24KHZ				(5)
350 #define AW88261_I2SSR_24KHZ_VALUE		\
351 	(AW88261_I2SSR_24KHZ << AW88261_I2SSR_START_BIT)
352 #define AW88261_I2SSR_32KHZ				(6)
353 #define AW88261_I2SSR_32KHZ_VALUE		\
354 	(AW88261_I2SSR_32KHZ << AW88261_I2SSR_START_BIT)
355 #define AW88261_I2SSR_44P1KHZ			(7)
356 #define AW88261_I2SSR_44P1KHZ_VALUE	\
357 	(AW88261_I2SSR_44P1KHZ << AW88261_I2SSR_START_BIT)
358 #define AW88261_I2SSR_48KHZ				(8)
359 #define AW88261_I2SSR_48KHZ_VALUE		\
360 	(AW88261_I2SSR_48KHZ << AW88261_I2SSR_START_BIT)
361 #define AW88261_I2SSR_96KHZ				(9)
362 #define AW88261_I2SSR_96KHZ_VALUE		\
363 	(AW88261_I2SSR_96KHZ << AW88261_I2SSR_START_BIT)
364 #define AW88261_I2SSR_192KHZ			(10)
365 #define AW88261_I2SSR_192KHZ_VALUE		\
366 	(AW88261_I2SSR_192KHZ << AW88261_I2SSR_START_BIT)
367 
368 #define AW88261_SLOT_NUM_START_BIT	(12)
369 #define AW88261_SLOT_NUM_BITS_LEN	(3)
370 #define AW88261_SLOT_NUM_MASK	\
371 	(~(((1<<AW88261_SLOT_NUM_BITS_LEN)-1) << AW88261_SLOT_NUM_START_BIT))
372 
373 #define AW88261_SLOT_NUM_I2S_MODE	(0)
374 #define AW88261_SLOT_NUM_I2S_MODE_VALUE	\
375 	(AW88261_SLOT_NUM_I2S_MODE << AW88261_SLOT_NUM_START_BIT)
376 
377 #define AW88261_SLOT_NUM_TDM1S	(1)
378 #define AW88261_SLOT_NUM_TDM1S_VALUE	\
379 	(AW88261_SLOT_NUM_TDM1S << AW88261_SLOT_NUM_START_BIT)
380 
381 #define AW88261_SLOT_NUM_TDM2S	(2)
382 #define AW88261_SLOT_NUM_TDM2S_VALUE	\
383 	(AW88261_SLOT_NUM_TDM2S << AW88261_SLOT_NUM_START_BIT)
384 
385 #define AW88261_SLOT_NUM_TDM4S	(3)
386 #define AW88261_SLOT_NUM_TDM4S_VALUE	\
387 	(AW88261_SLOT_NUM_TDM4S << AW88261_SLOT_NUM_START_BIT)
388 
389 #define AW88261_SLOT_NUM_TDM6S	(4)
390 #define AW88261_SLOT_NUM_TDM6S_VALUE	\
391 	(AW88261_SLOT_NUM_TDM6S << AW88261_SLOT_NUM_START_BIT)
392 
393 #define AW88261_SLOT_NUM_TDM8S	(5)
394 #define AW88261_SLOT_NUM_TDM8S_VALUE	\
395 	(AW88261_SLOT_NUM_TDM8S << AW88261_SLOT_NUM_START_BIT)
396 
397 #define AW88261_SLOT_NUM_TDM16S	(6)
398 #define AW88261_SLOT_NUM_TDM16S_VALUE	\
399 	(AW88261_SLOT_NUM_TDM16S << AW88261_SLOT_NUM_START_BIT)
400 
401 #define AW88261_I2S_TX_SLOTVLD_START_BIT	(8)
402 #define AW88261_I2S_TX_SLOTVLD_BITS_LEN	(4)
403 #define AW88261_I2S_TX_SLOTVLD_MASK	\
404 	(~(((1<<AW88261_I2S_TX_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_TX_SLOTVLD_START_BIT))
405 
406 #define AW88261_I2S_RXR_SLOTVLD_START_BIT	(4)
407 #define AW88261_I2S_RXR_SLOTVLD_BITS_LEN	(4)
408 #define AW88261_I2S_RXR_SLOTVLD_MASK	\
409 	(~(((1<<AW88261_I2S_RXR_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_RXR_SLOTVLD_START_BIT))
410 
411 #define AW88261_I2S_RXL_SLOTVLD_START_BIT	(0)
412 #define AW88261_I2S_RXL_SLOTVLD_BITS_LEN	(4)
413 #define AW88261_I2S_RXL_SLOTVLD_MASK	\
414 	(~(((1<<AW88261_I2S_RXL_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_RXL_SLOTVLD_START_BIT))
415 
416 #define AW88261_CCO_MUX_START_BIT	(6)
417 #define AW88261_CCO_MUX_BITS_LEN	(1)
418 #define AW88261_CCO_MUX_MASK		\
419 	(~(((1<<AW88261_CCO_MUX_BITS_LEN)-1) << AW88261_CCO_MUX_START_BIT))
420 
421 #define AW88261_CCO_MUX_DIVIDED	(0)
422 #define AW88261_CCO_MUX_DIVIDED_VALUE	\
423 	(AW88261_CCO_MUX_DIVIDED << AW88261_CCO_MUX_START_BIT)
424 
425 #define AW88261_CCO_MUX_BYPASS		(1)
426 #define AW88261_CCO_MUX_BYPASS_VALUE	\
427 	(AW88261_CCO_MUX_BYPASS << AW88261_CCO_MUX_START_BIT)
428 
429 #define AW88261_EF_VSN_GESLP_H_START_BIT	(0)
430 #define AW88261_EF_VSN_GESLP_H_BITS_LEN	(10)
431 #define AW88261_EF_VSN_GESLP_H_MASK		\
432 	(~(((1<<AW88261_EF_VSN_GESLP_H_BITS_LEN)-1) << AW88261_EF_VSN_GESLP_H_START_BIT))
433 
434 #define AW88261_EF_VSN_GESLP_L_START_BIT	(0)
435 #define AW88261_EF_VSN_GESLP_L_BITS_LEN	(10)
436 #define AW88261_EF_VSN_GESLP_L_MASK		\
437 	(~(((1<<AW88261_EF_VSN_GESLP_L_BITS_LEN)-1) << AW88261_EF_VSN_GESLP_L_START_BIT))
438 
439 #define AW88261_FORCE_PWM_START_BIT		(12)
440 #define AW88261_FORCE_PWM_BITS_LEN		(1)
441 #define AW88261_FORCE_PWM_MASK			\
442 	(~(((1<<AW88261_FORCE_PWM_BITS_LEN)-1) << AW88261_FORCE_PWM_START_BIT))
443 
444 #define AW88261_FORCE_PWM_FORCEMINUS_PWM	(1)
445 #define AW88261_FORCE_PWM_FORCEMINUS_PWM_VALUE	\
446 	(AW88261_FORCE_PWM_FORCEMINUS_PWM << AW88261_FORCE_PWM_START_BIT)
447 
448 #define AW88261_BST_OS_WIDTH_START_BIT		(0)
449 #define AW88261_BST_OS_WIDTH_BITS_LEN		(3)
450 #define AW88261_BST_OS_WIDTH_MASK		\
451 	(~(((1<<AW88261_BST_OS_WIDTH_BITS_LEN)-1) << AW88261_BST_OS_WIDTH_START_BIT))
452 
453 #define AW88261_BST_OS_WIDTH_50NS		(4)
454 #define AW88261_BST_OS_WIDTH_50NS_VALUE	\
455 	(AW88261_BST_OS_WIDTH_50NS << AW88261_BST_OS_WIDTH_START_BIT)
456 
457 /* BST_LOOPR bit 1:0 (BSTCTRL6 0x65) */
458 #define AW88261_BST_LOOPR_START_BIT	(0)
459 #define AW88261_BST_LOOPR_BITS_LEN	(2)
460 #define AW88261_BST_LOOPR_MASK		\
461 	(~(((1<<AW88261_BST_LOOPR_BITS_LEN)-1) << AW88261_BST_LOOPR_START_BIT))
462 
463 #define AW88261_BST_LOOPR_340K		(2)
464 #define AW88261_BST_LOOPR_340K_VALUE	\
465 	(AW88261_BST_LOOPR_340K << AW88261_BST_LOOPR_START_BIT)
466 
467 /* RSQN_DLY bit 15:14 (BSTCTRL7 0x66) */
468 #define AW88261_RSQN_DLY_START_BIT	(14)
469 #define AW88261_RSQN_DLY_BITS_LEN	(2)
470 #define AW88261_RSQN_DLY_MASK		\
471 	(~(((1<<AW88261_RSQN_DLY_BITS_LEN)-1) << AW88261_RSQN_DLY_START_BIT))
472 
473 #define AW88261_RSQN_DLY_35NS		(2)
474 #define AW88261_RSQN_DLY_35NS_VALUE	\
475 	(AW88261_RSQN_DLY_35NS << AW88261_RSQN_DLY_START_BIT)
476 
477 /* BURST_SSMODE bit 3 (BSTCTRL8 0x67) */
478 #define AW88261_BURST_SSMODE_START_BIT	(3)
479 #define AW88261_BURST_SSMODE_BITS_LEN	(1)
480 #define AW88261_BURST_SSMODE_MASK	\
481 	(~(((1<<AW88261_BURST_SSMODE_BITS_LEN)-1) << AW88261_BURST_SSMODE_START_BIT))
482 
483 #define AW88261_BURST_SSMODE_FAST	(0)
484 #define AW88261_BURST_SSMODE_FAST_VALUE	\
485 	(AW88261_BURST_SSMODE_FAST << AW88261_BURST_SSMODE_START_BIT)
486 
487 /* BST_BURST bit 9:7 (BSTCTRL9 0x68) */
488 #define AW88261_BST_BURST_START_BIT	(7)
489 #define AW88261_BST_BURST_BITS_LEN	(3)
490 #define AW88261_BST_BURST_MASK		\
491 	(~(((1<<AW88261_BST_BURST_BITS_LEN)-1) << AW88261_BST_BURST_START_BIT))
492 
493 #define AW88261_BST_BURST_30MA		(2)
494 #define AW88261_BST_BURST_30MA_VALUE	\
495 	(AW88261_BST_BURST_30MA << AW88261_BST_BURST_START_BIT)
496 
497 #define AW88261_EF_VSN_GESLP_SIGN_MASK		(~0x0200)
498 #define AW88261_EF_VSN_GESLP_NEG		(~0xfc00)
499 
500 #define AW88261_EF_ISN_GESLP_SIGN_MASK		(~0x0200)
501 #define AW88261_EF_ISN_GESLP_NEG		(~0xfc00)
502 
503 #define AW88261_EF_ISN_GESLP_H_START_BIT	(0)
504 #define AW88261_EF_ISN_GESLP_H_BITS_LEN	(10)
505 #define AW88261_EF_ISN_GESLP_H_MASK		\
506 	(~(((1<<AW88261_EF_ISN_GESLP_H_BITS_LEN)-1) << AW88261_EF_ISN_GESLP_H_START_BIT))
507 
508 #define AW88261_EF_ISN_GESLP_L_START_BIT	(0)
509 #define AW88261_EF_ISN_GESLP_L_BITS_LEN	(10)
510 #define AW88261_EF_ISN_GESLP_L_MASK		\
511 	(~(((1<<AW88261_EF_ISN_GESLP_L_BITS_LEN)-1) << AW88261_EF_ISN_GESLP_L_START_BIT))
512 
513 #define AW88261_CABL_BASE_VALUE		(1000)
514 #define AW88261_ICABLK_FACTOR		(1)
515 #define AW88261_VCABLK_FACTOR		(1)
516 
517 #define AW88261_VCAL_FACTOR		(1<<13)
518 
519 #define AW88261_START_RETRIES		(5)
520 #define AW88261_START_WORK_DELAY_MS	(0)
521 
522 /* NOTE: 192000 has a reg value donwstream but not listed in datasheet */
523 #define AW88261_RATES (SNDRV_PCM_RATE_8000_48000 | \
524 			SNDRV_PCM_RATE_12000 | \
525 			SNDRV_PCM_RATE_24000 | \
526 			SNDRV_PCM_RATE_96000)
527 #define AW88261_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
528 			SNDRV_PCM_FMTBIT_S24_LE | \
529 			SNDRV_PCM_FMTBIT_S32_LE)
530 
531 #define AW88261_DEV_DEFAULT_CH		(0)
532 #define AW88261_ACF_FILE		"aw88261_acf.bin"
533 #define AW88261_DEV_SYSST_CHECK_MAX	(10)
534 #define AW88261_SOFT_RESET_VALUE	(0x55aa)
535 #define AW88261_REG_TO_DB		(0x3f)
536 #define AW88261_INIT_PROFILE		(0)
537 
538 #define REG_VAL_TO_DB(value)		((((value) >> AW88261_VOL_6DB_START) * \
539 					AW88261_VOLUME_STEP_DB) + \
540 					((value) & AW88261_REG_TO_DB))
541 #define DB_TO_REG_VAL(value)		((((value) / AW88261_VOLUME_STEP_DB) << \
542 					AW88261_VOL_6DB_START) + \
543 					((value) % AW88261_VOLUME_STEP_DB))
544 
545 #define AW88261_PROFILE_EXT(xname, profile_info, profile_get, profile_set) \
546 { \
547 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
548 	.name = xname, \
549 	.info = profile_info, \
550 	.get = profile_get, \
551 	.put = profile_set, \
552 }
553 
554 enum aw88261_id {
555 	AW88261_CHIP_ID = 0x2113,
556 };
557 
558 enum {
559 	AW88261_500_US = 500,
560 	AW88261_1000_US = 1000,
561 	AW88261_2000_US = 2000,
562 };
563 
564 enum {
565 	AW88261_DEV_PW_OFF = 0,
566 	AW88261_DEV_PW_ON,
567 };
568 
569 enum {
570 	AW88261_DEV_FW_FAILED = 0,
571 	AW88261_DEV_FW_OK,
572 };
573 
574 enum {
575 	AW88261_EF_AND_CHECK = 0,
576 	AW88261_EF_OR_CHECK,
577 };
578 
579 enum {
580 	AW88261_FRCSET_DISABLE = 0,
581 	AW88261_FRCSET_ENABLE,
582 };
583 
584 struct aw88261 {
585 	struct aw_device *aw_pa;
586 	struct mutex lock;
587 	struct gpio_desc *reset_gpio;
588 	struct regmap *regmap;
589 	struct aw_container *aw_cfg;
590 
591 	int efuse_check;
592 	int frcset_en;
593 	unsigned int mute_st;
594 	unsigned int amppd_st;
595 
596 	unsigned int sr_value;
597 	unsigned int cco_mux_value;
598 	unsigned int fs_value;
599 	unsigned int bck_value;
600 	unsigned int bck_inv_value;
601 	unsigned int tdm_bck_value;
602 	unsigned int md_value;
603 
604 	unsigned int slot_num_value;
605 	unsigned int tx_slotvld_mask;
606 	unsigned int rxl_slotvld_mask;
607 	unsigned int rxr_slotvld_mask;
608 
609 	bool phase_sync;
610 };
611 
612 #endif
613