summaryrefslogtreecommitdiffstats
blob: c388848f3c2b533d78f43aa5e7ca4b74bd1daac2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Audio Codec Driver Supporting Devices
 * TAA5X1X, TAC5X1X, TAD5X1X
 *
 * Copyright (C) 2024-2025 Texas Instruments Incorporated - https://www.ti.com
 *
 * Author: Kevin Lu <kevin-lu@ti.com>
 * Author: Kokila Karuppusamy <kokila.karuppusamy@ti.com>
 * Author: Niranjan H Y <niranjan.hy@ti.com>
 */

#ifndef _TAC5X1X_H
#define _TAC5X1X_H

#define	TAC5X1X_RATES	SNDRV_PCM_RATE_8000_192000
#define	TAC5X1X_FORMATS (SNDRV_PCM_FMTBIT_S16_LE \
			 | SNDRV_PCM_FMTBIT_S20_3LE \
			 | SNDRV_PCM_FMTBIT_S24_LE \
			 | SNDRV_PCM_FMTBIT_S24_3LE \
			 | SNDRV_PCM_FMTBIT_S32_LE)

/*PAGE Control Register (available in page0 of each book) */
#define	TAC_PAGE_SELECT		0x00
#define	TAC_PAGE_ID(reg)	((reg) / 128)
#define	TAC_PAGE_REG(reg)	((reg) % 128)
#define	TAC5X1X_REG(page, reg)	(((page) * 128) + (reg))

//#define	TAC5X1X_PGSEL		TAC5X1X_REG(0, 0x0)

