xref: /linux/sound/soc/codecs/tas675x.h (revision 0eaed89c18aeedf0898baf2dbf5ff027c6795152)
1*133c81f8SSen Wang /* SPDX-License-Identifier: GPL-2.0 */
2*133c81f8SSen Wang /*
3*133c81f8SSen Wang  * ALSA SoC Texas Instruments TAS675x Quad-Channel Audio Amplifier
4*133c81f8SSen Wang  *
5*133c81f8SSen Wang  * Copyright (C) 2026 Texas Instruments Incorporated - https://www.ti.com/
6*133c81f8SSen Wang  *	Author: Sen Wang <sen@ti.com>
7*133c81f8SSen Wang  */
8*133c81f8SSen Wang 
9*133c81f8SSen Wang #ifndef __TAS675X_H__
10*133c81f8SSen Wang #define __TAS675X_H__
11*133c81f8SSen Wang 
12*133c81f8SSen Wang /*
13*133c81f8SSen Wang  * Book 0, Page 0 — Register Addresses
14*133c81f8SSen Wang  */
15*133c81f8SSen Wang 
16*133c81f8SSen Wang #define TAS675X_PAGE_SIZE                    256
17*133c81f8SSen Wang #define TAS675X_PAGE_REG(page, reg)  ((page) * TAS675X_PAGE_SIZE + (reg))
18*133c81f8SSen Wang 
19*133c81f8SSen Wang /* Page Control & Basic Config */
20*133c81f8SSen Wang #define TAS675X_PAGE_CTRL_REG                0x00
21*133c81f8SSen Wang #define TAS675X_RESET_REG                    0x01
22*133c81f8SSen Wang #define TAS675X_OUTPUT_CTRL_REG              0x02
23*133c81f8SSen Wang #define TAS675X_STATE_CTRL_CH1_CH2_REG       0x03
24*133c81f8SSen Wang #define TAS675X_STATE_CTRL_CH3_CH4_REG       0x04
25*133c81f8SSen Wang #define TAS675X_ISENSE_CTRL_REG              0x05
26*133c81f8SSen Wang #define TAS675X_DC_DETECT_CTRL_REG           0x06
27*133c81f8SSen Wang 
28*133c81f8SSen Wang /* Serial Audio Port */
29*133c81f8SSen Wang #define TAS675X_SCLK_INV_CTRL_REG            0x20
30*133c81f8SSen Wang #define TAS675X_AUDIO_IF_CTRL_REG            0x21
31*133c81f8SSen Wang #define TAS675X_SDIN_CTRL_REG                0x23
32*133c81f8SSen Wang #define TAS675X_SDOUT_CTRL_REG               0x25
33*133c81f8SSen Wang #define TAS675X_SDIN_OFFSET_MSB_REG          0x27
34*133c81f8SSen Wang #define TAS675X_SDIN_AUDIO_OFFSET_REG        0x28
35*133c81f8SSen Wang #define TAS675X_SDIN_LL_OFFSET_REG           0x29
36*133c81f8SSen Wang #define TAS675X_SDIN_CH_SWAP_REG             0x2A
37*133c81f8SSen Wang #define TAS675X_SDOUT_OFFSET_MSB_REG         0x2C
38*133c81f8SSen Wang #define TAS675X_VPREDICT_OFFSET_REG          0x2D
39*133c81f8SSen Wang #define TAS675X_ISENSE_OFFSET_REG            0x2E
40*133c81f8SSen Wang #define TAS675X_SDOUT_EN_REG                 0x31
41*133c81f8SSen Wang #define TAS675X_LL_EN_REG                    0x32
42*133c81f8SSen Wang 
43*133c81f8SSen Wang /* DSP & Core Audio Control */
44*133c81f8SSen Wang #define TAS675X_RTLDG_EN_REG                 0x37
45*133c81f8SSen Wang #define TAS675X_DC_BLOCK_BYP_REG             0x39
46*133c81f8SSen Wang #define TAS675X_DSP_CTRL_REG                 0x3A
47*133c81f8SSen Wang #define TAS675X_PAGE_AUTO_INC_REG            0x3B
48*133c81f8SSen Wang 
49*133c81f8SSen Wang /* Volume & Mute */
50*133c81f8SSen Wang #define TAS675X_DIG_VOL_CH1_REG              0x40
51*133c81f8SSen Wang #define TAS675X_DIG_VOL_CH2_REG              0x41
52*133c81f8SSen Wang #define TAS675X_DIG_VOL_CH3_REG              0x42
53*133c81f8SSen Wang #define TAS675X_DIG_VOL_CH4_REG              0x43
54*133c81f8SSen Wang #define TAS675X_DIG_VOL_RAMP_CTRL_REG        0x44
55*133c81f8SSen Wang #define TAS675X_DIG_VOL_COMBINE_CTRL_REG     0x46
56*133c81f8SSen Wang #define TAS675X_AUTO_MUTE_EN_REG             0x47
57*133c81f8SSen Wang #define TAS675X_AUTO_MUTE_TIMING_CH1_CH2_REG 0x48
58*133c81f8SSen Wang #define TAS675X_AUTO_MUTE_TIMING_CH3_CH4_REG 0x49
59*133c81f8SSen Wang 
60*133c81f8SSen Wang /* Analog Gain & Power Stage */
61*133c81f8SSen Wang #define TAS675X_ANALOG_GAIN_CH1_CH2_REG      0x4A
62*133c81f8SSen Wang #define TAS675X_ANALOG_GAIN_CH3_CH4_REG      0x4B
63*133c81f8SSen Wang #define TAS675X_ANALOG_GAIN_RAMP_CTRL_REG    0x4E
64*133c81f8SSen Wang #define TAS675X_PULSE_INJECTION_EN_REG       0x52
65*133c81f8SSen Wang #define TAS675X_CBC_CTRL_REG                 0x54
66*133c81f8SSen Wang #define TAS675X_CURRENT_LIMIT_CTRL_REG       0x55
67*133c81f8SSen Wang #define TAS675X_DAC_CLK_REG                  0x5A
68*133c81f8SSen Wang #define TAS675X_ISENSE_CAL_REG               0x5B
69*133c81f8SSen Wang 
70*133c81f8SSen Wang /* Spread Spectrum & PWM Phase */
71*133c81f8SSen Wang #define TAS675X_PWM_PHASE_CTRL_REG           0x60
72*133c81f8SSen Wang #define TAS675X_SS_CTRL_REG                  0x61
73*133c81f8SSen Wang #define TAS675X_SS_RANGE_CTRL_REG            0x62
74*133c81f8SSen Wang #define TAS675X_SS_DWELL_CTRL_REG            0x66
75*133c81f8SSen Wang #define TAS675X_RAMP_PHASE_CTRL_GPO_REG      0x68
76*133c81f8SSen Wang #define TAS675X_PWM_PHASE_M_CTRL_CH1_REG     0x69
77*133c81f8SSen Wang #define TAS675X_PWM_PHASE_M_CTRL_CH2_REG     0x6A
78*133c81f8SSen Wang #define TAS675X_PWM_PHASE_M_CTRL_CH3_REG     0x6B
79*133c81f8SSen Wang #define TAS675X_PWM_PHASE_M_CTRL_CH4_REG     0x6C
80*133c81f8SSen Wang 
81*133c81f8SSen Wang /* Status & Reporting */
82*133c81f8SSen Wang #define TAS675X_AUTO_MUTE_STATUS_REG         0x71
83*133c81f8SSen Wang #define TAS675X_STATE_REPORT_CH1_CH2_REG     0x72
84*133c81f8SSen Wang #define TAS675X_STATE_REPORT_CH3_CH4_REG     0x73
85*133c81f8SSen Wang #define TAS675X_PVDD_SENSE_REG               0x74
86*133c81f8SSen Wang #define TAS675X_TEMP_GLOBAL_REG              0x75
87*133c81f8SSen Wang #define TAS675X_FS_MON_REG                   0x76
88*133c81f8SSen Wang #define TAS675X_SCLK_MON_REG                 0x77
89*133c81f8SSen Wang #define TAS675X_REPORT_ROUTING_1_REG         0x7C
90*133c81f8SSen Wang 
91*133c81f8SSen Wang /* Memory Paging & Book Control */
92*133c81f8SSen Wang #define TAS675X_SETUP_REG1                   0x7D
93*133c81f8SSen Wang #define TAS675X_SETUP_REG2                   0x7E
94*133c81f8SSen Wang #define TAS675X_BOOK_CTRL_REG                0x7F
95*133c81f8SSen Wang 
96*133c81f8SSen Wang /* Fault Status */
97*133c81f8SSen Wang #define TAS675X_POWER_FAULT_STATUS_1_REG     0x7D
98*133c81f8SSen Wang #define TAS675X_POWER_FAULT_STATUS_2_REG     0x80
99*133c81f8SSen Wang #define TAS675X_OT_FAULT_REG                 0x81
100*133c81f8SSen Wang #define TAS675X_OTW_STATUS_REG               0x82
101*133c81f8SSen Wang #define TAS675X_CLIP_WARN_STATUS_REG         0x83
102*133c81f8SSen Wang #define TAS675X_CBC_WARNING_STATUS_REG       0x85
103*133c81f8SSen Wang 
104*133c81f8SSen Wang /* Latched Fault Registers */
105*133c81f8SSen Wang #define TAS675X_POWER_FAULT_LATCHED_REG      0x86
106*133c81f8SSen Wang #define TAS675X_OTSD_LATCHED_REG             0x87
107*133c81f8SSen Wang #define TAS675X_OTW_LATCHED_REG              0x88
108*133c81f8SSen Wang #define TAS675X_CLIP_WARN_LATCHED_REG        0x89
109*133c81f8SSen Wang #define TAS675X_CLK_FAULT_LATCHED_REG        0x8A
110*133c81f8SSen Wang #define TAS675X_RTLDG_OL_SL_FAULT_LATCHED_REG 0x8B
111*133c81f8SSen Wang #define TAS675X_CBC_FAULT_WARN_LATCHED_REG   0x8D
112*133c81f8SSen Wang #define TAS675X_OC_DC_FAULT_LATCHED_REG      0x8E
113*133c81f8SSen Wang #define TAS675X_OTSD_RECOVERY_EN_REG         0x8F
114*133c81f8SSen Wang 
115*133c81f8SSen Wang /* Protection & Routing Controls */
116*133c81f8SSen Wang #define TAS675X_REPORT_ROUTING_2_REG         0x90
117*133c81f8SSen Wang #define TAS675X_REPORT_ROUTING_3_REG         0x91
118*133c81f8SSen Wang #define TAS675X_REPORT_ROUTING_4_REG         0x92
119*133c81f8SSen Wang #define TAS675X_CLIP_DETECT_CTRL_REG         0x93
120*133c81f8SSen Wang #define TAS675X_REPORT_ROUTING_5_REG         0x94
121*133c81f8SSen Wang 
122*133c81f8SSen Wang /* GPIO Pin Configuration */
123*133c81f8SSen Wang #define TAS675X_GPIO1_OUTPUT_SEL_REG         0x95
124*133c81f8SSen Wang #define TAS675X_GPIO2_OUTPUT_SEL_REG         0x96
125*133c81f8SSen Wang #define TAS675X_GPIO_INPUT_SLEEP_HIZ_REG     0x9B
126*133c81f8SSen Wang #define TAS675X_GPIO_INPUT_PLAY_SLEEP_REG    0x9C
127*133c81f8SSen Wang #define TAS675X_GPIO_INPUT_MUTE_REG          0x9D
128*133c81f8SSen Wang #define TAS675X_GPIO_INPUT_SYNC_REG          0x9E
129*133c81f8SSen Wang #define TAS675X_GPIO_INPUT_SDIN2_REG         0x9F
130*133c81f8SSen Wang #define TAS675X_GPIO_CTRL_REG                0xA0
131*133c81f8SSen Wang #define TAS675X_GPIO_INVERT_REG              0xA1
132*133c81f8SSen Wang 
133*133c81f8SSen Wang /* Load Diagnostics Config */
134*133c81f8SSen Wang #define TAS675X_DC_LDG_CTRL_REG              0xB0
135*133c81f8SSen Wang #define TAS675X_DC_LDG_LO_CTRL_REG           0xB1
136*133c81f8SSen Wang #define TAS675X_DC_LDG_TIME_CTRL_REG         0xB2
137*133c81f8SSen Wang #define TAS675X_DC_LDG_SL_CH1_CH2_CTRL_REG   0xB3
138*133c81f8SSen Wang #define TAS675X_DC_LDG_SL_CH3_CH4_CTRL_REG   0xB4
139*133c81f8SSen Wang #define TAS675X_AC_LDG_CTRL_REG              0xB5
140*133c81f8SSen Wang #define TAS675X_TWEETER_DETECT_CTRL_REG      0xB6
141*133c81f8SSen Wang #define TAS675X_TWEETER_DETECT_THRESH_REG    0xB7
142*133c81f8SSen Wang #define TAS675X_AC_LDG_FREQ_CTRL_REG         0xB8
143*133c81f8SSen Wang #define TAS675X_TEMP_CH1_CH2_REG             0xBB
144*133c81f8SSen Wang #define TAS675X_TEMP_CH3_CH4_REG             0xBC
145*133c81f8SSen Wang #define TAS675X_WARN_OT_MAX_FLAG_REG         0xBD
146*133c81f8SSen Wang 
147*133c81f8SSen Wang /* DC Load Diagnostic Reports */
148*133c81f8SSen Wang #define TAS675X_DC_LDG_REPORT_CH1_CH2_REG    0xC0
149*133c81f8SSen Wang #define TAS675X_DC_LDG_REPORT_CH3_CH4_REG    0xC1
150*133c81f8SSen Wang #define TAS675X_DC_LDG_RESULT_REG            0xC2
151*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH1_R_REG      0xC3
152*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH1_I_REG      0xC4
153*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH2_R_REG      0xC5
154*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH2_I_REG      0xC6
155*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH3_R_REG      0xC7
156*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH3_I_REG      0xC8
157*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH4_R_REG      0xC9
158*133c81f8SSen Wang #define TAS675X_AC_LDG_REPORT_CH4_I_REG      0xCA
159*133c81f8SSen Wang #define TAS675X_TWEETER_REPORT_REG           0xCB
160*133c81f8SSen Wang 
161*133c81f8SSen Wang /* RTLDG Impedance */
162*133c81f8SSen Wang #define TAS675X_CH1_RTLDG_IMP_MSB_REG        0xD1
163*133c81f8SSen Wang #define TAS675X_CH1_RTLDG_IMP_LSB_REG        0xD2
164*133c81f8SSen Wang #define TAS675X_CH2_RTLDG_IMP_MSB_REG        0xD3
165*133c81f8SSen Wang #define TAS675X_CH2_RTLDG_IMP_LSB_REG        0xD4
166*133c81f8SSen Wang #define TAS675X_CH3_RTLDG_IMP_MSB_REG        0xD5
167*133c81f8SSen Wang #define TAS675X_CH3_RTLDG_IMP_LSB_REG        0xD6
168*133c81f8SSen Wang #define TAS675X_CH4_RTLDG_IMP_MSB_REG        0xD7
169*133c81f8SSen Wang #define TAS675X_CH4_RTLDG_IMP_LSB_REG        0xD8
170*133c81f8SSen Wang 
171*133c81f8SSen Wang /* DC Load Diagnostic Resistance */
172*133c81f8SSen Wang #define TAS675X_DC_LDG_DCR_MSB_REG           0xD9
173*133c81f8SSen Wang #define TAS675X_CH1_DC_LDG_DCR_LSB_REG       0xDA
174*133c81f8SSen Wang #define TAS675X_CH2_DC_LDG_DCR_LSB_REG       0xDB
175*133c81f8SSen Wang #define TAS675X_CH3_DC_LDG_DCR_LSB_REG       0xDC
176*133c81f8SSen Wang #define TAS675X_CH4_DC_LDG_DCR_LSB_REG       0xDD
177*133c81f8SSen Wang 
178*133c81f8SSen Wang /* Over-Temperature Warning */
179*133c81f8SSen Wang #define TAS675X_OTW_CTRL_CH1_CH2_REG         0xE2
180*133c81f8SSen Wang #define TAS675X_OTW_CTRL_CH3_CH4_REG         0xE3
181*133c81f8SSen Wang 
182*133c81f8SSen Wang /* RESET_REG (all bits auto-clear) */
183*133c81f8SSen Wang #define TAS675X_DEVICE_RESET                 BIT(4)
184*133c81f8SSen Wang #define TAS675X_FAULT_CLEAR                  BIT(3)
185*133c81f8SSen Wang #define TAS675X_REGISTER_RESET               BIT(0)
186*133c81f8SSen Wang 
187*133c81f8SSen Wang /* STATE_CTRL and STATE_REPORT — Channel state values */
188*133c81f8SSen Wang #define TAS675X_STATE_DEEPSLEEP              0x00
189*133c81f8SSen Wang #define TAS675X_STATE_LOAD_DIAG              0x01
190*133c81f8SSen Wang #define TAS675X_STATE_SLEEP                  0x02
191*133c81f8SSen Wang #define TAS675X_STATE_HIZ                    0x03
192*133c81f8SSen Wang #define TAS675X_STATE_PLAY                   0x04
193*133c81f8SSen Wang 
194*133c81f8SSen Wang /* Additional STATE_REPORT values */
195*133c81f8SSen Wang #define TAS675X_STATE_FAULT                  0x05
196*133c81f8SSen Wang #define TAS675X_STATE_AUTOREC                0x06
197*133c81f8SSen Wang 
198*133c81f8SSen Wang /* Combined values for both channel pairs in one register */
199*133c81f8SSen Wang #define TAS675X_STATE_DEEPSLEEP_BOTH \
200*133c81f8SSen Wang 	(TAS675X_STATE_DEEPSLEEP | (TAS675X_STATE_DEEPSLEEP << 4))
201*133c81f8SSen Wang #define TAS675X_STATE_LOAD_DIAG_BOTH \
202*133c81f8SSen Wang 	(TAS675X_STATE_LOAD_DIAG | (TAS675X_STATE_LOAD_DIAG << 4))
203*133c81f8SSen Wang #define TAS675X_STATE_SLEEP_BOTH \
204*133c81f8SSen Wang 	(TAS675X_STATE_SLEEP | (TAS675X_STATE_SLEEP << 4))
205*133c81f8SSen Wang #define TAS675X_STATE_HIZ_BOTH \
206*133c81f8SSen Wang 	(TAS675X_STATE_HIZ | (TAS675X_STATE_HIZ << 4))
207*133c81f8SSen Wang #define TAS675X_STATE_PLAY_BOTH \
208*133c81f8SSen Wang 	(TAS675X_STATE_PLAY | (TAS675X_STATE_PLAY << 4))
209*133c81f8SSen Wang #define TAS675X_STATE_FAULT_BOTH \
210*133c81f8SSen Wang 	(TAS675X_STATE_FAULT | (TAS675X_STATE_FAULT << 4))
211*133c81f8SSen Wang 
212*133c81f8SSen Wang /* STATE_CTRL_CH1_CH2 / STATE_CTRL_CH3_CH4 — mute bits */
213*133c81f8SSen Wang #define TAS675X_CH1_MUTE_BIT                 BIT(7)
214*133c81f8SSen Wang #define TAS675X_CH2_MUTE_BIT                 BIT(3)
215*133c81f8SSen Wang #define TAS675X_CH_MUTE_BOTH                 (TAS675X_CH1_MUTE_BIT | TAS675X_CH2_MUTE_BIT)
216*133c81f8SSen Wang 
217*133c81f8SSen Wang /* SCLK_INV_CTRL_REG */
218*133c81f8SSen Wang #define TAS675X_SCLK_INV_TX_BIT             BIT(5)
219*133c81f8SSen Wang #define TAS675X_SCLK_INV_RX_BIT             BIT(4)
220*133c81f8SSen Wang #define TAS675X_SCLK_INV_MASK               (TAS675X_SCLK_INV_TX_BIT | TAS675X_SCLK_INV_RX_BIT)
221*133c81f8SSen Wang 
222*133c81f8SSen Wang /* AUDIO_IF_CTRL_REG */
223*133c81f8SSen Wang #define TAS675X_TDM_EN_BIT                   BIT(4)
224*133c81f8SSen Wang #define TAS675X_SAP_FMT_MASK                 GENMASK(3, 2)
225*133c81f8SSen Wang #define TAS675X_SAP_FMT_I2S                  (0x00 << 2)
226*133c81f8SSen Wang #define TAS675X_SAP_FMT_TDM                  (0x01 << 2)
227*133c81f8SSen Wang #define TAS675X_SAP_FMT_RIGHT_J              (0x02 << 2)
228*133c81f8SSen Wang #define TAS675X_SAP_FMT_LEFT_J               (0x03 << 2)
229*133c81f8SSen Wang #define TAS675X_FS_PULSE_MASK                GENMASK(1, 0)
230*133c81f8SSen Wang #define TAS675X_FS_PULSE_SHORT               0x01
231*133c81f8SSen Wang 
232*133c81f8SSen Wang /* SDIN_CTRL_REG */
233*133c81f8SSen Wang #define TAS675X_SDIN_AUDIO_WL_MASK           GENMASK(3, 2)
234*133c81f8SSen Wang #define TAS675X_SDIN_LL_WL_MASK              GENMASK(1, 0)
235*133c81f8SSen Wang #define TAS675X_SDIN_WL_MASK                 (TAS675X_SDIN_AUDIO_WL_MASK | TAS675X_SDIN_LL_WL_MASK)
236*133c81f8SSen Wang 
237*133c81f8SSen Wang /* SDOUT_CTRL_REG */
238*133c81f8SSen Wang #define TAS675X_SDOUT_SELECT_MASK            GENMASK(7, 4)
239*133c81f8SSen Wang #define TAS675X_SDOUT_SELECT_TDM_SDOUT1      0x00
240*133c81f8SSen Wang #define TAS675X_SDOUT_SELECT_NON_TDM         0x10
241*133c81f8SSen Wang #define TAS675X_SDOUT_VP_WL_MASK             GENMASK(3, 2)
242*133c81f8SSen Wang #define TAS675X_SDOUT_IS_WL_MASK             GENMASK(1, 0)
243*133c81f8SSen Wang #define TAS675X_SDOUT_WL_MASK                (TAS675X_SDOUT_VP_WL_MASK | TAS675X_SDOUT_IS_WL_MASK)
244*133c81f8SSen Wang 
245*133c81f8SSen Wang /* SDOUT_EN_REG */
246*133c81f8SSen Wang #define TAS675X_SDOUT_NON_TDM_SEL_MASK      GENMASK(5, 4)
247*133c81f8SSen Wang #define TAS675X_SDOUT_NON_TDM_SEL_VPREDICT  (0x0 << 4)
248*133c81f8SSen Wang #define TAS675X_SDOUT_NON_TDM_SEL_ISENSE    (0x1 << 4)
249*133c81f8SSen Wang #define TAS675X_SDOUT_EN_VPREDICT           BIT(0)
250*133c81f8SSen Wang #define TAS675X_SDOUT_EN_ISENSE             BIT(1)
251*133c81f8SSen Wang #define TAS675X_SDOUT_EN_NON_TDM_ALL        GENMASK(1, 0)
252*133c81f8SSen Wang 
253*133c81f8SSen Wang /* Word length values (shared by SDIN_CTRL and SDOUT_CTRL) */
254*133c81f8SSen Wang #define TAS675X_WL_16BIT                     0x00
255*133c81f8SSen Wang #define TAS675X_WL_20BIT                     0x01
256*133c81f8SSen Wang #define TAS675X_WL_24BIT                     0x02
257*133c81f8SSen Wang #define TAS675X_WL_32BIT                     0x03
258*133c81f8SSen Wang 
259*133c81f8SSen Wang /* SDIN_OFFSET_MSB_REG */
260*133c81f8SSen Wang #define TAS675X_SDIN_AUDIO_OFF_MSB_MASK      GENMASK(7, 6)
261*133c81f8SSen Wang #define TAS675X_SDIN_LL_OFF_MSB_MASK         GENMASK(5, 4)
262*133c81f8SSen Wang 
263*133c81f8SSen Wang /* SDOUT_OFFSET_MSB_REG */
264*133c81f8SSen Wang #define TAS675X_SDOUT_VP_OFF_MSB_MASK        GENMASK(7, 6)
265*133c81f8SSen Wang #define TAS675X_SDOUT_IS_OFF_MSB_MASK        GENMASK(5, 4)
266*133c81f8SSen Wang 
267*133c81f8SSen Wang /* RTLDG_EN_REG */
268*133c81f8SSen Wang #define TAS675X_RTLDG_CLIP_MASK_BIT          BIT(4)
269*133c81f8SSen Wang #define TAS675X_RTLDG_CH_EN_MASK             GENMASK(3, 0)
270*133c81f8SSen Wang 
271*133c81f8SSen Wang /* DC_LDG_CTRL_REG */
272*133c81f8SSen Wang #define TAS675X_LDG_ABORT_BIT                BIT(7)
273*133c81f8SSen Wang #define TAS675X_LDG_BUFFER_WAIT_MASK         GENMASK(6, 5)
274*133c81f8SSen Wang #define TAS675X_LDG_WAIT_BYPASS_BIT          BIT(2)
275*133c81f8SSen Wang #define TAS675X_SLOL_DISABLE_BIT             BIT(1)
276*133c81f8SSen Wang #define TAS675X_LDG_BYPASS_BIT               BIT(0)
277*133c81f8SSen Wang 
278*133c81f8SSen Wang /* DC_LDG_TIME_CTRL_REG */
279*133c81f8SSen Wang #define TAS675X_LDG_RAMP_SLOL_MASK           GENMASK(7, 6)
280*133c81f8SSen Wang #define TAS675X_LDG_SETTLING_SLOL_MASK       GENMASK(5, 4)
281*133c81f8SSen Wang #define TAS675X_LDG_RAMP_S2PG_MASK           GENMASK(3, 2)
282*133c81f8SSen Wang #define TAS675X_LDG_SETTLING_S2PG_MASK       GENMASK(1, 0)
283*133c81f8SSen Wang 
284*133c81f8SSen Wang /* AC_LDG_CTRL_REG */
285*133c81f8SSen Wang #define TAS675X_AC_DIAG_GAIN_BIT             BIT(4)
286*133c81f8SSen Wang #define TAS675X_AC_DIAG_START_MASK           GENMASK(3, 0)
287*133c81f8SSen Wang 
288*133c81f8SSen Wang /* DC_LDG_RESULT_REG */
289*133c81f8SSen Wang #define TAS675X_DC_LDG_LO_RESULT_MASK        GENMASK(7, 4)
290*133c81f8SSen Wang #define TAS675X_DC_LDG_PASS_MASK             GENMASK(3, 0)
291*133c81f8SSen Wang 
292*133c81f8SSen Wang /* Load Diagnostics Timing Constants */
293*133c81f8SSen Wang #define TAS675X_POLL_INTERVAL_US             10000
294*133c81f8SSen Wang #define TAS675X_STATE_TRANSITION_TIMEOUT_US  50000
295*133c81f8SSen Wang #define TAS675X_DC_LDG_TIMEOUT_US            300000
296*133c81f8SSen Wang #define TAS675X_AC_LDG_TIMEOUT_US            400000
297*133c81f8SSen Wang 
298*133c81f8SSen Wang /* GPIO_CTRL_REG */
299*133c81f8SSen Wang #define TAS675X_GPIO1_OUTPUT_EN              BIT(7)
300*133c81f8SSen Wang #define TAS675X_GPIO2_OUTPUT_EN              BIT(6)
301*133c81f8SSen Wang #define TAS675X_GPIO_CTRL_RSTVAL             0x22
302*133c81f8SSen Wang 
303*133c81f8SSen Wang /* GPIO output select values */
304*133c81f8SSen Wang #define TAS675X_GPIO_SEL_LOW                 0x00
305*133c81f8SSen Wang #define TAS675X_GPIO_SEL_AUTO_MUTE_ALL       0x02
306*133c81f8SSen Wang #define TAS675X_GPIO_SEL_AUTO_MUTE_CH4       0x03
307*133c81f8SSen Wang #define TAS675X_GPIO_SEL_AUTO_MUTE_CH3       0x04
308*133c81f8SSen Wang #define TAS675X_GPIO_SEL_AUTO_MUTE_CH2       0x05
309*133c81f8SSen Wang #define TAS675X_GPIO_SEL_AUTO_MUTE_CH1       0x06
310*133c81f8SSen Wang #define TAS675X_GPIO_SEL_SDOUT2              0x08
311*133c81f8SSen Wang #define TAS675X_GPIO_SEL_SDOUT1              0x09
312*133c81f8SSen Wang #define TAS675X_GPIO_SEL_WARN                0x0A
313*133c81f8SSen Wang #define TAS675X_GPIO_SEL_FAULT               0x0B
314*133c81f8SSen Wang #define TAS675X_GPIO_SEL_CLOCK_SYNC          0x0E
315*133c81f8SSen Wang #define TAS675X_GPIO_SEL_INVALID_CLK         0x0F
316*133c81f8SSen Wang #define TAS675X_GPIO_SEL_HIGH                0x13
317*133c81f8SSen Wang 
318*133c81f8SSen Wang /* GPIO input function encoding (flag bit | function ID) */
319*133c81f8SSen Wang #define TAS675X_GPIO_FUNC_INPUT              0x100
320*133c81f8SSen Wang 
321*133c81f8SSen Wang /* Input Function IDs */
322*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_MUTE              0
323*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_PHASE_SYNC        1
324*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_SDIN2             2
325*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_DEEP_SLEEP        3
326*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_HIZ               4
327*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_PLAY              5
328*133c81f8SSen Wang #define TAS675X_GPIO_IN_ID_SLEEP             6
329*133c81f8SSen Wang #define TAS675X_GPIO_IN_NUM                  7
330*133c81f8SSen Wang 
331*133c81f8SSen Wang #define TAS675X_GPIO_IN_MUTE                 (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_MUTE)
332*133c81f8SSen Wang #define TAS675X_GPIO_IN_PHASE_SYNC \
333*133c81f8SSen Wang 	(TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_PHASE_SYNC)
334*133c81f8SSen Wang #define TAS675X_GPIO_IN_SDIN2                (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_SDIN2)
335*133c81f8SSen Wang #define TAS675X_GPIO_IN_DEEP_SLEEP \
336*133c81f8SSen Wang 	(TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_DEEP_SLEEP)
337*133c81f8SSen Wang #define TAS675X_GPIO_IN_HIZ                  (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_HIZ)
338*133c81f8SSen Wang #define TAS675X_GPIO_IN_PLAY                 (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_PLAY)
339*133c81f8SSen Wang #define TAS675X_GPIO_IN_SLEEP                (TAS675X_GPIO_FUNC_INPUT | TAS675X_GPIO_IN_ID_SLEEP)
340*133c81f8SSen Wang 
341*133c81f8SSen Wang /* GPIO input 3-bit mux field masks */
342*133c81f8SSen Wang #define TAS675X_GPIO_IN_MUTE_MASK            GENMASK(2, 0)
343*133c81f8SSen Wang #define TAS675X_GPIO_IN_SYNC_MASK            GENMASK(2, 0)
344*133c81f8SSen Wang #define TAS675X_GPIO_IN_SDIN2_MASK           GENMASK(6, 4)
345*133c81f8SSen Wang #define TAS675X_GPIO_IN_DEEP_SLEEP_MASK      GENMASK(6, 4)
346*133c81f8SSen Wang #define TAS675X_GPIO_IN_HIZ_MASK             GENMASK(2, 0)
347*133c81f8SSen Wang #define TAS675X_GPIO_IN_PLAY_MASK            GENMASK(6, 4)
348*133c81f8SSen Wang #define TAS675X_GPIO_IN_SLEEP_MASK           GENMASK(2, 0)
349*133c81f8SSen Wang 
350*133c81f8SSen Wang /* Book addresses for tas675x_select_book() */
351*133c81f8SSen Wang #define TAS675X_BOOK_DEFAULT                 0x00
352*133c81f8SSen Wang #define TAS675X_BOOK_DSP                     0x8C
353*133c81f8SSen Wang 
354*133c81f8SSen Wang /* DSP memory addresses (DSP Book) */
355*133c81f8SSen Wang #define TAS675X_DSP_PAGE_RTLDG               0x22
356*133c81f8SSen Wang #define TAS675X_DSP_RTLDG_OL_THRESH_REG      0x98
357*133c81f8SSen Wang #define TAS675X_DSP_RTLDG_SL_THRESH_REG      0x9C
358*133c81f8SSen Wang 
359*133c81f8SSen Wang #define TAS675X_DSP_PARAM_ID_OL_THRESH       0
360*133c81f8SSen Wang #define TAS675X_DSP_PARAM_ID_SL_THRESH       1
361*133c81f8SSen Wang 
362*133c81f8SSen Wang /* Setup Mode Entry/Exit*/
363*133c81f8SSen Wang #define TAS675X_SETUP_ENTER_VAL1             0x11
364*133c81f8SSen Wang #define TAS675X_SETUP_ENTER_VAL2             0xFF
365*133c81f8SSen Wang #define TAS675X_SETUP_EXIT_VAL               0x00
366*133c81f8SSen Wang 
367*133c81f8SSen Wang #endif /* __TAS675X_H__ */
368