• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <delay.h>
4 #include <drivers/i2c/tas5825m/tas5825m.h>
5 
program_dsp_ram(struct device * dev)6 static int program_dsp_ram(struct device *dev)
7 {
8 	int res;
9 
10 	res = tas5825m_set_book(dev, 0x64);
11 	if (res < 0)
12 		return res;
13 
14 	res = tas5825m_set_page(dev, 0x01);
15 	if (res < 0)
16 		return res;
17 
18 	{
19 		const uint8_t values[] = {
20 			0x00, 0xFE, 0x00, 0x40, 0x00, 0xFC, 0x00, 0x00,
21 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
22 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
23 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
24 			0x00, 0xFC, 0x50, 0x00, 0x00, 0xFC, 0x00, 0x00,
25 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
26 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
27 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
28 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
29 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
30 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
31 			0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00,
32 			0x00, 0x82, 0x00, 0x93, 0x00, 0xFC, 0x00, 0x00,
33 			0x84, 0xC1, 0x02, 0x9F, 0x08, 0x18, 0x10, 0x00,
34 			0x02, 0x28, 0x00, 0x03, 0x8F, 0x00, 0xFF, 0xF8,
35 		};
36 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
37 		if (res < 0)
38 			return res;
39 	}
40 
41 	res = tas5825m_set_page(dev, 0x02);
42 	if (res < 0)
43 		return res;
44 
45 	{
46 		const uint8_t values[] = {
47 			0x02, 0x60, 0x00, 0x01, 0x84, 0xA0, 0x02, 0x00,
48 			0x84, 0x02, 0x04, 0x03, 0x00, 0x26, 0x20, 0x96,
49 			0x84, 0xA2, 0x04, 0x02, 0x84, 0xC1, 0x02, 0xBC,
50 			0x84, 0x49, 0x03, 0x64, 0x08, 0xFC, 0x0C, 0x99,
51 			0x02, 0x70, 0x00, 0x04, 0x84, 0xC1, 0x02, 0xBD,
52 			0xE0, 0x10, 0x31, 0xAD, 0x84, 0xCA, 0x20, 0xE0,
53 			0xF0, 0x1C, 0x31, 0xAE, 0xF0, 0x1C, 0x31, 0xAF,
54 			0x02, 0x68, 0x00, 0x03, 0xF0, 0x1C, 0x31, 0xB0,
55 			0xF0, 0x1D, 0x31, 0xB1, 0x02, 0x78, 0x00, 0x02,
56 			0x84, 0x41, 0x03, 0x78, 0x80, 0x27, 0x80, 0xF9,
57 			0x08, 0xFC, 0x0C, 0x98, 0x84, 0x83, 0x03, 0x6A,
58 			0xE0, 0x10, 0x11, 0xAD, 0x84, 0xC2, 0x00, 0xE0,
59 			0xF0, 0x1C, 0x11, 0xAE, 0xF0, 0x1C, 0x11, 0xAF,
60 			0xF0, 0x1C, 0x11, 0xB0, 0xF0, 0x1D, 0x11, 0xB1,
61 			0x84, 0x59, 0x03, 0x65, 0x80, 0x27, 0x80, 0xF8,
62 		};
63 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
64 		if (res < 0)
65 			return res;
66 	}
67 
68 	res = tas5825m_set_page(dev, 0x03);
69 	if (res < 0)
70 		return res;
71 
72 	{
73 		const uint8_t values[] = {
74 			0x84, 0x83, 0x03, 0x6B, 0xE2, 0x57, 0x91, 0xB2,
75 			0x84, 0xC1, 0x02, 0xBD, 0x84, 0x82, 0x60, 0xE0,
76 			0xF0, 0x1C, 0x71, 0xB3, 0xF0, 0x1C, 0x71, 0xB4,
77 			0xF0, 0x1C, 0x71, 0xB5, 0xF0, 0x1D, 0x71, 0xB6,
78 			0x84, 0x51, 0x03, 0x79, 0x80, 0x27, 0x80, 0xFB,
79 			0x84, 0x83, 0x03, 0x6C, 0xE0, 0x10, 0x11, 0xB2,
80 			0x84, 0xC2, 0x40, 0xE0, 0xF0, 0x1C, 0x51, 0xB3,
81 			0xF0, 0x1C, 0x51, 0xB4, 0xF0, 0x1C, 0x51, 0xB5,
82 			0xF0, 0x1D, 0x51, 0xB6, 0x84, 0x4B, 0x03, 0x64,
83 			0x84, 0x49, 0x03, 0x77, 0x86, 0xA1, 0x01, 0xB7,
84 			0x84, 0x43, 0x03, 0x78, 0x02, 0x11, 0xFF, 0xFC,
85 			0x84, 0x41, 0x03, 0x7E, 0x80, 0x27, 0x80, 0xFA,
86 			0x84, 0x83, 0x03, 0x6D, 0xE2, 0x57, 0x80, 0x00,
87 			0x84, 0xC1, 0x02, 0xBD, 0x84, 0x82, 0x20, 0xE0,
88 			0xF0, 0x1C, 0x31, 0xB8, 0xF0, 0x1C, 0x31, 0xB9,
89 		};
90 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
91 		if (res < 0)
92 			return res;
93 	}
94 
95 	res = tas5825m_set_page(dev, 0x04);
96 	if (res < 0)
97 		return res;
98 
99 	{
100 		const uint8_t values[] = {
101 			0xF0, 0x1C, 0x31, 0xBA, 0xF0, 0x1D, 0x31, 0xBB,
102 			0x86, 0xA1, 0x01, 0xB7, 0x80, 0x27, 0x80, 0xF9,
103 			0x84, 0x83, 0x03, 0x6E, 0xE0, 0x10, 0x00, 0x00,
104 			0x84, 0xC2, 0x00, 0xE0, 0xF0, 0x1C, 0x11, 0xB8,
105 			0xF0, 0x1C, 0x11, 0xB9, 0xF0, 0x1C, 0x11, 0xBA,
106 			0xF0, 0x1D, 0x11, 0xBB, 0x86, 0xA1, 0x01, 0x9D,
107 			0x80, 0x27, 0x80, 0xF8, 0x84, 0x83, 0x03, 0x6F,
108 			0x84, 0x5B, 0x03, 0x65, 0x66, 0x6D, 0x60, 0x00,
109 			0xEE, 0x64, 0x80, 0x00, 0x02, 0xC3, 0x00, 0x10,
110 			0x62, 0x6D, 0x40, 0x00, 0xEA, 0x64, 0x60, 0x00,
111 			0x02, 0xD3, 0x00, 0x10, 0x88, 0x47, 0x00, 0x81,
112 			0x09, 0x07, 0x08, 0x88, 0x08, 0xFC, 0x28, 0x53,
113 			0x0D, 0x00, 0x10, 0x18, 0x84, 0xC3, 0x03, 0x24,
114 			0x08, 0x60, 0x28, 0x50, 0x84, 0x80, 0x04, 0x02,
115 			0xE4, 0x00, 0x00, 0x80, 0x86, 0xC1, 0x01, 0x9F,
116 		};
117 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
118 		if (res < 0)
119 			return res;
120 	}
121 
122 	res = tas5825m_set_page(dev, 0x05);
123 	if (res < 0)
124 		return res;
125 
126 	{
127 		const uint8_t values[] = {
128 			0x88, 0x47, 0x20, 0x81, 0x0D, 0x00, 0x10, 0x20,
129 			0x84, 0x53, 0x03, 0x79, 0x84, 0x4B, 0x03, 0x77,
130 			0x84, 0x43, 0x03, 0x7E, 0x00, 0x42, 0x20, 0x85,
131 			0x84, 0xDB, 0x03, 0x23, 0x08, 0xFC, 0x38, 0x10,
132 			0x02, 0x48, 0x02, 0xBC, 0x02, 0x40, 0x02, 0xBD,
133 			0xE4, 0x10, 0x11, 0x9E, 0x00, 0xFE, 0x20, 0x88,
134 			0x88, 0x6C, 0x00, 0x00, 0x02, 0x48, 0x02, 0xBC,
135 			0x02, 0x40, 0x02, 0xBD, 0x02, 0x80, 0x00, 0x00,
136 			0x84, 0xA1, 0x03, 0x6F, 0xE4, 0x00, 0x00, 0x00,
137 			0x84, 0xA1, 0x03, 0x6E, 0x84, 0xD1, 0x03, 0x6C,
138 			0xE0, 0x00, 0x00, 0x00, 0xE8, 0x00, 0x00, 0x82,
139 			0x84, 0xC9, 0x03, 0x6D, 0x88, 0x07, 0x00, 0x80,
140 			0xEC, 0x00, 0x00, 0x81, 0x10, 0x00, 0x18, 0x01,
141 			0x88, 0x47, 0x00, 0x80, 0x02, 0x50, 0x02, 0xBC,
142 			0x00, 0xFE, 0x20, 0x99, 0x0C, 0x20, 0x08, 0x20,
143 		};
144 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
145 		if (res < 0)
146 			return res;
147 	}
148 
149 	res = tas5825m_set_page(dev, 0x06);
150 	if (res < 0)
151 		return res;
152 
153 	{
154 		const uint8_t values[] = {
155 			0x02, 0x78, 0x00, 0x02, 0x02, 0x50, 0x02, 0xBC,
156 			0x02, 0x40, 0x02, 0xBD, 0x02, 0x70, 0x00, 0x06,
157 			0x84, 0x59, 0x03, 0x4F, 0xE2, 0x57, 0x91, 0xBC,
158 			0x02, 0xC3, 0x00, 0x10, 0x84, 0xC9, 0x02, 0xBD,
159 			0x84, 0xC2, 0x60, 0xE0, 0xF0, 0x1C, 0x71, 0xBD,
160 			0xF0, 0x1C, 0x71, 0xBE, 0x02, 0x68, 0x00, 0x05,
161 			0xF0, 0x1C, 0x71, 0xBF, 0xF0, 0x1D, 0x71, 0xC0,
162 			0xE4, 0x00, 0x11, 0xC3, 0x80, 0x27, 0x80, 0xE3,
163 			0xF4, 0x00, 0x11, 0xC1, 0xF4, 0x1F, 0x71, 0xC2,
164 			0xF4, 0x1C, 0x71, 0xC4, 0xF4, 0x1D, 0x71, 0xC5,
165 			0x84, 0x49, 0x03, 0x57, 0x80, 0x67, 0x80, 0xFB,
166 			0x02, 0xD3, 0x00, 0x10, 0xE0, 0x10, 0x31, 0xBC,
167 			0x84, 0xCA, 0x20, 0xE0, 0xF0, 0x1C, 0x31, 0xBD,
168 			0xF0, 0x1C, 0x31, 0xBE, 0xF0, 0x1C, 0x31, 0xBF,
169 			0xF0, 0x1D, 0x31, 0xC0, 0xE4, 0x00, 0x11, 0xC3,
170 		};
171 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
172 		if (res < 0)
173 			return res;
174 	}
175 
176 	res = tas5825m_set_page(dev, 0x07);
177 	if (res < 0)
178 		return res;
179 
180 	{
181 		const uint8_t values[] = {
182 			0x80, 0x27, 0x80, 0xE1, 0xF4, 0x00, 0x11, 0xC1,
183 			0xF4, 0x1F, 0x31, 0xC2, 0xF4, 0x1C, 0x31, 0xC4,
184 			0xF4, 0x1D, 0x31, 0xC5, 0x84, 0xC2, 0x04, 0x05,
185 			0x08, 0xFC, 0x58, 0x10, 0x80, 0x67, 0x80, 0xF9,
186 			0x02, 0xD3, 0x00, 0x10, 0x84, 0xCA, 0x04, 0x04,
187 			0x08, 0xFC, 0x58, 0x31, 0x84, 0xCA, 0x04, 0x06,
188 			0x08, 0x00, 0x0A, 0x21, 0x84, 0xC2, 0x04, 0x07,
189 			0x08, 0x00, 0x0A, 0x00, 0xE4, 0x10, 0x31, 0xA3,
190 			0xE0, 0x10, 0x00, 0x00, 0xEA, 0x65, 0x60, 0x00,
191 			0x02, 0xC3, 0x00, 0x10, 0xEE, 0x65, 0x80, 0x00,
192 			0x02, 0xCB, 0x00, 0x10, 0x88, 0x47, 0x00, 0x82,
193 			0x09, 0x07, 0x09, 0x31, 0x08, 0xFC, 0x48, 0x13,
194 			0x0D, 0x00, 0x10, 0x38, 0x84, 0xCB, 0x03, 0x2C,
195 			0x08, 0x60, 0x48, 0x11, 0x84, 0x80, 0x04, 0x02,
196 			0xE4, 0x00, 0x00, 0x81, 0x02, 0x28, 0x00, 0x02,
197 		};
198 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
199 		if (res < 0)
200 			return res;
201 	}
202 
203 	res = tas5825m_set_page(dev, 0x08);
204 	if (res < 0)
205 		return res;
206 
207 	{
208 		const uint8_t values[] = {
209 			0x88, 0x67, 0x20, 0x00, 0xE4, 0x00, 0x02, 0x00,
210 			0x84, 0xDB, 0x03, 0x2B, 0x80, 0x48, 0x00, 0x81,
211 			0x86, 0xD9, 0x01, 0xA9, 0x86, 0xC1, 0x01, 0xAA,
212 			0x0D, 0x00, 0x10, 0x38, 0x08, 0xFC, 0x3C, 0x12,
213 			0x84, 0x5B, 0x03, 0x4F, 0x84, 0x4B, 0x03, 0x57,
214 			0x84, 0xD2, 0x04, 0x02, 0x00, 0x62, 0x20, 0xE4,
215 			0x86, 0xD1, 0x01, 0xAC, 0x0D, 0x00, 0x10, 0x20,
216 			0x86, 0xC9, 0x01, 0xA8, 0x86, 0xC1, 0x01, 0xA7,
217 			0x00, 0xFE, 0x20, 0xE8, 0x08, 0x44, 0x26, 0x30,
218 			0x08, 0xFC, 0x3C, 0x71, 0x86, 0xC1, 0x01, 0xA6,
219 			0x84, 0xCA, 0x04, 0x02, 0x86, 0xD1, 0x01, 0xAB,
220 			0x84, 0x80, 0x04, 0x02, 0xE4, 0x00, 0x00, 0x80,
221 			0x88, 0x40, 0x00, 0x80, 0x08, 0xFC, 0x08, 0x50,
222 			0x02, 0x28, 0x00, 0x01, 0x02, 0xA3, 0x00, 0x18,
223 			0xE4, 0x40, 0x00, 0x00, 0x88, 0xC8, 0x00, 0x82,
224 		};
225 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
226 		if (res < 0)
227 			return res;
228 	}
229 
230 	res = tas5825m_set_page(dev, 0x09);
231 	if (res < 0)
232 		return res;
233 
234 	{
235 		const uint8_t values[] = {
236 			0x84, 0xC9, 0x03, 0x2D, 0x86, 0xC1, 0x01, 0xA5,
237 			0x86, 0xD9, 0x01, 0xA4, 0x0D, 0x00, 0x10, 0x48,
238 			0x08, 0x44, 0x06, 0x13, 0x86, 0xC1, 0x01, 0xEF,
239 			0x84, 0x49, 0x03, 0x37, 0x00, 0xFC, 0x00, 0x00,
240 			0xE4, 0x10, 0x40, 0x83, 0xEC, 0x10, 0x20, 0x00,
241 			0x88, 0x47, 0x00, 0x82, 0x04, 0x80, 0xA8, 0xB3,
242 			0x84, 0x80, 0x04, 0x07, 0xE4, 0x00, 0x00, 0x83,
243 			0x84, 0xDB, 0x03, 0x2D, 0x88, 0x40, 0x00, 0x83,
244 			0x10, 0x00, 0x1A, 0x22, 0xE4, 0x80, 0xC0, 0x00,
245 			0x88, 0x40, 0x00, 0x81, 0x84, 0xD8, 0x04, 0x04,
246 			0x0C, 0x20, 0x08, 0x39, 0x86, 0xD1, 0x01, 0xF0,
247 			0x84, 0x81, 0x02, 0xBC, 0x86, 0xC9, 0x01, 0xF1,
248 			0xE0, 0x00, 0x11, 0xC7, 0x84, 0x82, 0x20, 0xE0,
249 			0x84, 0x82, 0x04, 0x02, 0xF0, 0x1C, 0x31, 0xC8,
250 			0xF0, 0x1C, 0x31, 0xC9, 0xF0, 0x1C, 0x31, 0xCA,
251 		};
252 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
253 		if (res < 0)
254 			return res;
255 	}
256 
257 	res = tas5825m_set_page(dev, 0x0A);
258 	if (res < 0)
259 		return res;
260 
261 	{
262 		const uint8_t values[] = {
263 			0xF0, 0x1D, 0x31, 0xCB, 0xE4, 0x00, 0x11, 0xCE,
264 			0x80, 0x27, 0x80, 0xE1, 0xF4, 0x00, 0x11, 0xCC,
265 			0xF4, 0x1F, 0x31, 0xCD, 0xF4, 0x1C, 0x31, 0xCF,
266 			0xF4, 0x1D, 0x31, 0xD0, 0x84, 0x41, 0x03, 0x2F,
267 			0x80, 0x67, 0x80, 0xF9, 0x02, 0xDB, 0x00, 0x10,
268 			0x8F, 0x30, 0x00, 0x00, 0x0C, 0x1C, 0x11, 0x74,
269 			0x08, 0x64, 0x66, 0x72, 0x0D, 0x00, 0x10, 0x40,
270 			0x08, 0x44, 0x06, 0x12, 0x84, 0xD2, 0x41, 0x00,
271 			0xE0, 0x10, 0x51, 0xD1, 0xF0, 0x1C, 0x11, 0xD2,
272 			0xF0, 0x1C, 0x11, 0xD3, 0xF0, 0x1C, 0x11, 0xD4,
273 			0xF0, 0x1D, 0x11, 0xD5, 0xE4, 0x00, 0x11, 0xD8,
274 			0x80, 0x27, 0x80, 0xE0, 0xF4, 0x00, 0x11, 0xD6,
275 			0xF4, 0x20, 0x11, 0xD7, 0x84, 0x84, 0x00, 0xF8,
276 			0xF4, 0x1C, 0x11, 0xD9, 0x84, 0x4B, 0x03, 0x37,
277 			0xF4, 0x1D, 0x11, 0xDA, 0x84, 0x49, 0x03, 0x5F,
278 		};
279 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
280 		if (res < 0)
281 			return res;
282 	}
283 
284 	res = tas5825m_set_page(dev, 0x0B);
285 	if (res < 0)
286 		return res;
287 
288 	{
289 		const uint8_t values[] = {
290 			0x80, 0x67, 0x80, 0xF8, 0xE0, 0x00, 0x11, 0xDB,
291 			0x84, 0x82, 0x21, 0x00, 0x84, 0x82, 0x20, 0xE0,
292 			0xF0, 0x1C, 0x31, 0xDC, 0xF0, 0x1C, 0x31, 0xDD,
293 			0xF0, 0x1C, 0x31, 0xDE, 0xF0, 0x1D, 0x31, 0xDF,
294 			0xE4, 0x00, 0x11, 0xE2, 0x80, 0x27, 0x80, 0xE1,
295 			0xF4, 0x00, 0x11, 0xE0, 0xF4, 0x1F, 0x31, 0xE1,
296 			0xF4, 0x1C, 0x31, 0xE3, 0xF4, 0x1D, 0x31, 0xE4,
297 			0x84, 0x51, 0x03, 0x60, 0x80, 0x67, 0x80, 0xF9,
298 			0xE4, 0x00, 0x00, 0x81, 0xE0, 0x80, 0x51, 0xE5,
299 			0x84, 0x82, 0x40, 0xE0, 0xF0, 0x1C, 0x51, 0xE6,
300 			0xF0, 0x1C, 0x51, 0xE7, 0xF0, 0x1C, 0x51, 0xE8,
301 			0x88, 0x47, 0x00, 0x80, 0xF0, 0x1D, 0x51, 0xE9,
302 			0xE4, 0x00, 0x11, 0xEC, 0x80, 0x27, 0x80, 0xE2,
303 			0xF4, 0x00, 0x11, 0xEA, 0xF4, 0x1F, 0x51, 0xEB,
304 			0xF4, 0x1C, 0x51, 0xED, 0xF4, 0x1D, 0x51, 0xEE,
305 		};
306 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
307 		if (res < 0)
308 			return res;
309 	}
310 
311 	res = tas5825m_set_page(dev, 0x0C);
312 	if (res < 0)
313 		return res;
314 
315 	{
316 		const uint8_t values[] = {
317 			0x02, 0x58, 0x02, 0xBC, 0x08, 0xFC, 0x0D, 0x18,
318 			0x80, 0x67, 0x80, 0xFA, 0x02, 0xD3, 0x00, 0x10,
319 			0x10, 0x00, 0x18, 0x03, 0x84, 0x43, 0x03, 0x2F,
320 			0x84, 0x4B, 0x03, 0x5F, 0x84, 0x53, 0x03, 0x60,
321 			0x84, 0x41, 0x03, 0x47, 0x84, 0x51, 0x03, 0x3F,
322 			0x84, 0xC1, 0x02, 0xBD, 0x00, 0xFC, 0x00, 0x00,
323 			0x02, 0x48, 0x02, 0xBD, 0x02, 0x11, 0xFF, 0xF8,
324 			0x86, 0xD1, 0x01, 0xEF, 0x86, 0xC9, 0x01, 0xF0,
325 			0x86, 0x1D, 0x01, 0xF1, 0xE0, 0x10, 0x11, 0xC7,
326 			0x86, 0xA1, 0x01, 0xC8, 0x84, 0xC2, 0x00, 0xE0,
327 			0xF0, 0x1C, 0x00, 0x00, 0xF0, 0x1C, 0x11, 0xC9,
328 			0xF0, 0x1C, 0x11, 0xCA, 0xF0, 0x1D, 0x11, 0xCB,
329 			0xE4, 0x00, 0x11, 0xCE, 0x80, 0x27, 0x80, 0xE0,
330 			0x84, 0x1E, 0x04, 0x02, 0x02, 0x78, 0x00, 0x02,
331 			0xF4, 0x00, 0x11, 0xCC, 0xF4, 0x1F, 0x11, 0xCD,
332 		};
333 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
334 		if (res < 0)
335 			return res;
336 	}
337 
338 	res = tas5825m_set_page(dev, 0x0D);
339 	if (res < 0)
340 		return res;
341 
342 	{
343 		const uint8_t values[] = {
344 			0xF4, 0x1C, 0x11, 0xCF, 0xF4, 0x1D, 0x11, 0xD0,
345 			0x86, 0xA1, 0x01, 0xD1, 0x80, 0x67, 0x80, 0xF8,
346 			0x84, 0x43, 0x03, 0x47, 0x84, 0x59, 0x03, 0x62,
347 			0x8F, 0xA0, 0x00, 0x00, 0x02, 0xDB, 0x00, 0x10,
348 			0x0C, 0x1C, 0x51, 0x6C, 0x08, 0x64, 0x66, 0x71,
349 			0x0D, 0x00, 0x10, 0x30, 0x08, 0x44, 0x46, 0x51,
350 			0x84, 0xCA, 0x01, 0x00, 0xE0, 0x10, 0x20, 0x00,
351 			0xF0, 0x1C, 0x51, 0xD2, 0xF0, 0x1C, 0x51, 0xD3,
352 			0xF0, 0x1C, 0x51, 0xD4, 0xF0, 0x1D, 0x51, 0xD5,
353 			0xE4, 0x00, 0x11, 0xD8, 0x80, 0x27, 0x80, 0xE2,
354 			0xF4, 0x00, 0x11, 0xD6, 0xF4, 0x1F, 0x51, 0xD7,
355 			0xF4, 0x1C, 0x51, 0xD9, 0xF4, 0x1D, 0x51, 0xDA,
356 			0x84, 0x41, 0x03, 0x61, 0x80, 0x67, 0x80, 0xFA,
357 			0xE0, 0x00, 0x11, 0xDB, 0x84, 0x82, 0x01, 0x00,
358 			0x84, 0x82, 0x00, 0xE0, 0xF0, 0x1C, 0x11, 0xDC,
359 		};
360 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
361 		if (res < 0)
362 			return res;
363 	}
364 
365 	res = tas5825m_set_page(dev, 0x0E);
366 	if (res < 0)
367 		return res;
368 
369 	{
370 		const uint8_t values[] = {
371 			0xF0, 0x1C, 0x11, 0xDD, 0xF0, 0x1C, 0x11, 0xDE,
372 			0xF0, 0x1D, 0x11, 0xDF, 0xE4, 0x00, 0x11, 0xE2,
373 			0x80, 0x27, 0x80, 0xE0, 0xF4, 0x00, 0x11, 0xE0,
374 			0xF4, 0x1F, 0x11, 0xE1, 0xF4, 0x1C, 0x11, 0xE3,
375 			0x02, 0x83, 0x00, 0x18, 0x84, 0xC2, 0x60, 0xE0,
376 			0x86, 0xC1, 0x01, 0xE4, 0xE0, 0x00, 0x11, 0xE5,
377 			0xF4, 0x1D, 0x00, 0x80, 0x84, 0xA0, 0x04, 0x02,
378 			0x80, 0x67, 0x80, 0xF8, 0xE4, 0x00, 0x00, 0x00,
379 			0xF0, 0x1C, 0x71, 0xE6, 0xF0, 0x1C, 0x71, 0xE7,
380 			0xF0, 0x1C, 0x71, 0xE8, 0xF0, 0x1D, 0x71, 0xE9,
381 			0x86, 0xA1, 0x01, 0xEC, 0x88, 0x47, 0x00, 0x80,
382 			0xE4, 0x00, 0x00, 0x00, 0x80, 0x27, 0x80, 0xE3,
383 			0xF4, 0x00, 0x11, 0xEA, 0xF4, 0x1F, 0x71, 0xEB,
384 			0xF4, 0x1C, 0x71, 0xED, 0xF4, 0x1D, 0x71, 0xEE,
385 			0x86, 0xC9, 0x01, 0xA1, 0x80, 0x67, 0x80, 0xFB,
386 		};
387 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
388 		if (res < 0)
389 			return res;
390 	}
391 
392 	res = tas5825m_set_page(dev, 0x0F);
393 	if (res < 0)
394 		return res;
395 
396 	{
397 		const uint8_t values[] = {
398 			0x84, 0x5B, 0x03, 0x62, 0x08, 0x00, 0x10, 0x20,
399 			0x02, 0xD3, 0x00, 0x10, 0x84, 0x53, 0x03, 0x3F,
400 			0x84, 0x43, 0x03, 0x61, 0x08, 0xFC, 0x0D, 0x18,
401 			0x02, 0x50, 0x02, 0xBD, 0x00, 0x26, 0x21, 0xB7,
402 			0x10, 0x00, 0x18, 0x01, 0x86, 0xC1, 0x01, 0xC6,
403 			0x84, 0xC3, 0x03, 0x63, 0x02, 0xC0, 0x03, 0x63,
404 			0x84, 0x52, 0x04, 0x00, 0x02, 0x48, 0x02, 0xBC,
405 			0x84, 0xC2, 0x04, 0x01, 0x00, 0xFF, 0x10, 0xB0,
406 			0x8C, 0xFF, 0x02, 0xBC, 0x00, 0xFE, 0x21, 0xDA,
407 			0x00, 0xFC, 0x00, 0x00, 0x86, 0xC9, 0x01, 0xA0,
408 			0x84, 0x81, 0x02, 0xBC, 0x02, 0xA3, 0x00, 0x10,
409 			0xE4, 0x00, 0x00, 0x00, 0x84, 0x81, 0x02, 0xBD,
410 			0x88, 0x47, 0x13, 0x25, 0x02, 0xA3, 0x00, 0x10,
411 			0xE4, 0x00, 0x00, 0x00, 0x88, 0x47, 0x13, 0x26,
412 			0x02, 0x40, 0x03, 0x28, 0x84, 0xC1, 0x03, 0x25,
413 		};
414 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
415 		if (res < 0)
416 			return res;
417 	}
418 
419 	res = tas5825m_set_page(dev, 0x10);
420 	if (res < 0)
421 		return res;
422 
423 	{
424 		const uint8_t values[] = {
425 			0x00, 0xFF, 0x11, 0x4E, 0x00, 0xFC, 0x00, 0x00,
426 			0x02, 0x40, 0x03, 0x29, 0x86, 0xC9, 0x01, 0xA0,
427 			0x84, 0xC1, 0x03, 0x26, 0x00, 0xFF, 0x11, 0x4E,
428 			0x00, 0xFC, 0x00, 0x00, 0x86, 0xC1, 0x01, 0xA2,
429 			0x84, 0xC3, 0x03, 0x2A, 0x02, 0xC0, 0x03, 0x29,
430 			0x02, 0xC8, 0x03, 0x26, 0x02, 0x40, 0x03, 0x28,
431 			0x02, 0x48, 0x03, 0x25, 0x02, 0x50, 0x03, 0x2A,
432 			0x84, 0xC2, 0x04, 0x00, 0x84, 0xCA, 0x04, 0x01,
433 			0x00, 0xFF, 0x21, 0xDF, 0x00, 0xFC, 0x00, 0x00,
434 			0x84, 0xA1, 0x02, 0xBC, 0xE6, 0x64, 0xA0, 0x00,
435 			0x88, 0x47, 0x12, 0xBC, 0x84, 0xA1, 0x03, 0x26,
436 			0xE6, 0x57, 0xA0, 0x00, 0x88, 0x47, 0x12, 0xBD,
437 			0x84, 0x00, 0x04, 0x03, 0x00, 0xFC, 0x00, 0x00,
438 			0x02, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x50, 0x00,
439 			0x8F, 0x00, 0x00, 0x08, 0x8F, 0x00, 0xFF, 0xFF,
440 		};
441 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
442 		if (res < 0)
443 			return res;
444 	}
445 
446 	res = tas5825m_set_page(dev, 0x11);
447 	if (res < 0)
448 		return res;
449 
450 	{
451 		const uint8_t values[] = {
452 			0x84, 0x58, 0x04, 0x01, 0x84, 0xA1, 0x03, 0x68,
453 			0x84, 0xC1, 0x03, 0x67, 0xE0, 0xE0, 0x00, 0x00,
454 			0x02, 0xCA, 0x60, 0x00, 0x40, 0x40, 0xA0, 0x00,
455 			0x80, 0x00, 0xC0, 0x82, 0x08, 0xFC, 0x48, 0x3A,
456 			0x08, 0xFC, 0x38, 0x52, 0x84, 0x58, 0x04, 0x02,
457 			0xE0, 0x10, 0x40, 0x00, 0x84, 0xA0, 0x41, 0x00,
458 			0x40, 0x47, 0x20, 0x00, 0x02, 0xD3, 0x00, 0x10,
459 			0x84, 0xA2, 0x04, 0x00, 0x84, 0xA1, 0x03, 0x66,
460 			0xE4, 0x20, 0x00, 0x00, 0x08, 0x00, 0x28, 0x42,
461 			0x45, 0x40, 0xA0, 0x00, 0x80, 0x40, 0xC0, 0x83,
462 			0x08, 0xFC, 0x68, 0x3B, 0x08, 0xFC, 0x38, 0x71,
463 			0x84, 0xD3, 0x03, 0x68, 0xE4, 0x10, 0x20, 0x00,
464 			0x84, 0xA0, 0x04, 0x00, 0x45, 0x47, 0x20, 0x00,
465 			0x02, 0xD3, 0x00, 0x10, 0x80, 0x40, 0xC0, 0x81,
466 			0x0D, 0x00, 0x10, 0x20, 0x08, 0x00, 0x28, 0x42,
467 		};
468 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
469 		if (res < 0)
470 			return res;
471 	}
472 
473 	res = tas5825m_set_page(dev, 0x12);
474 	if (res < 0)
475 		return res;
476 
477 	{
478 		const uint8_t values[] = {
479 			0x84, 0xD3, 0x03, 0x66, 0x86, 0xD1, 0x01, 0x9C,
480 			0x86, 0xD9, 0x01, 0x9B, 0x08, 0xFC, 0x3C, 0x11,
481 			0x08, 0x44, 0x46, 0x53, 0x00, 0xFC, 0x00, 0x00,
482 			0x02, 0x83, 0x00, 0x19, 0x02, 0xA3, 0x00, 0x1B,
483 			0x80, 0x00, 0xC0, 0x83, 0x84, 0xC9, 0x03, 0x69,
484 			0x0D, 0x00, 0x10, 0x68, 0x08, 0xFC, 0x7C, 0x33,
485 			0xE0, 0x00, 0x00, 0x00, 0x02, 0x83, 0x00, 0x1B,
486 			0x86, 0xD9, 0x01, 0x9B, 0x08, 0x44, 0x46, 0x53,
487 			0x80, 0x07, 0x00, 0x82, 0xE0, 0x00, 0x00, 0x83,
488 			0x80, 0x07, 0x00, 0x83, 0x0C, 0x60, 0x0C, 0x10,
489 			0x0C, 0xE0, 0x0C, 0x39, 0x84, 0xC3, 0x03, 0x67,
490 			0x84, 0xCB, 0x03, 0x69, 0x00, 0xFC, 0x50, 0x00,
491 			0x8F, 0x00, 0x00, 0x01,
492 		};
493 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
494 		if (res < 0)
495 			return res;
496 	}
497 
498 	return 0;
499 }
500 
program_biquad_filters(struct device * dev)501 static int program_biquad_filters(struct device *dev)
502 {
503 	int res;
504 
505 	res = tas5825m_set_book(dev, 0xAA);
506 	if (res < 0)
507 		return res;
508 
509 	res = tas5825m_set_page(dev, 0x01);
510 	if (res < 0)
511 		return res;
512 
513 	{
514 		const uint8_t values[] = {
515 			0x07, 0xED, 0x50, 0x78, 0xF0, 0xBB, 0x11, 0x75,
516 			0x07, 0x5C, 0xFB, 0x5D, 0x0F, 0x44, 0xEE, 0x8B,
517 			0xF8, 0xB5, 0xB4, 0x2B, 0x07, 0xE4, 0x94, 0x67,
518 			0xF1, 0x16, 0x72, 0x2F, 0x07, 0x10, 0xC7, 0x66,
519 			0x0E, 0xE9, 0x8D, 0xD1, 0xF9, 0x0A, 0xA4, 0x33,
520 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
521 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
522 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
523 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
524 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525 		};
526 		res = tas5825m_write_block_at(dev, 0x30, values, ARRAY_SIZE(values));
527 		if (res < 0)
528 			return res;
529 	}
530 
531 	res = tas5825m_set_page(dev, 0x02);
532 	if (res < 0)
533 		return res;
534 
535 	{
536 		const uint8_t values[] = {
537 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
538 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
539 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
540 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
541 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
542 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
543 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
544 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
545 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
546 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
547 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
548 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
549 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
550 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
551 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
552 		};
553 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
554 		if (res < 0)
555 			return res;
556 	}
557 
558 	res = tas5825m_set_page(dev, 0x03);
559 	if (res < 0)
560 		return res;
561 
562 	{
563 		const uint8_t values[] = {
564 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
565 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
567 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
568 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
569 			0x07, 0xB9, 0x96, 0x60, 0xF0, 0x8C, 0xD3, 0x40,
570 			0x07, 0xB9, 0x96, 0x60, 0x0F, 0x71, 0xF1, 0x6F,
571 			0xF8, 0x8B, 0x97, 0xF0, 0x07, 0xDB, 0xDE, 0xC0,
572 			0xF0, 0x48, 0x42, 0x80, 0x07, 0xDB, 0xDE, 0xC0,
573 			0x0F, 0xB6, 0x7C, 0xB8, 0xF8, 0x47, 0x01, 0xB8,
574 			0x07, 0xBA, 0x69, 0x7A, 0xF0, 0xCA, 0x2B, 0x37,
575 			0x07, 0x84, 0xF0, 0x5E, 0x0F, 0x35, 0xD4, 0xC9,
576 			0xF8, 0xC0, 0xA6, 0x28, 0x08, 0x00, 0x00, 0x00,
577 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
578 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
579 		};
580 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
581 		if (res < 0)
582 			return res;
583 	}
584 
585 	res = tas5825m_set_page(dev, 0x04);
586 	if (res < 0)
587 		return res;
588 
589 	{
590 		const uint8_t values[] = {
591 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
592 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
593 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
594 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
595 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
596 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
597 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
598 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
599 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
600 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
601 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
602 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
603 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
604 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
605 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
606 		};
607 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
608 		if (res < 0)
609 			return res;
610 	}
611 
612 	res = tas5825m_set_page(dev, 0x05);
613 	if (res < 0)
614 		return res;
615 
616 	{
617 		const uint8_t values[] = {
618 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
619 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
620 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
621 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
622 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
623 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
624 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
625 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
626 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
627 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
628 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
629 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
630 			0x00, 0x00, 0x00, 0x00, 0x07, 0xB9, 0x96, 0x60,
631 			0xF0, 0x8C, 0xD3, 0x40, 0x07, 0xB9, 0x96, 0x60,
632 			0x0F, 0x71, 0xF1, 0x6F, 0xF8, 0x8B, 0x97, 0xF0,
633 		};
634 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
635 		if (res < 0)
636 			return res;
637 	}
638 
639 	res = tas5825m_set_page(dev, 0x06);
640 	if (res < 0)
641 		return res;
642 
643 	{
644 		const uint8_t values[] = {
645 			0x07, 0xDB, 0xDE, 0xC0, 0xF0, 0x48, 0x42, 0x80,
646 			0x07, 0xDB, 0xDE, 0xC0, 0x0F, 0xB6, 0x7C, 0xB8,
647 			0xF8, 0x47, 0x01, 0xB8, 0x07, 0xBA, 0x69, 0x7A,
648 			0xF0, 0xCA, 0x2B, 0x37, 0x07, 0x84, 0xF0, 0x5E,
649 			0x0F, 0x35, 0xD4, 0xC9, 0xF8, 0xC0, 0xA6, 0x28,
650 		};
651 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
652 		if (res < 0)
653 			return res;
654 	}
655 
656 	res = tas5825m_set_page(dev, 0x0F);
657 	if (res < 0)
658 		return res;
659 
660 	{
661 		const uint8_t values[] = {
662 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
663 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
664 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
665 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
666 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
667 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
669 			0x00, 0x00, 0x00, 0x00, 0x08, 0x41, 0xBE, 0x3C,
670 			0xF0, 0x4D, 0x2C, 0x26, 0x07, 0x7A, 0xE8, 0xE9,
671 			0x0F, 0xB6, 0x7C, 0xB8, 0xF8, 0x47, 0x01, 0xB8,
672 			0x08, 0x00, 0x00, 0x00
673 		};
674 		res = tas5825m_write_block_at(dev, 0x2C, values, ARRAY_SIZE(values));
675 		if (res < 0)
676 			return res;
677 	}
678 
679 	res = tas5825m_set_page(dev, 0x10);
680 	if (res < 0)
681 		return res;
682 
683 	{
684 		const uint8_t values[] = {
685 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
686 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
687 		};
688 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
689 		if (res < 0)
690 			return res;
691 	}
692 	{
693 		const uint8_t values[] = {
694 			0x00, 0x99, 0x82, 0x0D, 0xFF, 0x08, 0xB1, 0xE4,
695 			0x00, 0x67, 0xA6, 0xD7, 0x0F, 0xBE, 0xCA, 0x9D,
696 			0xF8, 0x37, 0x5A, 0x9B, 0x08, 0x00, 0x00, 0x00,
697 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
698 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
699 			0x35, 0x5D, 0x83, 0xC3, 0x96, 0xF7, 0xF4, 0x67,
700 			0x33, 0xEC, 0x44, 0x70, 0x0C, 0xE3, 0x60, 0xA2,
701 			0xFA, 0x99, 0x26, 0x28, 0x08, 0x00, 0x00, 0x00,
702 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
703 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
704 			0x00, 0x03, 0xF6, 0x87, 0x00, 0x07, 0xED, 0x0F,
705 			0x00, 0x03, 0xF6, 0x87, 0x0E, 0xF9, 0x62, 0x4A,
706 			0xF8, 0xF6, 0xC3, 0x98
707 		};
708 		res = tas5825m_write_block_at(dev, 0x1C, values, ARRAY_SIZE(values));
709 		if (res < 0)
710 			return res;
711 	}
712 
713 	res = tas5825m_set_page(dev, 0x11);
714 	if (res < 0)
715 		return res;
716 
717 	{
718 		const uint8_t values[] = {
719 			0x00, 0x03, 0xF6, 0x87, 0x00, 0x07, 0xED, 0x0F,
720 			0x00, 0x03, 0xF6, 0x87, 0x0E, 0xF9, 0x62, 0x4A,
721 			0xF8, 0xF6, 0xC3, 0x98, 0x07, 0x80, 0xA7, 0xAC,
722 			0xF0, 0xFE, 0xB0, 0xA7, 0x07, 0x80, 0xA7, 0xAC,
723 			0x0E, 0xF9, 0x62, 0x4A, 0xF8, 0xF6, 0xC3, 0x98,
724 			0x07, 0x80, 0xA7, 0xAC, 0xF0, 0xFE, 0xB0, 0xA7,
725 			0x07, 0x80, 0xA7, 0xAC, 0x0E, 0xF9, 0x62, 0x4A,
726 			0xF8, 0xF6, 0xC3, 0x98
727 		};
728 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
729 		if (res < 0)
730 			return res;
731 	}
732 
733 	return 0;
734 }
735 
736 
tas5825m_setup(struct device * dev,int id)737 int tas5825m_setup(struct device *dev, int id)
738 {
739 	int res = 0;
740 
741 	res = tas5825m_set_book(dev, 0x00);
742 	if (res < 0)
743 		return res;
744 
745 	// Set to HiZ state and enable DSP
746 	res = tas5825m_write_at(dev, 0x03, 0x02);
747 	if (res < 0)
748 		return res;
749 
750 	// Digital core and registers reset
751 	res = tas5825m_write_at(dev, 0x01, 0x11);
752 	if (res < 0)
753 		return res;
754 
755 	// DSP reset
756 	res = tas5825m_write_at(dev, 0x03, 0x12);
757 	if (res < 0)
758 		return res;
759 
760 	res = tas5825m_write_at(dev, 0x48, 0x0C);
761 	if (res < 0)
762 		return res;
763 
764 	res = program_dsp_ram(dev);
765 	if (res < 0)
766 		return res;
767 
768 	res = tas5825m_set_book(dev, 0x78);
769 	if (res < 0)
770 		return res;
771 
772 	res = tas5825m_set_page(dev, 0x18);
773 	if (res < 0)
774 		return res;
775 
776 	{
777 		const uint8_t values[] = {
778 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
779 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
780 			0x00, 0x00, 0x00, 0x00
781 		};
782 		res = tas5825m_write_block_at(dev, 0x30, values, ARRAY_SIZE(values));
783 		if (res < 0)
784 			return res;
785 	}
786 
787 	res = tas5825m_set_page(dev, 0x1C);
788 	if (res < 0)
789 		return res;
790 
791 	{
792 		const uint8_t values[] = {
793 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
794 			0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
795 			0x00, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00,
796 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
797 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
798 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
799 			0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x00, 0x00,
800 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
801 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
802 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
803 			0x00, 0x00, 0x03, 0x40, 0x00, 0x00, 0x00, 0x00,
804 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
805 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
806 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
807 			0x00, 0x00, 0x03, 0x48
808 		};
809 		res = tas5825m_write_block_at(dev, 0x0C, values, ARRAY_SIZE(values));
810 		if (res < 0)
811 			return res;
812 	}
813 
814 	res = tas5825m_set_page(dev, 0x1D);
815 	if (res < 0)
816 		return res;
817 
818 	{
819 		const uint8_t values[] = {
820 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
821 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
822 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
823 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x50,
824 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
825 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
826 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
827 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x58,
828 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x70,
832 			0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x03, 0x88,
833 			0x00, 0x00, 0x03, 0x90, 0x00, 0x00, 0x00, 0x00,
834 			0x00, 0x00, 0x03, 0x98, 0x00, 0x00, 0x03, 0xA0,
835 		};
836 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
837 		if (res < 0)
838 			return res;
839 	}
840 
841 	res = tas5825m_set_page(dev, 0x1E);
842 	if (res < 0)
843 		return res;
844 
845 	{
846 		const uint8_t values[] = {
847 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
848 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
849 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
850 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
851 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
852 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
853 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
854 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
855 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xA8,
856 			0x00, 0x00, 0x03, 0xB0, 0x00, 0x00, 0x03, 0xB8,
857 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
858 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
859 			0x00, 0x00, 0x03, 0xC0
860 		};
861 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
862 		if (res < 0)
863 			return res;
864 	}
865 
866 	// XOR checksums
867 	res = tas5825m_set_book(dev, 0x8C);
868 	if (res < 0)
869 		return res;
870 
871 	res = tas5825m_set_page(dev, 0x0E);
872 	if (res < 0)
873 		return res;
874 
875 	{
876 		const uint8_t values[] = {
877 			0x00, 0x20, 0xC4, 0x9C, 0x00, 0x20, 0xC4, 0x9C,
878 			0x02, 0xDE, 0xAD, 0x00, 0x74, 0x01, 0x39, 0x01,
879 			0x00, 0x20, 0xC4, 0x9B, 0x00, 0xA7, 0x26, 0x4A,
880 			0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF,
881 			0x7F, 0xFF, 0xFF, 0xFF
882 		};
883 		res = tas5825m_write_block_at(dev, 0x5C, values, ARRAY_SIZE(values));
884 		if (res < 0)
885 			return res;
886 	}
887 
888 	res = tas5825m_set_page(dev, 0x0F);
889 	if (res < 0)
890 		return res;
891 
892 	{
893 		const uint8_t values[] = {
894 			0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF,
895 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
896 			0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00,
897 			0xFE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
898 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
899 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
900 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
901 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
902 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
903 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
904 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
905 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
906 			0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
907 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
908 			0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
909 		};
910 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
911 		if (res < 0)
912 			return res;
913 	}
914 
915 	res = tas5825m_set_page(dev, 0x10);
916 	if (res < 0)
917 		return res;
918 
919 	{
920 		const uint8_t values[] = {
921 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
922 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
923 			0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x62, 0x48, 0x8E,
924 			0xFF, 0x83, 0xE9, 0x30, 0x00, 0x2E, 0x18, 0x72,
925 			0x0F, 0x40, 0xAE, 0x1F, 0xF8, 0x9A, 0x41, 0xD5,
926 			0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
927 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
928 			0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF,
929 			0xF0, 0xBF, 0x51, 0xE1, 0x07, 0x65, 0xBE, 0x2B,
930 			0x0A, 0x19, 0xBB, 0x39, 0xFC, 0x3F, 0x79, 0xE8,
931 			0x07, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
932 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
933 			0x00, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x79, 0x55,
934 			0x00, 0xB8, 0xF2, 0xAB, 0x00, 0x5C, 0x79, 0x55,
935 			0x0D, 0x98, 0xCC, 0x51, 0xFA, 0x16, 0x2B, 0x95,
936 		};
937 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
938 		if (res < 0)
939 			return res;
940 	}
941 
942 	res = tas5825m_set_page(dev, 0x11);
943 	if (res < 0)
944 		return res;
945 
946 	{
947 		const uint8_t values[] = {
948 			0x00, 0x5C, 0x79, 0x55, 0x00, 0xB8, 0xF2, 0xAB,
949 			0x00, 0x5C, 0x79, 0x55, 0x0D, 0x98, 0xCC, 0x51,
950 			0xFA, 0x16, 0x2B, 0x95, 0x06, 0xE0, 0xA8, 0x2F,
951 			0xF2, 0x3E, 0xAF, 0xA2, 0x06, 0xE0, 0xA8, 0x2F,
952 			0x0D, 0x98, 0xCC, 0x51, 0xFA, 0x16, 0x2B, 0x95,
953 			0x06, 0xE0, 0xA8, 0x2F, 0xF2, 0x3E, 0xAF, 0xA2,
954 			0x06, 0xE0, 0xA8, 0x2F, 0x0D, 0x98, 0xCC, 0x51,
955 			0xFA, 0x16, 0x2B, 0x95, 0x02, 0x4D, 0x99, 0x99,
956 			0xFD, 0xB2, 0x66, 0x67, 0x00, 0x80, 0x00, 0x00,
957 		};
958 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
959 		if (res < 0)
960 			return res;
961 	}
962 
963 	res = tas5825m_set_book(dev, 0x00);
964 	if (res < 0)
965 		return res;
966 
967 	res = tas5825m_write_at(dev, 0x40, 0x00);
968 	if (res < 0)
969 		return res;
970 	res = tas5825m_write_at(dev, 0x7D, 0x11);
971 	if (res < 0)
972 		return res;
973 	res = tas5825m_write_at(dev, 0x7E, 0xFF);
974 	if (res < 0)
975 		return res;
976 
977 	res = tas5825m_set_page(dev, 0x01);
978 	if (res < 0)
979 		return res;
980 
981 	res = tas5825m_write_at(dev, 0x51, 0x05);
982 	if (res < 0)
983 		return res;
984 
985 	res = tas5825m_set_page(dev, 0x02);
986 	if (res < 0)
987 		return res;
988 
989 	res = tas5825m_write_at(dev, 0x19, 0xDF);
990 	if (res < 0)
991 		return res;
992 
993 	res = tas5825m_set_page(dev, 0x00);
994 	if (res < 0)
995 		return res;
996 
997 	res = tas5825m_write_at(dev, 0x46, 0x11);
998 	if (res < 0)
999 		return res;
1000 	res = tas5825m_write_at(dev, 0x02, 0x00);
1001 	if (res < 0)
1002 		return res;
1003 	res = tas5825m_write_at(dev, 0x53, 0x00);
1004 	if (res < 0)
1005 		return res;
1006 	res = tas5825m_write_at(dev, 0x54, 0x00);
1007 	if (res < 0)
1008 		return res;
1009 
1010 	// Set to HiZ state and enable DSP
1011 	res = tas5825m_write_at(dev, 0x03, 0x02);
1012 	if (res < 0)
1013 		return res;
1014 
1015 	// Wait for device to settle
1016 	mdelay(5);
1017 
1018 	// XOR checksums
1019 	res = tas5825m_set_book(dev, 0x8C);
1020 	if (res < 0)
1021 		return res;
1022 
1023 	res = tas5825m_set_page(dev, 0x0B);
1024 	if (res < 0)
1025 		return res;
1026 
1027 	{
1028 		const uint8_t values[] = {
1029 			0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1030 		};
1031 		res = tas5825m_write_block_at(dev, 0x28, values, ARRAY_SIZE(values));
1032 		if (res < 0)
1033 			return res;
1034 	}
1035 	{
1036 		const uint8_t values[] = {
1037 			0x00, 0x20, 0xC4, 0x9C
1038 		};
1039 		res = tas5825m_write_block_at(dev, 0x50, values, ARRAY_SIZE(values));
1040 		if (res < 0)
1041 			return res;
1042 	}
1043 	{
1044 		const uint8_t values[] = {
1045 			0x7F, 0xFF, 0xFF, 0xFF
1046 		};
1047 		res = tas5825m_write_block_at(dev, 0x5C, values, ARRAY_SIZE(values));
1048 		if (res < 0)
1049 			return res;
1050 	}
1051 
1052 	res = tas5825m_set_page(dev, 0x01);
1053 	if (res < 0)
1054 		return res;
1055 
1056 	{
1057 		const uint8_t values[] = {
1058 			0xC0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x94, 0x9A,
1059 		};
1060 		res = tas5825m_write_block_at(dev, 0x28, values, ARRAY_SIZE(values));
1061 		if (res < 0)
1062 			return res;
1063 	}
1064 
1065 	res = tas5825m_set_page(dev, 0x0A);
1066 	if (res < 0)
1067 		return res;
1068 
1069 	{
1070 		const uint8_t values[] = {
1071 			0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1072 			0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
1073 			0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1074 			0x00, 0x00, 0x00, 0x00
1075 		};
1076 		res = tas5825m_write_block_at(dev, 0x64, values, ARRAY_SIZE(values));
1077 		if (res < 0)
1078 			return res;
1079 	}
1080 
1081 	res = tas5825m_set_page(dev, 0x0B);
1082 	if (res < 0)
1083 		return res;
1084 
1085 	{
1086 		const uint8_t values[] = {
1087 			0x00, 0x80, 0x00, 0x00, 0x00, 0x2D, 0x6A, 0x86,
1088 			0x00, 0x2D, 0x6A, 0x86, 0x00, 0x80, 0x00, 0x00,
1089 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1090 			0x00, 0x80, 0x00, 0x00
1091 		};
1092 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
1093 		if (res < 0)
1094 			return res;
1095 	}
1096 	{
1097 		const uint8_t values[] = {
1098 			0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
1099 			0x00, 0x00, 0x57, 0x62, 0x00, 0x00, 0x00, 0x00,
1100 		};
1101 		res = tas5825m_write_block_at(dev, 0x28, values, ARRAY_SIZE(values));
1102 		if (res < 0)
1103 			return res;
1104 	}
1105 	{
1106 		const uint8_t values[] = {
1107 			0x02, 0x66, 0xC4, 0x1B, 0x00, 0x89, 0x37, 0x4C,
1108 		};
1109 		res = tas5825m_write_block_at(dev, 0x48, values, ARRAY_SIZE(values));
1110 		if (res < 0)
1111 			return res;
1112 	}
1113 	{
1114 		const uint8_t values[] = {
1115 			0x7D, 0x99, 0x3B, 0xE5, 0x00, 0x00, 0x57, 0x62,
1116 		};
1117 		res = tas5825m_write_block_at(dev, 0x54, values, ARRAY_SIZE(values));
1118 		if (res < 0)
1119 			return res;
1120 	}
1121 
1122 	res = tas5825m_set_page(dev, 0x0E);
1123 	if (res < 0)
1124 		return res;
1125 
1126 	{
1127 		const uint8_t values[] = {
1128 			0x00, 0x22, 0x1D, 0x95, 0x00, 0x03, 0x69, 0xC5,
1129 			0x00, 0x03, 0x69, 0xC5, 0x1C, 0x1B, 0xF0, 0x41,
1130 			0x04, 0x0C, 0x37, 0x14, 0x00, 0x03, 0x69, 0xC5,
1131 			0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x30, 0xE8,
1132 			0x01, 0x2E, 0x4F, 0x40
1133 		};
1134 		res = tas5825m_write_block_at(dev, 0x5C, values, ARRAY_SIZE(values));
1135 		if (res < 0)
1136 			return res;
1137 	}
1138 
1139 	res = tas5825m_set_page(dev, 0x0F);
1140 	if (res < 0)
1141 		return res;
1142 
1143 	{
1144 		const uint8_t values[] = {
1145 			0x00, 0xC9, 0xD9, 0xD4, 0x00, 0x43, 0x6C, 0x19,
1146 			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1147 			0xFF, 0xA0, 0x00, 0x00, 0xF7, 0x5C, 0x28, 0xF6,
1148 			0xFB, 0x44, 0x29, 0x20, 0x00, 0x00, 0x00, 0x00,
1149 			0x00, 0x00, 0x00, 0x00
1150 		};
1151 		res = tas5825m_write_block_at(dev, 0x08, values, ARRAY_SIZE(values));
1152 		if (res < 0)
1153 			return res;
1154 	}
1155 
1156 	res = tas5825m_set_page(dev, 0x10);
1157 	if (res < 0)
1158 		return res;
1159 
1160 	{
1161 		const uint8_t values[] = {
1162 			0x08, 0x13, 0x85, 0x62
1163 		};
1164 		res = tas5825m_write_block_at(dev, 0x18, values, ARRAY_SIZE(values));
1165 		if (res < 0)
1166 			return res;
1167 	}
1168 
1169 	res = tas5825m_set_page(dev, 0x11);
1170 	if (res < 0)
1171 		return res;
1172 
1173 	{
1174 		const uint8_t values[] = {
1175 			0x02, 0x9E, 0x15, 0x7E, 0xFD, 0x61, 0xEA, 0x82,
1176 			0x01, 0x00, 0x00, 0x00
1177 		};
1178 		res = tas5825m_write_block_at(dev, 0x44, values, ARRAY_SIZE(values));
1179 		if (res < 0)
1180 			return res;
1181 	}
1182 
1183 	res = tas5825m_set_page(dev, 0x07);
1184 	if (res < 0)
1185 		return res;
1186 
1187 	{
1188 		const uint8_t values[] = {
1189 			0x00, 0x80, 0x00, 0x00
1190 		};
1191 		res = tas5825m_write_block_at(dev, 0x64, values, ARRAY_SIZE(values));
1192 		if (res < 0)
1193 			return res;
1194 	}
1195 	{
1196 		const uint8_t values[] = {
1197 			0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
1198 		};
1199 		res = tas5825m_write_block_at(dev, 0x6C, values, ARRAY_SIZE(values));
1200 		if (res < 0)
1201 			return res;
1202 	}
1203 
1204 	res = program_biquad_filters(dev);
1205 	if (res < 0)
1206 		return res;
1207 
1208 	res = tas5825m_set_book(dev, 0x00);
1209 	if (res < 0)
1210 		return res;
1211 
1212 	// Register tuning
1213 	res = tas5825m_write_at(dev, 0x30, 0x00);
1214 	if (res < 0)
1215 		return res;
1216 	res = tas5825m_write_at(dev, 0x60, 0x02);
1217 	if (res < 0)
1218 		return res;
1219 	res = tas5825m_write_at(dev, 0x62, 0x09);
1220 	if (res < 0)
1221 		return res;
1222 	res = tas5825m_write_at(dev, 0x4C, 0x30);
1223 	if (res < 0)
1224 		return res;
1225 
1226 	// Set to PLAY state
1227 	res = tas5825m_write_at(dev, 0x03, 0x03);
1228 	if (res < 0)
1229 		return res;
1230 
1231 	// Clear analog fault
1232 	res = tas5825m_write_at(dev, 0x78, 0x80);
1233 	if (res < 0)
1234 		return res;
1235 
1236 	res = tas5825m_write_at(dev, 0x60, 0x00);
1237 	if (res < 0)
1238 		return res;
1239 	res = tas5825m_write_at(dev, 0x64, 0x02);
1240 	if (res < 0)
1241 		return res;
1242 
1243 	return 0;
1244 }
1245