#define	TAC5X1X_RESET		TAC5X1X_REG(0, 0x1)
#define	TAC5X1X_VREF		TAC5X1X_REG(0, 0x2)
#define	TAC5X1X_VDDSTS		TAC5X1X_REG(0, 0x3)
#define	TAC5X1X_MISC		TAC5X1X_REG(0, 0x4)
#define	TAC5X1X_MISC1		TAC5X1X_REG(0, 0x5)
#define	TAC5X1X_DACA0		TAC5X1X_REG(0, 0x6)
#define	TAC5X1X_MISC0		TAC5X1X_REG(0, 0x7)
#define	TAC5X1X_GPIO1		TAC5X1X_REG(0, 0xa)
#define	TAC5X1X_GPIO2		TAC5X1X_REG(0, 0xb)
#define	TAC5X1X_GPO1		TAC5X1X_REG(0, 0xc)
#define	TAC5X1X_GPI1		TAC5X1X_REG(0, 0xd)
#define	TAC5X1X_GPIOVAL		TAC5X1X_REG(0, 0xe)
#define	TAC5X1X_INTF0		TAC5X1X_REG(0, 0xf)
#define	TAC5X1X_INTF1		TAC5X1X_REG(0, 0x10)
#define	TAC5X1X_INTF2		TAC5X1X_REG(0, 0x11)
#define	TAC5X1X_INTF3		TAC5X1X_REG(0, 0x12)
#define	TAC5X1X_INTF4		TAC5X1X_REG(0, 0x13)
#define	TAC5X1X_INTF5		TAC5X1X_REG(0, 0x14)
#define	TAC5X1X_INTF6		TAC5X1X_REG(0, 0x15)
#define	TAC5X1X_ASI0		TAC5X1X_REG(0, 0x18)
#define	TAC5X1X_ASI1		TAC5X1X_REG(0, 0x19)
#define	TAC5X1X_PASI0		TAC5X1X_REG(0, 0x1a)
#define	TAC5X1X_PASITX0		TAC5X1X_REG(0, 0x1b)
#define	TAC5X1X_PASITX1		TAC5X1X_REG(0, 0x1c)
#define	TAC5X1X_PASITX2		TAC5X1X_REG(0, 0x1d)
#define	TAC5X1X_PASITXCH1	TAC5X1X_REG(0, 0x1e)
#define	TAC5X1X_PASITXCH2	TAC5X1X_REG(0, 0x1f)
#define	TAC5X1X_PASITXCH3	TAC5X1X_REG(0, 0x20)
#define	TAC5X1X_PASITXCH4	TAC5X1X_REG(0, 0x21)
#define	TAC5X1X_PASITXCH5	TAC5X1X_REG(0, 0x22)
#define	TAC5X1X_PASITXCH6	TAC5X1X_REG(0, 0x23)
#define	TAC5X1X_PASITXCH7	TAC5X1X_REG(0, 0x24)
#define	TAC5X1X_PASITXCH8	TAC5X1X_REG(0, 0x25)
#define	TAC5X1X_PASIRX0		TAC5X1X_REG(0, 0x26)
#define	TAC5X1X_PASIRX1		TAC5X1X_REG(0, 0x27)
#define	TAC5X1X_PASIRXCH1	TAC5X1X_REG(0, 0x28)
#define	TAC5X1X_PASIRXCH2	TAC5X1X_REG(0, 0x29)
#define	TAC5X1X_PASIRXCH3	TAC5X1X_REG(0, 0x2a)
#define	TAC5X1X_PASIRXCH4	TAC5X1X_REG(0, 0x2b)
#define	TAC5X1X_PASIRXCH5	TAC5X1X_REG(0, 0x2c)
#define	TAC5X1X_PASIRXCH6	TAC5X1X_REG(0, 0x2d)
#define	TAC5X1X_PASIRXCH7	TAC5X1X_REG(0, 0x2e)
#define	TAC5X1X_PASIRXCH8	TAC5X1X_REG(0, 0x2f)
#define	TAC5X1X_CLK0		TAC5X1X_REG(0, 0x32)
#define	TAC5X1X_CLK1		TAC5X1X_REG(0, 0x33)
#define	TAC5X1X_CLK2		TAC5X1X_REG(0, 0x34)
#define	TAC5X1X_CNTCLK0		TAC5X1X_REG(0, 0x35)
#define	TAC5X1X_CNTCLK1		TAC5X1X_REG(0, 0x36)
#define	TAC5X1X_CNTCLK2		TAC5X1X_REG(0, 0x37)
#define	TAC5X1X_CNTCLK3		TAC5X1X_REG(0, 0x38)
#define	TAC5X1X_CNTCLK4		TAC5X1X_REG(0, 0x39)
#define	TAC5X1X_CNTCLK5		TAC5X1X_REG(0, 0x3a)
#define	TAC5X1X_CNTCLK6		TAC5X1X_REG(0, 0x3b)
#define	TAC5X1X_CLKERRSTS0	TAC5X1X_REG(0, 0x3c)
#define	TAC5X1X_CLKERRSTS1	TAC5X1X_REG(0, 0x3d)
#define	TAC5X1X_CLKDETSTS0	TAC5X1X_REG(0, 0x3e)
#define	TAC5X1X_CLKDETSTS1	TAC5X1X_REG(0, 0x3f)
#define	TAC5X1X_CLKDETSTS2	TAC5X1X_REG(0, 0x40)
#define	TAC5X1X_CLKDETSTS3	TAC5X1X_REG(0, 0x41)
#define	TAC5X1X_INT		TAC5X1X_REG(0, 0x42)
#define	TAC5X1X_DAC_FLT		TAC5X1X_REG(0, 0x43)
#define	TAC5X1X_ADCDACMISC	TAC5X1X_REG(0, 0x4b)
#define	TAC5X1X_IADC		TAC5X1X_REG(0, 0x4c)
#define	TAC5X1X_VREFCFG		TAC5X1X_REG(0, 0x4d)
#define	TAC5X1X_PWRTUNE0	TAC5X1X_REG(0, 0x4e)
#define	TAC5X1X_PWRTUNE1	TAC5X1X_REG(0, 0x4f)
#define	TAC5X1X_ADCCH1C0	TAC5X1X_REG(0, 0x50)
#define	TAC5X1X_ADCCH		TAC5X1X_REG(0, 0x51)
#define	TAC5X1X_ADCCH1C2	TAC5X1X_REG(0, 0x52)
#define	TAC5X1X_ADCCH1C3	TAC5X1X_REG(0, 0x53)
#define	TAC5X1X_ADCCH1C4	TAC5X1X_REG(0, 0x54)
#define	TAC5X1X_ADCCH2C0	TAC5X1X_REG(0, 0x55)
#define	TAC5X1X_ADCCH2C2	TAC5X1X_REG(0, 0x57)
#define	TAC5X1X_ADCCH2C3	TAC5X1X_REG(0, 0x58)
#define	TAC5X1X_ADCCH2C4	TAC5X1X_REG(0, 0x59)
#define	TAC5X1X_ADCCH3C0	TAC5X1X_REG(0, 0x5a)
#define	TAC5X1X_ADCCH3C2	TAC5X1X_REG(0, 0x5b)
#define	TAC5X1X_ADCCH3C3	TAC5X1X_REG(0, 0x5c)
#define	TAC5X1X_ADCCH3C4	TAC5X1X_REG(0, 0x5d)
#define	TAC5X1X_ADCCH4C0	TAC5X1X_REG(0, 0x5e)
#define	TAC5X1X_ADCCH4C2	TAC5X1X_REG(0, 0x5f)
#define	TAC5X1X_ADCCH4C3	TAC5X1X_REG(0, 0x60)
#define	TAC5X1X_ADCCH4C4	TAC5X1X_REG(0, 0x61)
#define	TAC5X1X_ADCCFG1		TAC5X1X_REG(0, 0x62)
#define	TAC5X1X_OUT1CFG0	TAC5X1X_REG(0, 0x64)
#define	TAC5X1X_OUT1CFG1	TAC5X1X_REG(0, 0x65)
#define	TAC5X1X_OUT1CFG2	TAC5X1X_REG(0, 0x66)
#define	TAC5X1X_DACCH1A0	TAC5X1X_REG(0, 0x67)
#define	TAC5X1X_DACCH1A1	TAC5X1X_REG(0, 0x68)
#define	TAC5X1X_DACCH1B0	TAC5X1X_REG(0, 0x69)
#define	TAC5X1X_DACCH1B1	TAC5X1X_REG(0, 0x6a)
#define	TAC5X1X_OUT2CFG0	TAC5X1X_REG(0, 0x6b)
#define	TAC5X1X_OUT2CFG1	TAC5X1X_REG(0, 0x6c)
#define	TAC5X1X_OUT2CFG2	TAC5X1X_REG(0, 0x6d)
#define	TAC5X1X_DACCH2A0	TAC5X1X_REG(0, 0x6e)
#define	TAC5X1X_DACCH2A1	TAC5X1X_REG(0, 0x6f)
#define	TAC5X1X_DACCH2B0	TAC5X1X_REG(0, 0x70)
#define	TAC5X1X_DACCH2B1	TAC5X1X_REG(0, 0x71)
#define	TAC5X1X_DSP0		TAC5X1X_REG(0, 0x72)
#define	TAC5X1X_DSP1		TAC5X1X_REG(0, 0x73)
#define	TAC5X1X_CH_EN		TAC5X1X_REG(0, 0x76)
#define	TAC5X1X_DYN_PUPD	TAC5X1X_REG(0, 0x77)
#define	TAC5X1X_PWR_CFG		TAC5X1X_REG(0, 0x78)
#define	TAC5X1X_DEVSTS0		TAC5X1X_REG(0, 0x79)
#define	TAC5X1X_DEVSTS1		TAC5X1X_REG(0, 0x7a)

