xref: /linux/sound/soc/codecs/aw88261.h (revision 9b2929eed4d2d30f1aebe45bd2a8973eaab2428c)
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_BIT_SYSST_CHECK \
198 		(AW88261_BSTS_FINISHED_VALUE | \
199 		AW88261_SWS_SWITCHING_VALUE | \
200 		AW88261_CLKS_STABLE_VALUE | \
201 		AW88261_PLLS_LOCKED_VALUE)
202 
203 #define AW88261_ULS_HMUTE_START_BIT	(14)
204 #define AW88261_ULS_HMUTE_BITS_LEN	(1)
205 #define AW88261_ULS_HMUTE_MASK		\
206 	(~(((1<<AW88261_ULS_HMUTE_BITS_LEN)-1) << AW88261_ULS_HMUTE_START_BIT))
207 
208 #define AW88261_ULS_HMUTE_DISABLE	(0)
209 #define AW88261_ULS_HMUTE_DISABLE_VALUE	\
210 	(AW88261_ULS_HMUTE_DISABLE << AW88261_ULS_HMUTE_START_BIT)
211 
212 #define AW88261_ULS_HMUTE_ENABLE	(1)
213 #define AW88261_ULS_HMUTE_ENABLE_VALUE	\
214 	(AW88261_ULS_HMUTE_ENABLE << AW88261_ULS_HMUTE_START_BIT)
215 
216 #define AW88261_HMUTE_START_BIT	(8)
217 #define AW88261_HMUTE_BITS_LEN		(1)
218 #define AW88261_HMUTE_MASK		\
219 	(~(((1<<AW88261_HMUTE_BITS_LEN)-1) << AW88261_HMUTE_START_BIT))
220 
221 #define AW88261_HMUTE_DISABLE		(0)
222 #define AW88261_HMUTE_DISABLE_VALUE	\
223 	(AW88261_HMUTE_DISABLE << AW88261_HMUTE_START_BIT)
224 
225 #define AW88261_HMUTE_ENABLE		(1)
226 #define AW88261_HMUTE_ENABLE_VALUE	\
227 	(AW88261_HMUTE_ENABLE << AW88261_HMUTE_START_BIT)
228 
229 #define AW88261_AMPPD_START_BIT	(1)
230 #define AW88261_AMPPD_BITS_LEN		(1)
231 #define AW88261_AMPPD_MASK		\
232 	(~(((1<<AW88261_AMPPD_BITS_LEN)-1) << AW88261_AMPPD_START_BIT))
233 
234 #define AW88261_AMPPD_WORKING		(0)
235 #define AW88261_AMPPD_WORKING_VALUE	\
236 	(AW88261_AMPPD_WORKING << AW88261_AMPPD_START_BIT)
237 
238 #define AW88261_AMPPD_POWER_DOWN	(1)
239 #define AW88261_AMPPD_POWER_DOWN_VALUE	\
240 	(AW88261_AMPPD_POWER_DOWN << AW88261_AMPPD_START_BIT)
241 
242 #define AW88261_PWDN_START_BIT		(0)
243 #define AW88261_PWDN_BITS_LEN		(1)
244 #define AW88261_PWDN_MASK		\
245 	(~(((1<<AW88261_PWDN_BITS_LEN)-1) << AW88261_PWDN_START_BIT))
246 
247 #define AW88261_PWDN_WORKING		(0)
248 #define AW88261_PWDN_WORKING_VALUE	\
249 	(AW88261_PWDN_WORKING << AW88261_PWDN_START_BIT)
250 
251 #define AW88261_PWDN_POWER_DOWN	(1)
252 #define AW88261_PWDN_POWER_DOWN_VALUE	\
253 	(AW88261_PWDN_POWER_DOWN << AW88261_PWDN_START_BIT)
254 
255 #define AW88261_MUTE_VOL		(90 * 8)
256 #define AW88261_VOLUME_STEP_DB		(6 * 8)
257 
258 #define AW88261_VOL_6DB_START		(6)
259 
260 #define AW88261_VOL_START_BIT		(0)
261 #define AW88261_VOL_BITS_LEN		(10)
262 #define AW88261_VOL_MASK		\
263 	(~(((1<<AW88261_VOL_BITS_LEN)-1) << AW88261_VOL_START_BIT))
264 
265 #define AW88261_CTL_MAX_VOL		(AW88261_MUTE_VOL / 2)
266 #define AW88261_CTL_DEFAULT_VOL		(AW88261_CTL_MAX_VOL / 2)
267 
268 #define AW88261_I2STXEN_START_BIT	(6)
269 #define AW88261_I2STXEN_BITS_LEN	(1)
270 #define AW88261_I2STXEN_MASK		\
271 	(~(((1<<AW88261_I2STXEN_BITS_LEN)-1) << AW88261_I2STXEN_START_BIT))
272 
273 #define AW88261_I2STXEN_DISABLE	(0)
274 #define AW88261_I2STXEN_DISABLE_VALUE	\
275 	(AW88261_I2STXEN_DISABLE << AW88261_I2STXEN_START_BIT)
276 
277 #define AW88261_I2STXEN_ENABLE		(1)
278 #define AW88261_I2STXEN_ENABLE_VALUE	\
279 	(AW88261_I2STXEN_ENABLE << AW88261_I2STXEN_START_BIT)
280 
281 #define AW88261_I2SMD_START_BIT	(8)
282 #define AW88261_I2SMD_BITS_LEN	(2)
283 #define AW88261_I2SMD_MASK	\
284 	(~(((1<<AW88261_I2SMD_BITS_LEN)-1) << AW88261_I2SMD_START_BIT))
285 
286 #define AW88261_I2SMD_PHILIPS_STANDARD	(0)
287 #define AW88261_I2SMD_PHILIPS_STANDARD_VALUE	\
288 	(AW88261_I2SMD_PHILIPS_STANDARD << AW88261_I2SMD_START_BIT)
289 
290 #define AW88261_I2SMD_MSB_JUSTIFIED	(1)
291 #define AW88261_I2SMD_MSB_JUSTIFIED_VALUE	\
292 	(AW88261_I2SMD_MSB_JUSTIFIED << AW88261_I2SMD_START_BIT)
293 
294 #define AW88261_I2SMD_LSB_JUSTIFIED	(2)
295 #define AW88261_I2SMD_LSB_JUSTIFIED_VALUE	\
296 	(AW88261_I2SMD_LSB_JUSTIFIED << AW88261_I2SMD_START_BIT)
297 
298 #define AW88261_I2SFS_START_BIT			(6)
299 #define AW88261_I2SFS_BITS_LEN			(2)
300 #define AW88261_I2SFS_MASK				\
301 	(~(((1<<AW88261_I2SFS_BITS_LEN)-1)<<AW88261_I2SFS_START_BIT))
302 
303 #define AW88261_I2SFS_16_BITS			(0)
304 #define AW88261_I2SFS_16_BITS_VALUE		\
305 	(AW88261_I2SFS_16_BITS << AW88261_I2SFS_START_BIT)
306 #define AW88261_I2SFS_20_BITS			(1)
307 #define AW88261_I2SFS_20_BITS_VALUE		\
308 	(AW88261_I2SFS_20_BITS << AW88261_I2SFS_START_BIT)
309 #define AW88261_I2SFS_24_BITS			(2)
310 #define AW88261_I2SFS_24_BITS_VALUE		\
311 	(AW88261_I2SFS_24_BITS << AW88261_I2SFS_START_BIT)
312 #define AW88261_I2SFS_32_BITS			(3)
313 #define AW88261_I2SFS_32_BITS_VALUE		\
314 	(AW88261_I2SFS_32_BITS << AW88261_I2SFS_START_BIT)
315 
316 #define AW88261_I2SBCK_START_BIT	(4)
317 #define AW88261_I2SBCK_BITS_LEN	(2)
318 #define AW88261_I2SBCK_MASK	\
319 	(~(((1<<AW88261_I2SBCK_BITS_LEN)-1) << AW88261_I2SBCK_START_BIT))
320 
321 #define AW88261_I2SBCK_32FS	(0)
322 #define AW88261_I2SBCK_32FS_VALUE	\
323 	(AW88261_I2SBCK_32FS << AW88261_I2SBCK_START_BIT)
324 
325 #define AW88261_I2SBCK_48FS	(1)
326 #define AW88261_I2SBCK_48FS_VALUE	\
327 	(AW88261_I2SBCK_48FS << AW88261_I2SBCK_START_BIT)
328 
329 #define AW88261_I2SBCK_64FS	(2)
330 #define AW88261_I2SBCK_64FS_VALUE	\
331 	(AW88261_I2SBCK_64FS << AW88261_I2SBCK_START_BIT)
332 
333 #define AW88261_TDM_BCK_UNSET			UINT_MAX
334 
335 #define AW88261_I2SSR_START_BIT			(0)
336 #define AW88261_I2SSR_BITS_LEN			(4)
337 #define AW88261_I2SSR_MASK				\
338 	(~(((1<<AW88261_I2SSR_BITS_LEN)-1) << AW88261_I2SSR_START_BIT))
339 
340 #define AW88261_I2SSR_8KHZ				(0)
341 #define AW88261_I2SSR_8KHZ_VALUE		\
342 	(AW88261_I2SSR_8KHZ << AW88261_I2SSR_START_BIT)
343 #define AW88261_I2SSR_11P025KHZ			(1)
344 #define AW88261_I2SSR_11P025KHZ_VALUE	\
345 	(AW88261_I2SSR_11P025KHZ << AW88261_I2SSR_START_BIT)
346 #define AW88261_I2SSR_12KHZ				(2)
347 #define AW88261_I2SSR_12KHZ_VALUE		\
348 	(AW88261_I2SSR_12KHZ << AW88261_I2SSR_START_BIT)
349 #define AW88261_I2SSR_16KHZ				(3)
350 #define AW88261_I2SSR_16KHZ_VALUE		\
351 	(AW88261_I2SSR_16KHZ << AW88261_I2SSR_START_BIT)
352 #define AW88261_I2SSR_22P05KHZ			(4)
353 #define AW88261_I2SSR_22P05KHZ_VALUE	\
354 	(AW88261_I2SSR_22P05KHZ << AW88261_I2SSR_START_BIT)
355 #define AW88261_I2SSR_24KHZ				(5)
356 #define AW88261_I2SSR_24KHZ_VALUE		\
357 	(AW88261_I2SSR_24KHZ << AW88261_I2SSR_START_BIT)
358 #define AW88261_I2SSR_32KHZ				(6)
359 #define AW88261_I2SSR_32KHZ_VALUE		\
360 	(AW88261_I2SSR_32KHZ << AW88261_I2SSR_START_BIT)
361 #define AW88261_I2SSR_44P1KHZ			(7)
362 #define AW88261_I2SSR_44P1KHZ_VALUE	\
363 	(AW88261_I2SSR_44P1KHZ << AW88261_I2SSR_START_BIT)
364 #define AW88261_I2SSR_48KHZ				(8)
365 #define AW88261_I2SSR_48KHZ_VALUE		\
366 	(AW88261_I2SSR_48KHZ << AW88261_I2SSR_START_BIT)
367 #define AW88261_I2SSR_96KHZ				(9)
368 #define AW88261_I2SSR_96KHZ_VALUE		\
369 	(AW88261_I2SSR_96KHZ << AW88261_I2SSR_START_BIT)
370 #define AW88261_I2SSR_192KHZ			(10)
371 #define AW88261_I2SSR_192KHZ_VALUE		\
372 	(AW88261_I2SSR_192KHZ << AW88261_I2SSR_START_BIT)
373 
374 #define AW88261_SLOT_NUM_START_BIT	(12)
375 #define AW88261_SLOT_NUM_BITS_LEN	(3)
376 #define AW88261_SLOT_NUM_MASK	\
377 	(~(((1<<AW88261_SLOT_NUM_BITS_LEN)-1) << AW88261_SLOT_NUM_START_BIT))
378 
379 #define AW88261_SLOT_NUM_I2S_MODE	(0)
380 #define AW88261_SLOT_NUM_I2S_MODE_VALUE	\
381 	(AW88261_SLOT_NUM_I2S_MODE << AW88261_SLOT_NUM_START_BIT)
382 
383 #define AW88261_SLOT_NUM_TDM1S	(1)
384 #define AW88261_SLOT_NUM_TDM1S_VALUE	\
385 	(AW88261_SLOT_NUM_TDM1S << AW88261_SLOT_NUM_START_BIT)
386 
387 #define AW88261_SLOT_NUM_TDM2S	(2)
388 #define AW88261_SLOT_NUM_TDM2S_VALUE	\
389 	(AW88261_SLOT_NUM_TDM2S << AW88261_SLOT_NUM_START_BIT)
390 
391 #define AW88261_SLOT_NUM_TDM4S	(3)
392 #define AW88261_SLOT_NUM_TDM4S_VALUE	\
393 	(AW88261_SLOT_NUM_TDM4S << AW88261_SLOT_NUM_START_BIT)
394 
395 #define AW88261_SLOT_NUM_TDM6S	(4)
396 #define AW88261_SLOT_NUM_TDM6S_VALUE	\
397 	(AW88261_SLOT_NUM_TDM6S << AW88261_SLOT_NUM_START_BIT)
398 
399 #define AW88261_SLOT_NUM_TDM8S	(5)
400 #define AW88261_SLOT_NUM_TDM8S_VALUE	\
401 	(AW88261_SLOT_NUM_TDM8S << AW88261_SLOT_NUM_START_BIT)
402 
403 #define AW88261_SLOT_NUM_TDM16S	(6)
404 #define AW88261_SLOT_NUM_TDM16S_VALUE	\
405 	(AW88261_SLOT_NUM_TDM16S << AW88261_SLOT_NUM_START_BIT)
406 
407 #define AW88261_I2S_TX_SLOTVLD_START_BIT	(8)
408 #define AW88261_I2S_TX_SLOTVLD_BITS_LEN	(4)
409 #define AW88261_I2S_TX_SLOTVLD_MASK	\
410 	(~(((1<<AW88261_I2S_TX_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_TX_SLOTVLD_START_BIT))
411 
412 #define AW88261_I2S_RXR_SLOTVLD_START_BIT	(4)
413 #define AW88261_I2S_RXR_SLOTVLD_BITS_LEN	(4)
414 #define AW88261_I2S_RXR_SLOTVLD_MASK	\
415 	(~(((1<<AW88261_I2S_RXR_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_RXR_SLOTVLD_START_BIT))
416 
417 #define AW88261_I2S_RXL_SLOTVLD_START_BIT	(0)
418 #define AW88261_I2S_RXL_SLOTVLD_BITS_LEN	(4)
419 #define AW88261_I2S_RXL_SLOTVLD_MASK	\
420 	(~(((1<<AW88261_I2S_RXL_SLOTVLD_BITS_LEN)-1) << AW88261_I2S_RXL_SLOTVLD_START_BIT))
421 
422 #define AW88261_CCO_MUX_START_BIT	(6)
423 #define AW88261_CCO_MUX_BITS_LEN	(1)
424 #define AW88261_CCO_MUX_MASK		\
425 	(~(((1<<AW88261_CCO_MUX_BITS_LEN)-1) << AW88261_CCO_MUX_START_BIT))
426 
427 #define AW88261_CCO_MUX_DIVIDED	(0)
428 #define AW88261_CCO_MUX_DIVIDED_VALUE	\
429 	(AW88261_CCO_MUX_DIVIDED << AW88261_CCO_MUX_START_BIT)
430 
431 #define AW88261_CCO_MUX_BYPASS		(1)
432 #define AW88261_CCO_MUX_BYPASS_VALUE	\
433 	(AW88261_CCO_MUX_BYPASS << AW88261_CCO_MUX_START_BIT)
434 
435 #define AW88261_EF_VSN_GESLP_H_START_BIT	(0)
436 #define AW88261_EF_VSN_GESLP_H_BITS_LEN	(10)
437 #define AW88261_EF_VSN_GESLP_H_MASK		\
438 	(~(((1<<AW88261_EF_VSN_GESLP_H_BITS_LEN)-1) << AW88261_EF_VSN_GESLP_H_START_BIT))
439 
440 #define AW88261_EF_VSN_GESLP_L_START_BIT	(0)
441 #define AW88261_EF_VSN_GESLP_L_BITS_LEN	(10)
442 #define AW88261_EF_VSN_GESLP_L_MASK		\
443 	(~(((1<<AW88261_EF_VSN_GESLP_L_BITS_LEN)-1) << AW88261_EF_VSN_GESLP_L_START_BIT))
444 
445 #define AW88261_FORCE_PWM_START_BIT		(12)
446 #define AW88261_FORCE_PWM_BITS_LEN		(1)
447 #define AW88261_FORCE_PWM_MASK			\
448 	(~(((1<<AW88261_FORCE_PWM_BITS_LEN)-1) << AW88261_FORCE_PWM_START_BIT))
449 
450 #define AW88261_FORCE_PWM_FORCEMINUS_PWM	(1)
451 #define AW88261_FORCE_PWM_FORCEMINUS_PWM_VALUE	\
452 	(AW88261_FORCE_PWM_FORCEMINUS_PWM << AW88261_FORCE_PWM_START_BIT)
453 
454 #define AW88261_BST_OS_WIDTH_START_BIT		(0)
455 #define AW88261_BST_OS_WIDTH_BITS_LEN		(3)
456 #define AW88261_BST_OS_WIDTH_MASK		\
457 	(~(((1<<AW88261_BST_OS_WIDTH_BITS_LEN)-1) << AW88261_BST_OS_WIDTH_START_BIT))
458 
459 #define AW88261_BST_OS_WIDTH_50NS		(4)
460 #define AW88261_BST_OS_WIDTH_50NS_VALUE	\
461 	(AW88261_BST_OS_WIDTH_50NS << AW88261_BST_OS_WIDTH_START_BIT)
462 
463 /* BST_LOOPR bit 1:0 (BSTCTRL6 0x65) */
464 #define AW88261_BST_LOOPR_START_BIT	(0)
465 #define AW88261_BST_LOOPR_BITS_LEN	(2)
466 #define AW88261_BST_LOOPR_MASK		\
467 	(~(((1<<AW88261_BST_LOOPR_BITS_LEN)-1) << AW88261_BST_LOOPR_START_BIT))
468 
469 #define AW88261_BST_LOOPR_340K		(2)
470 #define AW88261_BST_LOOPR_340K_VALUE	\
471 	(AW88261_BST_LOOPR_340K << AW88261_BST_LOOPR_START_BIT)
472 
473 /* RSQN_DLY bit 15:14 (BSTCTRL7 0x66) */
474 #define AW88261_RSQN_DLY_START_BIT	(14)
475 #define AW88261_RSQN_DLY_BITS_LEN	(2)
476 #define AW88261_RSQN_DLY_MASK		\
477 	(~(((1<<AW88261_RSQN_DLY_BITS_LEN)-1) << AW88261_RSQN_DLY_START_BIT))
478 
479 #define AW88261_RSQN_DLY_35NS		(2)
480 #define AW88261_RSQN_DLY_35NS_VALUE	\
481 	(AW88261_RSQN_DLY_35NS << AW88261_RSQN_DLY_START_BIT)
482 
483 /* BURST_SSMODE bit 3 (BSTCTRL8 0x67) */
484 #define AW88261_BURST_SSMODE_START_BIT	(3)
485 #define AW88261_BURST_SSMODE_BITS_LEN	(1)
486 #define AW88261_BURST_SSMODE_MASK	\
487 	(~(((1<<AW88261_BURST_SSMODE_BITS_LEN)-1) << AW88261_BURST_SSMODE_START_BIT))
488 
489 #define AW88261_BURST_SSMODE_FAST	(0)
490 #define AW88261_BURST_SSMODE_FAST_VALUE	\
491 	(AW88261_BURST_SSMODE_FAST << AW88261_BURST_SSMODE_START_BIT)
492 
493 /* BST_BURST bit 9:7 (BSTCTRL9 0x68) */
494 #define AW88261_BST_BURST_START_BIT	(7)
495 #define AW88261_BST_BURST_BITS_LEN	(3)
496 #define AW88261_BST_BURST_MASK		\
497 	(~(((1<<AW88261_BST_BURST_BITS_LEN)-1) << AW88261_BST_BURST_START_BIT))
498 
499 #define AW88261_BST_BURST_30MA		(2)
500 #define AW88261_BST_BURST_30MA_VALUE	\
501 	(AW88261_BST_BURST_30MA << AW88261_BST_BURST_START_BIT)
502 
503 #define AW88261_EF_VSN_GESLP_SIGN_MASK		(~0x0200)
504 #define AW88261_EF_VSN_GESLP_NEG		(~0xfc00)
505 
506 #define AW88261_EF_ISN_GESLP_SIGN_MASK		(~0x0200)
507 #define AW88261_EF_ISN_GESLP_NEG		(~0xfc00)
508 
509 #define AW88261_EF_ISN_GESLP_H_START_BIT	(0)
510 #define AW88261_EF_ISN_GESLP_H_BITS_LEN	(10)
511 #define AW88261_EF_ISN_GESLP_H_MASK		\
512 	(~(((1<<AW88261_EF_ISN_GESLP_H_BITS_LEN)-1) << AW88261_EF_ISN_GESLP_H_START_BIT))
513 
514 #define AW88261_EF_ISN_GESLP_L_START_BIT	(0)
515 #define AW88261_EF_ISN_GESLP_L_BITS_LEN	(10)
516 #define AW88261_EF_ISN_GESLP_L_MASK		\
517 	(~(((1<<AW88261_EF_ISN_GESLP_L_BITS_LEN)-1) << AW88261_EF_ISN_GESLP_L_START_BIT))
518 
519 #define AW88261_CABL_BASE_VALUE		(1000)
520 #define AW88261_ICABLK_FACTOR		(1)
521 #define AW88261_VCABLK_FACTOR		(1)
522 
523 #define AW88261_VCAL_FACTOR		(1<<13)
524 
525 #define AW88261_START_RETRIES		(5)
526 #define AW88261_START_WORK_DELAY_MS	(0)
527 
528 /* NOTE: 192000 has a reg value donwstream but not listed in datasheet */
529 #define AW88261_RATES (SNDRV_PCM_RATE_8000_48000 | \
530 			SNDRV_PCM_RATE_12000 | \
531 			SNDRV_PCM_RATE_24000 | \
532 			SNDRV_PCM_RATE_96000)
533 #define AW88261_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
534 			SNDRV_PCM_FMTBIT_S24_LE | \
535 			SNDRV_PCM_FMTBIT_S32_LE)
536 
537 #define AW88261_DEV_DEFAULT_CH		(0)
538 #define AW88261_ACF_FILE		"aw88261_acf.bin"
539 #define AW88261_DEV_SYSST_CHECK_MAX	(10)
540 #define AW88261_SOFT_RESET_VALUE	(0x55aa)
541 #define AW88261_REG_TO_DB		(0x3f)
542 #define AW88261_INIT_PROFILE		(0)
543 
544 #define REG_VAL_TO_DB(value)		((((value) >> AW88261_VOL_6DB_START) * \
545 					AW88261_VOLUME_STEP_DB) + \
546 					((value) & AW88261_REG_TO_DB))
547 #define DB_TO_REG_VAL(value)		((((value) / AW88261_VOLUME_STEP_DB) << \
548 					AW88261_VOL_6DB_START) + \
549 					((value) % AW88261_VOLUME_STEP_DB))
550 
551 #define AW88261_PROFILE_EXT(xname, profile_info, profile_get, profile_set) \
552 { \
553 	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
554 	.name = xname, \
555 	.info = profile_info, \
556 	.get = profile_get, \
557 	.put = profile_set, \
558 }
559 
560 enum aw88261_id {
561 	AW88261_CHIP_ID = 0x2113,
562 };
563 
564 enum {
565 	AW88261_500_US = 500,
566 	AW88261_1000_US = 1000,
567 	AW88261_2000_US = 2000,
568 };
569 
570 enum {
571 	AW88261_DEV_PW_OFF = 0,
572 	AW88261_DEV_PW_ON,
573 };
574 
575 enum {
576 	AW88261_DEV_FW_FAILED = 0,
577 	AW88261_DEV_FW_OK,
578 };
579 
580 enum {
581 	AW88261_EF_AND_CHECK = 0,
582 	AW88261_EF_OR_CHECK,
583 };
584 
585 enum {
586 	AW88261_FRCSET_DISABLE = 0,
587 	AW88261_FRCSET_ENABLE,
588 };
589 
590 struct aw88261 {
591 	struct aw_device *aw_pa;
592 	struct mutex lock;
593 	struct gpio_desc *reset_gpio;
594 	struct regmap *regmap;
595 	struct aw_container *aw_cfg;
596 
597 	int efuse_check;
598 	int frcset_en;
599 	unsigned int mute_st;
600 	unsigned int amppd_st;
601 
602 	unsigned int sr_value;
603 	unsigned int cco_mux_value;
604 	unsigned int fs_value;
605 	unsigned int bck_value;
606 	unsigned int bck_inv_value;
607 	unsigned int tdm_bck_value;
608 	unsigned int md_value;
609 
610 	unsigned int slot_num_value;
611 	unsigned int tx_slotvld_mask;
612 	unsigned int rxl_slotvld_mask;
613 	unsigned int rxr_slotvld_mask;
614 
615 	bool phase_sync;
616 };
617 
618 #endif
619