xref: /openbmc/linux/sound/soc/codecs/max98390.h (revision 2f164822)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2020, Maxim Integrated.
4  */
5 
6 #ifndef _MAX98390_H
7 #define _MAX98390_H
8 
9 /* MAX98390 Register Address */
10 #define MAX98390_SOFTWARE_RESET 0x2000
11 #define MAX98390_INT_RAW1 0x2002
12 #define MAX98390_INT_RAW2 0x2003
13 #define MAX98390_INT_RAW3 0x2004
14 #define MAX98390_INT_STATE1 0x2005
15 #define MAX98390_INT_STATE2 0x2006
16 #define MAX98390_INT_STATE3 0x2007
17 #define MAX98390_INT_FLAG1 0x2008
18 #define MAX98390_INT_FLAG2 0x2009
19 #define MAX98390_INT_FLAG3 0x200a
20 #define MAX98390_INT_EN1 0x200b
21 #define MAX98390_INT_EN2 0x200c
22 #define MAX98390_INT_EN3 0x200d
23 #define MAX98390_INT_FLAG_CLR1 0x200e
24 #define MAX98390_INT_FLAG_CLR2 0x200f
25 #define MAX98390_INT_FLAG_CLR3 0x2010
26 #define MAX98390_IRQ_CTRL 0x2011
27 #define MAX98390_CLK_MON 0x2012
28 #define MAX98390_DAT_MON 0x2014
29 #define MAX98390_WDOG_CTRL 0x2015
30 #define MAX98390_WDOG_RST 0x2016
31 #define MAX98390_MEAS_ADC_THERM_WARN_THRESH 0x2017
32 #define MAX98390_MEAS_ADC_THERM_SHDN_THRESH 0x2018
33 #define MAX98390_MEAS_ADC_THERM_HYSTERESIS 0x2019
34 #define MAX98390_PIN_CFG 0x201a
35 #define MAX98390_PCM_RX_EN_A 0x201b
36 #define MAX98390_PCM_RX_EN_B 0x201c
37 #define MAX98390_PCM_TX_EN_A 0x201d
38 #define MAX98390_PCM_TX_EN_B 0x201e
39 #define MAX98390_PCM_TX_HIZ_CTRL_A 0x201f
40 #define MAX98390_PCM_TX_HIZ_CTRL_B 0x2020
41 #define MAX98390_PCM_CH_SRC_1 0x2021
42 #define MAX98390_PCM_CH_SRC_2 0x2022
43 #define MAX98390_PCM_CH_SRC_3 0x2023
44 #define MAX98390_PCM_MODE_CFG 0x2024
45 #define MAX98390_PCM_MASTER_MODE 0x2025
46 #define MAX98390_PCM_CLK_SETUP 0x2026
47 #define MAX98390_PCM_SR_SETUP 0x2027
48 #define MAX98390_ICC_RX_EN_A 0x202c
49 #define MAX98390_ICC_RX_EN_B 0x202d
50 #define MAX98390_ICC_TX_EN_A 0x202e
51 #define MAX98390_ICC_TX_EN_B 0x202f
52 #define MAX98390_ICC_HIZ_MANUAL_MODE 0x2030
53 #define MAX98390_ICC_TX_HIZ_EN_A 0x2031
54 #define MAX98390_ICC_TX_HIZ_EN_B 0x2032
55 #define MAX98390_ICC_LNK_EN 0x2033
56 #define MAX98390_R2039_AMP_DSP_CFG 0x2039
57 #define MAX98390_R203A_AMP_EN 0x203a
58 #define MAX98390_TONE_GEN_DC_CFG 0x203b
59 #define MAX98390_SPK_SRC_SEL 0x203c
60 #define MAX98390_R203D_SPK_GAIN 0x203d
61 #define MAX98390_SSM_CFG 0x203e
62 #define MAX98390_MEAS_EN 0x203f
63 #define MAX98390_MEAS_DSP_CFG 0x2040
64 #define MAX98390_BOOST_CTRL0 0x2041
65 #define MAX98390_BOOST_CTRL3 0x2042
66 #define MAX98390_BOOST_CTRL1 0x2043
67 #define MAX98390_MEAS_ADC_CFG 0x2044
68 #define MAX98390_MEAS_ADC_BASE_MSB 0x2045
69 #define MAX98390_MEAS_ADC_BASE_LSB 0x2046
70 #define MAX98390_ADC_CH0_DIVIDE 0x2047
71 #define MAX98390_ADC_CH1_DIVIDE 0x2048
72 #define MAX98390_ADC_CH2_DIVIDE 0x2049
73 #define MAX98390_ADC_CH0_FILT_CFG 0x204a
74 #define MAX98390_ADC_CH1_FILT_CFG 0x204b
75 #define MAX98390_ADC_CH2_FILT_CFG 0x204c
76 #define MAX98390_MEAS_ADC_CH0_READ 0x204d
77 #define MAX98390_MEAS_ADC_CH1_READ 0x204e
78 #define MAX98390_MEAS_ADC_CH2_READ 0x204f
79 #define MAX98390_PWR_GATE_CTL 0x2050
80 #define MAX98390_PWR_GATE_STATUS 0x2051
81 #define MAX98390_VBAT_LOW_STATUS 0x2052
82 #define MAX98390_PVDD_LOW_STATUS 0x2053
83 #define MAX98390_BROWNOUT_STATUS 0x2054
84 #define MAX98390_BROWNOUT_EN 0x2055
85 #define MAX98390_BROWNOUT_INFINITE_HOLD 0x2056
86 #define MAX98390_BROWNOUT_INFINITE_HOLD_CLR 0x2057
87 #define MAX98390_BROWNOUT_LVL_HOLD 0x2058
88 #define MAX98390_BROWNOUT_LVL1_THRESH 0x2059
89 #define MAX98390_BROWNOUT_LVL2_THRESH 0x205a
90 #define MAX98390_BROWNOUT_LVL3_THRESH 0x205b
91 #define MAX98390_BROWNOUT_LVL4_THRESH 0x205c
92 #define MAX98390_BROWNOUT_THRESH_HYSTERYSIS 0x205d
93 #define MAX98390_BROWNOUT_AMP_LIMITER_ATK_REL 0x205e
94 #define MAX98390_BROWNOUT_AMP_GAIN_ATK_REL 0x205f
95 #define MAX98390_BROWNOUT_AMP1_CLIP_MODE 0x2060
96 #define MAX98390_BROWNOUT_LVL1_CUR_LIMIT 0x2061
97 #define MAX98390_BROWNOUT_LVL1_AMP1_CTRL1 0x2062
98 #define MAX98390_BROWNOUT_LVL1_AMP1_CTRL2 0x2063
99 #define MAX98390_BROWNOUT_LVL1_AMP1_CTRL3 0x2064
100 #define MAX98390_BROWNOUT_LVL2_CUR_LIMIT 0x2065
101 #define MAX98390_BROWNOUT_LVL2_AMP1_CTRL1 0x2066
102 #define MAX98390_BROWNOUT_LVL2_AMP1_CTRL2 0x2067
103 #define MAX98390_BROWNOUT_LVL2_AMP1_CTRL3 0x2068
104 #define MAX98390_BROWNOUT_LVL3_CUR_LIMIT 0x2069
105 #define MAX98390_BROWNOUT_LVL3_AMP1_CTRL1 0x206a
106 #define MAX98390_BROWNOUT_LVL3_AMP1_CTRL2 0x206b
107 #define MAX98390_BROWNOUT_LVL3_AMP1_CTRL3 0x206c
108 #define MAX98390_BROWNOUT_LVL4_CUR_LIMIT 0x206d
109 #define MAX98390_BROWNOUT_LVL4_AMP1_CTRL1 0x206e
110 #define MAX98390_BROWNOUT_LVL4_AMP1_CTRL2 0x206f
111 #define MAX98390_BROWNOUT_LVL4_AMP1_CTRL3 0x2070
112 #define MAX98390_BROWNOUT_LOWEST_STATUS 0x2071
113 #define MAX98390_BROWNOUT_ILIM_HLD 0x2072
114 #define MAX98390_BROWNOUT_LIM_HLD 0x2073
115 #define MAX98390_BROWNOUT_CLIP_HLD 0x2074
116 #define MAX98390_BROWNOUT_GAIN_HLD 0x2075
117 #define MAX98390_ENV_TRACK_VOUT_HEADROOM 0x2076
118 #define MAX98390_ENV_TRACK_BOOST_VOUT_DELAY 0x2077
119 #define MAX98390_ENV_TRACK_REL_RATE 0x2078
120 #define MAX98390_ENV_TRACK_HOLD_RATE 0x2079
121 #define MAX98390_ENV_TRACK_CTRL 0x207a
122 #define MAX98390_ENV_TRACK_BOOST_VOUT_READ 0x207b
123 #define MAX98390_BOOST_BYPASS1 0x207c
124 #define MAX98390_BOOST_BYPASS2 0x207d
125 #define MAX98390_BOOST_BYPASS3 0x207e
126 #define MAX98390_FET_SCALING1 0x207f
127 #define MAX98390_FET_SCALING2 0x2080
128 #define MAX98390_FET_SCALING3 0x2081
129 #define MAX98390_FET_SCALING4 0x2082
130 #define MAX98390_SPK_SPEEDUP 0x2084
131 
132 #define DSM_STBASS_HPF_B0_BYTE0 0x2101
133 #define DSM_STBASS_HPF_B0_BYTE1 0x2102
134 #define DSM_STBASS_HPF_B0_BYTE2 0x2103
135 #define DSM_STBASS_HPF_B1_BYTE0 0x2105
136 #define DSM_STBASS_HPF_B1_BYTE1 0x2106
137 #define DSM_STBASS_HPF_B1_BYTE2 0x2107
138 #define DSM_STBASS_HPF_B2_BYTE0 0x2109
139 #define DSM_STBASS_HPF_B2_BYTE1 0x210a
140 #define DSM_STBASS_HPF_B2_BYTE2 0x210b
141 #define DSM_STBASS_HPF_A1_BYTE0 0x210d
142 #define DSM_STBASS_HPF_A1_BYTE1 0x210e
143 #define DSM_STBASS_HPF_A1_BYTE2 0x210f
144 #define DSM_STBASS_HPF_A2_BYTE0 0x2111
145 #define DSM_STBASS_HPF_A2_BYTE1 0x2112
146 #define DSM_STBASS_HPF_A2_BYTE2 0x2113
147 #define DSM_STBASS_LPF_B0_BYTE0 0x2115
148 #define DSM_STBASS_LPF_B0_BYTE1 0x2116
149 #define DSM_STBASS_LPF_B0_BYTE2 0x2117
150 #define DSM_STBASS_LPF_B1_BYTE0 0x2119
151 #define DSM_STBASS_LPF_B1_BYTE1 0x211a
152 #define DSM_STBASS_LPF_B1_BYTE2 0x211b
153 #define DSM_STBASS_LPF_B2_BYTE0 0x211d
154 #define DSM_STBASS_LPF_B2_BYTE1 0x211e
155 #define DSM_STBASS_LPF_B2_BYTE2 0x211f
156 #define DSM_STBASS_LPF_A1_BYTE0 0x2121
157 #define DSM_STBASS_LPF_A1_BYTE1 0x2122
158 #define DSM_STBASS_LPF_A1_BYTE2 0x2123
159 #define DSM_STBASS_LPF_A2_BYTE0 0x2125
160 #define DSM_STBASS_LPF_A2_BYTE1 0x2126
161 #define DSM_STBASS_LPF_A2_BYTE2 0x2127
162 #define DSM_EQ_BQ1_B0_BYTE0 0x2129
163 #define DSM_EQ_BQ1_B0_BYTE1 0x212a
164 #define DSM_EQ_BQ1_B0_BYTE2 0x212b
165 #define DSM_EQ_BQ1_B1_BYTE0 0x212d
166 #define DSM_EQ_BQ1_B1_BYTE1 0x212e
167 #define DSM_EQ_BQ1_B1_BYTE2 0x212f
168 #define DSM_EQ_BQ1_B2_BYTE0 0x2131
169 #define DSM_EQ_BQ1_B2_BYTE1 0x2132
170 #define DSM_EQ_BQ1_B2_BYTE2 0x2133
171 #define DSM_EQ_BQ1_A1_BYTE0 0x2135
172 #define DSM_EQ_BQ1_A1_BYTE1 0x2136
173 #define DSM_EQ_BQ1_A1_BYTE2 0x2137
174 #define DSM_EQ_BQ1_A2_BYTE0 0x2139
175 #define DSM_EQ_BQ1_A2_BYTE1 0x213a
176 #define DSM_EQ_BQ1_A2_BYTE2 0x213b
177 #define DSM_EQ_BQ2_B0_BYTE0 0x213d
178 #define DSM_EQ_BQ2_B0_BYTE1 0x213e
179 #define DSM_EQ_BQ2_B0_BYTE2 0x213f
180 #define DSM_EQ_BQ2_B1_BYTE0 0x2141
181 #define DSM_EQ_BQ2_B1_BYTE1 0x2142
182 #define DSM_EQ_BQ2_B1_BYTE2 0x2143
183 #define DSM_EQ_BQ2_B2_BYTE0 0x2145
184 #define DSM_EQ_BQ2_B2_BYTE1 0x2146
185 #define DSM_EQ_BQ2_B2_BYTE2 0x2147
186 #define DSM_EQ_BQ2_A1_BYTE0 0x2149
187 #define DSM_EQ_BQ2_A1_BYTE1 0x214a
188 #define DSM_EQ_BQ2_A1_BYTE2 0x214b
189 #define DSM_EQ_BQ2_A2_BYTE0 0x214d
190 #define DSM_EQ_BQ2_A2_BYTE1 0x214e
191 #define DSM_EQ_BQ2_A2_BYTE2 0x214f
192 #define DSM_EQ_BQ3_B0_BYTE0 0x2151
193 #define DSM_EQ_BQ3_B0_BYTE1 0x2152
194 #define DSM_EQ_BQ3_B0_BYTE2 0x2153
195 #define DSM_EQ_BQ3_B1_BYTE0 0x2155
196 #define DSM_EQ_BQ3_B1_BYTE1 0x2156
197 #define DSM_EQ_BQ3_B1_BYTE2 0x2157
198 #define DSM_EQ_BQ3_B2_BYTE0 0x2159
199 #define DSM_EQ_BQ3_B2_BYTE1 0x215a
200 #define DSM_EQ_BQ3_B2_BYTE2 0x215b
201 #define DSM_EQ_BQ3_A1_BYTE0 0x215d
202 #define DSM_EQ_BQ3_A1_BYTE1 0x215e
203 #define DSM_EQ_BQ3_A1_BYTE2 0x215f
204 #define DSM_EQ_BQ3_A2_BYTE0 0x2161
205 #define DSM_EQ_BQ3_A2_BYTE1 0x2162
206 #define DSM_EQ_BQ3_A2_BYTE2 0x2163
207 #define DSM_EQ_BQ4_B0_BYTE0 0x2165
208 #define DSM_EQ_BQ4_B0_BYTE1 0x2166
209 #define DSM_EQ_BQ4_B0_BYTE2 0x2167
210 #define DSM_EQ_BQ4_B1_BYTE0 0x2169
211 #define DSM_EQ_BQ4_B1_BYTE1 0x216a
212 #define DSM_EQ_BQ4_B1_BYTE2 0x216b
213 #define DSM_EQ_BQ4_B2_BYTE0 0x216d
214 #define DSM_EQ_BQ4_B2_BYTE1 0x216e
215 #define DSM_EQ_BQ4_B2_BYTE2 0x216f
216 #define DSM_EQ_BQ4_A1_BYTE0 0x2171
217 #define DSM_EQ_BQ4_A1_BYTE1 0x2172
218 #define DSM_EQ_BQ4_A1_BYTE2 0x2173
219 #define DSM_EQ_BQ4_A2_BYTE0 0x2175
220 #define DSM_EQ_BQ4_A2_BYTE1 0x2176
221 #define DSM_EQ_BQ4_A2_BYTE2 0x2177
222 #define DSM_EQ_BQ5_B0_BYTE0 0x2179
223 #define DSM_EQ_BQ5_B0_BYTE1 0x217a
224 #define DSM_EQ_BQ5_B0_BYTE2 0x217b
225 #define DSM_EQ_BQ5_B1_BYTE0 0x217d
226 #define DSM_EQ_BQ5_B1_BYTE1 0x217e
227 #define DSM_EQ_BQ5_B1_BYTE2 0x217f
228 #define DSM_EQ_BQ5_B2_BYTE0 0x2181
229 #define DSM_EQ_BQ5_B2_BYTE1 0x2182
230 #define DSM_EQ_BQ5_B2_BYTE2 0x2183
231 #define DSM_EQ_BQ5_A1_BYTE0 0x2185
232 #define DSM_EQ_BQ5_A1_BYTE1 0x2186
233 #define DSM_EQ_BQ5_A1_BYTE2 0x2187
234 #define DSM_EQ_BQ5_A2_BYTE0 0x2189
235 #define DSM_EQ_BQ5_A2_BYTE1 0x218a
236 #define DSM_EQ_BQ5_A2_BYTE2 0x218b
237 #define DSM_EQ_BQ6_B0_BYTE0 0x218d
238 #define DSM_EQ_BQ6_B0_BYTE1 0x218e
239 #define DSM_EQ_BQ6_B0_BYTE2 0x218f
240 #define DSM_EQ_BQ6_B1_BYTE0 0x2191
241 #define DSM_EQ_BQ6_B1_BYTE1 0x2192
242 #define DSM_EQ_BQ6_B1_BYTE2 0x2193
243 #define DSM_EQ_BQ6_B2_BYTE0 0x2195
244 #define DSM_EQ_BQ6_B2_BYTE1 0x2196
245 #define DSM_EQ_BQ6_B2_BYTE2 0x2197
246 #define DSM_EQ_BQ6_A1_BYTE0 0x2199
247 #define DSM_EQ_BQ6_A1_BYTE1 0x219a
248 #define DSM_EQ_BQ6_A1_BYTE2 0x219b
249 #define DSM_EQ_BQ6_A2_BYTE0 0x219d
250 #define DSM_EQ_BQ6_A2_BYTE1 0x219e
251 #define DSM_EQ_BQ6_A2_BYTE2 0x219f
252 #define DSM_EQ_BQ7_B0_BYTE0 0x21a1
253 #define DSM_EQ_BQ7_B0_BYTE1 0x21a2
254 #define DSM_EQ_BQ7_B0_BYTE2 0x21a3
255 #define DSM_EQ_BQ7_B1_BYTE0 0x21a5
256 #define DSM_EQ_BQ7_B1_BYTE1 0x21a6
257 #define DSM_EQ_BQ7_B1_BYTE2 0x21a7
258 #define DSM_EQ_BQ7_B2_BYTE0 0x21a9
259 #define DSM_EQ_BQ7_B2_BYTE1 0x21aa
260 #define DSM_EQ_BQ7_B2_BYTE2 0x21ab
261 #define DSM_EQ_BQ7_A1_BYTE0 0x21ad
262 #define DSM_EQ_BQ7_A1_BYTE1 0x21ae
263 #define DSM_EQ_BQ7_A1_BYTE2 0x21af
264 #define DSM_EQ_BQ7_A2_BYTE0 0x21b1
265 #define DSM_EQ_BQ7_A2_BYTE1 0x21b2
266 #define DSM_EQ_BQ7_A2_BYTE2 0x21b3
267 #define DSM_EQ_BQ8_B0_BYTE0 0x21b5
268 #define DSM_EQ_BQ8_B0_BYTE1 0x21b6
269 #define DSM_EQ_BQ8_B0_BYTE2 0x21b7
270 #define DSM_EQ_BQ8_B1_BYTE0 0x21b9
271 #define DSM_EQ_BQ8_B1_BYTE1 0x21ba
272 #define DSM_EQ_BQ8_B1_BYTE2 0x21bb
273 #define DSM_EQ_BQ8_B2_BYTE0 0x21bd
274 #define DSM_EQ_BQ8_B2_BYTE1 0x21be
275 #define DSM_EQ_BQ8_B2_BYTE2 0x21bf
276 #define DSM_EQ_BQ8_A1_BYTE0 0x21c1
277 #define DSM_EQ_BQ8_A1_BYTE1 0x21c2
278 #define DSM_EQ_BQ8_A1_BYTE2 0x21c3
279 #define DSM_EQ_BQ8_A2_BYTE0 0x21c5
280 #define DSM_EQ_BQ8_A2_BYTE1 0x21c6
281 #define DSM_EQ_BQ8_A2_BYTE2 0x21c7
282 #define DSM_LFX_BQ_B0_BYTE0 0x21c9
283 #define DSM_LFX_BQ_B0_BYTE1 0x21ca
284 #define DSM_LFX_BQ_B0_BYTE2 0x21cb
285 #define DSM_LFX_BQ_B1_BYTE0 0x21cd
286 #define DSM_LFX_BQ_B1_BYTE1 0x21ce
287 #define DSM_LFX_BQ_B1_BYTE2 0x21cf
288 #define DSM_LFX_BQ_B2_BYTE0 0x21d1
289 #define DSM_LFX_BQ_B2_BYTE1 0x21d2
290 #define DSM_LFX_BQ_B2_BYTE2 0x21d3
291 #define DSM_LFX_BQ_A1_BYTE0 0x21d5
292 #define DSM_LFX_BQ_A1_BYTE1 0x21d6
293 #define DSM_LFX_BQ_A1_BYTE2 0x21d7
294 #define DSM_LFX_BQ_A2_BYTE0 0x21d9
295 #define DSM_LFX_BQ_A2_BYTE1 0x21da
296 #define DSM_LFX_BQ_A2_BYTE2 0x21db
297 #define DSM_PPR_HPF_B0_BYTE0 0x21dd
298 #define DSM_PPR_HPF_B0_BYTE1 0x21de
299 #define DSM_PPR_HPF_B0_BYTE2 0x21df
300 #define DSM_PPR_HPF_B1_BYTE0 0x21e1
301 #define DSM_PPR_HPF_B1_BYTE1 0x21e2
302 #define DSM_PPR_HPF_B1_BYTE2 0x21e3
303 #define DSM_PPR_HPF_B2_BYTE0 0x21e5
304 #define DSM_PPR_HPF_B2_BYTE1 0x21e6
305 #define DSM_PPR_HPF_B2_BYTE2 0x21e7
306 #define DSM_PPR_HPF_A1_BYTE0 0x21e9
307 #define DSM_PPR_HPF_A1_BYTE1 0x21ea
308 #define DSM_PPR_HPF_A1_BYTE2 0x21eb
309 #define DSM_PPR_HPF_A2_BYTE0 0x21ed
310 #define DSM_PPR_HPF_A2_BYTE1 0x21ee
311 #define DSM_PPR_HPF_A2_BYTE2 0x21ef
312 #define DSM_PPR_LPF_B0_BYTE0 0x21f1
313 #define DSM_PPR_LPF_B0_BYTE1 0x21f2
314 #define DSM_PPR_LPF_B0_BYTE2 0x21f3
315 #define DSM_PPR_LPF_B1_BYTE0 0x21f5
316 #define DSM_PPR_LPF_B1_BYTE1 0x21f6
317 #define DSM_PPR_LPF_B1_BYTE2 0x21f7
318 #define DSM_PPR_LPF_B2_BYTE0 0x21f9
319 #define DSM_PPR_LPF_B2_BYTE1 0x21fa
320 #define DSM_PPR_LPF_B2_BYTE2 0x21fb
321 #define DSM_PPR_LPF_A1_BYTE0 0x21fd
322 #define DSM_PPR_LPF_A1_BYTE1 0x21fe
323 #define DSM_PPR_LPF_A1_BYTE2 0x21ff
324 #define DSM_PPR_LPF_A2_BYTE0 0x2201
325 #define DSM_PPR_LPF_A2_BYTE1 0x2202
326 #define DSM_PPR_LPF_A2_BYTE2 0x2203
327 #define DSM_SPL_BQ_B0_BYTE0 0x2205
328 #define DSM_SPL_BQ_B0_BYTE1 0x2206
329 #define DSM_SPL_BQ_B0_BYTE2 0x2207
330 #define DSM_SPL_BQ_B1_BYTE0 0x2209
331 #define DSM_SPL_BQ_B1_BYTE1 0x220a
332 #define DSM_SPL_BQ_B1_BYTE2 0x220b
333 #define DSM_SPL_BQ_B2_BYTE0 0x220d
334 #define DSM_SPL_BQ_B2_BYTE1 0x220e
335 #define DSM_SPL_BQ_B2_BYTE2 0x220f
336 #define DSM_SPL_BQ_A1_BYTE0 0x2211
337 #define DSM_SPL_BQ_A1_BYTE1 0x2212
338 #define DSM_SPL_BQ_A1_BYTE2 0x2213
339 #define DSM_SPL_BQ_A2_BYTE0 0x2215
340 #define DSM_SPL_BQ_A2_BYTE1 0x2216
341 #define DSM_SPL_BQ_A2_BYTE2 0x2217
342 #define DSM_EXCUR_BQ_B0_BYTE0 0x2219
343 #define DSM_EXCUR_BQ_B0_BYTE1 0x221a
344 #define DSM_EXCUR_BQ_B0_BYTE2 0x221b
345 #define DSM_EXCUR_BQ_B1_BYTE0 0x221d
346 #define DSM_EXCUR_BQ_B1_BYTE1 0x221e
347 #define DSM_EXCUR_BQ_B1_BYTE2 0x221f
348 #define DSM_EXCUR_BQ_B2_BYTE0 0x2221
349 #define DSM_EXCUR_BQ_B2_BYTE1 0x2222
350 #define DSM_EXCUR_BQ_B2_BYTE2 0x2223
351 #define DSM_EXCUR_BQ_A1_BYTE0 0x2225
352 #define DSM_EXCUR_BQ_A1_BYTE1 0x2226
353 #define DSM_EXCUR_BQ_A1_BYTE2 0x2227
354 #define DSM_EXCUR_BQ_A2_BYTE0 0x2229
355 #define DSM_EXCUR_BQ_A2_BYTE1 0x222a
356 #define DSM_EXCUR_BQ_A2_BYTE2 0x222b
357 #define DSM_EXCPROT_HPF1_B0_BYTE0 0x222d
358 #define DSM_EXCPROT_HPF1_B0_BYTE1 0x222e
359 #define DSM_EXCPROT_HPF1_B0_BYTE2 0x222f
360 #define DSM_EXCPROT_HPF1_B1_BYTE0 0x2231
361 #define DSM_EXCPROT_HPF1_B1_BYTE1 0x2232
362 #define DSM_EXCPROT_HPF1_B1_BYTE2 0x2233
363 #define DSM_EXCPROT_HPF1_B2_BYTE0 0x2235
364 #define DSM_EXCPROT_HPF1_B2_BYTE1 0x2236
365 #define DSM_EXCPROT_HPF1_B2_BYTE2 0x2237
366 #define DSM_EXCPROT_HPF1_A1_BYTE0 0x2239
367 #define DSM_EXCPROT_HPF1_A1_BYTE1 0x223a
368 #define DSM_EXCPROT_HPF1_A1_BYTE2 0x223b
369 #define DSM_EXCPROT_HPF1_A2_BYTE0 0x223d
370 #define DSM_EXCPROT_HPF1_A2_BYTE1 0x223e
371 #define DSM_EXCPROT_HPF1_A2_BYTE2 0x223f
372 #define DSM_EXCPROT_HPF2_B0_BYTE0 0x2241
373 #define DSM_EXCPROT_HPF2_B0_BYTE1 0x2242
374 #define DSM_EXCPROT_HPF2_B0_BYTE2 0x2243
375 #define DSM_EXCPROT_HPF2_B1_BYTE0 0x2245
376 #define DSM_EXCPROT_HPF2_B1_BYTE1 0x2246
377 #define DSM_EXCPROT_HPF2_B1_BYTE2 0x2247
378 #define DSM_EXCPROT_HPF2_B2_BYTE0 0x2249
379 #define DSM_EXCPROT_HPF2_B2_BYTE1 0x224a
380 #define DSM_EXCPROT_HPF2_B2_BYTE2 0x224b
381 #define DSM_EXCPROT_HPF2_A1_BYTE0 0x224d
382 #define DSM_EXCPROT_HPF2_A1_BYTE1 0x224e
383 #define DSM_EXCPROT_HPF2_A1_BYTE2 0x224f
384 #define DSM_EXCPROT_HPF2_A2_BYTE0 0x2251
385 #define DSM_EXCPROT_HPF2_A2_BYTE1 0x2252
386 #define DSM_EXCPROT_HPF2_A2_BYTE2 0x2253
387 #define DSM_EXCPROT_HPF3_B0_BYTE0 0x2255
388 #define DSM_EXCPROT_HPF3_B0_BYTE1 0x2256
389 #define DSM_EXCPROT_HPF3_B0_BYTE2 0x2257
390 #define DSM_EXCPROT_HPF3_B1_BYTE0 0x2259
391 #define DSM_EXCPROT_HPF3_B1_BYTE1 0x225a
392 #define DSM_EXCPROT_HPF3_B1_BYTE2 0x225b
393 #define DSM_EXCPROT_HPF3_B2_BYTE0 0x225d
394 #define DSM_EXCPROT_HPF3_B2_BYTE1 0x225e
395 #define DSM_EXCPROT_HPF3_B2_BYTE2 0x225f
396 #define DSM_EXCPROT_HPF3_A1_BYTE0 0x2261
397 #define DSM_EXCPROT_HPF3_A1_BYTE1 0x2262
398 #define DSM_EXCPROT_HPF3_A1_BYTE2 0x2263
399 #define DSM_EXCPROT_HPF3_A2_BYTE0 0x2265
400 #define DSM_EXCPROT_HPF3_A2_BYTE1 0x2266
401 #define DSM_EXCPROT_HPF3_A2_BYTE2 0x2267
402 #define DSM_EXCPROT_HPF4_B0_BYTE0 0x2269
403 #define DSM_EXCPROT_HPF4_B0_BYTE1 0x226a
404 #define DSM_EXCPROT_HPF4_B0_BYTE2 0x226b
405 #define DSM_EXCPROT_HPF4_B1_BYTE0 0x226d
406 #define DSM_EXCPROT_HPF4_B1_BYTE1 0x226e
407 #define DSM_EXCPROT_HPF4_B1_BYTE2 0x226f
408 #define DSM_EXCPROT_HPF4_B2_BYTE0 0x2271
409 #define DSM_EXCPROT_HPF4_B2_BYTE1 0x2272
410 #define DSM_EXCPROT_HPF4_B2_BYTE2 0x2273
411 #define DSM_EXCPROT_HPF4_A1_BYTE0 0x2275
412 #define DSM_EXCPROT_HPF4_A1_BYTE1 0x2276
413 #define DSM_EXCPROT_HPF4_A1_BYTE2 0x2277
414 #define DSM_EXCPROT_HPF4_A2_BYTE0 0x2279
415 #define DSM_EXCPROT_HPF4_A2_BYTE1 0x227a
416 #define DSM_EXCPROT_HPF4_A2_BYTE2 0x227b
417 #define DSM_EXCPROT_HPF5_B0_BYTE0 0x227d
418 #define DSM_EXCPROT_HPF5_B0_BYTE1 0x227e
419 #define DSM_EXCPROT_HPF5_B0_BYTE2 0x227f
420 #define DSM_EXCPROT_HPF5_B1_BYTE0 0x2281
421 #define DSM_EXCPROT_HPF5_B1_BYTE1 0x2282
422 #define DSM_EXCPROT_HPF5_B1_BYTE2 0x2283
423 #define DSM_EXCPROT_HPF5_B2_BYTE0 0x2285
424 #define DSM_EXCPROT_HPF5_B2_BYTE1 0x2286
425 #define DSM_EXCPROT_HPF5_B2_BYTE2 0x2287
426 #define DSM_EXCPROT_HPF5_A1_BYTE0 0x2289
427 #define DSM_EXCPROT_HPF5_A1_BYTE1 0x228a
428 #define DSM_EXCPROT_HPF5_A1_BYTE2 0x228b
429 #define DSM_EXCPROT_HPF5_A2_BYTE0 0x228d
430 #define DSM_EXCPROT_HPF5_A2_BYTE1 0x228e
431 #define DSM_EXCPROT_HPF5_A2_BYTE2 0x228f
432 #define DSM_DEBUZZ_BPF_B0_BYTE0 0x2291
433 #define DSM_DEBUZZ_BPF_B0_BYTE1 0x2292
434 #define DSM_DEBUZZ_BPF_B0_BYTE2 0x2293
435 #define DSM_DEBUZZ_BPF_B1_BYTE0 0x2295
436 #define DSM_DEBUZZ_BPF_B1_BYTE1 0x2296
437 #define DSM_DEBUZZ_BPF_B1_BYTE2 0x2297
438 #define DSM_DEBUZZ_BPF_B2_BYTE0 0x2299
439 #define DSM_DEBUZZ_BPF_B2_BYTE1 0x229a
440 #define DSM_DEBUZZ_BPF_B2_BYTE2 0x229b
441 #define DSM_DEBUZZ_BPF_A1_BYTE0 0x229d
442 #define DSM_DEBUZZ_BPF_A1_BYTE1 0x229e
443 #define DSM_DEBUZZ_BPF_A1_BYTE2 0x229f
444 #define DSM_DEBUZZ_BPF_A2_BYTE0 0x22a1
445 #define DSM_DEBUZZ_BPF_A2_BYTE1 0x22a2
446 #define DSM_DEBUZZ_BPF_A2_BYTE2 0x22a3
447 #define DSM_DEBUZZ_PORT_B0_BYTE0 0x22a5
448 #define DSM_DEBUZZ_PORT_B0_BYTE1 0x22a6
449 #define DSM_DEBUZZ_PORT_B0_BYTE2 0x22a7
450 #define DSM_DEBUZZ_PORT_B1_BYTE0 0x22a9
451 #define DSM_DEBUZZ_PORT_B1_BYTE1 0x22aa
452 #define DSM_DEBUZZ_PORT_B1_BYTE2 0x22ab
453 #define DSM_DEBUZZ_PORT_B2_BYTE0 0x22ad
454 #define DSM_DEBUZZ_PORT_B2_BYTE1 0x22ae
455 #define DSM_DEBUZZ_PORT_B2_BYTE2 0x22af
456 #define DSM_DEBUZZ_PORT_A1_BYTE0 0x22b1
457 #define DSM_DEBUZZ_PORT_A1_BYTE1 0x22b2
458 #define DSM_DEBUZZ_PORT_A1_BYTE2 0x22b3
459 #define DSM_DEBUZZ_PORT_A2_BYTE0 0x22b5
460 #define DSM_DEBUZZ_PORT_A2_BYTE1 0x22b6
461 #define DSM_DEBUZZ_PORT_A2_BYTE2 0x22b7
462 #define DSM_DEBUZZ_NOTCH_B0_BYTE0 0x22b9
463 #define DSM_DEBUZZ_NOTCH_B0_BYTE1 0x22ba
464 #define DSM_DEBUZZ_NOTCH_B0_BYTE2 0x22bb
465 #define DSM_DEBUZZ_NOTCH_B1_BYTE0 0x22bd
466 #define DSM_DEBUZZ_NOTCH_B1_BYTE1 0x22be
467 #define DSM_DEBUZZ_NOTCH_B1_BYTE2 0x22bf
468 #define DSM_DEBUZZ_NOTCH_B2_BYTE0 0x22c1
469 #define DSM_DEBUZZ_NOTCH_B2_BYTE1 0x22c2
470 #define DSM_DEBUZZ_NOTCH_B2_BYTE2 0x22c3
471 #define DSM_DEBUZZ_NOTCH_A1_BYTE0 0x22c5
472 #define DSM_DEBUZZ_NOTCH_A1_BYTE1 0x22c6
473 #define DSM_DEBUZZ_NOTCH_A1_BYTE2 0x22c7
474 #define DSM_DEBUZZ_NOTCH_A2_BYTE0 0x22c9
475 #define DSM_DEBUZZ_NOTCH_A2_BYTE1 0x22ca
476 #define DSM_DEBUZZ_NOTCH_A2_BYTE2 0x22cb
477 #define DSM_THERMAL_BQ_B0_BYTE0 0x22cd
478 #define DSM_THERMAL_BQ_B0_BYTE1 0x22ce
479 #define DSM_THERMAL_BQ_B0_BYTE2 0x22cf
480 #define DSM_THERMAL_BQ_B1_BYTE0 0x22d1
481 #define DSM_THERMAL_BQ_B1_BYTE1 0x22d2
482 #define DSM_THERMAL_BQ_B1_BYTE2 0x22d3
483 #define DSM_THERMAL_BQ_B2_BYTE0 0x22d5
484 #define DSM_THERMAL_BQ_B2_BYTE1 0x22d6
485 #define DSM_THERMAL_BQ_B2_BYTE2 0x22d7
486 #define DSM_THERMAL_BQ_A1_BYTE0 0x22d9
487 #define DSM_THERMAL_BQ_A1_BYTE1 0x22da
488 #define DSM_THERMAL_BQ_A1_BYTE2 0x22db
489 #define DSM_THERMAL_BQ_A2_BYTE0 0x22dd
490 #define DSM_THERMAL_BQ_A2_BYTE1 0x22de
491 #define DSM_THERMAL_BQ_A2_BYTE2 0x22df
492 #define DSM_WBDRC_FILT1_B0_BYTE0 0x22e1
493 #define DSM_WBDRC_FILT1_B0_BYTE1 0x22e2
494 #define DSM_WBDRC_FILT1_B0_BYTE2 0x22e3
495 #define DSM_WBDRC_FILT1_B1_BYTE0 0x22e5
496 #define DSM_WBDRC_FILT1_B1_BYTE1 0x22e6
497 #define DSM_WBDRC_FILT1_B1_BYTE2 0x22e7
498 #define DSM_WBDRC_FILT1_B2_BYTE0 0x22e9
499 #define DSM_WBDRC_FILT1_B2_BYTE1 0x22ea
500 #define DSM_WBDRC_FILT1_B2_BYTE2 0x22eb
501 #define DSM_WBDRC_FILT1_A1_BYTE0 0x22ed
502 #define DSM_WBDRC_FILT1_A1_BYTE1 0x22ee
503 #define DSM_WBDRC_FILT1_A1_BYTE2 0x22ef
504 #define DSM_WBDRC_FILT1_A2_BYTE0 0x22f1
505 #define DSM_WBDRC_FILT1_A2_BYTE1 0x22f2
506 #define DSM_WBDRC_FILT1_A2_BYTE2 0x22f3
507 #define DSM_WBDRC_FILT2_B0_BYTE0 0x22f5
508 #define DSM_WBDRC_FILT2_B0_BYTE1 0x22f6
509 #define DSM_WBDRC_FILT2_B0_BYTE2 0x22f7
510 #define DSM_WBDRC_FILT2_B1_BYTE0 0x22f9
511 #define DSM_WBDRC_FILT2_B1_BYTE1 0x22fa
512 #define DSM_WBDRC_FILT2_B1_BYTE2 0x22fb
513 #define DSM_WBDRC_FILT2_B2_BYTE0 0x22fd
514 #define DSM_WBDRC_FILT2_B2_BYTE1 0x22fe
515 #define DSM_WBDRC_FILT2_B2_BYTE2 0x22ff
516 #define DSM_WBDRC_FILT2_A1_BYTE0 0x2301
517 #define DSM_WBDRC_FILT2_A1_BYTE1 0x2302
518 #define DSM_WBDRC_FILT2_A1_BYTE2 0x2303
519 #define DSM_WBDRC_FILT2_A2_BYTE0 0x2305
520 #define DSM_WBDRC_FILT2_A2_BYTE1 0x2306
521 #define DSM_WBDRC_FILT2_A2_BYTE2 0x2307
522 #define DSM_PPR_RELEASE_TIME_BYTE0 0x2309
523 #define DSM_PPR_RELEASE_TIME_BYTE1 0x230a
524 #define DSM_PPR_RELEASE_TIME_BYTE2 0x230b
525 #define DSM_PPR_ATTACK_TIME_BYTE0 0x230d
526 #define DSM_PPR_ATTACK_TIME_BYTE1 0x230e
527 #define DSM_PPR_ATTACK_TIME_BYTE2 0x230f
528 #define DSM_DEBUZZER_RELEASE_TIME_BYTE0 0x2311
529 #define DSM_DEBUZZER_RELEASE_TIME_BYTE1 0x2312
530 #define DSM_DEBUZZER_RELEASE_TIME_BYTE2 0x2313
531 #define DSM_DEBUZZER_ATTACK_TIME_BYTE0 0x2315
532 #define DSM_DEBUZZER_ATTACK_TIME_BYTE1 0x2316
533 #define DSM_DEBUZZER_ATTACK_TIME_BYTE2 0x2317
534 
535 #define DSMIG_WB_DRC_RELEASE_TIME_1 0x2380
536 #define DSMIG_WB_DRC_RELEASE_TIME_2 0x2381
537 #define DSMIG_WB_DRC_ATTACK_TIME_1 0x2382
538 #define DSMIG_WB_DRC_ATTACK_TIME_2 0x2383
539 #define DSMIG_WB_DRC_COMPRESSION_RATIO 0x2384
540 #define DSMIG_WB_DRC_COMPRESSION_THRESHOLD 0x2385
541 #define DSMIG_WB_DRC_MAKEUPGAIN 0x2386
542 #define DSMIG_WB_DRC_NOISE_GATE_THRESHOLD 0x2387
543 #define DSMIG_WBDRC_HPF_ENABLE 0x2388
544 #define DSMIG_WB_DRC_TEST_SMOOTHER_OUT_EN 0x2389
545 #define DSMIG_PPR_THRESHOLD 0x238b
546 #define DSM_STEREO_BASS_CHANNEL_SELECT 0x238d
547 #define DSM_TPROT_THRESHOLD_BYTE0 0x238e
548 #define DSM_TPROT_THRESHOLD_BYTE1 0x238f
549 #define DSM_TPROT_ROOM_TEMPERATURE_BYTE0 0x2390
550 #define DSM_TPROT_ROOM_TEMPERATURE_BYTE1 0x2391
551 #define DSM_TPROT_RECIP_RDC_ROOM_BYTE0 0x2392
552 #define DSM_TPROT_RECIP_RDC_ROOM_BYTE1 0x2393
553 #define DSM_TPROT_RECIP_RDC_ROOM_BYTE2 0x2394
554 #define DSM_TPROT_RECIP_TCONST_BYTE0 0x2395
555 #define DSM_TPROT_RECIP_TCONST_BYTE1 0x2396
556 #define DSM_TPROT_RECIP_TCONST_BYTE2 0x2397
557 #define DSM_THERMAL_ATTENUATION_SETTINGS 0x2398
558 #define DSM_THERMAL_PILOT_TONE_ATTENUATION 0x2399
559 #define DSM_TPROT_PG_TEMP_THRESH_BYTE0 0x239a
560 #define DSM_TPROT_PG_TEMP_THRESH_BYTE1 0x239b
561 
562 #define THERMAL_RDC_RD_BACK_BYTE1 0x239c
563 #define THERMAL_RDC_RD_BACK_BYTE0 0x239d
564 #define THERMAL_COILTEMP_RD_BACK_BYTE1 0x239e
565 #define THERMAL_COILTEMP_RD_BACK_BYTE0 0x239f
566 
567 #define DSMIG_DEBUZZER_THRESHOLD 0x23b5
568 #define DSMIG_DEBUZZER_ALPHA_COEF_TEST_ONLY 0x23b6
569 #define DSM_VOL_ENA 0x23b9
570 #define DSM_VOL_CTRL 0x23ba
571 
572 #define DSMIG_EN 0x23e0
573 #define MAX98390_R23E1_DSP_GLOBAL_EN 0x23e1
574 
575 #define DSM_THERMAL_GAIN 0x23f0
576 #define DSM_PPR_GAIN 0x23f1
577 #define DSM_DBZ_GAIN 0x23f2
578 #define DSM_WBDRC_GAIN 0x23f3
579 
580 #define MAX98390_R23FF_GLOBAL_EN 0x23FF
581 #define MAX98390_R24FF_REV_ID 0x24FF
582 
583 /* MAX98390_R2021_PCM_RX_SRC_1 */
584 #define MAX98390_PCM_RX_CH_SRC_SHIFT (0)
585 #define MAX98390_PCM_RX_CH_SRC_BASS_SHIFT (4)
586 
587 /* MAX98390_R2022_PCM_TX_SRC_1 */
588 #define MAX98390_PCM_TX_CH_SRC_A_V_SHIFT (0)
589 #define MAX98390_PCM_TX_CH_SRC_A_I_SHIFT (4)
590 
591 /* MAX98390_R2024_PCM_DATA_FMT_CFG */
592 #define MAX98390_PCM_MODE_CFG_FORMAT_MASK (0x7 << 3)
593 #define MAX98390_PCM_MODE_CFG_FORMAT_SHIFT (3)
594 #define MAX98390_PCM_TX_CH_INTERLEAVE_MASK (0x1 << 2)
595 #define MAX98390_PCM_FORMAT_I2S (0x0 << 0)
596 #define MAX98390_PCM_FORMAT_LJ (0x1 << 0)
597 #define MAX98390_PCM_FORMAT_TDM_MODE0 (0x3 << 0)
598 #define MAX98390_PCM_FORMAT_TDM_MODE1 (0x4 << 0)
599 #define MAX98390_PCM_FORMAT_TDM_MODE2 (0x5 << 0)
600 #define MAX98390_PCM_MODE_CFG_CHANSZ_MASK (0x3 << 6)
601 #define MAX98390_PCM_MODE_CFG_CHANSZ_16 (0x1 << 6)
602 #define MAX98390_PCM_MODE_CFG_CHANSZ_24 (0x2 << 6)
603 #define MAX98390_PCM_MODE_CFG_CHANSZ_32 (0x3 << 6)
604 
605 /* MAX98390_R2039_AMP_DSP_CFG */
606 #define MAX98390_AMP_DSP_CFG_RMP_UP_SHIFT (4)
607 #define MAX98390_AMP_DSP_CFG_RMP_DN_SHIFT (5)
608 
609 /* MAX98390_R203A_AMP_EN */
610 #define MAX98390_R203A_AMP_EN_SHIFT (0)
611 
612 /* MAX98390_PCM_MASTER_MODE */
613 #define MAX98390_PCM_MASTER_MODE_MASK (0x3 << 0)
614 #define MAX98390_PCM_MASTER_MODE_SLAVE (0x0 << 0)
615 #define MAX98390_PCM_MASTER_MODE_MASTER (0x3 << 0)
616 
617 #define MAX98390_PCM_MASTER_MODE_MCLK_MASK (0xF << 2)
618 #define MAX98390_PCM_MASTER_MODE_MCLK_RATE_SHIFT (2)
619 
620 /* PCM_CLK_SETUP */
621 #define MAX98390_PCM_MODE_CFG_PCM_BCLKEDGE (0x1 << 2)
622 #define MAX98390_PCM_CLK_SETUP_BSEL_MASK (0xF << 0)
623 
624 /* PCM_SR_SETUP */
625 #define MAX98390_PCM_SR_SET1_SR_MASK (0xF << 0)
626 #define MAX98390_PCM_SR_SET1_SR_8000 (0x0 << 0)
627 #define MAX98390_PCM_SR_SET1_SR_11025 (0x1 << 0)
628 #define MAX98390_PCM_SR_SET1_SR_12000 (0x2 << 0)
629 #define MAX98390_PCM_SR_SET1_SR_16000 (0x3 << 0)
630 #define MAX98390_PCM_SR_SET1_SR_22050 (0x4 << 0)
631 #define MAX98390_PCM_SR_SET1_SR_24000 (0x5 << 0)
632 #define MAX98390_PCM_SR_SET1_SR_32000 (0x6 << 0)
633 #define MAX98390_PCM_SR_SET1_SR_44100 (0x7 << 0)
634 #define MAX98390_PCM_SR_SET1_SR_48000 (0x8 << 0)
635 
636 /* PCM_TO_SPK_MONO_MIX_1 */
637 #define MAX98390_PCM_TO_SPK_MONOMIX_CFG_MASK (0x3 << 6)
638 #define MAX98390_PCM_TO_SPK_MONOMIX_CFG_SHIFT (6)
639 #define MAX98390_PCM_TO_SPK_CH0_SRC_MASK (0xF << 0)
640 #define MAX98390_PCM_TO_SPK_CH1_SRC_MASK (0xF << 4)
641 
642 /* MAX98390_BOOST_CTRL3 */
643 #define MAX98390_BOOST_CLK_PHASE_CFG_SHIFT (2)
644 
645 /* SOFT_RESET */
646 #define MAX98390_SOFT_RESET_MASK (0x1 << 0)
647 
648 #define MAX98390_GLOBAL_EN_MASK (0x1 << 0)
649 #define MAX98390_AMP_EN_MASK (0x1 << 0)
650 
651 /* DSM register offset */
652 #define MAX98390_DSM_PAYLOAD_OFFSET 16
653 #define MAX98390_DSM_PARAM_MAX_SIZE 1024
654 #define MAX98390_DSM_PARAM_MIN_SIZE 670
655 
656 struct max98390_priv {
657 	struct regmap *regmap;
658 	unsigned int sysclk;
659 	unsigned int provider;
660 	unsigned int tdm_mode;
661 	unsigned int v_l_slot;
662 	unsigned int i_l_slot;
663 	unsigned int ref_rdc_value;
664 	unsigned int ambient_temp_value;
665 	const char *dsm_param_name;
666 };
667 #endif
668