#define	TAC5X1X_CLKCFG0		TAC5X1X_REG(1, 0xd)
#define	TAC5X1X_MICBIAS1	TAC5X1X_REG(1, 0x16)
#define	TAC5X1X_AGC_DRC		TAC5X1X_REG(1, 0x24)
#define	TAC5X1X_PLIM		TAC5X1X_REG(1, 0x2b)
#define	TAC5X1X_MIXER		TAC5X1X_REG(1, 0x2c)

#define	TAC5X1X_DIAG_CFG0	TAC5X1X_REG(1, 0x46)
#define	TAC5X1X_DIAG_CFG1	TAC5X1X_REG(1, 0x47)
#define	TAC5X1X_DIAG_CFG2	TAC5X1X_REG(1, 0x48)
#define	TAC5X1X_DIAG_CFG8	TAC5X1X_REG(1, 0x4e)
#define	TAC5X1X_DIAG_CFG9	TAC5X1X_REG(1, 0x4b)
#define	TAC5X1X_DIAG_CFG6	TAC5X1X_REG(1, 0x4c)
#define	TAC5X1X_DIAG_CFG7	TAC5X1X_REG(1, 0x4d)

/* interrupt latches */
#define	TAC5X1X_INT_LTCH0	TAC5X1X_REG(0x1, 0x34)
#define	TAC5X1X_CHX_LTCH	TAC5X1X_REG(0x1, 0x35)
#define	TAC5X1X_IN_CH1_LTCH	TAC5X1X_REG(0x1, 0x36)
#define	TAC5X1X_IN_CH2_LTCH	TAC5X1X_REG(0x1, 0x37)
#define	TAC5X1X_OUT_CH1_LTCH	TAC5X1X_REG(0x1, 0x38)
#define	TAC5X1X_OUT_CH2_LTCH	TAC5X1X_REG(0x1, 0x39)
#define	TAC5X1X_INT_LTCH1	TAC5X1X_REG(0x1, 0x3A)
#define	TAC5X1X_INT_LTCH2	TAC5X1X_REG(0x1, 0x3B)
#define TAC5X1X_OVERLD_FLAG	TAC5X1X_REG(0x1, 0x5B)

