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
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
|
/* SPDX-License-Identifier: GPL-2.0 */
/*
* ALSA SoC Texas Instruments TAS675x Quad-Channel Audio Amplifier
*
* Copyright (C) 2026 Texas Instruments Incorporated - https://www.ti.com/
* Author: Sen Wang <sen@ti.com>
*/
#ifndef __TAS675X_H__
#define __TAS675X_H__
/*
* Book 0, Page 0 — Register Addresses
*/
#define TAS675X_PAGE_SIZE 256
#define TAS675X_PAGE_REG(page, reg) ((page) * TAS675X_PAGE_SIZE + (reg))
/* Page Control & Basic Config */
#define TAS675X_PAGE_CTRL_REG 0x00
#define TAS675X_RESET_REG 0x01
#define TAS675X_OUTPUT_CTRL_REG 0x02
#define TAS675X_STATE_CTRL_CH1_CH2_REG 0x03
#define TAS675X_STATE_CTRL_CH3_CH4_REG 0x04
#define TAS675X_ISENSE_CTRL_REG 0x05
#define TAS675X_DC_DETECT_CTRL_REG 0x06
/* Serial Audio Port */
#define TAS675X_SCLK_INV_CTRL_REG 0x20
#define TAS675X_AUDIO_IF_CTRL_REG 0x21
#define TAS675X_SDIN_CTRL_REG 0x23
#define TAS675X_SDOUT_CTRL_REG 0x25
#define TAS675X_SDIN_OFFSET_MSB_REG 0x27
#define TAS675X_SDIN_AUDIO_OFFSET_REG 0x28
#define TAS675X_SDIN_LL_OFFSET_REG 0x29
#define TAS675X_SDIN_CH_SWAP_REG 0x2A
#define TAS675X_SDOUT_OFFSET_MSB_REG 0x2C
#define TAS675X_VPREDICT_OFFSET_REG 0x2D
#define TAS675X_ISENSE_OFFSET_REG 0x2E
#define TAS675X_SDOUT_EN_REG 0x31
#define TAS675X_LL_EN_REG 0x32
/* DSP & Core Audio Control */
#define TAS675X_RTLDG_EN_REG 0x37
#define TAS675X_DC_BLOCK_BYP_REG 0x39
#define TAS675X_DSP_CTRL_REG 0x3A
#define TAS675X_PAGE_AUTO_INC_REG 0x3B
/* Volume & Mute */
#define TAS675X_DIG_VOL_CH1_REG 0x40
#define TAS675X_DIG_VOL_CH2_REG 0x41
#define TAS675X_DIG_VOL_CH3_REG 0x42
#define TAS675X_DIG_VOL_CH4_REG 0x43
#define TAS675X_DIG_VOL_RAMP_CTRL_REG 0x44
#define TAS675X_DIG_VOL_COMBINE_CTRL_REG 0x46
#define TAS675X_AUTO_MUTE_EN_REG 0x47
#define TAS675X_AUTO_MUTE_TIMING_CH1_CH2_REG 0x48
#define TAS675X_AUTO_MUTE_TIMING_CH3_CH4_REG 0x49
/* Analog Gain & Power Stage */
#define TAS675X_ANALOG_GAIN_CH1_CH2_REG 0x4A
#define TAS675X_ANALOG_GAIN_CH3_CH4_REG 0x4B
#define TAS675X_ANALOG_GAIN_RAMP_CTRL_REG 0x4E
#define TAS675X_PULSE_INJECTION_EN_REG 0x52
#define TAS675X_CBC_CTRL_REG 0x54
#define TAS675X_CURRENT_LIMIT_CTRL_REG 0x55
#define TAS675X_DAC_CLK_REG 0x5A
#define TAS675X_ISENSE_CAL_REG 0x5B
/* Spread Spectrum & PWM Phase */
#define TAS675X_PWM_PHASE_CTRL_REG 0x60
#define TAS675X_SS_CTRL_REG 0x61
#define TAS675X_SS_RANGE_CTRL_REG 0x62
#define TAS675X_SS_DWELL_CTRL_REG 0x66
#define TAS675X_RAMP_PHASE_CTRL_GPO_REG 0x68
#define TAS675X_PWM_PHASE_M_CTRL_CH1_REG 0x69
#define TAS675X_PWM_PHASE_M_CTRL_CH2_REG 0x6A
#define TAS675X_PWM_PHASE_M_CTRL_CH3_REG 0x6B
#define TAS675X_PWM_PHASE_M_CTRL_CH4_REG 0x6C
/* Status & Reporting */
#define TAS675X_AUTO_MUTE_STATUS_REG 0x71
#define TAS675X_STATE_REPORT_CH1_CH2_REG 0x72
#define TAS675X_STATE_REPORT_CH3_CH4_REG 0x73
#define TAS675X_PVDD_SENSE_REG 0x74
#define TAS675X_TEMP_GLOBAL_REG 0x75
#define TAS675X_FS_MON_REG 0x76
#define TAS675X_SCLK_MON_REG 0x77
#define TAS675X_REPORT_ROUTING_1_REG 0x7C
/* Memory Paging & Book Control */
#define TAS675X_SETUP_REG1 0x7D
#define TAS675X_SETUP_REG2 0x7E
#define TAS675X_BOOK_CTRL_REG 0x7F
/* Fault Status */
#define TAS675X_POWER_FAULT_STATUS_1_REG 0x7D
#define TAS675X_POWER_FAULT_STATUS_2_REG 0x80
#define TAS675X_OT_FAULT_REG 0x81
#define TAS675X_OTW_STATUS_REG 0x82
#define TAS675X_CLIP_WARN_STATUS_REG 0x83
#define TAS675X_CBC_WARNING_STATUS_REG 0x85
/* Latched Fault Registers */
#define TAS675X_POWER_FAULT_LATCHED_REG 0x86
#define TAS675X_OTSD_LATCHED_REG 0x87
#define TAS675X_OTW_LATCHED_REG 0x88
#define TAS675X_CLIP_WARN_LATCHED_REG 0x89
#define TAS675X_CLK_FAULT_LATCHED_REG 0x8A
#define TAS675X_RTLDG_OL_SL_FAULT_LATCHED_REG 0x8B
#define TAS675X_CBC_FAULT_WARN_LATCHED_REG 0x8D
#define TAS675X_OC_DC_FAULT_LATCHED_REG 0x8E
#define TAS675X_OTSD_RECOVERY_EN_REG 0x8F
/* Protection & Routing Controls */
#define TAS675X_REPORT_ROUTING_2_REG 0x90
#define TAS675X_REPORT_ROUTING_3_REG 0x91
#define TAS675X_REPORT_ROUTING_4_REG 0x92
#define TAS675X_CLIP_DETECT_CTRL_REG 0x93
#define TAS675X_REPORT_ROUTING_5_REG 0x94
/* GPIO Pin Configuration */
#define TAS675X_GPIO1_OUTPUT_SEL_REG 0x95
#define TAS675X_GPIO2_OUTPUT_SEL_REG 0x96
#define TAS675X_GPIO_INPUT_SLEEP_HIZ_REG 0x9B
#define TAS675X_GPIO_INPUT_PLAY_SLEEP_REG 0x9C
#define TAS675X_GPIO_INPUT_MUTE_REG 0x9D
#define TAS675X_GPIO_INPUT_SYNC_REG 0x9E
#define TAS675X_GPIO_INPUT_SDIN2_REG 0x9F
#define TAS675X_GPIO_CTRL_REG 0xA0
#define TAS675X_GPIO_INVERT_REG 0xA1
/* Load Diagnostics Config */
#define TAS675X_DC_LDG_CTRL_REG 0xB0
#define TAS675X_DC_LDG_LO_CTRL_REG 0xB1
#define TAS675X_DC_LDG_TIME_CTRL_REG 0xB2
#define TAS675X_DC_LDG_SL_CH1_CH2_CTRL_REG 0xB3
#define TAS675X_DC_LDG_SL_CH3_CH4_CTRL_REG 0xB4
#define TAS675X_AC_LDG_CTRL_REG 0xB5
#define TAS675X_TWEETER_DETECT_CTRL_REG 0xB6
#define TAS675X_TWEETER_DETECT_THRESH_REG 0xB7
#define TAS675X_AC_LDG_FREQ_CTRL_REG 0xB8
#define TAS675X_TEMP_CH1_CH2_REG 0xBB
#define TAS675X_TEMP_CH3_CH4_REG 0xBC
#define TAS675X_WARN_OT_MAX_FLAG_REG 0xBD
/* DC Load Diagnostic Reports */
#define TAS675X_DC_LDG_REPORT_CH1_CH2_REG 0xC0
#define TAS675X_DC_LDG_REPORT_CH3_CH4_REG 0xC1
#define TAS675X_DC_LDG_RESULT_REG 0xC2
#define TAS675X_AC_LDG_REPORT_CH1_R_REG 0xC3
#define TAS675X_AC_LDG_REPORT_CH1_I_REG 0xC4
#define TAS675X_AC_LDG_REPORT_CH2_R_REG 0xC5
#define TAS675X_AC_LDG_REPORT_CH2_I_REG 0xC6
#define TAS675X_AC_LDG_REPORT_CH3_R_REG 0xC7
#define TAS675X_AC_LDG_REPORT_CH3_I_REG 0xC8
#define TAS675X_AC_LDG_REPORT_CH4_R_REG 0xC9
#define TAS675X_AC_LDG_REPORT_CH4_I_REG 0xCA
#define TAS675X_TWEETER_REPORT_REG 0xCB
/* RTLDG Impedance */
#define TAS675X_CH1_RTLDG_IMP_MSB_REG 0xD1
#define TAS675X_CH1_RTLDG_IMP_LSB_REG 0xD2
#define TAS675X_CH2_RTLDG_IMP_MSB_REG 0xD3
#define TAS675X_CH2_RTLDG_IMP_LSB_REG 0xD4
#define TAS675X_CH3_RTLDG_IMP_MSB_REG 0xD5
#define TAS675X_CH3_RTLDG_IMP_LSB_REG 0xD6
#define TAS675X_CH4_RTLDG_IMP_MSB_REG 0xD7
#define TAS675X_CH4_RTLDG_IMP_LSB_REG 0xD8
/* DC Load Diagnostic Resistance */
#define TAS675X_DC_LDG_DCR_MSB_REG 0xD9
#define TAS675X_CH1_DC_LDG_DCR_LSB_REG 0xDA
#define TAS675X_CH2_DC_LDG_DCR_LSB_REG 0xDB
#define TAS675X_CH3_DC_LDG_DCR_LSB_REG 0xDC
#define TAS675X_CH4_DC_LDG_DCR_LSB_REG 0xDD
/* Over-Temperature Warning */
#define TAS675X_OTW_CTRL_CH1_CH2_REG 0xE2
#define TAS675X_OTW_CTRL_CH3_CH4_REG 0xE3
/* RESET_REG (all bits auto-clear) */
#define TAS675X_DEVICE_RESET BIT(4)
#define TAS675X_FAULT_CLEAR BIT(3)
#define TAS675X_REGISTER_RESET BIT(0)
/* STATE_CTRL and STATE_REPORT — Channel state values */
#define TAS675X_STATE_DEEPSLEEP 0x00
#define TAS675X_STATE_LOAD_DIAG 0x01
#define TAS675X_STATE_SLEEP 0x02
#define TAS675X_STATE_HIZ 0x03
#define TAS675X_STATE_PLAY 0x04
/* Additional STATE_REPORT values */
#define TAS675X_STATE_FAULT 0x05
#define TAS675X_STATE_AUTOREC 0x06
/* Combined values for both channel pairs in one register */
#define TAS675X_STATE_DEEPSLEEP_BOTH \
(TAS675X_STATE_DEEPSLEEP | (TAS675X_STATE_DEEPSLEEP << 4))
#define TAS675X_STATE_LOAD_DIAG_BOTH \
(TAS675X_STATE_LOAD_DIAG | (TAS675X_STATE_LOAD_DIAG << 4))
#define TAS675X_STATE_SLEEP_BOTH \
(TAS675X_STATE_SLEEP | (TAS675X_STATE_SLEEP << 4))
#define TAS675X_STATE_HIZ_BOTH \
(TAS675X_STATE_HIZ | (TAS675X_STATE_HIZ << 4))
#define TAS675X_STATE_PLAY_BOTH \
(TAS675X_STATE_PLAY | (TAS675X_STATE_PLAY << 4))
#define TAS675X_STATE_FAULT_BOTH \
(TAS675X_STATE_FAULT | (TAS675X_STATE_FAULT << 4))
/* STATE_CTRL_CH1_CH2 / STATE_CTRL_CH3_CH4 — mute bits */
#define TAS675X_CH1_MUTE_BIT BIT(7)
#define TAS675X_CH2_MUTE_BIT BIT(3)
#define TAS675X_CH_MUTE_BOTH (TAS675X_CH1_MUTE_BIT | TAS675X_CH2_MUTE_BIT)
/* SCLK_INV_CTRL_REG */
#define TAS675X_SCLK_INV_TX_BIT BIT(5)
#define TAS675X_SCLK_INV_RX_BIT BIT(4)
#define TAS675X_SCLK_INV_MASK (TAS675X_SCLK_INV_TX_BIT | TAS675X_SCLK_INV_RX_BIT)
/* AUDIO_IF_CTRL_REG */
#define TAS675X_TDM_EN_BIT BIT(4)
#define TAS675X_SAP_FMT_MASK GENMASK(3, 2)
#define TAS675X_SAP_FMT_I2S (0x00 << 2)
#define TAS675X_SAP_FMT_TDM (0x01 << 2)
#define TAS675X_SAP_FMT_RIGHT_J (0x02 << 2)
#define TAS675X_SAP_FMT_LEFT_J (0x03 << 2)
#define TAS675X_FS_PULSE_MASK GENMASK(1, 0)
#define TAS675X_FS_PULSE_SHORT 0x01
/* SDIN_CTRL_REG */
#define TAS675X_SDIN_AUDIO_WL_MASK GENMASK(3, 2)
#define TAS675X_SDIN_LL_WL_MASK GENMASK(1, 0)
#define TAS675X_SDIN_WL_MASK (TAS675X_SDIN_AUDIO_WL_MASK | TAS675X_SDIN_LL_WL_MASK)
/* SDOUT_CTRL_REG */
#define TAS675X_SDOUT_SELECT_MASK GENMASK(7, 4)
#define TAS675X_SDOUT_SELECT_TDM_SDOUT1 0x00
#define TAS675X_SDOUT_SELECT_NON_TDM 0x10
#define TAS675X_SDOUT_VP_WL_MASK GENMASK(3, 2)
#define TAS675X_SDOUT_IS_WL_MASK GENMASK(1, 0)
#define TAS675X_SDOUT_WL_MASK (TAS675X_SDOUT_VP_WL_MASK | TAS675X_SDOUT_IS_WL_MASK)
/* SDOUT_EN_REG */
#define TAS675X_SDOUT_NON_TDM_SEL_MASK GENMASK(5, 4)
#define TAS675X_SDOUT_NON_TDM_SEL_VPREDICT (0x0 << 4)
#define TAS675X_SDOUT_NON_TDM_SEL_ISENSE (0x1 << 4)
#define TAS675X_SDOUT_EN_VPREDICT BIT(0)
#define TAS675X_SDOUT_EN_ISENSE BIT(1)
#define TAS675X_SDOUT_EN_NON_TDM_ALL GENMASK(1, 0)
/* Word length values (shared by SDIN_CTRL and SDOUT_CTRL) */
#define TAS675X_WL_16BIT 0x00
#define TAS675X_WL_20BIT 0x01
#define TAS675X_WL_24BIT 0x02
#define TAS675X_WL_32BIT 0x03
/* SDIN_OFFSET_MSB_REG */
#define TAS675X_SDIN_AUDIO_OFF_MSB_MASK GENMASK(7, 6)
#define TAS675X_SDIN_LL_OFF_MSB_MASK GENMASK(5, 4)
/* SDOUT_OFFSET_MSB_REG */
#define TAS675X_SDOUT_VP_OFF_MSB_MASK GENMASK(7, 6)
#define TAS675X_SDOUT_IS_OFF_MSB_MASK GENMASK(5, 4)
/* RTLDG_EN_REG */
#define TAS675X_RTLDG_CLIP_MASK_BIT BIT(4)
#define TAS675X_RTLDG_CH_EN_MASK GENMASK(3, 0)
/* DC_LDG_CTRL_REG */
#define TAS675X_LDG_ABORT_BIT BIT(7)
#define TAS675X_LDG_BUFFER_WAIT_MASK GENMASK(6, 5)
#define TAS675X_LDG_WAIT_BYPASS_BIT BIT(2)
#define TAS675X_SLOL_DISABLE_BIT BIT(1)
#define TAS675X_LDG_BYPASS_BIT BIT(0)
/* DC_LDG_TIME_CTRL_REG */
#define TAS675X_LDG_RAMP_SLOL_MASK GENMASK(7, 6)
#define TAS675X_LDG_SETTLING_SLOL_MASK GENMASK(5, 4)
#define TAS675X_LDG_RAMP_S2PG_MASK GENMASK(3, 2)
#define TAS675X_LDG_SETTLING_S2PG_MASK GENMASK(1, 0)
/* AC_LDG_CTRL_REG */
#define TAS675X_AC_DIAG_GAIN_BIT BIT(4)
#define TAS675X_AC_DIAG_START_MASK GENMASK(3, 0)
/* DC_LDG_RESULT_REG */
#define TAS675X_DC_LDG_LO_RESULT_MASK GENMASK(7, 4)
#define TAS675X_DC_LDG_PASS_MASK GENMASK(3, 0)
/* Load Diagnostics Timing Constants */
#define TAS675X_POLL_INTERVAL_US 10000
#define TAS675X_STATE_TRANSITION_TIMEOUT_US 50000
#define TAS675X_DC_LDG_TIMEOUT_US 300000
#define TAS675X_AC_LDG_TIMEOUT_US 400000
/* GPIO_CTRL_REG */
#define TAS675X_GPIO1_OUTPUT_EN BIT(7)
#define TAS675X_GPIO2_OUTPUT_EN BIT(6)
#define TAS675X_GPIO_CTRL_RSTVAL 0x22
/* GPIO output select values */
#define TAS675X_GPIO_SEL_LOW 0x00
#define TAS675X_GPIO_SEL_AUTO_MUTE_ALL 0x02
#define TAS675X_GPIO_SEL_AUTO_MUTE_CH4 0x03
#define TAS675X_GPIO_SEL_AUTO_MUTE_CH3 0x04
#define TAS675X_GPIO_SEL_AUTO_MUTE_CH2 0x05
#define TAS675X_GPIO_SEL_AUTO_MUTE_CH1 0x06
#define TAS675X_GPIO_SEL_SDOUT2 0x08
#define TAS675X_GPIO_SEL_SDOUT1 0x09
#define TAS675X_GPIO_SEL_WARN 0x0A
#define TAS675X_GPIO_SEL_FAULT 0x0B
#define TAS675X_GPIO_SEL_CLOCK_SYNC 0x0E
#define TAS675X_GPIO_SEL_INVALID_CLK 0x0F
#define TAS675X_GPIO_SEL_HIGH 0x13
/* GPIO input function encoding (flag bit | function ID) */
#define TAS675X_GPIO_FUNC_INPUT 0x100
/* Input Function IDs */
#define TAS675X_GPIO_IN_ID_MUTE 0
#define TAS675X_GPIO_IN_ID_PHASE_SYNC 1
#define TAS675X_GPIO_IN_ID_SDIN2 2
#define TAS675X_GPIO_IN_ID_DEEP_SLEEP 3
#define TAS675X_GPIO_IN_ID_HIZ 4
#define TAS675X_GPIO_IN_ID_PLAY 5
#define TAS675X_GPIO_IN_ID_SLEEP 6
#define TAS675X_GPIO_IN_NUM 7
#define TAS675X_GPIO_IN_MUTE (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_MUTE)
#define TAS675X_GPIO_IN_PHASE_SYNC \
(TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_PHASE_SYNC)
#define TAS675X_GPIO_IN_SDIN2 (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_SDIN2)
#define TAS675X_GPIO_IN_DEEP_SLEEP \
(TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_DEEP_SLEEP)
#define TAS675X_GPIO_IN_HIZ (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_HIZ)
#define TAS675X_GPIO_IN_PLAY (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_PLAY)
#define TAS675X_GPIO_IN_SLEEP (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_SLEEP)
/* GPIO input 3-bit mux field masks */
#define TAS675X_GPIO_IN_MUTE_MASK GENMASK(2, 0)
#define TAS675X_GPIO_IN_SYNC_MASK GENMASK(2, 0)
#define TAS675X_GPIO_IN_SDIN2_MASK GENMASK(6, 4)
#define TAS675X_GPIO_IN_DEEP_SLEEP_MASK GENMASK(6, 4)
#define TAS675X_GPIO_IN_HIZ_MASK GENMASK(2, 0)
#define TAS675X_GPIO_IN_PLAY_MASK GENMASK(6, 4)
#define TAS675X_GPIO_IN_SLEEP_MASK GENMASK(2, 0)
/* Book addresses for tas675x_select_book() */
#define TAS675X_BOOK_DEFAULT 0x00
#define TAS675X_BOOK_DSP 0x8C
/* DSP memory addresses (DSP Book) */
#define TAS675X_DSP_PAGE_RTLDG 0x22
#define TAS675X_DSP_RTLDG_OL_THRESH_REG 0x98
#define TAS675X_DSP_RTLDG_SL_THRESH_REG 0x9C
#define TAS675X_DSP_PARAM_ID_OL_THRESH 0
#define TAS675X_DSP_PARAM_ID_SL_THRESH 1
/* Setup Mode Entry/Exit*/
#define TAS675X_SETUP_ENTER_VAL1 0x11
#define TAS675X_SETUP_ENTER_VAL2 0xFF
#define TAS675X_SETUP_EXIT_VAL 0x00
#endif /* __TAS675X_H__ */
|