#define TAC5X1X_TP_START	TAC5X1X_REG(0xfd, 0x0)
#define TAC5X1X_TP_DREG		TAC5X1X_REG(0xfd, 0xd)
#define TAC5X1X_TP_AREG		TAC5X1X_REG(0xfd, 0x1a)
#define TAC5X1X_TP_END		TAC5X1X_REG(0xfd, 0x7f)
/* Bits, masks, and shifts */
/* TAC5X1X_CH_EN */
#define	TAC5X1X_CH_EN_ADC_MASK	GENMASK(7, 4)
#define	TAC5X1X_CH_EN_ADC_CH1	BIT(7)
#define	TAC5X1X_CH_EN_ADC_CH2	BIT(6)
#define	TAC5X1X_CH_EN_ADC_CH3	BIT(5)
#define	TAC5X1X_CH_EN_ADC_CH4	BIT(4)

#define	TAC5X1X_CH_EN_DAC_MASK	GENMASK(3, 0)
#define	TAC5X1X_CH_EN_DAC_CH1	BIT(3)
#define	TAC5X1X_CH_EN_DAC_CH2	BIT(2)
#define	TAC5X1X_CH_EN_DAC_CH3	BIT(1)
#define	TAC5X1X_CH_EN_DAC_CH4	BIT(0)

/* TAC5X1X_GPIOVAL */
#define	TAC5X1X_GPIO1_VAL	BIT(7)
#define	TAC5X1X_GPIO2_VAL	BIT(6)
#define	TAC5X1X_GPO1_VAL	BIT(5)
#define	TAC5X1X_GPIO1_MON	BIT(3)
#define	TAC5X1X_GPIO2_MON	BIT(2)
#define	TAC5X1X_GPI1_MON	BIT(1)

/* TAC5X1X_DIAG_CFG0 */
#define	TAC5X1X_IN_CH_DIAG_EN_MASK	0xc0
#define	TAC5X1X_INCL_SE_INM_MASK	0x20
#define	TAC5X1X_INCL_AC_COUP_MASK	0x10
#define	TAC5X1X_OUT1P_DIAG_EN_MASK	0x0f
#define	TAC5X1X_MICBIAS_LOW_THRESHOLD	0x48
#define	TAC5X1X_MICBIAS_HIGH_THRESHOLD	0xa2
#define	TAC5X1X_GPA_LOW_THRESHOLD	0x4b
#define	TAC5X1X_GPA_HIGH_THRESHOLD	0xba

/* TAC5X1X_PASI */
#define	TAC5X1X_PASI_SAMP_RATE_MASK	GENMASK(7, 2)
#define	TAC5X1X_PASI_FMT_MASK		GENMASK(7, 6)
#define	TAC5X1X_PASI_FMT_TDM		0x00
#define	TAC5X1X_PASI_FMT_I2S		0x40
#define	TAC5X1X_PASI_FMT_LJ		0x80

#define	TAC5X1X_PASI_DATALEN_MASK	GENMASK(5, 4)
#define	TAC5X1X_WORD_LEN_16BITS		0x00
#define	TAC5X1X_WORD_LEN_20BITS		0x10
#define	TAC5X1X_WORD_LEN_24BITS		0x20
#define	TAC5X1X_WORD_LEN_32BITS		0x30

/* TAC5X1X_CNTCLK2 */
#define	TAC5X1X_PASI_MODE_MASK		0x10
#define	TAC5X1X_SASI_MODE_MASK		0x08
#define	TAC5X1X_ASI_RATE_MASK		0x01

#define	TAC5X1X_PASI_RATE_48000		0x00
#define	TAC5X1X_PASI_RATE_44100		0x01

/* TAC5X1X_PASITX0 */
#define	TAC5X1X_PASITX_OFFSET_MASK	0x1f

/* TAC5X1X_PASIRX0 */
#define	TAC5X1X_PASIRX_OFFSET_MASK	0x1f

/* TAC5X1X_VREF */
#define	TAC5X1X_VREF_SLEEP_EXIT_VREF_EN		0x80
#define	TAC5X1X_VREF_SLEEP_ACTIVE_MASK		0x01

/* TAC5X1X_PWRCFG */
#define	TAC5X1X_PWR_CFG_ADC_PDZ	BIT(7)
#define	TAC5X1X_PWR_CFG_DAC_PDZ	BIT(6)
#define	TAC5X1X_PWR_CFG_MICBIAS	BIT(5)
#define	TAC5X1X_PWR_CFG_UAD_EN	BIT(3)
#define	TAC5X1X_PWR_CFG_VAD_EN	BIT(2)
#define	TAC5X1X_PWR_CFG_UAG_EN	BIT(1)

/* TAC5X1X_GPIOx */
#define	TAC5X1X_GPIO1_DEFAULT_VAL	0x32
#define	TAC5X1X_GPIO2_DEFAULT_VAL	0x00
#define	TAC5X1X_GPI1_DEFAULT_VAL	0x00
#define	TAC5X1X_GPO1_DEFAULT_VAL	0x00

#define	TAC5X1X_GPIOX_CFG_MASK	0xf0
#define	TAC5X1X_GPIOX_DRV_MASK	0x07

#define	TAC5X1X_GPIO_DISABLE	0
#define	TAC5X1X_GPIO_GPI	1
#define	TAC5X1X_GPIO_GPO	2
#define	TAC5X1X_GPIO_IRQ	3
#define	TAC5X1X_GPIO_PDMCLK	4
#define	TAC5X1X_GPIO_P_DOUT	5
#define	TAC5X1X_GPIO_P_DOUT2	6
#define	TAC5X1X_GPIO_S_DOUT	7
#define	TAC5X1X_GPIO_S_DOUT2	8
#define	TAC5X1X_GPIO_S_BCLK	9
#define	TAC5X1X_GPIO_S_FSYNC	10
#define	TAC5X1X_GPIO_CLKOUT	11
#define	TAC5X1X_GPIO_DOUT_MUX	12
#define	TAC5X1X_GPIO_DAISY_OUT	13

#define	TAC5X1X_GPIO_DRV_HIZ	0
#define	TAC5X1X_GPIO_DRV_ALAH	1
#define	TAC5X1X_GPIO_DRV_ALWH	2
#define	TAC5X1X_GPIO_DRV_ALHIZ	3
#define	TAC5X1X_GPIO_DRV_WLAH	4
#define	TAC5X1X_GPIO_DRV_HIZAH	5

/* TAC5X1X_GPI1 */
#define	TAC5X1X_GPI1_CFG_MASK	BIT(1)
#define	TAC5X1X_GPA_CFG_MASK	BIT(0)

/* TAC5X1X_VREFCFG */
#define	TAC5X1X_VREFCFG_MICBIAS_VAL_MASK	GENMASK(3, 2)
#define	TAC5X1X_VREFCFG_VREF_FSCALE_MASK	GENMASK(1, 0)

#define TAC5X1X_ADCCH1C0_IMPEDANCE_MASK		GENMASK(5, 4)
#define TAC5X1X_ADCCH2C0_IMPEDANCE_MASK	GENMASK(5, 4)

#define TAC5X1X_OUT2CFG0_VCOM_MASK	BIT(1)

#define	TAC5X1X_MICBIAS_VREF	0
#define	TAC5X1X_MICBIAS_0_5VREF	1
#define	TAC5X1X_MICBIAS_AVDD	3

#define	TAC5X1X_VERF_2_75V	0
#define	TAC5X1X_VERF_2_5V	1
#define	TAC5X1X_VERF_1_375V	2

enum tac5x1x_type {
	TAA5212 = 0,
	TAA5412,
	TAC5111,
	TAC5112,
	TAC5211,
	TAC5212,
	TAC5311,
	TAC5312,
	TAC5411,
	TAC5412,
	TAD5112,
	TAD5212,
};

#endif	/* _TAC5X1X_H */